深入理解Linux网络技术内幕 第18章 IPv4协议介绍

IPv4协议字段

ip报文头如下:
在这里插入图片描述
版本
IP协议的版本,值为4。

报文长度
以32位(4字节)为单位。

服务类型
该字段最初是为了协助QoS(Quality of Service 服务质量),就是通知路由器此封包的传送者希望传输时的偏好:最小时延、最大吞吐等。
总长度:ip报文的总长度

封包标志符(IP ID)
DF 不分段
MF 还有其他分段
片段偏移量
上述的四个字段在分段和重组功能中使用。

存活时间(ttl)
数据包经过的网络设备跳点计数。当为0的时候,该报文被丢弃。

协议
四层协议

源IP地址
目的IP地址

选项字段
此段可以为0,也可以长达40字节(15*4-20=40)。

IP选项

简单选项可以用一个字节表示:type
复杂选项要用多个字节表示:type+length+pointer+可选数据

选项type

每个选项中都有一个type字段占用1个字节,type字段可以进一步拆分成三个部分:copied(1bit)+class(2bit)+number(5 bit)
copied被设定时,如果该报文需要分段传输,IP层需要把选项拷贝到每个片段。
class
number

选项长度length

选项的长度(单位8字节)包括type和length
pointer:从选项开端做为起点的偏移量。
可选数据

End of Option List

IP选项中的长度以4字节作为单位计算,因此选项的长度必须为4字节对齐,如果选项数据不对齐就以这个选项对齐。
No Operation选项用于填补选项之间的空白。

Source Route选项

该选项是一个多字节选项,发送点列出后续跳点所用IP地址。这个选项分为严格和松散两种类型。严格Source Route报文要严格按照选项中指定的IP地址路径传输,而松散Source Route中间路由器可以使用不在列表中的路由器作为通向列表中下一个路由器的路径。

Record Route选项

用于存储源地址和目的地址之间路由器转发该报文时外出接口的IP地址。因选项最大长度是40字节,所以最多存储9个地址。

IP分段和重组

IP报文的分段和重组是IP协议的主要工作之一。
IP协议最大报文长度是64KB,而物理层可以传输封包的最大长度受网卡限制(MTU),当IP层必须传输尺寸大于MTU的报文时,就必须把包切成几个较小的报文分别传输。
一般分段后的IP报文会有目的主机重组,但是有些中间设备需要查看整个报文的内容,比如防火墙和NAT设备,也需要ip报文重组。
IP分段报文中选项只会拷贝copied字段为1的报文。
IP校验和只适用于IP头,IP分片后IP头的内容发生改变,校验和需要重新计算。

分段、重组涉及到IP报文头字段

DF禁止IP报文分段
MF当一个报文被分段后,每个IP报文的该标记都被置为1,最后一个为0。当接受者接受最后一个分段的IP报文后,就可以知道IP报文没分段前的长度。
片段偏移量:这个代表该分段报文在原报文中的位置。这个字段有13位,因为IP报文中的len字段有16位,所以这个13位的偏移量的值左移三位是真正的偏移量值。也就是说偏移量的值是8字节的倍数。
ID IP报文ID,同一个IP分段的报文该值相等。

内核重组IP分段时需要的信息

  • 源目IP
  • IP ID
  • L4协议
    内核基于以上信息重组IP报文,可能发生两个不同的传送者凑巧为报文选择了相同的IP ID同时又凑巧发给了相同的目的地址。目的服务器会尝试将两个源地址的IP分段放在一起,最终造成两个IP报文都传输失败。

IP ID生成方式为内核为每一个目的IP持有一个计数器,因此通往同一目的IP的数据IP ID是连续的。

ip分段和重组缺点

  1. 分段和重组占用CPU和内存
  2. 消耗带宽(报文头冗余)
  3. 增加传输延迟
  4. 存在

每个路由器或者主机都要有一个定时器,定期检测分段报文,如果某些片段在特定时间内没有接收到,需要清理该IP分段所占用的资源。

路径MTU(PMTU)

被用于发现IP报文传输到指定目的地址不被分段的最大尺寸。
由于每个目的地址会使用不同的PMTU,其值将会暂存在路由表缓存项目中。
如果目的端设备和本机直接相连PMTU应该设置为出口设备MTU。否则PMTU设为默认值576,但是该值不一定是最佳的。可以逐渐增大封包尺寸并将DF设置为0,如果没有ICMP消息报错,内核可以更新本地的PMTU。如果收到ICMP FRAGMENTATION NEEDED,内核减小PMTU值。

校验和

IP层的校验和只包括IP协议头,
L2 L3 L4各层都有各自的校验和,这样设计因为数据不仅在传输期间发生错误,在内核协议栈各层之间移动数据时也会发生错误。另外,每个协议负责确保自身传输正确,不能假设上下层把这个任务做好。

IP4报文中,校验和是一个16位的字段,校验和由发送方计算好,由其后的路由器更新反应出路由器可能对IP头做的修改。校验和更新原因:

  • 递减TTL
  • IP头修改(NAT)
  • IP选项处理
  • 分段
    以上几种情况导致IP报文头修改,因此需要更新校验和。IP头被修改时因为先前的校验和已经计算有效,因此不需要重新计算而只需要根据变更的数据对校验和调整即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值