Linux之ip地址<3>

发布时间:2026/10/15 4:08:18
Linux之ip地址<3>
尝试理解公网真实的互联网公网结构十分复杂。公网 IP 由 ICANN 负责分配管理IP 地址会在全球按照亚太、北美、欧洲等大区进行规划划分同时各个国家内部又由多家 ISP互联网服务提供商运营商负责落地运营。整体网络拓扑庞大且错综复杂。 我们接下来简化整个传输流程只需要从宏观层面理解公网的核心原理即可。ip数量的划分不是根据国家来的,可能有组织或者上面其他的因素使得各国的ip数量很不一样全球各大洲依靠海底光缆互相连通构成了互联网的国际骨干网。国际骨干网中使用的核心路由器都具备极强的数据转发性能。除海底光缆外陆地长途光纤同样承担洲际网络传输。这类骨干路由器可以每秒处理海量数据包支撑全球跨国家的数据转发。为了方便理解我们做了理想化简化把公网 IP 按国家、省份、城市逐级划分就像快递系统一层一层分拣。顶层国际骨干网各个国家的边界路由器互联交换全球路由国家拿到大段 IP 之后再由运营商拆分分配到各个省份省份再细分到各个城市城市出口路由器再对接企业 / 家庭内网。路由器转发报文的核心逻辑拿到目的 IP和路由表里面的子网掩码做按位与运算算出网络号匹配路由条目转发给对应的下一跳。重要提醒真实互联网并不是按国家分配 / 8 网段这只是教学简化模型。真实 IP 分配是由 ICANN、RIR 区域互联网注册机构分配给各个运营商并非直接绑定国家。路由每个主机都是有路由表的访问同局域网主机192.168.194.200目的 IP192.168.194.200目的 IP 和子网掩码255.255.255.0做按位与得到网络号192.168.194.0在路由表匹配条目192.168.194.0 mask 255.255.255.0标注【在链路上】“在链路上” 目标和本机在同一个网段不需要发给网关本机直接 ARP 广播获取192.168.194.200的 MAC 地址数据包直接二层交付给目标主机路由转发核心逻辑拿到目的 IP和路由表里面每条路由的子网掩码做按位与运算计算网络号遵循最长前缀优先原则匹配路由条目。如果匹配到【在链路上】的路由目标主机和本机处于同一局域网直接 ARP 获取 MAC二层通信不经过网关。没有任何网段匹配则命中默认路由0.0.0.0数据包转发给默认网关交由网关继续跨网段转发。回到报头如果应用层一次性交给 TCP 4000 字节能不能 TCP 打包成一个 TCP 报文段直接下发假设 TCP 直接封装 4000 字节应用数据TCP 头部 20 4000 数据 4020 字节交给网络层 IP。 IP 加上 20 字节 IP 头整个 IP 包大小 4040 字节。 这个 IP 数据包交给数据链路层封装进以太网帧。 但是以太网规定帧里面的数据区最大只能 1500 字节4040 字节远超 1500。数据链路层不会做分包图里标注了这句话分包工作交给 IP 层完成。 IP 就要对这个大包进行IP 分片把 4040 字节拆成多个 IP 分片分别打包、单独传输。IP 分片有很大缺点只要任意一个分片丢了整个 IP 数据包全部重传IP 分片是网络层的工作IP 本身没有重传机制。只要其中 1 片丢失接收方无法重组整个 4000 字节的数据全部失效TCP 必须重新发送全部 4000 字节性能很差。分片会增加路由器处理开销某些网络环境会直接丢弃大分片包。尽量传输层的数据146016位标识(id)唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面 的这个id都是相同的.3 位标志位规则从左往右保留 | DF 禁止分片 | MF 更多分片001MF1 →More Fragment1代表后面还有分片不是最后一块000MF0 →没有更多分片这就是整个报文的最后分片分片核心规则同一原始 IP 报文拆分出来的所有分片ID 标识完全相同这里全是 666。接收主机依靠这个 ID把属于同一个大数据包的分片收集起来重组。除最后一个分片以外前面所有分片的数据部分长度必须是 8 字节的整数倍保证偏移对齐。分片到达接收端可以乱序依靠片偏移的值排序重组不需要按发送顺序到达。判断 IP 报文是否分片 只要MF1一定是分片 如果MF0但片偏移不为 0也属于分片整个报文的最后一块分片。 只有MF0 且 片偏移0才是没有分片的原始 IP 报文。接收端只把 16 位标识 ID 相同的分片划为同一组进行重组。重组判定规则同一组分片第一个分片片偏移 0代表这是原始报文数据的起点。本组最后一个分片 MF0标记分片序列结束。分片之间的对齐条件当前分片的片偏移×8 得到字节 当前分片的数据长度 下一个分片的片偏移对应的字节位置 也就是当前起始字节 当前分片数据长度 下一片起始字节保证分片之间紧密衔接、没有空隙、不重叠。重点分片到达可以乱序 接收端不靠到达先后排序依靠【片偏移】字段计算位置把分片放到正确位置。为什么片偏移要除以 813 位片偏移字段最大能表示的值 2¹³ -1 8191如果片偏移直接代表字节 最大只能描述 8191 字节。但 IP 报文最大可以到 65535 字节根本放不下范围不够。那直接放大单位单位 8 字节 8191 × 8 65528 字节刚好覆盖 IP 报文最大长度65535。代价前面所有分片的数据长度必须是 8 字节整数倍只有最后一片不受这个限制可以不是 8 的倍数。片偏移只有 13bit取值范围 0~8191。 如果单位是 1 字节最多只能偏移 8191 字节小于 IP 报文最大 65535 字节寻址不够。 所以规定片偏移单位 8 字节。 13bit 最大值 8191 ×8 65528刚好覆盖 IP 报文最大长度。 代价除最后分片外其余分片数据长度必须是 8 字节整数倍。