计算机网络-网络层
2026/6/11 9:23:15 网站建设 项目流程

文章目录

  • 网络层
    • IP地址划分
    • 两台主机通信前提
    • 如何获取目的主机的Mac地址?ARP
      • 获取过程
      • 不在同一网络内?
      • 疑问
      • AWS VPC 中 ARP 问题导致连接失败
        • 解决办法
    • IP数据报格式
    • IP子网
      • 子网掩码计算规则
    • 路由器
      • 路由器是【网络层】的中间件
    • NAT
  • 如何理解IP和以太网(MAC)的关系?
  • 推荐书籍

网络层

IP地址划分

IP地址是32位的

IP地址组成 = 网络号:主机号

网络划分A,B,C-单播地址,D-多播地址,E-保留使用

根据上图可以计算出

全部IP地址数=2 32 2^{32}232

A类地址全部IP数=2 7 × 2 24 = 2 31 2^7 \times 2^{24} = 2^{31}27×224=231最后一个可指派的网络号 127,由于127.x.x.x是被保留的地址,所以最大是能够被使用的最大网络号是126.
怎么计算出来的127呢?
网络号的范围为0 0000000 到 0 1111111,这样算出来的就是127,0是上图中固定的网络号占用的字段,下面的几类地址计算一样

B类地址全部IP数=2 14 × 2 16 = 2 30 2^{14} \times 2^{16} = 2^{30}214×216=230最后一个可指派的网络191.255

C类地址全部IP数=2 21 × 2 8 = 2 29 2^{21} \times 2^8 = 2^{29}221×28=229最后一个可指派的网络是233.255.255

IP表示法:点分十进制法

每个主机都会有一个IP地址,路由器会存在两个,或两个以上不同IP地址。因为路由器可能链接着多个不同的网络-即网络号是不同的,则它会有多个IP地址。

不同网络之间的通信必须依靠路由器进行转发

两台主机通信前提

很简单的一个场景,客户端要和服务端进行网络通信。两端的主机都会有个IP,实际场景中大多数都是客户端知道自己的IP,客户端获取服务端的IP一般通过服务端的域名的DNS解析。两端的IP都来源于ISP-Internet Service Provider-互联网服务提供商(移动、联通、电信)。所谓的用户要连接到互联网上,就需要IP,用户需要从ISP申请IP,ISP会分配给用户一个IP。这个过程就是平时所说的家里接网

客户端拿到服务端IP地址后,会在某个应用内(应用层)发送信息,经过运输层,到达网络层,会把目的地IP和自己的IP放到IP数据报的头部。接着向下传递。到了数据链路层,需要将IP数据报封装成Mac帧。而数据链路层通信,首部重要的信息中,有一个目的主机Mac地址。这个地址从哪来?

如何获取目的主机的Mac地址?ARP

ARP-Address Resolution Protocol-地址解析协议

IP数据报最终会传递到数据链路层,加上帧头、帧尾后,组装成Mac帧。继续传递。Mac帧头有个重要的目的主机Mac地址,从哪里来?

当网络层向数据链路层传递时,通过ARP协议解析获得目的IP的Mac地址,以便放到Mac帧头部中

每台主机都会有一个ARP Cache,里面有着一张映射表,IP-MAC地址映射表。

获取过程

  1. 主机A向主机B发送IP数据报时,先在主机A自身的ARP Cache中的映射表查找,看看有没有目的IP的Mac地址,有的话,则直接获得

  2. 如果没有,出现这种的情况一般是主机A刚刚加电-刚开机,或者主机B刚刚入网-刚加入到局域网内。则主机A在该局域网内发送一个广播请求,该局域网内所有主机都会收到该ARP请求。

    ×× 这个 IP 地址是谁的?请把你的 MAC 地址告诉我。”然后就会有人回答:“这个 IP 地址是我的,我的 MAC 地址是××××。
    引用自 <网络是怎样连接的 2.5.5 章节>

    如果不一致,则不理睬。如果一致,则进行回复,回复自己的Mac地址、IP,同时会把主机A的IP地址、Mac地址写到自己的ARP Cache中。请求肯定是以Mac帧的形式进行的。

  3. 主机A收到回复,同样将主机B的IP地址、Mac地址写入到ARP Cache中

  4. ARP Cache本身会有一个过期时间。会定期删除。所以即使主机B更换了网卡-网络适配器,导致Mac地址改变的话,那么过了ARP Cache的存储时间,主机A如果还想要同主机B通信,根据上面的步骤,会重新获得新的主机B的Mac地址

不在同一网络内?

  1. ARP解决的是同一个局域网上IP-Mac地址的映射问题。如果不在同一个同一个网络,则依靠路由器转发,主机A发现要通信的IP(主机B的IP)和自己不在同一网段A中,则发送广播请求路由器的Mac地址,路由器回复后。主机A将Mac帧的目的地地址设置为路由器的Mac地址。但是IP数据报中的IP地址还是主机B的IP,切记
  2. 路由器在数据链路层接收到发送给自己的帧,去除帧头、帧尾,上交给数据链路层的上一层,网络层。发现目的IP不是自己,则路由器会在和上面一样,判断是否在同一网段,在的话,则本本局域网内ARP请求。如果不在,根据自身的路由表进行转发,接着转发给其他路由器。循环往复,直到最终找到主机B。循环过程要多次利用ARP协议。在不同的局域网内确定是转发,还是寻找目的主机。路由器转发在转发路由器时,数据链路层,会把这个的Mac帧的目的Mac地址换成下一个路由器的MAC地址。循环

疑问

现实情况是主机A和主机B之间隔了很多复杂的网络,每个网络中都有N个路由器。那么这些网络中的路由器是如何确定由哪个具体的路由器进行转发呢?因为每个路由器都连着不同的网络,而目的网络可能是隔了好几十层的路由转发才能找到的。

了解 路由算法

AWS VPC 中 ARP 问题导致连接失败

我们生产环境原来一直有这种情况:重新创建的服务器(IP不变)在第一次部署代码并启动JVM后,连接Redis或Elasitcsearch时总是失败,但是重启几次就好了。在重建之前,销毁老的EC2实例默认会把其网卡也销毁。再重建新的EC2实例时,会重建新的网卡,但是新的网卡的IP还是指定为原来的IP

问题就出在这里,由于网卡重新创建了,其MAC地址也改变了,但是IP没变。由于IP-MAC 对应关系在AWS的Mapping Service 中还未刷新所以此时发往这些机器的包被判定为不合法/未知,这些包直接被丢弃了,所以在EC2应用服务器这一侧的体现为迟迟超时,只有当IP-新的MAC地址关系刷新之后,连接才会成功。

Mapping Service负责对数据包的鉴权,具体细节见
AWS re:Invent 2015 | (NET403) Another Day, Another Billion Packets 这个视频,里面说的Mapping Service是如何鉴权的

Reddit 上 How does ARP works in AWS network的问答

解决办法

在销毁EC2实例时保留其网卡,在重建EC2实例时,根据IP找到老的网卡,把这个老的网卡再设置到全新的EC2上面就可以了。因为网卡没变,所以MAC地址不变,所以请求到其他服务器的网络包可以正常到达。

另外说明:有的同学可能想到在新建的EC2实例中发起一次ARP广播即Gratuitous ARP,让VPC内的其他所有服务器都更新一下本机ARP缓存表,这个路子在AWS中行不通。AWS内部依赖于Mapping Service

IP数据报格式

IP数据报 = 头部 + 数据部分

和Mac帧不同的是,没有尾部。

IP数据报头部(固定长度20字节) = 版本(4位)-IPv4还是IPv6 + 首部长度(4位) + 总长度(16位) +其他(64位,指的是下图中标识、生存时间这些) + 源地址(32位)+目的地址(32位)

源地址:源主机IP
目的地址: 目的主机IP

IP子网

IP地址 = 网络号 ,子网号,主机号

当主机A通过路由器转发至网络141.14.72.24时,这是24这个网络中可能存在多个子网,因为IP数据报中只包含了目的地IP地址-141.14.72.24,但是此时还不知道对于N个子网,路由器到底应该交给哪个子网。可以通过子网掩码计算可得。

子网掩码计算规则

子网掩码4个字节,前两个字节全是1,第四个字节全是0.如下面这种格式…代表具体的子网地址,将子网掩码的第三个字节和IP地址的第三个字节做 与 运算即可得出

11111111 11111111 … 00000000

不同的子网掩码是可以得出相同的网络地址的

有了子网掩码之后,路由器中路由表存储的结构则是

目的网络地址+子网掩码 + 下一跳

路由器

路由器是【网络层】的中间件

路由器工作原理、以及路由表是如何构造的 可 Google

路由器也是计算机的一种

NAT

NAT-Network Address Translation-网络地址转换

正常的路由转发,路由器是不会修改IP数据报的源地址、目的地址。但是NAT会

有关NAT更多可Google

如何理解IP和以太网(MAC)的关系?

  1. 以太网在判断网络包目的地时和TCP/IP的方式不同,因此必须采用相匹配的方式才能在以太网中将包发往目的地,而MAC头部就是干这个用的
  2. 以太网是一种为多台计算机能够彼此自由和廉价地相互通信而设计的通信技术,这种网络的本质其实就是一根网线
  3. IP 就像是信封上的地址,以太网就像是送信的邮递员和路(网线,光纤)。可以看出来,以太网是实际干活的,也就是上面的网线
  4. 推荐阅读 > 网络是怎样连接的?一书中 > 2.5.6 以太网的基本知识。一看这章开头的图就明白了

推荐书籍

  1. 网络是怎样连接的?- 作者 户根勤 ,强烈推荐这本书,这本书说的非常细致,把网络连接中的各个组件讲的很细致了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询