【计算机网络】IP网络层原理

一. 传输层 VS 网络层

传输层有UDP和TCP两大常用协议,UDP只关注数据的收发,而不关注对方主机是否收到了发送的消息;TCP较UDP来讲,是关注数据是否被接收方收到的。

而计算机常用的TCP/IP协议是传输层和网络层协议的组合,IP协议是提供数据跨网络传输的能力,解决了路由选择的问题,TCP是可靠的,可以保证历史报文可以100%被对方收到,所以TCP/IP协议的核心功能:把数据100%可靠的从本机跨网络交付给接收端。

二. IP网络层

2.1 IP层报头及属性

  • 四位版本:是IP的版本,IPV4,四位版本就是4
  • 4位首部长度是IP报头的长度[0,15] 4字节的基本单位 -> [5,60]
  • 8位服务类型3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0) 4位TOS分别表示:最小延时、最大吞吐量、最高可靠性、最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要
  • 16位总长度是IP报文的整体长度
  • 8位生存时间TTL(Time to Live)数据报到达目的地的最大报文跳数,可以理解为是一个计数器,每经过一个节点TTL-=1,如果TTL=0时还没有到达目的地,这个报文就丢弃。
  • 8位协议,表示交付给上层传输层的哪个协议,TCP/UDP
  • 16位首部校验和,用这个来进行CRC校验,看头部是否损坏
  • 32位源IP地址,表示本机的IP地址,这也就是为什么上层的IP要使用4字节,并且要转化成网络字节序,便于报文的填充
  • 32位目的IP地址,表示目标主机的IP地址

IP报文如何封装和解包?

IP的报头是定长包头,通过报头中的4位首部长度就可以做到解包了;

IP报文如何分用?

通过报头中的8位协议,确定交付给上层的哪一种协议。

2.2 网段划分/子网划分

IP地址= 网络号 + 主机号

  • 网络号:保证相互连接的两个网段有不同的标识
  • 主机号:同一个网段内,主机号之间具有相同的网络号,但是主机号必须不同
  • 子网内部,主机的网络号一定是相同的
  • 如果在子网内新增一台主机,这台主机的网络号和其他主机的网络号相同,但是主机号必然和其他主机不同

子网的划分可以理解为邮政编码,假设没有收件地址。邮递员通过邮政编码就可以确定收件人的省市县,将来在发送邮件的时候,通过编码交付给对应的省,省内邮递员在交付给对应的市,市级邮递员再交付给先,依次向下交付,而不用全国范围内一个一个的查收件人。有了邮政编码,把全国的其他省市都去除掉了,只剩下目标省市,大大提高了传送的效率。路由传输报文,本质是查找目标主机的问题,查找反过来理解就是淘汰的过程,淘汰的效率越高查找的效率就越高!再未来查找目标主机的时候,先必须找打目标网络,本质就是淘汰其他网络,可以提高在全网中查找主机的效率。

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

那么问题来了,手动管理子网内的IP,是一个相当麻烦的事情

  • 有一种技术叫做DHCP,能够自动的给子网内新增主机节点分配IP地址,避免了手动管理IP的不便。
  • 一般的路由器都带有DHCP功能,因此路由器也可以看做一个DHCP服务器。

过去提出一种划分网络号和主机号的方案,把所有IP地址分为五类,如下图所示:

A类0.0.0.0到127.255.255.255
B类128.0.0.0到191.255.255.255
C类192.0.0.0到223.255.255.255
D类224.0.0到239.255.255.255
E类240.0.0.0到247.255.255.255

随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址,导致B类地址很快就分配完了,而A类却浪费了大量地址;例如,申请了一个B类地址,理论上一个子网内能允许6万5千多个主机,A类地址的子网内的主机数更多。

然而实际网络架设中,不会存在一个子网内有这么多的情况,因此大量的IP地址都被浪费掉了

针对这种情况提出了新的划分方案,称为CIDR(Classless Interdomain Routing)(无类别域间路由):

• 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;

• 子网掩码是32位的整数,前面一串1,用1的个数n表示IP的前n位是网络位,后面32 - n位以0填充

• 将IP地址和子网掩码进行"按位与"操作,得到的结果就是网络号

• 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关

子网地址范围 = 网络号 + 主机数 - 1;

IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址的子网掩码的高24位是1,也就是255.255.255.0

有了子网掩码,就可以根据子网内的主机数量,动态的调整IP,如果子网内主机少,就可以把主机位给网络使用,这样就可以增加子网的数量,但是同一个子网内的网络号还是相同的;如果主机多,网络位占用的主机位就可以少到0,就可以在子网内容纳更多的主机

2.3 特殊的IP地址

  • 将IP地址的主机号全置为0,表示网络号,代表这个局域网,同一局域网中的网络号相同
  • 将IP地址中的主机号全置为1,表示广播地址,在局域网中所有的主机都能接收并处理这条数据
  • 127.*的IP地址用于本机的环回测试,通常是127.0.0.1

2.4 私有IP地址和公网IP地址

如果一个组织内部组件局域网,IP地址只用于局域网内通信,而不直接连在公网上,理论上使用任意的IP地址都可以,但是RFC 1918规定了用于组件局域网的私有IP地址

  • 10.*,前8位是网络号,共16777216个地址
  • 172.16.~ 到172.31.~,前12位是网络号,共1048576个地址
  • 192.168.~前16位是网络号,共65536个地址

包含在上面范围中的都是私有IP,其余的是公网IP

  • 一个路由器可以配置至少两张网卡,一张是WAN口IP,是公网IP;一个是LAN口IP,是子网IP,路由器就用这个IP来构建子网
  • 路由器LAN口连接的主机,都从属于当前这个路由器构建的子网中
  • 子网内主机需要和外网进行通信的时候,路由器将IP首部中的IP地址替换为WAN口IP,这样逐级替换,最终数据包中的IP地址就是公网IP,私有IP不能出现在公网上

2.5 数据是怎样跨网络传输的

举个例子,北京的一个用户在和深圳的朋友使用微信聊天,北京的朋友发送数据,报文在出北京某个区的时候,将目标主机的IP&子网掩码得到网络号,发现不是自己所在的子网,就需要路由器将报文进行转发,此时路由器会将区的子网IP替换成这个路由器的WAN口IP(WAN口IP全球唯一,当报文进入公网转发的时候就不进行替换了,这样进行IP地址替换的技术叫NAT技术),将这个报文交给北京市的路由器,北京市的路由器查找路由表发现,这个报文也不是交给北京市的某个区的,就会将报文中原区的WAN口IP替换成北京市路由器的WAN口IP,查找路由表发现这个报文是交付给广东省的报文,就将报文转发给广东省的省级路由器,广东省的省级路由器查路由表发现是发给深圳市的报文,将报文交给深圳市路由器,再向下交付给南山区的路由器,这时候,就进入了子网,南山区的路由器就会向目标主机发送ARP请求得到对方的MAC地址后,就将报文交付给了对方。

对方将消息发送后,发送到公网,公网将对应的报文再次转发给子网,路由器中会有一张NATP表,记录了目标主机的IP:port和源主机的IP:PORT,根据目标主机的IP和PORT就能查到源主机了,这样就可以同各国路由器交给原来的发送方。

2.6 IP分片和组装

因为数据链路层最大能传输的字节大小是1500字节,如果超过这个大小,就要在网络层对报文进行切分(分片可能发生在任何地方)

  • 16位标识id:标识主机发送的报文,如果IP在数据链路层被分片了,那么同一个报文每一个分片的id都是相同的
  • 3位标志:第一位保留,第二位置为1表示禁止分片,这时候如果报文长度超过数据链路层的最大传输单位,IP模块就会丢弃该报文,第三位表示更多分片,如果报文被分片,最后一个分片置为0,其他是1,类似于字符串用\0表示结尾
  • 13位分片偏移:分片相对于原始IP报文开始处的偏移,其实就是表示当前分片在原报文中处在哪个位置,实际偏移的字节数是/8得到的,因此除了最后一个分片之外,其他的报文长度必须是8的整数倍

在组装的时候,会根据片偏移排序后进行组装,发现有丢失,整个报文就会被丢弃。.

如果中间报文丢失,偏移量就连续不起来,整个报文丢弃;如果最后一片丢失,三位标志最后一位是0的片找不到,整个报文丢弃;第一个报文丢失,偏移量为0的报文找不到,整个报文丢弃。

在网络层决定报文的下一站给哪个子网,在链路层通过ARP获得下一站MAC地址

相关推荐
闫记康2 小时前
Linux ip基础
linux·网络·tcp/ip
taxunjishu3 小时前
MODBUS TCP转Profinet 家纺织造塔讯物联网网关应用实操案例
物联网·网络协议·tcp/ip
AEIC学术交流中心3 小时前
【快速EI检索 | IEEE出版】第五届智能系统、通信与计算机网络国际学术会议(ISCCN 2026)
计算机网络
北寻北爱4 小时前
面试题-计算机网络篇
计算机网络
zhaoyufei1337 小时前
RK3568-11.0 设置WiFi p2p静态IP
服务器·tcp/ip·p2p
左左右右左右摇晃14 小时前
计算机网络笔记整理
笔记·计算机网络
皙然16 小时前
深入理解TCP流量控制
网络·网络协议·tcp/ip
旺仔.29120 小时前
线程安全 详解
linux·计算机网络·安全
2501_9160074721 小时前
HTTPS 抓包的流程,代理抓包、设备数据线直连抓包、TCP 数据分析
网络协议·tcp/ip·ios·小程序·https·uni-app·iphone