网络层IP

张开发
2026/4/13 11:14:05 15 分钟阅读

分享文章

网络层IP
目录基本概念协议头格式网段划分特殊的IP地址私有IP地址和公网IP地址路由IP的分片与组装基本概念在正式谈IP协议之前我们先明确以下几个概念主机配有IP地址也要进行路由控制的设备。路由器即配有IP地址又能进行路由控制。节点主机和路由器的统称。一般在网络中习惯将两端叫主机路上叫节点。如下所示数据从一台主机到另外一台主机要经过多个节点而相邻的节点要在同一个子网中才能进行转发中间要经过无数个子网转发。因此广域网的通信实际上是由无数个子网转发来实现跨网络的通信。目的IP是具有指向性的主机是根据报文中的目的IP进行路由选择的。IP地址是有固定构成的IP地址目标网络目标主机。IP给协议组提供了一种能力可以将数据包从主机A跨网络经过路径选择路由转发送到主机B的能力。协议头格式IP协议报头如下图所示4未首部长度和TCP一样代表报头的长度范围为20-60个字节16位总长度代表IP的总长度通过这两个就可以实现IP报头和有效载荷的分离。8位协议记录了数据部分为UDP还是TCP。4位版本号为指定IP协议的版本对于IPv4来说就是4。8位服务类型TOS3位代表优先字段已弃用4为TOS字段和1位保留字段设置为04位TOS分别表示最小延时、最大吞吐量、最高可靠性和最小成本这四种相互冲突只能选择一个。16位头部校验用于鉴别头部是否损坏。8为生存时间TTL表示数据报到达目的地的最大报文跳数一般是64每经过一个路由TTL-1如果一直减到0还没有到达那么该报文就被丢弃了这个字段主要是用来防止出现路由循环。网段划分IP地址分为两个部分分别为网络号和主机号网络号用来保证相互连接的两个网段具有不同的标识主机号用来保证同一段内主机之间具有相同的网络号但是必须有不同的主机号。如下所示不同的子网其实就是将网络号相同的主机放到一起如果在子网中新增一台主机则这个主机的网络号和这个子网的网络号一致但是主机号必须不能和子网中的其它主机重复。通过合理设置主机号和网络号就可以保证在相互连接的网络中每台主机的IP地址都不相同。将报文交给目标主机的本质是一个查找工作查找的本质是淘汰进行网段划分的目的是为了支持在查找目标网络的过程中快速淘汰大大提高查找目标主机的效率。那么网段如何划分呢过去提出一种划分网络号和主机号的方案把所有IP地址分为五类如下图所示各网络的地址范围如下A类0.0.0.0-127.255.255.255B类128.0.0.0-191.255.255.255C类192.0.0.0-223.255.255.255D类224.0.0.0-239.255.255.255E类240.0.0.0-247.255.255.255这里的划分不是划分IP地址而是划分网段一旦得到一个A类地址相当于得到了个地址。但这种分类方式也会存在缺陷比如申请到了A类网络地址但是网络中的主机数远远达不到那么多那么就会造成网络资源的浪费。为了解决这种问题提出了一种新的方案CIDR(无类别域间路由)。它的主要思想如下引入一个额外的子网掩码subnet mask来区分网络号和主机号。子网掩码也是一个32位的正整数通常用一串0来结尾子网掩码会被设置到路由器中。将IP地址和子网掩码进行按位与操作得到的结果就是网络号。网络号和主机号的划分与这个IP地址就是A类、B类还是C类无关。以下为一个例子IP地址 140.252.20.68 - 10001100 11111100 00010100 01000100子网掩码 255.255.255.0 - 111111111 11111111 111111111 00000000---------------------------------------------------------------- 按位与网络号 140.252.20.0 - 10001100 11111100 00010100 00000000子网地址范围140.252.20.0 - 140.252.20.252一般主机号为0代表网络地址不能分配给某一台主机主机号为全1代表广播地址也不能分配给某一台主机。IP和子网掩码还有一种更简洁的表示方法例如上面IP地址为140.252.20.68,子网掩码为255.255.255.0可以表示为140.252.20.68/24,24表示子网掩码中1的位数。特殊的IP地址将IP地址中的主机地址全部设为0就成了网络号代表这个局域网。将IP地址中的主机地址全部设为1就成了广播地址用于给同一个链路中相互连接的所有主机发送数据包。127.*的IP地址用于本机回环loop back测试通常是127.0.0.1。私有IP地址和公网IP地址如果一个组织内部组件局域网IP地址只用于局域网内的通信而不直接连到Internet上理论上使用任意的IP地址都可以但是RFC 1918规定了用于组建局域网的私有IP地址如下所示10.*前8位是网络号共16,777,216个地址172.16.* 到172.31.*前12位是网络号共1,048,576个地址192.168.*前16位是网络号共65,536个地址包含以上范围内的都为私有IP其余的则称为全局IP(或公网IP)。一个路由器可以配置两个IP地址一个是WAN口IP一个是LAN口IP(子网IP)如下所示路由器LAN口连接的主机都从属于当前这个路由器的子网中不同的路由器子网IP其实都是一样的通常都是192.168.1.1子网内的主机IP地址不能重复但是子网之间的IP地址就可以重复了也就是私有IP地址是可以重复的由于这个原因IP地址不足的问题也被大大缓解了。当数据从内网到公网的过程中途径路由都会将源地址替换为自己的WAN口IP到达公网后就不做替换了这样做的目的是为了方便后续做回复。这种从内网到公网中进行源IP地址替换的技术称为NAT技术。所有用户都不可能直接连接公司都是通过先连接到局域网中再通过局域网入的。路由在报文从源主机到目的主机转发的过程需要经过很多路由路由的过程是一跳一跳问路的过程所谓一跳就是数据链路层中的某一个区间具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间如下图所示子网掩码是设置在路由器内部的子网划分是通过路由器完成的。IP的分片与组装在网络层还有一个重要的部分就是要对来自传输层的报文进行分片与组装。这里以分片为例子。接收方在收到大量报文的时候首先要识别出来报文是否被分片了若报文被分片了就要保证将分片聚合在一起这里就涉及到哪里是开头哪里是结尾、丢片问题以及组装过程这些问题就和IP协议中的16位标识、3位标志和13位片偏移有关。IP分片之后的每一个分片也会带报头16位标识代表唯一的标识主机发送的报文如果IP报文被分片了那么每一个片里面的这个id都是相同的。3位标志第一位保留暂时不用第二位为1表示禁止分片这时候如果报文长度超过最大长度IP模块就会丢弃该报文第三位表示更多分片如果分片了的话最后一个分片位置为0其它是1类似于一个结束标记。13位片偏移代表分片相对于原始IP报文开始处的偏移其实就是在表示当前分片在原报文中处在哪个位置实际偏移的字节数是这个值乘以8得到的这样设置的目的是为了解决13位片偏移无法保存16位总长度的问题写入时为实际片偏移大小除以8片偏移表示本片数据在它所属的原始数据报数据区中的偏移量。若报文没被分片更多分片为0并且片偏移也为0当更多分片不为0或者片偏移不为0时那么该报文一定被分片了。如果被分片了组装过程首先先通过16位表示将分片聚合在一起开头的片偏移为0结尾的更多分片为0通过这两个就可以将头和尾找到中间部分的片偏移计算公式如下当前分片偏移 自己的长度 下一片的片偏移通过以上公式将所有的分片收到后然后进行升序排序即可如果整个过程顺利做完了就说明没有出现丢包问题就完成了组装过程。

更多文章