网络中两台主机通信
主机A和主机B通信报文的转发过程
1、主机A和主机B在同一个二层网络中,直接走二层交换
主机A查看自己的ARP缓存,检查是否有主机B的IP到MAC的映射,如果有映射,构造报文,目的IP为主机B的IP,源IP为主机A的IP,目的MAC为主机B的MAC,源MAC为主机A的MAC,将报文发送给交换机C,交换机C进行MAC地址表学习,将主机A的MAC和报文入端口号记录下来,然后交换机C查看自己的MAC转发表,检查是否有主机B的MAC到端口的映射,如果有映射,获取对应的端口,将报文从此端口转发出去,报文到达主机B。如果交换机C没有主机B的MAC转发表映射,采用洪泛的形式广播报文,主机B收到报文后向主机A回复,交换机C进行MAC表学习,将主机B的MAC和报文入端口号记录下来。
如果主机A没有主机B的ARP映射,主机A需要发送ARP请求,以获取主机B的MAC,将报文发往交换机C,交换机C采用洪泛的形式广播报文,主机B收到广播报文后,在自己的ARP缓存表中写入主机A的IP到MAC的映射,将自己的MAC封装到ARP回复报文中,单播给主机A,主机A获取到主机B的MAC后,在自己的ARP缓存表中写入主机B的IP到MAC的映射,构造报文发送给主机B,过程同上。
主机B向主机A回复报文的过程类似。
2、主机A和主机B不在同一个网络中,走三层路由
主机A查看自己的ARP缓存表,检查是否有路由器E的IP到MAC的映射,如果有映射,获取路由器E的MAC,构造报文,目的IP为主机B的IP,源IP为主机A的IP,目的MAC为路由器E的MAC,源MAC为主机A的MAC,将报文通过交换机C发往路由器E,过程同上。 如果主机A没有路由器E的IP到MAC的映射,需要发送ARP请求,获取路由器E的MAC,过程同上。路由器E收到主机A的报文后,剥离报文的MAC帧头,查询路由表,发现目标主机B所在的网络是直连的,查看自己的ARP缓存表,如果有主机B的IP到MAC的映射关系,获取主机B的MAC,封装报文MAC帧头,目的MAC为主机B的MAC,源MAC为路由器E的MAC,将报文通过交换机D发往主机B,如果路由器E没有主机B的IP到MAC的映射关系,需要发送ARP请求,获取主机B的MAC,过程同上。
主机B向主机A回复报文的过程类似。
注:路由器上的路由表一般是配置静态路由或者通过路由协议自动学习的。
相关文章
- 网络编程与通信原理
- 基于MATLAB的车载自组织网络(Vehicular Ad-hoc Network VANET)的通信系统的仿真
- 基于FPGA的UDP包的网络收发(开发板-PC通信)
- Slice如何从网络消费数据中获得商机
- 任何人都可能成为网络喷子 | 人机交互顶级会议CSCW最佳论文
- 网络大数据分析 -- 使用 ElasticSearch + LogStash + Kibana 来可视化网络流量
- TCP/IP网络断和127.0.0.1回网IP概念
- 高性能网络编程2----TCP消息的发送
- 《Windows网络与通信程序设计(第3版)》——1.2 计算机网络参考模型
- 《Windows网络与通信程序设计(第3版)》——2.4 网络对时程序实例
- java 网络编程之UDP通信和简单的群聊程序
- 深入理解Linux网络技术内幕(十)——帧的接收
- 浅析Linux网络子系统(一)
- 移动通信网络质量监测渐成监管重点
- 上机题目(0基础)- Java网络操作-Socket实现client和server端通信(Java)
- Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)简单介绍、并实现简单的消息发送和接收
- 学习笔记(05):Python网络编程&并发编程-基于socket实现简单套接字通信
- 如何看待互联网时代的网络金融安全?
- C#网络编程TCP通信实例程序简单设计