目录一、宏观视角下的TCP与IP二、IP报头与分片机制(⭐⭐⭐)1. 核心报头字段解析2. 分片机制深度学习(⭐⭐⭐)2.1 为什么要分片2.2 接收方的拼装还原2.2.1 识别“同一个包裹”的碎片2.2.2 分片的排序与重组逻辑2.2.2.1 找到“火车头”首片2.2.2.2 寻找“车厢”并无缝拼接中间片2.2.2.3 确认“车尾”尾片2.2.2.4 向上层交付2.3 异常处理机制(重组失败)三、IP地址的演进1. 按类划分2. CIDR (无类别域间路由)3. 私有IP与公网IP的诞生逻辑(⭐⭐⭐)3.1 公网IP外网IP3.2 私有IP内网IP4. 解决IP耗尽的方案4.1 动态分配IP (DHCP)4.2 NAT (网络地址转换) 技术 (⭐⭐⭐)4.2.1 NAT的基本原理4.2.2 NAPT (网络地址端口转换)4.3 IPv64.3.1 地址容量4.3.2 IPv6带来的技术变革4.3.3 为什么还没完全普及五、路由器的工作原理与路由表1. 路由器的多重身份(⭐⭐⭐)2. 工作原理六、扩展学习1. IP的按类划分1.1 A类地址巨无霸网段1.2 B类地址中坚力量1.3 C类地址遍地开花1.4 D类地址特殊的群发机制1.5 E类地址未来的预留1.6 计算主机数都要减 2(⭐⭐⭐)2. 路由算法简述2.1 静态路由2.2 动态路由2.2.1 距离矢量算法 (Distance Vector) —— “道听途说的传话筒”2.2.2 链路状态算法 (Link State) —— “人人手持GPS全局地图”2.3 BGP (边界网关协议)一、宏观视角下的TCP与IP在网络传输中TCP和IP总是形影不离但它们的职责有着本质的区别。TCP的作用是“提供可靠性策略”它像是一个在幕后统筹规划的高管负责制定超时重传、流量控制、拥塞控制等策略确保数据“安全、无误”地送达。IP协议的作用是“执行跨网络的数据交付”它像是一个使命必达的快递员负责将数据从主机A实际运送到主机B。它不管数据丢不丢那是TCP的事它只负责“尽力而为”地赶路。为了完成交付IP协议需要解决两个核心问题源IP和目标IP必须明确数据从哪里来要发给全网唯一的谁。定位逻辑IP地址 目标网络号 目标主机号。IP协议会先根据“网络号”把数据送到目标所在的子网再根据“主机号”在子网内找到具体的那台电脑。二、IP报头与分片机制(⭐⭐⭐)为了实现上述功能IP协议会在数据的前面加上一个专属的“报头”Header。这个报头包含了快递的详细物流信息。1. 核心报头字段解析4位首部长度规定了IP报头的大小。和TCP一样IP报头也有选项字段。它的取值范围是0101到1111即5-15单位是4字节所以IP报头长度在 20 到 60 字节之间。4位版本号指明IP协议的版本对于目前广泛使用的IPv4这个值就是4。8位服务类型 (TOS)其中4位用来表示请求的服务类型最小延时、最大吞吐量、最高可靠性、最小成本。这4个状态一般互相冲突只能选其一。路由器在进行路径选择时会参考这个字段来优化转发策略。16位总长度表示整个IP报文报头 有效载荷的总字节数。8位生存时间 (TTL, Time To Live)防止迷路的报文在网络中无限循环。报文每经过一个路由器TTL减1减到0时该报文会被直接丢弃。网络中绝对不允许存在永远不消失的“游离报文”占用资源。8位协议指明了IP的有效载荷应该交给上层的哪个协议例如值为6代表TCP17代表UDP。16位首部检验和用于校验报头在传输过程中是否发生位反转等错误。32位源IP 32位目的IP报文中最重要的信息决定了数据包的路径选择。2. 分片机制深度学习(⭐⭐⭐)在报头中有三个字段专门为分片服务16位标识、3位标志、13位片偏移。16位标识同一个大报文切出来的所有小片标识号是一样的。3位标志其中有一位叫MF (More Fragments)如果为1说明后面还有分片为0说明这是最后一片。13位片偏移记录当前这个小片在原始大报文中的相对位置确保接收端能按正确顺序拼接。2.1 为什么要分片IP报文在网络层组装好后并不能直接飞跃网线而是必须继续向下交给数据链路层如MAC帧。而数据链路层有最大传输单元MTU的限制以太网通常是1500字节。 如果网络层丢下来的IP报文比MTU大数据链路层就会“咽不下去”。此时IP层就必须将这个大报文切分成多个小片段分别加上IP报头发送。接收端的IP层收到这些碎片后再利用上述三个字段把它们重新拼装还原。2.2 接收方的拼装还原2.2.1 识别“同一个包裹”的碎片IP协议首先要解决的问题是分别哪些碎片是属于同一个原始大报文。答案是提取四个核心维度的信息进行匹配(1)源IP地址 (2)目的IP地址(3)8位协议比如都是交给TCP的(4)16位标识Identification只要这四个字段完全一致接收方就可以100%确定这些碎片来自于同一个被切割的原始大报文。接收方会在内存中为这个标识号开辟一个“重组缓冲区”把属于它的碎片都先暂存进来。2.2.2 分片的排序与重组逻辑接收方必须依靠片偏移Fragment Offset和标志位Flags来排序。2.2.2.1 找到“火车头”首片接收方会在缓冲区里寻找一个特殊的碎片它的片偏移量必须为 0。偏移量为0意味着这是原始报文的第一个切片。它包含了完整的、最原始的IP层以上的报头比如TCP/UDP报头。2.2.2.2 寻找“车厢”并无缝拼接中间片找到首片后接收方通过计算首片中有效载荷的长度总长度 - 报头长度就能知道下一个碎片应该从哪里开始拼接。注意一个细节13位片偏移的单位是8字节。假设首片的有效载荷是 1400 字节。那么下一个碎片的片偏移字段值就必须是1400 / 8 175。接收方通过不断对比当前碎片的偏移量 前一个碎片的偏移量 (前一个碎片的有效载荷长度 / 8)将后面乱序到达的碎片像拉链一样严丝合缝地扣在一起。2.2.2.3 确认“车尾”尾片接收方通过3位标志中的MF(More Fragments) 来判断是否全部集齐 。只要碎片的MF 1说明后面还有分片继续等。当收到一个MF 0的碎片时接收方就知道“这就是最后一块拼图了”如果从偏移量为0的首片一直到MF0的尾片中间的偏移量全部能无缝衔接没有任何空隙就宣告重组成功2.2.2.4 向上层交付重组成功后接收方会剥离掉所有后续碎片的IP报头只保留首片的IP报头。然后修改首片IP报头的“总长度”字段清除“分片标识”和“偏移量”恢复成它被切割前的样子最后根据“8位协议”字段将完整的数据载荷潇洒地交给上一层如TCP/UDP。2.3 异常处理机制(重组失败)在真实的工程实现中必须考虑网络丢包的情况。如果一个原始报文被切成了5片其中第3片在网络中丢失了接收方的做法。重组定时器Reassembly Timer当接收方收到第一个分片不一定是首片只要是这组分片的任意一个时就会启动一个定时器。超时丢弃如果在定时器超时之前没有收齐所有的分片比如一直等不到偏移量能填补空缺的那个片IP层会极其果断地将目前收集到的所有属于该报文的分片全部丢弃不负责重传IP协议只提供“尽力而为”的服务它没有重传机制。这引发了一个极其重要的网络性能问题分片的代价是昂贵的只要有一个小分片丢失整个巨大的IP报文就彻底作废接收方全部丢弃。这会导致上层的TCP协议迟迟收不到确认最终触发TCP的超时重传把整个大报文重新发一遍然后再次面临分片和丢包的风险。所以在实际开发中TCP协议会竭尽全力避免IP层进行分片三、IP地址的演进IP地址本质上是一种有限的数字资源IPv4总量约43亿。如何分配这些资源经历过一次巨大的变革。1. 按类划分早期IP地址被简单粗暴地分为 A、B、C、D、E 五类。例如A类地址网络号只有8位主机号高达24位能容纳上千万台主机。弊端极度浪费。一个公司如果申请了B类地址即使只有几百台电脑也会独占6万多个IP导致其他急需IP的人无址可用。2. CIDR (无类别域间路由)为了缓解浪费引入了32位子网掩码 (Subnet Mask)。现在的模式是IP地址 子网掩码。子网掩码中连续为1的部分代表网络号连续为0的部分代表主机号。这样就可以打破原有的ABC类限制灵活地按需划分网段大小。这就好比原本只能论“栋”卖楼现在可以按“平米”精确切割了。3. 私有IP与公网IP的诞生逻辑(⭐⭐⭐)在早期每一台接入互联网的设备都渴望拥有一个全球唯一的IP地址。但IP地址有限为了省着点用规定了“内外有别”的策略。3.1 公网IP外网IP定位互联网上的“真实身份”全球唯一。特性能在互联网的骨干路由器上被识别和转发。如果把互联网比作全球快递网公网IP就是能在全球地图上查到的精确地址如某市某街道某号。需要向运营商ISP花钱申请。3.2 私有IP内网IP为了让局域网内部也能通信RFC 1918 专门划出了几段特殊的IP地址供大家免费在内部使用。常见私有网段10.0.0.0-10.255.255.255(大型企业常用)172.16.0.0-172.31.255.255(Docker等虚拟化常用)192.168.0.0-192.168.255.255(家庭路由器最常见)核心规则私有IP绝对不允许出现在公网的路由表中一旦运营商的路由器看到目标地址是私有IP会直接丢弃。特性因为上不了公网所以私有IP可以在不同的局域网中重复使用。你家电脑可以是192.168.1.100我家电脑也可以是它只要不在同一个局域网内就不会冲突。4. 解决IP耗尽的方案4.1 动态分配IP (DHCP)即使划分了私有IP很多时候公网IP还是不够分。这时候DHCP就站了出来。核心思想时间复用谁上网给谁用不上网就收回。工作机制DHCP本质是一个自动分配IP地址的服务。当你拿着手机连上WiFi或者把网线插上电脑时你的设备会向局域网大喊一声“谁能给我一个IP”DHCP Discover。路由器上的DHCP服务器听到后就会从地址池里“租”给你一个IP包含子网掩码、网关、DNS等信息租期到了或者你断网了这个IP就会被回收分配给下一个接入的人。4.2 NAT (网络地址转换) 技术 (⭐⭐⭐)4.2.1 NAT的基本原理当内网主机私有IP向公网发送数据包时作为网关的路由器会把数据包IP报头中的“源IP私有IP”替换成路由器自己的“WAN口IP公网IP”然后再发出去。服务器回包时路由器再把目标IP从“公网IP”替换回内网的“私有IP”。4.2.2 NAPT (网络地址端口转换)如果局域网里有10台电脑同时访问百度百度把数据返回给路由器的公网IP时路由器怎么知道这数据该还给内网的哪台电脑呢这就需要结合传输层的端口号Port来做区分这就是NAPTNetwork Address Port Translation。完整的工作流程以实际数据包为例出发内网主机A192.168.1.100用端口5555向百度发请求。转换报文到达路由器。路由器将其修改为源IP为路由器的公网IP例如203.0.113.5并且分配一个新的端口例如10001。记录路由器在自己的NAT映射表里记下一笔192.168.1.100:5555 --- 203.0.113.5:10001。回应百度收到请求以为是203.0.113.5发来的于是把网页数据回传给这个公网IP的10001端口。反转路由器收到数据查阅刚才的NAT表发现10001端口对应的是内网的主机A。于是把目标IP修改回192.168.1.100:5555成功交还给主机A。意义通过NAPT一个公网IP可以利用其65535个端口理论上让内网数万台设备同时共享这一个公网IP上网。4.3 IPv6NAT虽然好用但它打破了互联网最初设计的“端到端通信”理念。因为内网主机躲在路由器后面外网无法直接主动发起连接去寻找内网主机这也导致了早期的P2P下载、联机游戏常常遇到“NAT穿透”的难题。为了彻底解决地址不够和NAT带来的副作用IPv6诞生了。4.3.1 地址容量IPv4地址是32位而IPv6直接将地址长度扩展到了128位。 它的容量高达个。网络界有一句名言“IPv6可以给地球上的每一粒沙子都分配一个IP地址。”4.3.2 IPv6带来的技术变革一旦IP地址不再稀缺之前的很多妥协都可以被抛弃消灭NAT不再需要复杂的内外网转换每一台手机、每一台智能电视都可以拥有真正的公网IP实现真正的“万物互联”和端到端直接通信。内建安全性IPv6在设计之初就考虑了安全原生支持IPsec让数据在网络层的传输自带加密和身份认证。更高效的路由IPv6简化了报头结构去掉了IPv4中一些不常用、需要路由器额外计算的字段比如去掉了头部校验和分片机制的大修让路由器的转发速度更快。4.3.3 为什么还没完全普及因为IPv6和IPv4是不兼容的。要过渡到IPv6需要全球的运营商、所有的路由器、各种操作系统、所有的应用软件全部进行升级或重构。这是一项长达数十年的浩大工程目前我们正处于IPv4和IPv6双栈共存的漫长过渡期。五、路由器的工作原理与路由表没有联网的机器不需要IP地址IP地址的本质是网络通信的坐标。 如前所述IP地址 网络号 主机号。在同一个网段子网内所有主机的网络号必须相同但主机号必须唯一。1. 路由器的多重身份(⭐⭐⭐)了解IP就绕不开路由器。路由器不仅仅是一个发WiFi的盒子它也是一台主机路由器作为网络节点同样配置有自己的IP地址。它是跨网段的桥梁一台路由器至少要连接两个以上的子网比如家里的局域网和运营商的公网。因此它必须配置多个IP地址每个接口对应一个子网。它是子网的“第一人”通常路由器在一个子网中会占用第一个有效的IP地址例如192.168.1.1也就是我们常说的“默认网关”。它的综合管理功能除了核心的IP报文转发现代路由器还能构建局域网并充当DHCP服务器自动给新接入的设备分配主机号。2. 工作原理1.提取目标IP设备会查看报文的目标IP。2.匹配网段用目标IP与路由表中的每一条子网掩码进行按位与运算对比是否在已知的目标网段内。3.给出下一跳 (Next Hop)(1)命中如果知道路怎么走路由表会给出具体下一跳路由器的MAC地址报文被精准投递到下一个站点。(2)未命中如果路由器翻遍了表格也不知道这个IP在哪里它就会使用默认路由 (Default Route, 通常是0.0.0.0)。也就是把包裹丢给同一网段中级别更高、视野更广的上一级路由器这就叫转入默认路由。4.循环往复一跳接一跳一直到达拥有目标IP所在子网的入口路由器最终投递给目标主机。六、扩展学习1. IP的按类划分1.1 A类地址巨无霸网段前导码识别最高位固定为0。结构划分8位网络号 24位主机号。地址范围0.0.0.0到127.255.255.255。默认子网掩码255.0.0.0。容量与特点A类地址的网络号极少只有120多个但每个网络能容纳的主机数量极为夸张高达约1677万台主机。通常只有跨国级的超大型网络或骨干网才会使用。1.2 B类地址中坚力量前导码识别最高两位固定为10。结构划分16位网络号 16位主机号。地址范围128.0.0.0到191.255.255.255。默认子网掩码255.255.0.0。容量与特点B类地址有1万多个网络每个网络可以容纳即65534台主机。一般分配给大型企业、高校或政府机构。1.3 C类地址遍地开花前导码识别最高三位固定为110。结构划分24位网络号 8位主机号。地址范围192.0.0.0到223.255.255.255。默认子网掩码255.255.255.0。容量与特点C类网络数量极其庞大超过200万个但每个网络只能容纳即254台主机。我们日常接触最多的公网IP大多属于这一类。1.4 D类地址特殊的群发机制前导码识别最高四位固定为1110。地址范围224.0.0.0到239.255.255.255。核心用途多播/组播Multicast地址。它没有网络号和主机号的划分它不指向某一台特定的计算机而是指向“一组”计算机。当向一个D类地址发送数据时加入该组的所有主机都能收到。常用于视频直播、路由协议更新如OSPF等场景。1.5 E类地址未来的预留前导码识别最高四位固定为1111。地址范围240.0.0.0到255.255.255.255。核心用途保留为科学研究和未来扩展使用。在一般的网络配置中如果你试图将网卡的IP配置为E类地址操作系统通常会报错拒绝。特殊保留255.255.255.255是一个特殊的受限广播地址代表“当前局域网内的所有主机”。1.6 计算主机数都要减 2(⭐⭐⭐)主机号全为 0 的地址代表网络本身网络号不能分配给具体的主机。比如192.168.1.0代表这个C类网段本身。主机号全为 1 的地址代表定向广播地址。向这个地址发数据该网段内的所有主机都会收到。比如192.168.1.255。2. 路由算法简述2.1 静态路由原理网络管理员登录到路由器后台一行一行手工敲入命令“去往192.168.2.0网段请走10.0.0.2这个接口”。特点绝对可靠不占用网络额外带宽。缺点只适合极小型的网络。如果网络拓扑一变比如某根网线断了网管就得半夜爬起来重新改配置在庞大的互联网中根本行不通。2.2 动态路由为了应对复杂的互联网工程师们发明了动态路由协议。路由器之间会互相发送消息自动学习并计算出最佳路径生成路由表。主流的算法分为两大门派2.2.1 距离矢量算法 (Distance Vector) —— “道听途说的传话筒”代表协议RIP (路由信息协议)工作机制每个路由器只知道自己和邻居的距离。它会定期把自己的“整张路由表”抄送给相邻的路由器。生活类比就像村口的情报传递。路由器B告诉路由器A“我到北京的距离是 2跳经过2个路由器”。路由器A心里一算“B是我的邻居距离1跳那经过B到北京就是跳。记录下来去北京走B距离3跳。”优缺点算法非常简单适合小网络。但由于是“道听途说”如果网络出现故障坏消息传得很慢容易产生“路由环路”A以为B能到B以为A能到数据包在A和B之间死循环。2.2.2 链路状态算法 (Link State) —— “人人手持GPS全局地图”代表协议OSPF (开放式最短路径优先)工作机制每个路由器不再发送整张路由表而是向全网广播“自己的邻居是谁网线状态好不好带宽是多少”这就叫链路状态。生活类比就像所有路由器都在朋友圈发了一个定位“我旁边是张三和李四路况畅通”。全网每个路由器收集齐所有人的“朋友圈”后就能在自己的内存里画出一张完整的、1:1的真实网络拓扑图上帝视角。然后每个路由器以自己为起点在本地运行迪杰斯特拉 (Dijkstra) 最短路径算法计算出到达每一个目的地的最优路线最后写入路由表。优缺点收敛极快一断网大家立刻知道绝对不会产生环路是目前企业内网和中大型网络的主流。缺点是对路由器的CPU和内存要求比较高因为要在脑海里推演全网地图。2.3 BGP (边界网关协议)刚才说的都是一个公司或一个组织内部的算法IGP。但在广袤的互联网中是无数个大企业、大运营商连在一起的。在不同运营商之间比如中国电信和中国联通的边界路由器使用的是BGP 协议。在这里寻找“最短路径”不再是第一要务最重要的是“策略与商业利益”比如电信的数据不能随便走到联通的骨干网里去白嫖带宽。BGP 是一种基于路径矢量的算法是支撑整个现代互联网路由体系的基石。