同一网段内计算机通信流程

参考地址:https://www.processon.com/view/5d784083e4b01080c73b9ca8

如上图为一个简单的同一网段内主机的示例。

如果计算机A向计算机B发送消息,那么

  1. 应用层会获取计算机B的ip地址(例如192.168.3.98,端口号为3456),并且将数据封装交给传输层

  2. 传输层会利用TCP协议将数据封装端口号(源端口号|目的端口号|数据),并交给网络层

  3. 网络层利用ip协议为数据封装IP地址(源IP地址|目的IP地址|源端口号|目的端口号|数据),并交给数据链路层

  4. 数据链路层进行判断判断自己的ARP表是否存在目的MAC地址。

    • 存在

      利用以太网协议给数据封装MAC地址(源MAC地址|目的MAC地址|源IP地址|目的IP地址|源端口号|目的端口号|数据),并交付物理层。

    • 不存在

      向本网段内发送一条ARP广播,含义为谁是IP 192.168.3.98,你的MAC地址是多少。

      此时计算机B收到广播后,发现IP是找自己的则先将计算机A的ip与MAC记录到自己的ARP表里,然后给计算机A回复一个ARP响应包,告诉自己的MAC地址。

      计算机A接收到回报之后利用以太网协议封包。并交付物理层

  5. 物理层顺着网线发送给主机B。

  6. 主机B从物理层逐层拆包获得数据。

不同网段内计算机通信流程

参考地址:https://www.processon.com/view/5d78ab24e4b0c5c942bee050

如图所示,不同网段通信。计算机A向计算机E发送消息。

  1. 计算机A从物理层到数据链路层的封包过程与同网段内的通信一致。

  2. 在数据链路层封装的MAC地址是默认网关的MAC地址

    • 如果主机A的ARP表内存在默认网关的MAC地址

      封装MAC地址。(目的MAC为默认网关的MAC)

    • 如果不存在

      计算机A将数据包暂存到缓存中,通过广播形式发送ARP请求包,请求默认网关MAC地址。

      路由器B收到ARP请求后,先将A的IP与MAC存到自己的ARP表中,然后以单播形式回复其请求。

      计算机A收到请求后进行封装。

  3. 数据首先会经过交换机A

    交换机A只能将数据拆到数据链路层,获取MAC地址与端口,并且发送。如果ARP表中没有此地址则广播获取。

  4. 路由器三同理,将数据交给左边路由器。

  5. 左边路由器拿到数据后开始逐层拆包,拆到数据链路层,发现目的MAC是自己所以继续拆包到网络层发现目的IP不是自己,于是发送给目的IP所在网络的默认网关。但需要知道其MAC。

    • 如果ARP表中存在MAC地址

      将MAC更换为 自己的MAC地址|默认网关的MAC地址|源IP地址|目的IP地址|源端口号|目的端口号|数据

    • 不存在

      通过广播获取

  6. 右边路由器获取到数据后开始逐层下发。。。