网络层IP协议
1. IP协议的基本认识
IP协议的主要作用是将数据从源传送到目的地,它提供了在相互连接的网络系统上从一个源到一个目的地传输比特数据包(互联网数据包)所必需的功能。但是这个能力不一定是可靠的,也就说他可能出现传输失败的情况,所有这里需要与TCP协议相结合,也就是说一点IP协议传输失败了,但是TCP是保证可靠性的,那么TCP就再次向网络层发送数据重新传输一次。
基本概念
- 主机: 配有 IP 地址, 但是不进行路由控制的设备;
- 路由器: 即配有 IP 地址, 又能进行路由控制;
- 节点: 主机和路由器的统称;
P大致分为三大作用模块:
- IP寻址
- 路由控制
- IP分包和组包
2. IP协议如何进主机定位和报文转发
- 根据目的IP,进行局域网内之间的转发。
- 在局域网内,进行内网转发。
上面的过程就类似于,我们从一个城市到达另一个城市一样。首先我们要从大的方面来找,先到这个城市所在的省份,再从细的方面来找,定位到具体的城市。
所以到这里我们也可以推断出 IP = 目标子网 + 目标主机

3. IP分片和组装
我们在讲IP协议的时候提到了,在滑动窗口发送数据是为什么是一次发1000字节,而不是一次性发送滑动窗口的大小数据。是因为在链路层中规定的发送的数据一次性不能超过1500字节。那玩意传输成就是给网络层发送了超过1500字节的数据呢?这个时候在网络层,为了防止直接发送导致掉包的情况,在网络层支持将数据进行分批次的发送,也就是分片。
- 16 位标识(id): 唯一的标识主机发送的报文. 如果 IP 报文在数据链路层被分片了, 那么每一个片里面的这个 id 都是相同的.
- 3 位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为 1 表示禁止分片, 这时候如果报文长度超过 MTU, IP 模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后一个分片置为 0, 其他是 1. 类
似于一个结束标记.- 13 位分片偏移(framegament offset): 是分片相对于原始 IP 报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 除以 8 得到的. 因此, 除了最后一个报文之外(之前如果都是 8 的整数倍,最后一片的
偏移量也一定是 8 的整数倍), 其他报文的长度必须是 8 的整数倍(否则报文就不连续了).- 注意:片偏移(13 位)表示本片数据在它所属的原始数据报数据区中的偏移量(以 8 字节为单位)
分片
- 检查 MTU 限制:
○ 当一个 IP 数据报的大小超过了网络的 MTU(最大传输单元)限制时,就需要进行分片。MTU 是数据链路层对 IP 层数据包进行封装时所能接受的最大数据长度。 - 分割数据报:
○ IP 层将原始的 IP 数据报分割成多个较小的片段。
○ 对于每个片段,IP 层会设置相应的标识(Identification)、偏移量(Fragment Offset)和标志位(Flags)等字段。
○ 标识字段用于标识属于同一个数据报的不同分片,确保所有分片能够被正确地重新组装。
○ 偏移量字段指示了当前分片相对于原始数据报的起始位置,以 8 字节为单位。
○ 标志位字段包含了 3 个位,其中 MF(More Fragment)位用于指示是否还有更多的分片,DF(Do Not Fragment)位用于指示数据报是否允许进行分片。 - 添加 IP 头部:
○ 每个分片都会加上自己的 IP 头部,与完整 IP 报文拥有类似的 IP 头结构,但MF 和 Fragment Offset 等字段的值会有所不同。 - 发送分片:
○ 分片在传输过程中独立传输,每个分片都有自己的 IP 头部,并且各自独立地选择路由。
组装
- 接收分片:
○ 当目的主机的 IP 层接收到这些分片后,会根据标识字段将属于同一个数据报的所有分片挑选出来。 - 排序与组装:
○ 利用片偏移字段,IP 层会对属于同一个数据报的分片进行排序。
○ 当所有的分片都到达并正确排序后,IP 层会将这些分片重新组装成一个完整的 IP 数据报。 - 传递给上层协议:
○ 组装好的 IP 数据报会传递给上层的协议进行处理。

4. IP协议报头格式


最低0.47元/天 解锁文章
3053

被折叠的 条评论
为什么被折叠?



