zoukankan      html  css  js  c++  java
  • IP网际协议

    IP协议简介

    IP是TCP/IP协议族中最为核心的协议。所有的 TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。

    IP协议提供不可靠、无连接的数据报传送服务。

    不可靠的意思是它不能保证 IP数据报能成功地到达目的地。 IP仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区, IP有一个简单的错误处理算法:丢弃该数据报,然后发送 ICMP消息报给信源端。任何要求的可靠性必须由上层来提供(如TCP)。

    无连接这个术语的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。IP数据报可以不按发送顺序接收。

    IP首部各个字段介绍

    普通IP首部长度为20个字节,除非包含选项字段。一个IP数据报的头部如下:

    在首部中最高位记为0bit,最低位记为31bit。

    4个字节32bit的值以下面的次序进行传输:首先是0~7bit,其次是8~15bit,然后是16~23bit,最后是24~31bit。这种传输次序称作big endian字节序

    分析一下IP数据报中首部的各个字段

    4位版本号:代表着IP数据包的协议版本号,可以为4或者6,分别代表IPv4和IPv6。

    4位首部长度:首部长度指的是IP首部占 32 bit字的数目,包括任何选项。由于它是一个 4比特字段,因此首部最长为60个字节。 

    8位服务类型(TOS):服务类型(TOS)字段包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位但必须置0。4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4 bit中只能置其中1 bit。如果所有4 bit均为0,那么就意味着是一般服务。

    不同应用建议的TOS值。

    16位总长度(字节数):总长度字段是指整个IP数据报的长度,以字节为单位。利用首部长度字段和总长度字段。可以知道IP数据报中数据内容的起始位置和长度。由于该字段长为16bit,所以IP数据报的最长可达65535字节。但是大多数的链路层会对IP数据报进行分片,主机要求不能结束超过576字节的数据报。

    标识:标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加 1。

    3位标志字段:一位保留位RB;一位表示MF,更多的分片,如果此位置为1,则表示后面还有分片;一位DF,表示不分片位。如果将这一比特置 1,IP将不对数据报进行分片。

    13位片偏移字段:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。

    8位TTL生存时间:TTL生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。T T L的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送 ICMP报文通知源主机。

    8位协议:协议字段是IP协议根据此字段对数据报进行分用。

    16位首部校验和字段:首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。

    为了计算一份数据报的 IP检验和,首先把检验和字段置为 0。然后,对首部中每个 16 bit进行二进制反码求和(整个首部看成是由一串 16 bit的字组成),结果存在检验和字段中。当收到一份IP数据报后,同样对首部中每个 16 bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。

     

    32位源IP地址32位目的IP地址表示IP数据报的发送端源地址和接收端源地址。

    最后一个字段是任选项,是数据报中的一个可变长的可选信息。这些任选项的定义如下:

    • 安全和处理限制(用于军事领域)

    • 记录路径(让每个路由器都记下它的 IP地址)

    • 时间戳(让每个路由器都记下它的 IP地址和时间)

    • 宽松的源站选路(为数据报指定一系列必须经过的 IP地址)

    • 严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)。

    说起来比较抽象,找wireshark抓个包看一下:

    这是一个IPV4的报文,里面是IPV4的具体内容,包含上面介绍的所有部分。TOS就是其中的DSCP,是区分服务字段拥塞表示符字段的组合。

    IP路由选择

    IP路由选择是简单的,特别对于主机来说。如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接送到目的主机上。否则,主机把数据报发往一默认的路由器上,由路由器来转发该数据报。

    IP可以从TCP、UDP、ICMP和IGMP接收数据报(即在本地生成的数据报)并进行发送,或者从一个网络接口接收数据报(待转发的数据报)并进行发送。 IP层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报来自某个网络接口时, IP首先检查目的IP地址是否为本机的 IP地址之一或者IP广播地址。如果确实是这样,数据报就被送到由 IP首部协议字段所指定的协议模块进行处理。如果数据报的目的不是这些地址,那么(1)如果 IP层被设置为路由器的功能,那么就对数据报进行转发;否则(2)数据报被丢弃。

    路由表中的每一项都包含下面这些信息: 

    目的IP地址。它既可以是一个完整的主机地址,也可以是一个网络地址,由该表目中的标志字段来指定。主机地址有一个非0的主机号,以指定某一特定的主机,而网络地址中的主机号为0,以指定网络中的所有主机(如以太网,令牌环网)。

    下一站(或下一跳)路由器(next-hop router)的IP地址,或者有直接连接的网络 IP地址。下一站路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报。下一站路由器不是最终的目的,但是它可以把传送给它的数据报转发到最终目的。  

    标志。其中一个标志指明目的 IP地址是网络地址还是主机地址,另一个标志指明下一站路由器是否为真正的下一站路由器,还是一个直接相连的接口为数据报的传输指定一个网络接口。

    出接口。为数据报的传输指定一个网络接口。

    可以在ensp中使用display ip routing-table显示一下路由表。

    IP路由选择是逐跳地进行的。 

    IP路由选择主要完成以下这些功能: 

    (1)搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。

    (2)搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。目的网络上的所有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。

    (3)搜索路由表,寻找标为“默认”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。 

     

     

  • 相关阅读:
    HDU 1114 Piggy-Bank
    HDU 2955 Robberies
    NTOJ 290 动物统计(加强版)
    POJ 3624 Charm Bracelet
    HDU 2602 Bone Collector
    POJ 1523 SPF(无向图割顶)
    HDU 5311 Hidden String
    HDU 1421 搬寝室
    HDU 1058 Humble Numbers
    POJ 3259 Wormholes(spfa判负环)
  • 原文地址:https://www.cnblogs.com/longlyseul/p/12926542.html
Copyright © 2011-2022 走看看