一、IP网络层概述
在TCP/IP协议的Internet中,网络层由IP协议实现:
- everything is over IP
- IP is over everything
IP网络是数据报网络:
- 无连接
- 简单网络,终端复杂(可靠性实现在TCP)
IP网络层核心功能还是网络层的基本功能:抓发,路由
IP协议的配套协议:
- ICMP协议(Internet Control Message Protocol),一般用于差错报告等,它最终会使用IP协议
- ARP协议(Address Resolution Protocol),地址解析协议,用于查找硬件的物理地址(链路层Mac地址),IP协议会使用它
- 路由协议(RIP、OSPF、BGP等),路由协议最终会填充转发表(路由表)
二、IP数据报格式
2.1 抓包
2.2 格式
首部字段:只有4位,最大值为15,所以是不够标识首部长度的,最终这个字段以4字节为单位。抓包中为5,实际为5*4为20字节。
服务类型字段:在1998年被修改为区分服务,抓包里面的Differentiated Service Field字段,一般性情况下不使用。
总长度:16比特,最大可以65535,表示IP数据报的总长度可以达到65535字节,但是实际一般最大为1500字节,因为下层链路层的MTU一般为1500字节。
生存时间(TTL) : time to live,寿命,用于确保数据报不会永远在网络中传播,每经过一个路由器,ttl减一,当TTL为0时,这个数据报会被丢弃。
标识、标志物、片偏移,这三个字段为IP数据报分片使用。
源IP地址,目的IP地址:各32位。
选项字段:一般不用
填充:当有选项字段,但是不足32位时用于补齐32位用。
由上面分析看到,一个IP数据报其IP头部长度一般为20字节。
数据部分:为TCP报文,其中TCP的头部长度一般也为20字节
最终可以得出,一个IP数据报,其有固定的头部开销40字节。
二、IP数据报分片
IP数据报最终要经过链路层进行传递,每次所能传递的数据大小取决取决于链路层的最大传输单元,英文名字叫做MTU(Maximum Transmission Unit)。比如目前主流的局域网技术以太网的MTU是1500字节。
问题:当上游IP数据报的数据长度大于下游链路层的MTU时候怎么办?
类比:IP数据报类似于一车沙子(1000KG),到了河边以后需要用船运输过河(船类似于链路层),但是船一次只能运输100KG(类似于MTU),这个就很好解决了,把沙子拆分成10份,分10次让船运输过去,等十分沙子都全部传输到河对岸后,再重新组装成一车即可。。IP数据报超过MTU后的处理办法也是类似的,也是对IP数据报进行分片,最终全部传输完毕后在进行组合。
分片示意图
分片相关的字段
在IP数据报的格式中"标识"、“标志位”、“片偏移”这三个字段用于专门处理IP数据报分片的case。
标识(Identification):是IP软件在存储器中的一个计数器,每生成一个IP数据报,这个计数器就+1。当IP数据报的长度大于MTU需要分片时候,被拆分的IP数据报的标识字段都被赋值为原有IP数据报的标识的值,这样这些分片就拥有了相同的标识,最终传输完毕后相同的标识用于正确的组装在一起。
标志位(Flags):
- DF字段(Don't fragment):0/1。DF=1,表示不能分片,此时如果IP数据报的长度大于MTU,路由器直接丢弃。DF=0,表示可以分片。
- MF字段(More fragment):0/1。MF=1标识后面还有分片。MF=0表示是最后一个分片或者没有分片。
片偏移(Fragment Offset):分片的偏移量,分片在原数据报里面的相对偏移量,以8字节为单位。例子(谢希仁-计算机网络)
以上是IPv4的分片相关的说明,实际的网络传输中很少分片,在TCP的MSS会控制大小,一般不会超过MTU。
分片的组装在端系统中进行,路由器不就行组装。
三、IP地址编制
IP地址用于标记主机和路由器的接口,IP地址和接口关联,不是标记主机本身。
IP地址
32位,点分10机制标识。192.168.11.25
格式:
- 网络号(NetId)
- 子网号(SubId)
- 主机号(HostId)
子网掩码:相应IP地址除了主机号以外全部为1。和对应IP地址按位取add,即可得到网络号和子网号。最终用于路由。
无类域间路由CIDR(Classless InterDomain Routing)
a.b.c.d/x。x为前缀长度,系统前缀的网络代表一个子网。
- 方便子网划分
- 减少路由表的大小,进行路由聚合