IP协议详解
- IP首部(IPv4)
- IP分片
- IP分片的概念
- IP分片的原因
- IP分片的具体实现
IP首部(IPv4)
IP首部最小是20个字节,最大是60个字节。
第一个4字节
- 版本号(Version),4位;用于标识IP协议版本,IPv4是0100,IPv6是0110,也就是二进制的4和6。
- 首部长度(Internet Header Length),4位;用于标识首部的长度,单位为4字节(32位),所以首部长度最大值为:(2^4 - 1) * 4 = 60字节,但一般只推荐使用20字节的固定长度。
- 服务类型(Type Of Service),8位;用于标识IP包的优先级,但现在并未使用。
- 总长度(Total Length),16位;标识IP数据报的总长度,最大为:2^16 -1 = 65535字节。
第二个4字节主要与分片相关
- 标识(Identification),16位;用于标识IP数据报,如果因为数据链路层帧数据段长度限制(也就是MTU,支持的最大传输单元),IP数据报需要进行分片发送,则每个分片的IP数据报标识都是一致的。
- 标志(Flag),3位,但目前只有2位有意义;最低位为MF,MF=1代表后面还有分片的数据报,MF=0代表当前数据报已是最后的数据报。次低位为DF,DF=1代表不能分片,DF=0代表可以分片。
- 片偏移(Fragment Offset),13位;代表某个分片在原始数据中的相对位置。
第三个4字节
- 生存时间(TTL),8位;以前代表IP数据报最大的生存时间,现在标识IP数据报可以经过的路由器数。
- 协议(Protocol),8位;代表上层传输层协议的类型,1代表ICMP,2代表IGMP,6代表TCP,17代表UDP。
- 校验和(Header Checksum),16位;用于验证数据完整性,计算方法为,首先将校验和位置零,然后将每16位二进制反码求和即为校验和,最后写入校验和位置。
第四个4字节
- 源IP地址
第五个4字节
- 目的IP地址
选项
IPv4最后一个选项字段是可变长的可选信息。这部分最多包含40个字节,因此IP头部最长是60字节(其中还包含前面讨论的20字节的固定部分)。可用的IP选项包括:
- 记录路由,告诉数据报途径的所有路由器都将自己的IP地址填入IP头部的选项部分,这样就可以跟踪数据报的传递路径。
- 时间戳,告诉每个路由器都将数据报被转发的时间填入IP头部的选项部分,这样就可以测量途径路由之间数据报传输时间。
- 松散源路由选择,指定一个路由器IP地址列表,数据报发送过程必须经过其中所有的路由器。
- 严格源路由选择,和松散源路由选择类似,不过数据报只能经过被指定的路由器。
IP分片
IP分片的概念
IP分片是网络上传输IP报文的一种技术手段。IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组。这一过程称为分片(fragmentation)。
IP分片的原因
每一种物理网络都会规定链路层数据帧的最大长度,称为链路层MTU。IP协议在传输数据报时,若IP数据报长度大于MTU,则将数据报文分为若干分片进行传输,并在目标系统中进行重组。比如说,在以太网环境中可传输最大IP数据报大小(MTU)为1500字节。如果要传输的数据帧大小超过1500字节,即数据长度大于1472(1500-20-8=1472,普通数据报)字节,则需要分片之后进行传输。
IP分片的具体实现
IP数据报进行分片之后,当它到达目的站时,由目的端的IP层来进行组装。IP分片和完整IP报文差不多拥有相同的IP头。ID域对于每个分片都是一致的,具有同一个ID的IP分片将会重新组装。13位片偏移则记录了某IP片相对整个包的位置。中间的3位标志则标志着该分片后面是否还有新的分片,这三个标志就组成了IP分片的所有信息,接受方就可以利用这些信息对IP数据进行重新组织。