王道计网 | 网络层 | 第二部分| 同网段内通信

image-20251013201830966

0.ARP协议

image-20251014101705224

ARP请求和响应报文中各关键字段的差异,是掌握网络通信基础的关键。下面这个表格清晰地对比了它们在两种报文中的不同。

字段 ARP请求报文 ARP响应报文
操作类型 (Operation Code) 1 (表示请求) 2 (表示响应)
源MAC地址 (Sender MAC) 请求主机的MAC地址 被请求主机的MAC地址
目的MAC地址 (Target MAC) 全0 (00:00:00:00:00:00) 请求主机的MAC地址
源IP地址 (Sender IP) 请求主机的IP地址 被请求主机的IP地址
目的IP地址 (Target IP) 要解析的目标主机的IP地址 请求主机的IP地址
以太网目的地址 (帧头部) 广播地址 (FF:FF:FF:FF:FF:FF) 请求主机的MAC地址(单播)

深入理解ARP工作过程

ARP(地址解析协议)的核心任务是根据IP地址查询对应的MAC地址 。它的工作过程就像是在局域网里“喊话”和“点名回答”:

  1. 广播“喊话”(ARP请求):当主机A需要与主机B通信,但不知道B的MAC地址时,它会在本地网络广播一个ARP请求报文。这个报文的本质是询问:“IP地址是B的设备,请告诉我你的MAC地址!”

    • 为了确保网络中的所有设备都能收到并处理这个请求,以太网帧头部的目的MAC地址被设置为广播地址 (FF:FF:FF:FF:FF:FF)
    • 在ARP报文内部,目标MAC地址字段暂时填充为全0,因为此时还不知道目标的确切MAC
  2. 单播“回答”(ARP响应):网络中只有IP地址与请求中目标IP地址匹配的主机(主机B)会处理此请求。主机B会以单播形式向主机A返回一个ARP响应报文,内容相当于:“我就是IP地址为B的设备,我的MAC地址是XX:XX:XX:XX:XX:XX。”

    此时,由于主机B已经从请求报文中知道了主机A的MAC和IP地址,所以响应报文的所有字段都可以明确填写。以太网帧头和ARP报文内部的目的MAC地址都填入了主机A的MAC地址,确保点对点准确送达

  3. 更新缓存:主机A收到响应后,将IP-B和MAC-B的映射关系存入自己的ARP缓存表。后续发往主机B的数据包就可以直接封装,无需再次广播请求,大大提高了效率

image-20251014101829173

image-20251014101845255

1.手搓一个局域网

开一家网吧叫做老登网吧,有2交换机1集线器5主机1路由器

image-20251013185201335

局域网网段 202.15.179.0/29

五台主机 IP分别从202.15.179.1-5,MAC地址全6末尾01到05

H4,H5集线器连接,H2,H3交换机连接

1.单播IP封装为单播帧

image-20251013185610964

H1给H5发IP数据报,源IP和目的IP分别为H1和H5的IP,源MAC和目的MAC为H1和H5的MAC

什么设备会收到该MAC帧(主要看MAC地址)

H4和H5会收到该帧

设备分别如何处理?(看MAC地址和IP地址)

分别交付给自己的数据链路层,H4一看不是自己的就扔了,H5看到是自己的就留下来

2.单播IP封装为广播帧

image-20251013185829772

相比情况1,目的MAC改为广播地址(全F),而其他的都不变

什么设备会收到该MAC帧(主要看MAC地址)

局域网中所有设备都可以收到该帧,路由器也会收到

设备分别如何处理?(看MAC地址和IP地址)

路由器判断是不是本网络内的,如果是就丢弃IP分组,如果不是就转发给目的网络

H2-H4接受该MAC帧,交付给数据链路层,数据链路层一看是广播地址,就交付给网络层,网络层核对目的地址,对不上就丢弃,对得上继续进行后续处理

3.广播IP封装为单播帧

image-20251013190232870

相比情况1,目的IP改为广播地址(主机号全1),而其他的都不变

什么设备会收到该MAC帧(主要看MAC地址)

H4和H5会收到该数据报

设备分别如何处理?(看MAC地址和IP地址)

分别交付给自己的数据链路层,H4一看不是自己的就扔了,H5看到是自己的就留下来,继续交付给网络层,网络层一看是广播地址,继续往上层交付

4.广播IP封装为广播帧

image-20251013190527616

相比情况1,目的IP改为广播地址(主机号全1),目的MAC改为广播地址(全F),而其他的都不变

什么设备会收到该MAC帧(主要看MAC地址)

局域网中所有设备都可以收到该帧,路由器也会收到

设备分别如何处理?(看MAC地址和IP地址)

路由器判断是不是本网络内的,如果是就丢弃IP分组,如果不是就转发给目的网络

H2-H4接受该MAC帧,交付给数据链路层,数据链路层一看是广播地址,就交付给网络层,网络层一看是广播地址,继续往上层交付

2.连接其他局域网(含常见考点:点对点链路配置)

image-20251013201656230

两台路由器相连,中间需要一个网段,需要消耗四个IP地址(而不是两个),用2bit来作为主机号

其中全0和全1不能作为节点IP,则主机号只能为01和10

3.DHCP分配IP的全过程

image-20251014094810843

不管客户发还是服务器发,在这个过程中的目的IP都是广播地址

客户发的:源MAC都是自己的MAC,目的MAC都是广播MAC,源IP都是0.0.0.0

服务器发的:源MAC和源IP都是自己的MAC和IP,目的MAC都是客户的MAC地址

1.局域网2 - 小登网吧简介

image-20251013202436600

网段是6.6.6.0/28,两台DHCP服务器,一台路由器,网关6.6.6.6

2.DHCP请求全过程

image-20251013202627847

主机A5请求DHCP服务器分配IP

1
2
3
4
5
A5 MAC:AA AA AA AA AA A5
DHCP1 IP:6.6.6.7
DHCP1 MAC:DD DD DD DD DD 01
DHCP2 IP:6.6.6.8
DHCP2 MAC:DD DD DD DD DD 02

A5就好比求职者,DHCP相当于HR,IP地址就是职位

1.发现报文

1
2
3
4
源IP: 0.0.0.0
目的IP: 255.255.255.255
源MAC: AA AA AA AA AA A5
目的MAC: FF FF FF FF FF FF

发送者:A5

谁能收到:局域网内所有设备

属于广播IP封装为广播帧

A5求职,海投给局域网内所有的设备

2.提供(offer)报文

1
2
3
4
源IP: 6.6.6.7
目的IP: 255.255.255.255
源MAC: DD DD DD DD DD 01
目的MAC: AA AA AA AA AA A5
1
2
3
4
源IP: 6.6.6.8
目的IP: 255.255.255.255
源MAC: DD DD DD DD DD 02
目的MAC: AA AA AA AA AA A5

发送者:两台DHCP服务器

谁能收到:A5

属于广播IP封装为单播帧

两个HR都给A5发送了offer,在这个报文中说了要给A5分配的岗位(IP地址),以及岗位相关信息(子网掩码,默认网关)

3.请求报文

1
2
3
4
源IP: 0.0.0.0
目的IP: 255.255.255.255
源MAC: AA AA AA AA AA A5
目的MAC: FF FF FF FF FF FF

发送者:A5

谁能收到:局域网内所有设备

属于广播IP封装为广播帧

A5选择了 DHCP服务器1(6.6.6.7),广而告之全部设备(局域网内所有设备都能收到)我找到工作了

4.确认报文

1
2
3
4
源IP: 6.6.6.7
目的IP: 255.255.255.255
源MAC: DD DD DD DD DD 01
目的MAC: AA AA AA AA AA A5

发送者:DHCP服务器1

谁能收到:A5

属于广播IP封装为单播帧

HR给A5发来了入职确认,A5成功分配到了6.6.6.5这个岗位(IP地址)

5.过程总结

步骤 报文类型 由谁发送 核心目的
第一步 DHCP发现 (DHCP Discover) 客户端 客户端以广播形式“呼喊”,寻找网络中可以提供IP地址的DHCP服务器。
第二步 DHCP提供 (DHCP Offer) DHCP服务器 接收到发现的服务器广播回应,为一个可用的IP地址并向客户端“报价”,并暂时保留该地址。
第三步 DHCP请求 (DHCP Request) 客户端 客户端从收到的多个“报价”中选择一个(通常是第一个收到的),并再次广播发送请求,明确表示希望使用该服务器提供的IP地址。
第四步 DHCP确认 (DHCP Ack) DHCP服务器 被选中的服务器发送确认报文,正式将IP地址、子网掩码、网关、DNS服务器地址及租期等参数分配给客户端。

下面的表格清晰地展示了这些信息是在哪个阶段告知A5的:

网络参数 首次提供(提议) 最终确认(生效)
IP 地址 DHCP Offer 阶段 DHCP Ack 阶段
子网掩码 DHCP Offer 阶段 DHCP Ack 阶段
默认网关 DHCP Offer 阶段 DHCP Ack 阶段

3.基础课例子

image-20251014094944138

4.局域网内部发送IP数据报

A5要给A1发送IP数据报

1
2
A5 IP:6.6.6.5
A1 IP:6.6.6.1

image-20251013212439804

1.A5通过子网掩码判断自己和目的IP是不是一个网段

是的话那就是单播帧,不是的话就发给默认网关

2.构造MAC帧的时,要填写目的MAC地址,则去查A5自身的MAC表

如果查到了目的IP对应的目的MAC,那就构造好了单播帧然后发送

如果没有就进行ARP请求

3.ARP请求

A5封装一个ARP请求报文,这是一个广播帧,作用是来询问A1的AMC地址的

源MAC是A5的MAC,目的MAC是全F4

4.ARP响应

A1收到A5的ARP请求以后,先把A5的MAC和IP记录到自己的MAC表里面

然后给A5发出ARP响应

A5收到以后就把A1的IP和MAC记录到自己的MAC表里面,之后就可以发送单播帧了

5.两个局域网之间发送IP数据报(跨网段,暂时忽略路由器和路由器之间的发送过程)

简单来说,在整个传输过程中,存在一个黄金法则:

  • MAC地址:在每一次跨越不同广播域(即每一跳)时都会改变。它标识的是当前链路上的两个端点,就像不断更换的“本地快递员”。
  • IP地址:从源到目的整个传输过程中基本保持不变。它标识的是通信的最终源头和目的地,是“最终收件人和发件人地址”。

A5要给H1发送IP数据报

A5构造的帧

1
2
3
4
源IP:A5的ip
目的IP:H1的IP
源MAC:A5的MAC
目的MAC:默认网关的MAC

1.A5通过子网掩码判断自己和目的IP是不是一个网段

发现不是一个网段的,那就要发给默认网关6.6.6.6

2.查MAC表,找到了就发给默认网关,找到就用ARP找默认网关的MAC,和上面的流程相同

3.现在A5的默认网关路由器已经拿到了数据报,然后转发给202.15.179.0/29这个网段

离开 6.6.6.0 网段时的MAC帧

1
2
3
4
5
  源 IP: 6.6.6.5(A5)  
目的 IP: 202.15.179.1(H1)
源 MAC: AA:AA:AA:AA:AA:A5(A5)
目的 MAC: DD:DD:DD:DD:DD:01
(默认网关R1) 目标MAC是下一跳(默认网关)的地址

4.数据帧到达了202这个网段

到达 202.15.179.0/29 网段时的MAC帧

1
2
3
4
5
  源 IP: 6.6.6.5(A5)  
目的 IP: 202.15.179.1(H1)
源 MAC: 202.15.179.0网段的路由器的MAC地址
目的 MAC: H1的MAC地址
目标MAC变为最终目标H1的地址

然后就变成局域网内部的两台主机发送数据了

如果网关不知道H1的MAC地址就还是ARP那一套,知道的话就直接单播帧

6.ICMP协议

image-20251014101957955

image-20251014102012371

image-20251014102103854

image-20251014102340607

终点不可达分为两种情况:到了相应的网段后

1.目的IP的主机不存在

2.目的IP主机里面没有目的端口号

都会导致终点不可达

image-20251014102619253

时间超过分为两种情况:

1.路程太远了TTL变成0了,那么就由丢弃该报文的路由器给原主机发差错报文

2.分片规定时间内没到齐,就会全部丢掉

image-20251014103024613

image-20251014103034699

image-20251014103059531

image-20251014103226944

image-20251014103350390

就把TTL设为1,然后在找baidu.com的第一个路由器就不能走了,那就给主机返回ICMP报文,就得知了第一跳是哪个路由,后面的一样以此类推