IP首部由各种不同用途和含义的字段组成 。
因为IP分32位的IPv4和128位的IPv6,所以IP首部需要包括版本号字段用来区分这两种情况 。
因为IP负责分组转发,所以IP首部应该包括目的IP地址,用于路由转发逻辑的处理,另外接收端可能需要找到该分组的来源,所以也应该包含来源IP地址 。
TCP、UDP、ICMP、IGMP都通过IP数据报传输,所以在IP首部,需要包含一个协议字段,用于区分该IP数据报承载的是哪种类型的协议 。
IP不纠错,但是需要检查错误,数据在传输过程中,有可能出错,导致接收到的数据跟发送的不一样,所以接收端需要有方法知道传输过程中,数据是否跟发送端一致,所以头部校验和字段也是必要的 。
因为IP要处理分片和重组,所以IP首部需要包含相关信息,以支持该功能 。
IP分IPv4和IPv6两种,协议格式不同,本文讲述以IPv4为主,先给一个IPv4的数据报图,不带选项的IP数据报头部为20字节 。
![IP 通俗易懂网络协议](http://img.jiangsulong.com/220421/0QZ512V-8.jpg)
文章插图
版本,IP协议的第一个字段都是版本字段,这也是IPv4和IPv6唯一相同的字段,IP数据报的版本字段为4对应IPv4,为6对应IPv6,主机或者路由器可以根据版本字段,分别处理IPv4或IPv6(称为双栈) 。
IHL,Internet头部长度,该字段为4位,表示头部(包括选项)32位字的数量,也就是说,真正的用字节表示的头部长度应该是IHL的值,再乘以4(32位=4字节),因为4位能表示的最大2进制为1111,对应十进制15,所以IPv4的首部最多60(15*4)字节 。
DS,服务类型字段占6bit,显示控制通知(ECN)占2bit,一共8bit,该8bit用来替换了最初版本的服务类型(ToS)字段,原因是ToS其实没怎么被用 。
总长度字段,是IP数据报的总长度,包括首部和数据 。
接下来的32位字(4字节),标识(16bit)+标志(3bit)+分片偏移(13bit)用于分片和重组逻辑 。
TTL,生存期字段用于设置数据报可经过路由器数量的上限 。超此上限的IP数据报将被丢弃 。
协议字段,8bit,提供多路分解功能,满足IP协议可用于携带多种(TCP、UDP、ICMP、IGMP等)协议类型的有效载荷的要求,TCP对应值17,UDP对应值为6 。
头部校验和字段,仅计算IPv4头部,不包括数据,数据(Payload)的校验由传输层协议去保证,校验和的含义很简单明了,在发送端根据IP头部的各位计算出一个数值,接收端根据接收到的IP头部的各位重算一个数值,如果该值等于校验和字段,那就哦了,否则,传输过程中出错了,这个IP数据报不靠谱,扔了吧 。
分片和重组链路层对可传输的帧有一个最大长度的限制,以太网对数据帧的长度上限是1500字节,链路层可传输帧的长度限制叫做最大传输单元(MTU) 。
如果IP层有一个数据报要传,且数据长度比链路层的MTU还大,那么IP层就需要对该数据报分片(fragmentation),把超限的数据报切分为若干片,使得每片都小于MTU限制 。
IP层接收到一份要发送的数据报时,通过选路逻辑来决定向哪个接口(网卡)发送数据,发送数据之前,需要查询该接口获得其MTU,然后将数据报长度与MTU进行比较,如果需要,则进行分片,分片可以发生在原始发送端主机,也可以发生在中间路由器上 。
IP数据报分片后,到达目的地后才进行重新组装,恢复分片前的IP数据报信息,重组由目的主机的IP层完成 。因此,分片和重组对传输层(TCP、UDP)透明,IP首部中的标识、标志、分片偏移字段为分片和重组提供了足够的信息 。
IP数据报首部中的标识(16bit)保存分片的唯一值,这意味着属于同一IP数据报的多个分片拥有相同的标识值 。
标志(3bit)字段中的一位用来表示“是否有更多的片”,除最后一片外,其他组成数据报的分片该位设1,最后一片置0表示没有更多的片,也就是最后一片;片偏移字段用来标识该片在原始IP数据报中的位置 。
当IP数据报切分为多个分片(IP数据报)后,每个分片的总长度字段(16bit)要更改为该片的长度值 。
对链路层而言,不管是完整的IP数据报,还是IP数据报的一个分片,都以IP分组同等视之,分组是IP层把数据报传递给链路层的一个概念,既可能是一个独立IP数据报也可能是一个IP数据报的分片 。每个分组(分片)都有自己的IP首部,并在选路时与其他分组(分片)独立路由,所以这些分片到达目的端可能失序,但IP首部有足够信息重新组装这些片 。
任何一个分片的丢失,都要导致重传整个数据报,这是因为重传机制在传输层,而分片对传输层透明 。
推荐阅读
- 「网络特效」12 个炫酷背景特效库
- 什么时计算机网络?计算机网络如何分类?
- https ssl 请求过程详解
- 高校|一二三未来:高校毕业生求职的“专属网络面试间”
- rtsp协议之dss服务器与vlc服务器比较
- 如何知道网络的实时网速?4种方法轻松查询
- rtsp协议之dss搭建rtsp服务器
- Antrea 0.9.0 发布,Kubernetes 网络解决方案
- 盘点网络创业需要的重要营销工具
- 什么是DNS?