关于两个主机的信息传递

目录

1、交换机MAC寻址

转发表: 局域网主机端口MAC地址与交换机端口。
交换机: 根据转发表将数据帧转发到指定主机端口上。

在这里插入图片描述

A第一次发送数据到 D:

  • 设置本地网卡MAC地址 和 目标网卡MAC地址,发送给交换机
  • 交换机收到数据后,将源MAC地址记录下来
  • 交换机检查自己的表里是否有 目的MAC地址,(1)有则直接从记录的端口发送过去 (2)没有则叫帧从所有非接收端口发送过去(这里是端口1)
  • 对于不是目的MAC的机器会忽略该帧,只有主机D相应且回应一个
  • 此时交换机将目的MAC地址也记录在交换表中

A第二次发送数据到D:
直接在交换表中找到对应端口将帧发送过去。

2、ARP的IP/MAC

由上面内容可以看出,我们要发送消息给另一台主机,需要知道它的MAC地址。
那我们怎么获得这个数据呢?
ARP表:在每个拓扑网络的节点或者主机上,都维护着一张ARP表,它记录着主机的IP地址(网络地址)到MAC地址(物理地址)的映射关系。
ARP协议(地址解析协议):,它是一个网络层协议,运行在各网络节点上,负责完成主机IP地址到MAC地址的映射。

过程

  • 如果主机A想发送数据包给同一网段内的另一台主机B(通过交换机相连的节点处于同一网段),很明显,A的用户应用程序要么已经知道B的IP地址,或者说域名(Domain Name,DNS协议会完成主机名到IP地址的映射,这里不是重点),

  • 那么主机A首先会检查自己的ARP缓存表(ARPCache),查看是否有主机B的IP地址与其MAC地址的对应关系,

  • 如果有,则直接将主机B网络设备的MAC地址作为目的MAC地址封装到数据帧中,
    无需进一步操作即获取到数据帧封装所需的全部信息,此后完成封装并发送数据帧到目的MAC地址。

  • 如果没有,主机A则会发送一个ARP请求信息(ARPRequest),请求的目的IP地址是主机B的IP地址,目的MAC地址是MAC层的广播地址(即ff:ff:ff:ff:ff:ff),源IP地址和MAC地址是主机A的IP地址及其MAC地址;

  • 当交换机接收到此数据帧之后,发现此帧是广播帧,因此,会将此数据帧从非接收的所有端口发送出去;

  • 同一网段中的所有节点都会接收到该ARP请求数据包,
    目的IP不匹配的节点会直接忽略该请求,

  • 而当主机B接收到此数据帧后,解析到IP地址与自己的IP地址一致,
    先将主机A的IP地址及其MAC地址的对应关系记录到自己的ARP缓存表中,
    同时会发送一个ARP应答(ARPResponse),应答数据包源MAC地址即主机B自身网络设备的MAC地址,

  • 该应答通过交换机转发至主机A;主机A在收到这个回应的数据帧之后,
    在自己的ARP缓存表中记录
    ,主机B的IP地址和MAC地址的对应关系。

  • 而此时主机A已经可以继续封装准备发往主机B的数据帧,而交换机也已经学习到了主机A和主机B的MAC地址与其端口的对应关系,之后主机A发送的数据帧通过交换机转发至主机B。

也就是说在进行ARP的IP解析时,交换机就获得了MAC的对应关系。

MAC地址在同一个广播域中传播时始终不变, 但在跨越广播域(即经过路由器)时, 会由于重新封装而改变, 源MAC地址将变为路由器的输出端口的MAC地址, 目的MAC地址随网络拓扑实际情况而定。

3、两台主机通讯过程

两台主机的通信在同一网段和不同网段下显得不一样,区别就是要不要经过路由去寻址。
(1)相同网段下的消息传递

  • 应用层
    TCP/IP协议上tcp的端口对应的各种应用程序,客户机要访问某个应用程序就会要求打开主机的这个固定的端口。而客户机自己会打开一个大于1024的随机端口用来跟对方的主机进行通信。

  • 传输层
    对数据分段(Segment),添加TCP报头(包含源端口,目的端口,顺序号等)
    分段的原因:
    (A):可同时多个应用程序发送数据。
    (B):数据包过大产生错误时,还需重新传送,即占带快又占时间,小数据包对数据流影响就小很多。
    (C):各种网络传输介质有其最大的传输单元限制,不允许在网络上出现巨大的数据包。

  • 网络层
    当传输层为数据分段添加了TCP头之后,将数据下发给网络层处理。网络层会为传输层传来的数据包添加IP报头(包含源IP地址,目的IP地址)封装成数据包

  • 数据链路层
    数据链路层在数据包的前面封装上数据帧头,在数据包的后面封装上校验位,从而把数据包封装成数据帧。(添加源MAC地址和目的MAC地址,如果主机不知道目标MAC地址则想交换机发送ARP广播从而得到目标MAC地址)

  • 物理层
    将从逻辑链路层发送过来数据帧转换成能在物理线路上传输的电子信号,传递给网络上的转发设备交换机,由交换机进行处理。

  • 目的主机接收到数据帧的操作
    当目的主机接收到数据帧后对比目的MAC,如是发送给自己的,则拆去数据帧头,发往网络层,网络层对比目的IP,如相同则拆包发往传输层,传输层再对比目的端口,确认相同则拆去数据段交给应用程进行数据组装。

(2)不同网段下的消息传递

  • 主机A应用层数据到传输层被分段,打上TCP头(含源端口,目的端口),再向下发给网络层,打上IP地址(含源IP,目的IP),再向下发送给数据链路层,打上数据帧(含源MAC,目的MAC),由于不知道目的MAC,则在MAC上打上于网关(路由器接口)的MAC地址,发往路由器A。

  • 路由器A收到消息后,重新封装数据帧(得知发送到B主机需要经过路由器B),于是修改源MAC地址为路由器A的MAC地址,目标地址为B的MAC地址,(路由器A进行NAT地址转换)

  • 路由器B收到路由器A的信息,核对地址,检查IP,修改MAC,源MAC改为路由器B的MAC,(假如主机B在路由器B的子网中)目标MAC填写主机B的MAC,即下一步将信息发送给主机B。

  • 主机B接收到数据后对数据拆帧、包,TCP头,检查其目的地址与校验,重新整合这些数据流之后,将这个数据流传递给应用层处理。

如有错误,请指出,谢谢!

参考文章
转发表、交换机
两台主机通讯过程

相关文章

方法: 打开一个新的可跨域的chrome窗口实现方法: 1. 打开终...
MacBook Pro 14价格和配置对比 尺寸 SOC	内存&#...
现在给大家介绍一下如何查询MAC的生产日期,希望对你查询MAC...
1、点击【编辑虚拟机设置】,转到【CD/DVD (SATA)】,选中【...
注意:用哪个版本的 Python 运行安装脚本,pip 就被关联到哪...
Mac 安装nvm