Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

9.2 链路层与网络层

链路层和网络层是网络通信的基础层,负责将数据包从源主机传输到目标主机,理解这两层的原理有助于我们排查网络连接问题,理解数据包的传输过程。

数据链路层

数据链路层负责同一个局域网内相邻节点之间的数据传输,最常见的链路层协议是以太网协议,现在几乎所有的局域网都是以太网。

以太网协议

以太网是目前使用最广泛的局域网技术,定义了链路层的帧格式和传输规则。

以太网帧格式

一个标准的以太网帧大小在64-1518字节之间,结构如下:

┌──────────┬──────────┬────────┬─────────┬──────────┬──────────┐
│ 目标MAC  │ 源MAC    │ 类型   │ 数据    │ FCS校验  │ 帧间隙   │
│ 6字节    │ 6字节    │ 2字节  │ 46-1500字节│ 4字节   │ 12字节   │
└──────────┴──────────┴────────┴─────────┴──────────┴──────────┘
  • 目标MAC地址:接收方的物理地址
  • 源MAC地址:发送方的物理地址
  • 类型:表示上层协议类型,0x0800表示IP协议,0x0806表示ARP协议
  • 数据:上层协议的数据包,最大1500字节,这个大小叫做MTU(最大传输单元)
  • FCS:帧校验序列,用来检测帧在传输过程中是否出错

MAC地址

MAC地址(Media Access Control Address)是网卡的物理地址,是每个网卡全球唯一的标识符,长度48位,通常表示为12个十六进制数,比如00:1A:2B:3C:4D:5E

  • MAC地址是烧录在网卡中的,理论上不会改变
  • 链路层通过MAC地址来标识同一个局域网内的不同设备
  • 注意:MAC地址是局域网内使用的,跨局域网传输时MAC地址会改变,而IP地址是跨网络的,全程不变。

ARP协议(地址解析协议)

ARP协议的作用是根据IP地址获取对应的MAC地址,是链路层和网络层之间的桥梁。

  • 工作原理
    1. 主机A要和同一局域网内的主机B通信,知道主机B的IP地址,但不知道MAC地址
    2. 主机A在局域网内广播ARP请求:“IP地址是192.168.1.100的MAC地址是什么?”
    3. 局域网内所有主机都收到这个请求,只有IP地址匹配的主机B会发送ARP响应,告诉主机A自己的MAC地址
    4. 主机A收到响应后,把IP和MAC的对应关系缓存到ARP缓存中,下次直接使用
  • ARP缓存:每个主机都有ARP缓存表,存储IP到MAC的映射,有效期通常是15-30分钟
  • ARP欺骗:攻击者发送伪造的ARP响应,欺骗其他主机把流量发到攻击者的机器上,是常见的局域网攻击手段,通常用静态ARP绑定、ARP防火墙来防范。

VLAN(虚拟局域网)

VLAN可以把一个物理交换机划分为多个逻辑上的虚拟局域网,不同VLAN之间二层隔离,不能直接通信,需要通过路由器转发。

  • 作用:隔离广播域,提升网络安全性,方便网络管理
  • 802.1Q协议:在以太网帧头中加入VLAN标签,标识帧属于哪个VLAN

网络层(IP层)

网络层负责跨网络的数据包传输,把数据包从源主机经过多个网络转发到目标主机,核心协议是IP协议(Internet Protocol)。

IP协议

IP协议是TCP/IP协议族的核心,所有上层协议的数据都封装在IP数据包中传输。IP协议是无连接、不可靠的协议,不保证数据包一定能到达,也不保证顺序,可靠性由上层的TCP协议保证。

IP地址

IP地址是互联网上每个主机的唯一标识,目前主要有两个版本:IPv4和IPv6。

IPv4地址

IPv4地址长度32位,通常用点分十进制表示,比如192.168.1.1,分为网络部分和主机部分:

  • 网络部分:标识主机所属的网络
  • 主机部分:标识网络内的具体主机
IP地址分类

早期的IP地址分为五类:

类别开头范围网络数每个网络的主机数用途
A类00.0.0.0 ~ 127.255.255.2551261600万大型网络
B类10128.0.0.0 ~ 191.255.255.2551638465534中型网络
C类110192.0.0.0 ~ 223.255.255.255200万254小型网络
D类1110224.0.0.0 ~ 239.255.255.255--组播
E类1111240.0.0.0 ~ 255.255.255.255--保留

现在分类的方式已经很少使用了,取而代之的是CIDR(无类域间路由),用子网掩码来划分网络和主机部分。

子网掩码

子网掩码用来区分IP地址的网络部分和主机部分,长度也是32位,网络部分全为1,主机部分全为0,例如:

  • A类默认子网掩码:255.0.0.0(/8)
  • B类默认子网掩码:255.255.0.0(/16)
  • C类默认子网掩码:255.255.255.0(/24)

CIDR表示法:在IP地址后面加/网络位数,比如192.168.1.0/24表示前24位是网络位,后8位是主机位,这个网段有256个IP地址。

特殊IP地址

  • 127.0.0.0/8:回环地址,用于本机通信,127.0.0.1就是本机
  • 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16:私有IP地址,用于局域网,不能直接访问公网,需要NAT转换
  • 0.0.0.0:表示所有地址,通常用于服务监听所有网卡
  • 255.255.255.255:广播地址,同一局域网内所有主机都能收到
  • 169.254.0.0/16:自动专用IP地址,DHCP获取失败时自动分配的地址

NAT(网络地址转换)

由于公网IPv4地址不足,局域网内的私有IP访问公网时需要通过NAT转换为公网IP:

  • 源NAT(SNAT):修改数据包的源IP,把私有IP转换为公网IP,多个内网主机共享一个公网IP
  • 目的NAT(DNAT):修改数据包的目的IP,把公网IP和端口映射到内网的某个主机和端口
  • 端口映射就是一种DNAT,把公网的端口映射到内网服务器的端口
  • NAT解决了IPv4地址不足的问题,但也导致了很多问题,比如P2P连接困难,需要打洞技术
IPv6

IPv4的地址只有32位,最多只能有43亿个地址,现在已经耗尽了,IPv6是下一代IP协议,地址长度128位,几乎可以无限分配:

  • 表示方式:8组四位十六进制数,用冒号分隔,比如2001:0db8:85a3:0000:0000:8a2e:0370:7334,可以省略连续的0,简写为2001:db8:85a3::8a2e:370:7334
  • 优势:地址空间极大,不需要NAT,端到端可达,内置安全特性,性能更好
  • 现在越来越多的网络已经支持IPv6,是未来的发展方向

ICMP协议(互联网控制报文协议)

ICMP协议是网络层的辅助协议,用来传递控制消息,比如网络不可达、主机不可达、超时等。

我们常用的ping命令就是基于ICMP协议:

  • ping向目标主机发送ICMP Echo Request请求
  • 目标主机收到后返回ICMP Echo Reply响应
  • 计算往返时间和丢包率,判断网络是否通畅

traceroute(Windows下是tracert)命令也是基于ICMP协议,用来探测数据包从源主机到目标主机经过的路由路径。

路由原理

当源主机和目标主机不在同一个局域网时,IP数据包需要经过多个路由器转发才能到达目标主机,这个过程就是路由。

路由表

每个路由器和主机都有一张路由表,记录不同网段的下一跳地址:

目标网络        子网掩码        下一跳地址        接口    度量值
0.0.0.0         0.0.0.0         192.168.1.1     eth0    100  # 默认路由
192.168.1.0     255.255.255.0   0.0.0.0         eth0    0    # 直连网段
10.0.0.0        255.0.0.0       192.168.1.2     eth0    50   # 10网段的下一跳是192.168.1.2
  • 最长匹配原则:数据包的目标IP和路由表中的条目匹配时,选择最长前缀匹配的条目
  • 默认路由:0.0.0.0/0,所有匹配不到其他路由的数据包都走默认路由,通常是网关地址

路由选择过程

  1. 主机发送IP数据包时,先判断目标IP和自己是否在同一个网段
    • 同网段:直接通过ARP获取目标MAC,封装成帧直接发送
    • 不同网段:把数据包发送给默认网关(路由器)
  2. 路由器收到数据包后,根据目标IP查找路由表,找到下一跳地址
  3. 路由器重新封装链路层帧,把数据包转发给下一跳路由器
  4. 经过多次转发,最终数据包到达目标主机所在的局域网,发送给目标主机

常见的路由协议

路由器之间通过路由协议交换路由信息,自动生成路由表:

  • 内部网关协议(IGP):同一个自治系统内使用,比如RIP、OSPF
  • 外部网关协议(EGP):不同自治系统之间使用,比如BGP,是互联网的核心路由协议

常见问题排查

  1. 同一局域网内主机不通:检查IP配置、子网掩码是否正确,ARP缓存是否正常,防火墙是否拦截
  2. 跨网段不通:检查网关配置是否正确,路由器路由是否正确,防火墙是否拦截
  3. ping不通公网:检查DNS配置、网关配置、NAT是否正常、公网出口是否正常

思考问题

  1. MAC地址和IP地址有什么区别?为什么需要两个地址?
  2. ARP协议的作用是什么?ARP欺骗的原理是什么?如何防范?
  3. 什么是子网划分?给定IP段192.168.1.0/24,要划分4个子网,每个子网至少30台主机,子网掩码应该是多少?每个子网的网段和可用IP范围是什么?
  4. 什么是NAT?它解决了什么问题?带来了什么新的问题?