TCP-IP-part6-IP协议(二)

前言

TCP/IP相关内容第六部分,包含:

  • 路由控制
  • IP分割处理与再构成处理
  • IPv6
  • IPv4首部
  • IPv6首部

一、路由控制

一个主机总是知道自己的IP地址和子网掩码,但在发送数据的时候并不知道收方的子网掩码,仅知道目的IP就能顺利送到,这依赖于路由控制。对于发送给自己所在网络的IP包,主机会先把目的IP与子网掩码做与运算,如果网络号与自己所在网络一致,则直接通过ARP广播发送了,并不经过路由器。查看主机的路由表也能看到,其只有两项网络号,一个是本网络,下一跳是自己(但并不会真的跳,真正跳的是127.0.0.1/32),另一个是其他网络,默认路由,下一跳是路由器。

这与面对最后一跳是相似的,路由器查表发现是自己所连的网络号,此时会通过ARP确定最终目的主机的MAC地址,发送。

发送数据包使用的地址是网络层的地址。路由控制表记录网络地址和下一步应该发送至路由器的地址。路由表可以管理员手动设置——静态路由控制,也可以与其他路由器交换信息时自动刷新——动态路由控制。

路由器是根据目的IP,用最长匹配原则查表,找到下一跳路由器的IP地址,再用ARP协议获得其MAC地址,封装成帧发送出去。最长匹配原则即是去寻找表中最接近目的主机所在网络的过程,越长证明越能找到其所在的更小的子网。每个路由器至少两个IP地址,它连接了几个网络,就有几个IP地址。路由器本机和表中下一跳的路由器必定在同网络,才可用ARP广播知道对方MAC地址。

特殊的路由项:

  1. 默认路由
    指路由表中任何一个地址都能与之匹配的记录。一般标记0.0.0.0/0或default,它不是IP地址(DHCP用到0.0.0.0/32),而是一个标识。

  2. 主机路由
    用“IP地址/32”表示,在路由控制表中出现,是一个主机号,根据最长匹配原则,相当于为这个IP的目的主机开辟了专线,特殊制定它的下一跳是哪里,而不是随着同目的网络号的IP包统一转发。

  3. 环回地址
    127.0.0.1/32,用于本机通信,主机名为localhost。

路由控制表的聚合

多个子网可以聚合成一个大的网络,这样可以减少路由的表项,减少了路由器的计算负担,提高了速度。如原来有四个表项:
192.168.2.0/25———————-A
192.168.2.128/25——————-A
192.168.3.0/25———————-B
192.168.3.192/25——————-B
假设这些网络都是A、B直接连接的,不需要再跳了。聚合后只需要:
192.168.2.0/24———————-A
192.168.3.0/24———————-B

二、IP分割与再构成处理

每种数据链路的MTU不同,典型:以太网1500,FDDI 4352,ATM 9180,PPP 1500。

IP报文分片与重组

每个分片以8个字节的倍数为单位。路由器只负责分片而不负责重组,重组只在终结点目的主机处进行。因此IP数据包的大小在传输过程中只会越变越小。由于时延,在重组的时候一般会等待30秒再进行处理。

分片的进行根据IPv4首部的片偏移和标志字段。

路径MTU发现

路由器不再分片,而是由主机根据路径中所有数据链路中最小的MTU进行分片并发送。这样在路由过程中就不会再分片。

工作原理:

发端主机将IP首部的分片禁止为置1,根据这个标志位,途中的路由器即使遇到需要分片的大包也不会进行分片,而是将包丢弃,并返回一个ICMP,类型3(目标不可达),错误代码4的信息,且包含本数据链路的MTU。主机收到后根据这个MTU分片。继续发,直到没有收到任何ICMP,则最后一次ICMP的MTU即为合适的值。

MTU的值10分钟缓存一次,10分钟后就要重新路径MTU发现了。

UDP是交给IP层来进行分片、重组的,UDP层把数据加上UDP首部一股脑全交给IP层,IP把他们打包成一个IP包:UDP数据+UDP首部(8字节)+IP首部(20字节)进行发送。分片的时候再把他们拆分,分成多个IP包,会有多个IP首部,但只有第一个IP包里有UDP首部,因为IP不区分UDP首部和应用层数据。

TCP是根据路径MTU发现计算出MSS,把应用层数据分片打上TCP首部再交给IP,已经分好片,IP不再负责分片和重组,原样发、收,交给上层即可。每个IP包都会有一个TCP首部

三、IPv6

根本上解决IPv4地址耗尽解决的问题。IPv6地址长度为128bit,是原来4倍,一般写为8个16位bit,每组用冒号隔开,如果出现连续的0还可以将这些0省略,并且用两个冒号隔开,但一个IP地址只允许出现一次两个连续的冒号。

如: 1080:0:0:0:8:800:200C:417A省略为1080::8:800:200C:417A

地址结构

分为3类,用前几个bit做标识符。一个NIC可以同时配备多种IP地址(反正够用)。

  1. 全局单播地址
    世界上唯一的地址,前48bit为广域网络前缀,后16bit为子网ID,共64bit网络标识,后64bit为主机标识(接口ID),通常保存64bit版的MAC地址(为安全起见也可以设临时地址)。

  2. 链路本地单播地址
    10bit标识位,54bit的0,64bitMAC地址,用于同一链路中的通信,不经过路由器。

  3. 唯一本地地址
    7bit标识,1bit L通常为1,40bit全局ID为日后想连接两个网络准备,16bit子网ID,64bit接口ID(MAC地址)

IPv6分段处理

IPv6只采取在主机分片,路由器不进行分片,因此“路径MTU发现必不可少”。

四、IPv4首部

IPv4首部

  1. 版本
    4bit构成,IPv4的字段值为4。

  2. 首部长度
    4bit构成,表明IP首部大小,单位为4字节。范围为5~15,即IP首部最短20字节,最长60字节。

  3. 区分服务
    8bit构成,用于表明服务质量,通常由应用制定,目前大部分网络忽视这个字段。可再划分为DSCP和ECN字段。DSCP提供质量控制,Diffserv,设置优先级。ECN用来报告网络拥堵情况,告知TCP协议来调整窗口,控制拥塞。

  4. 总长度
    16bit构成,单位为字节,因此一个IP包最多传65535个字节。实际链路的MTU都小于它。由于IP会分片和重组,上层UDP只会认为IP能够以65535个字节传输数据。

  5. 标识(ID)
    16bit构成,用于分片和重组,相当于IP分片的身份证号,每发送一个分片,值都加1,接收时遇到重复的ID就会抛弃。

  6. 标志
    3bit构成,表示包被分片的相关信息。
    1———未使用,必须是0。
    2———DF(dont fragment),表示是否分片,1为不能分片(路径MTU发现),0为可以分片。
    3———MF(more fragment),表示被分片时,是否是最后一个分片,1为不是最后一个,0为是最后一个。

  7. 片偏移
    13bit构成,表示分片的位置。因此最多可表示8192个分片。单位为8字节。

  8. 生存时间
    8bit构成,每经过一个路由器减1。保证在路由器中不会无限循环,而链路层的帧不过路由器,要靠环路检测技术避免。

  9. 协议
    8bit构成,表示IP包上层的协议编号。

  10. 首部校验和
    16bit构成

  11. 源地址
    16bit

  12. 目的地址
    16bit

  13. 可选项
    长度可变,用于实验。

  14. 填充
    保证首部长度是32bit整数倍,对齐。

五、IPv6首部

为减轻路由器负担,省略了首部校验和字段,且不分片,提高了转发效率。其固定有40字节,后面还可以有拓展首部。

  1. 版本
    4bit,值为6.

  2. 通信量类
    8bit,类似区分服务,Diffserv和ECN的作用。

  3. 流标号
    20bit,用于服务质量(QoS)

  4. 有效载荷长度
    16bit,指IPP包的数据部分长度,即不包含首部,包含拓展首部和数据部分的长度。

  5. 下一个首部
    8bit,表示上一层传输层的协议类型(没有拓展首部时),或者是后面第一个拓展首部的协议类型(如果有)。

  6. 跳数限制
    同IPv4相同

  7. 源地址
    128bit

  8. 目的地址
    128bit

  9. 拓展首部
    对IPv6的功能进行拓展,拓展首部后可以再跟拓展首部,下一个协议类型(指下一个拓展首部或是传输层协议)都会在拓展首部中提前标明。拓展的功能包括数据报的分片,载荷加密、认证首部(用于IPsec)等等。

您的支持是我创造源源不断地动力