【Linux 网络】从理论到实践:IP 协议的报头分析与分段技术详解


一、IP 协议的定位

IP:IP 协议提供了一种能力,可以把数据从主机 A 跨网络的送到主机 B 的能力;

TCP:提供可靠性;

TCP / IP :提供可靠的把数据从主机 A 跨网络的送到主机 B 的能力;

二、IP 协议的报头

4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4.

4位头部长度(header length):IP头部的长度是多少个32bit,也就是length 4的字节数.4bit表示最大的数字是15,因此IP头部最大长度是60字节.

8位服务类型(Type OfService):3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为O).4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本.这四者相互冲突,只能选择一个.对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要.

16位总长度(total length): IP数据报整体占多少个字节.1

6位标识(id):唯一的标识主机发送的报文.如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的.

3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到).第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文.第三位表示"更多分片",如果分片了的话,最后一个分片置为0,其他是1.类似于一个结束标记.

13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移.其实就是在表示当前分片在原报文中处在哪个位置.实际偏移的字节数是这个值8得到的.因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了).

8位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数.一般是64.每次经过一个路由,TTL-=1,一直减到0还没到达,那么就丢弃了.这个字段主要是用来防止出现路由循环。

8位协议:表示上层协议的类型16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏.32位源地址和32位目标地址:表示发送端和接收端.选项字段(不定长,最多40字节):略

问题:IP 报文是如何分离报头和有效载荷的?

答:首部长度 + 总长度

问题:IP 协议如何把报文交给上层?

答:通过 8 位协议表示上层协议的类型;

三、网段划分

为什么要网段划分?

答:提升在全网中定位主机的效率,根据:IP 每次淘汰一个子网的所有主机,其实跟根据学号找学生一样;

是谁划分的?

答:运营商;

IP地址分为两个部分,网络号和主机号;

网络号:保证相互连接的两个网段具有不同的标识;

主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;

我们在没有联网的时候,是没有 IP 地址的,所以:我们的 IP 是由路由器分配的;

不同的子网其实就是把网络号相同的主机放到一起,如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其他主机重复.

通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的IP地址都不相同.

那么问题来了,手动管理子网内的IP,是一个相当麻烦的事情,所以解决方案为:有一种技术叫做DHCP,能够自动的给子网内新增主机节点分配IP地址,避免了手动管理IP的不便.一般的路由器都带有DHCP功能.因此路由器也可以看做一个DHCP服务器.

目标 IP 能够找到目标主机,是由网络拓扑结构决定的,是子网划分和路由配置决定的;

四、分片和组装

我们学习网络的本质:我们是在学习一个报文的整个生命周期!

因为链路层收到的 IP 报文(有效载荷)大小不能超过 MTU (1500字节),一旦超过,网络层就要进行分片和组装(例如:客户端的网络层进行分片,服务端的网络层进行组装);

结论:分片和传输的过程,传输层不需要知道;

16 位标识是用来标识一个报文的唯一性的,如果分片了,分片报文的标识是相同的;分片不是简单的对 IP 报文进行分片,而是要对每一片添加 IP 报头:一个报文 -> 多个 IP 报文;

13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移.其实就是在表示当前分片在原报文中处在哪个位置.实际偏移的字节数是这个值8得到的.因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了).

3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到).第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文.第三位表示"更多分片",如果分片了的话,最后一个分片置为0,其他是1.类似于一个结束标记.

如何组装:

1、如何区分分片报文和不分片报文?

答:如果更多的标志位为 1,并且最后一片的标志位为0,片偏移大于0;那么就是分片报文;

2、怎么保证挑出来的分片报文是完整的,怎么组装?

答:有第一片:偏移量为0,最后一片:更多标志位为:0,中间片:按照片偏移数字进行升序排序(当前报文的偏移量 = 上一个报文的偏移量 + 他报文的有效载荷的长度);

细节:任意分片会导致整个报文进行重传(TCP 要求重传,而 UDP 真的丢包了);变相的增加丢包的概率;所以 IP 通信过程中,分片就不能成为主流,因为分不分片由传输层说了算,所以这就是为什么 TCP 不把滑动窗口的数据一次性打成一个包发给对方的原因;所以滑动窗口发送的数据不能超过 1460 ;1460 是 MSS 的值;MSS :最大段尺寸;

相关推荐
呉師傅2 小时前
东芝复印机简单使用说明(2010AC等黑壳机)
运维·服务器·windows·电脑·wps
那就回到过去2 小时前
PIM-DM嫁接机制
运维·服务器·网络·智能路由器·pim·ensp
CS创新实验室2 小时前
《计算机网络》深入学:以太网交换机原理与应用
服务器·网络·计算机网络·以太网·以太交换机
Hi202402172 小时前
使用Docker Compose搭建LibreNMS网络监控系统
运维·网络·docker·容器
CS创新实验室2 小时前
《计算机网络》深入学:广域网
服务器·网络·计算机网络·408·计算机考研·广域网
Forget_85502 小时前
RHCE第八章:防火墙
linux·服务器·数据库
Whisper_Sy2 小时前
Flutter for OpenHarmony移动数据使用监管助手App实战 - 月报告实现
android·开发语言·javascript·网络·flutter·ecmascript
小李独爱秋2 小时前
计算机网络经典问题透视:EF PHB与AF PHB深度解析——它们有何不同,各适用于何种通信量?
网络·计算机网络·信息与通信·qos·phb
先鱼鲨生2 小时前
自动化框架pytest
运维·自动化·pytest