
文章目录1 IP 协议头格式2 原理2.1 网段概念2.2 网段划分2.2.1 分类划分法2.2.2 子网掩码划分2.3 小结3 路由器与运营商3.1 路由器3.2 运营商4 局域网和广域网4.1 局域网组成4.2 广域网组成5 分片与组装6 总结1 IP 协议头格式IPv4版本为4总共32位长度。IPv6版本为6总共128位长度。4位首部长度与TCP首部长度一样为IP报头长度单位是4字节IP报头长度为20~60字节。解决分离报头、有效载荷问题。8位服务类型(TOS)以前的TOS前3位为优先级中间4位表示以什么样的方式传输分别为希望低延迟、希望高速传输、希望可靠、希望低费用四者冲突、只能选一个后1位保留。现在的TOS前6位表示DSCP允许网络路由器根据流量类型如语音、视频或普通数据进行分类和优先级排序后2位为ECN用来通知发送方“网络拥塞了但不用丢包”的一种机制。8位生存时间(Time To LiveTTL)是限制数据报在网络中经历的最多路由器数量限制数据报在网络中无限循环。是为了防止下图所示的情况。直连直连直连直连A路由器1路由器2路由器38位协议被填写为上层协议号解决分用向上交付的问题。16为首部校验和校验数据报是否损坏。数据为 TCP/UDP 报文。IP与TCP的关系TCP是控制传输策略的什么时候传丢包了怎么办IP 的能力是尽可能的将报文传输到目标主机。2 原理2.1 网段概念路由器工作在网络层管理 Web 界面只是附加应用层功能。路由器的一大功能是组建子网由于路由器有多个网卡所以可以同时存在多个子网当中。IP 地址中可以划分为网络号与主机号。如上图中路由器同时存在于两个网段其网络号分别是192.168.128.0和192.168.144.0。主机号就是用于同一子网中识别不同主机的主机标识。IP 功能的本质是搜索目标到主机搜索的本质是淘汰。如果主机7.10.14.5需要将数据报跨网络传输到25.97.49.6。7.10.14.5主机能够判断目标主机一定不在本网段淘汰了一个网段的主机源主机将数据报交给本网段路由器本网段路由器通过公网将数据报交给25.97.49.0网段的路由器淘汰了其他网段的主机由网段路由器通过主机识别号交给目标主机淘汰了网段内其他主机。这是一个高效的搜索算法。2.2 网段划分2.2.1 分类划分法IP被分为网络号和主机号分类划分法是早期提出的 IP 分类方法。分类划分法根据开头的不同比特位将 IP 划分为5类每类中的网络号与主机号数量不同。A 类 IP 中网络号只有2 7 \text{2}^\text{7}27个但是主机号有2 24 \text{2}^\text{24}224个。这就意味着可以组建126个子网子网中可以有约1600万台主机。如果某一机构申请到了该类IP其主机号可能被大量浪费。2.2.2 子网掩码划分在 IPv4 中子网掩码是一个32位的数字前面要求全是连续的1后面全是连续的0。例如11111111 11111111 11111111 00000000也可以简写为/24表示前面有24个1的子网掩码。子网掩码与 IP 按位与操作得出网络号剩下的位就是主机号。例如现有 IP 为10.24.67.241子网掩码为255.255.224.0的机器。换算成二进制IP00001010 00011000 01000011 11110001Subnet Mask11111111 11111111 11111111 11100000。两者按位与得出网络号00001010 00011000 01000011 11100000即10.24.67.224IP与取反子网掩码按位与得出主机号为00000000 00000000 00000000 00010001即17。该网段中 IP 主机号范围为00000到11111共有 32 个IP地址但是全0被用于网络号全1被用于广播地址。所以该网段最多有30台主机。2.3 小结特殊 IP将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包。127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1。网段划分网段划分即子网划分则是实现高效路由的关键——通过将 IP 地址拆分为网络号和主机号路由器可以依据网络号快速“淘汰”不可能的目标网段从而将搜索范围逐步缩小最终精确交付到目标主机。早期的分类划分法A/B/C/D/E类结构清晰、实现简单但存在明显的地址浪费问题尤其是A类网络主机数过多而C类网络数量又受限子网掩码划分法通过灵活的掩码长度如 /24、/16 等打破了固定分类的限制允许网络管理员根据实际需求任意切割地址空间大大提高了 IPv4 地址的利用率。IP 数量限制IP 数量有限而且有用它就是资源。为了缓解 IP 的不够用问题采取了这些措施动态分配IP地址接入网络的设备会获取 IP 地址同一 MAC 设备连上网 IP 不同。NAT技术。IPv6与 IPv4不兼容用128位表示一个 IP 地址。3 路由器与运营商3.1 路由器路由器是工作在网络层的核心设备它的本质是一台专门用于路径选择和数据转发的专用计算机即路由。它在 IP 网络中扮演以下关键角色1. 跨网络通信路由器最基础的功能是连接不同的子网。当一台主机发现目标 IP 不属于本网段时会将数据报交给默认网关即路由器。路由器负责将数据报从一个子网“搬运”到另一个子网因此可以说没有路由器子网之间就是信息孤岛。2. 数据报的“导航员”路由器内部维护着一张路由表Routing Table表中记录了到达各个目标网络的“下一跳”地址。3.2 运营商每个国家地区内部的网络物理线路路由器等基础设施都是运营商建立的。国内三大运营商电信、移动、联通。负责管理、维护网络线路。1. 基础设施的“建设者”运营商负责铺设光纤、建设基站、部署机房构建了从接入网“最后一公里”到城域网再到骨干网的物理链路。IP 数据报本质上是电磁信号在光纤和无线频谱中的传播而运营商提供了这些物理介质。2. 自治系统的“运营者”互联网并非铁板一块而是由成千上万个自治系统ASAutonomous System 组成的。每个运营商都是一个独立的自治系统如中国电信、中国联通。运营商负责管理自己 AS 内部的所有路由器、链路和 IP 地址资源并制定内部的路由策略。3. 跨网路由的“外交官”不同运营商的网络之间需要通过 BGP边界网关协议 来交换路由信息。之所以有 IP 方式定位主机的传输方式是因为运营商按照这样的结构建设网络基础设施这一点很容易搞反因果关系。4 局域网和广域网4.1 局域网组成以下 IP 只能用于局域网根据网络号长度不同主机识别号数量不同10.*,前8位是网络号,共16,777,216个地址 。172.16.*到172.31.*,前12位是网络号,共1,048,576个地址。 192.168.*,前16位是网络号,共65,536个地址 。局域网组成如下简化后局域网路由器一般有一个 WAN 口多个 LAN公网路由器有多个 WAN 口多个 LAN 口。假如右边的192.168.1.201要先向122.77.241.3发送数据会经历下面几个阶段当 IP 数据报到达一个局域网路由器该局域网路由器会判断数据报是否 路由器网段如果是则转发否则向上交付。直到122.77.241.4(公网入网路由器)。然后在公网骨干网络中转发直到目标服务器。4.2 广域网组成广域网就是常说的公网。公网非常负责这里简化成以地域划分。国际骨干网是由卫星、海底光缆等组成的。这些网络基础设施是顶级运营商、标准化组织搭建的。国内的线路是国内运营商搭建的它们都遵守相同的协议因此能够相互通信。无论是局域网路由器还是公网路由器都有一张路由表使用route -v查看Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default _gateway0.0.0.0 UG10000eth0100.100.2.136 _gateway255.255.255.255 UGH10000eth0100.100.2.138 _gateway255.255.255.255 UGH10000eth0172.23.144.00.0.0.0255.255.240.0 U10000eth0 _gateway0.0.0.0255.255.255.255 UH10000eth0包含内容Destination目标地址 / 网段。Gateway下一跳网关0.0.0.0 直连网段无需转发。Genmask子网掩码。Flags路由标记。Metric度量值越小优先级越高。Iface数据包从这块网卡发出eth0。路由器的转发逻辑是数据报中目的 IP 与每一个 Genmask 按位与检查是否该路由器局域网内的主机。如果是该网段的则发往 Gateway 的主机。如果都不是则发往默认目标地址。现在手动模拟1.0.0.5向5.1.16.x发送数据报过程。1.0.0.5是俄罗斯国内公网 IP 地址向上交付到俄罗斯出国际公网路由器1.0.0.1称A路由器)。A逐条比对A中路由表发现5.1.16.x是5.0.0.0网段的地址下一跳是5.0.0.1地区是中国。该数据报通过国际骨干网被发送到中国出国际公网路由器5.0.0.1接入国内骨干网络。然后逐条比对路由表条目查到是5.1.0.0网段的。通过国内骨干网络发送到陕西。接入城市公网。然后再查路由表条目接入城市局域网。IP 地址具有很强的地域性但不完全是根据地域划分所以会出现北京移动、西安移动等各自维护地域内的网络基础设施。5 分片与组装IP 报头中有三个字段是用于分片与组装的16位标识、3位标志、13位偏移。TCP 层中滑动窗口中数据不会直接打包成一个报文而是根据一定大小MSSMaximum Transmission Unit划分成多个报文向下交付给 IP 层。IP 数据报的大小也是有限的假设 TCP 层传了一个较大的报文就会根据一定大小MTUMaximum Transmission Unit。IP 数据报之所以有大小限制是因为数据链路层一次数据不能超过1500字节。物理硬件、差错恢复、网络共享、缓存资源、路由转发全都扛不住无限大的数据包。大包一旦出错全部重传。所以必须切分成固定上限大小的块这个上限就是 MTU。无选项标准报头中MSS MTU − IP 报头长度 − TCP 报头长度 \text{MSS} \text{MTU} - \text{IP 报头长度} - \text{TCP 报头长度}MSSMTU−IP报头长度−TCP报头长度对于一个分片丢失接收方 IP 层没有收到完整分片不向上提交TCP 超时重传一整个TCP报文。一个 TCP 报文被分层多片其中每一片都有一个报头报头中16位标识相同。3位标识中第一位R标识保留永远为0第二位DF标识禁止分片是0标识允许分片第三位MF标识有更多的分片最后一个分片中的MF为0。13位片偏移(Fragment Offset)标识当前报文数据在原始 IP 报文中的偏移量。偏移的单位为2 3 \text{2}^323字节所以能用13为偏移表示16位长度中的偏移。组装先要判断该数据报是否分片是分片(MF 1) || (Fragment Offset ! 0)不是分片(MF 0) (Fragment Offset 0)判断分片是否完整第一个分片(MF 1) (Fragment Offset 0)最后一个分片(MF 0) (Fragment Offset ! 0)中间分片(MF 1) (Fragment Offset ! 0)如果是分片就先不交付给 TCP 层等到集齐分片再组装按片偏移升序排序组装得到完整的TCP报文交给TCP层。分片现有一个3000字节的 TCP 报文正常情况下不会出现这么大的IP 层会尝试加上 IP 报头发现总长度大于MTU。该报文会被分片为这里有一个误解分片只会出现在两端通信主机。其实中间经过路由器也有可能被分片。1500 字节只是以太网 II 标准的 MTU≠全世界所有链路的数据链路层 MTU6 总结IP 协议是 TCP/IP 体系中的核心网际层协议负责将数据报“尽力而为”地从源主机交付到目标主机。其报头关键字段包括 TTL限制跳数防止循环、协议号用于分用和分片相关字段标识、标志、片偏移其中分片是为了适配数据链路层的 MTU 限制。网段划分通过子网掩码灵活地将 IP 拆分为网络号和主机号路由器依靠路由表逐跳转发每一步都在“淘汰”不可能的目标网段从而实现高效寻址。局域网使用私有 IP 并通过 NAT 访问公网而公网则由各级运营商通过 BGP 协议互联构成全球互联网骨架。整体而言IP 负责“找路”TCP 负责“控流”两者分层协作构成了互联网通信的基石。尽管 IPv4 地址资源紧张但借助 CIDR、NAT 等技术得以缓解而 IPv6 的演进则是未来的必然趋势。