TCP/IP详解 卷1:协议—IP:网际协议

Posted xhjh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP/IP详解 卷1:协议—IP:网际协议相关的知识,希望对你有一定的参考价值。

IP首部


普通的IP首部为20字节,除非含有选项字段,网络字节序采用的是大端模式,即低位对应的数据的高字节,高位对应的是数据的低字节,而计算机多采用的是小端存储模式,即低位对应的是数据低,高位对应的是数据高字节,因此,计算机数据进行网络传输时需要进行字节序转换。

  • Pv4对应的4位版本号为4。
  • 4位首部长度指的是首部32bit字的数量,因此最大可表示长度为15*4=60字节。
  • 8位服务类型TOS,前3位为优先权子字段(现在已被忽略),接着4位为TOS子字段和1bit未用位但必须置0,4位为TOS子字段分别表示:最小时延、最大吞吐量、最高可靠性和最小费用,这4位只能有一位为1,如果都为0则表示一般服务。对应不同应用建议的TOS值为:
  • 16位总长度字段表示IP数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。超通道的MTU为65535是因为IP数据报的最大IP数据报长度是65535。
  • 后面介绍标志字段和片偏移字段
  • 16位标识,标识主机发送的每一份数据报,通常每发送一份报文它的值就会加1。
  • 8位生存时间TTL,设置了数据报可以经过的最多路由器数,通常为32或64,每经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。
  • 8位协议字段用来标识上层使用的是什么协议。
  • 16位首部校验和字段是根据IP首部计算的检验和码。计算一份数据报的IP检验和,首先把检验和字段置为0。然后,对首部中每个16 bit进行二进制反码求和(整个首部看成是由一串16 bit的字组成),结果存在检验和字段中。当收到一份IP数据报后,同样对首部中每个16 bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。由于路由器经常只修改TTL字段(减1),因此当路由器转发一份报文时可以增加它的检验和,而不需要对IP整个首部进行重新计算。ICMP、IGMP、UDP和TCP都采用相同的检验和算法。
  • 每一份IP数据报都包含32位源IP地址和32位目的IP地址 。
  • 选项字段,作用如下:
    1).安全和处理限制(用于军事领域)
    2).记录路径(让每个路由器都记下它的IP地址)
    3).时间戳(让每个路由器都记下它的IP地址和时间)
    4).宽松的源站选路(为数据报指定一系列必须经过的IP地址)
    5).严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)。

IP路由选择

P路由选择主要流程为:

  1. 搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。
  2. 搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。目的网络上的所有主机都可以通过这个表目来处置。
  3. 搜索路由表,寻找标为“默认(default)”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。如果上面这些步骤都没有成功,那么该数据报就不能被传送。

子网

子网编址,不是把IP地址看成由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。
子网掩码,通过32位掩码的形式来确定IP地址中的网络号、子网号和主机号,其中值为1的比特留给网络号(通过IP地址的类型可以确定位数)和子网号(值为1的bit位数减去网络号的位数),为0的比特留给主机号。

以上是关于TCP/IP详解 卷1:协议—IP:网际协议的主要内容,如果未能解决你的问题,请参考以下文章

TCP/IP详解 卷1:协议—IP:网际协议

概说《TCP/IP详解 卷2》第8章 IP:网际协议

TCP/IP详解,卷1:协议--IP:网际协议

linux网络协议栈源码分析 - 网络层IP网际协议

linux网络协议栈源码分析 - 网络层IP网际协议

linux网络协议栈源码分析 - 网络层IP网际协议