您的位置:首页 > 理论基础 > 计算机网络

网络数据包从主机A传输到主机B的流程

2015-08-27 15:14 441 查看
主机A需要发送一个数据包到主机B,在整个传输流程中,源和目的IP地址是保持不变的(不考虑NAT),源和目的MAC地址是随着具体链路的变化而变化。

这里只考虑三种基本情形:A和B通过网线直连,A和B通过路由器连接,A和B通过交换机连接。真实网络中A和B的连接关系可能很复杂,但无非就是这三种基本情形的组合。

传输流程

主机A在本机的路由表中查询匹配主机B的IP的网络号;

如果能够查询到,说明主机B和主机A在同一网段(通常是在同一局域网内),则下一跳即为主机B。主机A在ARP缓存中查找主机B的MAC地址(如没有则先发送ARP广播),然后将数据包封装成帧发送至通信线路上。该帧的源MAC是主机A的MAC地址,目的MAC是主机B的MAC地址。

如果主机A和主机B是网线直连的,那么主机B直接收到主机A发来的帧。

如果主机A和B是通过交换机相连的,交换机的某个端口收到主机A发来的帧,然后根据帧中的目的MAC地址在MAC地址表中查询对应的转发端口。如果找到了,直接从该端口转发出去;如果没找到,则在除了接收到数据包以外的所有端口进行转发(广播)。

如果主机A和B是通过路由器相连的,路由器的某个端口收到主机A发来的帧,其后的处理流程见步骤4。

如果不能查询到,说明主机A和主机B不处于同一网络中,需要通过网关来进行跨网络的通信。主机A会通过默认网关(通常是路由器)来提交报文,即下一跳是路由器。主机A根据网关的IP在自己的ARP缓存中查找对应的MAC地址(如没有则先发送ARP广播),然后将数据包封装成帧发送至通信线路上。该帧的源MAC是主机A的MAC,目的MAC是路由器的MAC。

当网关路由器接收到数据帧时,首先提取包头中的目的MAC地址,在MAC表进行查询。如果找到对应项,则按对应的端口进行转发(这一步实现了与交换机一样的功能);如果没找到对应项,则提取数据包包头中的目的IP。

如果目的IP是自己(这是可能的,比如ping路由器),则交由上层处理。

如果目的IP不是自己,则需要进行转发,在路由表中查询目的IP的转发端口和下一跳IP。若找到了对应的路由表项,则按照路由表项转发;若没找到对应的路由表项,则按照缺省路由进行转发。转发时,源和目的IP地址不变,源MAC地址改为转发端口的MAC地址,目的MAC地址改为下一跳IP的MAC地址。

Attention

如果主机A和主机B位于同一网络,并通过路由器相连,主机A发送数据包至主机B,目的MAC地址是主机B。路由器接收到主机A发送的包,取目的MAC地址在自身MAC表中查询,通常情况下是能查到的。但如果查不到,路由器不会进行广播(在每个端口都转发),因为它不知道这个MAC地址是本网段的还是外网的。路由器会进一步查询目的IP,确定转发端口,修改源和目的MAC地址,然后转发出去。所以说,路由器是包含交换机功能的,并且也首先进行交换机应做的工作(但不会进行广播),这使得内网之间的数据传输更快。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息