分类: 网络与安全
2017-08-20 00:29:47
局域网A中主机A产生的数据包是如何发送至局域网B中的主机B的。下图展示了数据包从主机A中应用程序生成到转发到主机B的过程。
主机A的应用程序先生成应用层数据,应用层数据达到传输层后,传输层根据应用层协议类型,对应用层数据进行TCP或UDP封装,封装好的报文送至网络层进行网络层封装,网络层对数据进行封装时,要添加IP头,IP头中的源IP地址填写主机A的IP地址,目的IP填写主机B所在局域网B映射的B的外网IP地址。IP层数据包之后传输到数据链路层进行数据链路层的封装。一般来讲,局域网采用以太网的组网方式,因此数据链路层是根据MAC地址对帧数据进行转发的。主机A在数据传送开始是不知道主机B的MAC地址的,因此,①主机A会先发送ARP广播数据包至网络,请求主机B的MAC地址。②交换机A接收到ARP广播数据包后,先进行解封装,学习主机A的IP地址和MAC地址,接着对ARP包进行重新封装并继续广播至除接收端口外的所有端口。③路由器接收到该ARP广播数据包后,解封装ARP数据包,发现其中的目的IP地址为外网IP,此时,路由器A将ARP响应包的源MAC设置为自己的MAC地址,目的MAC设置为主机A的MAC地址并发送到交换机A。④交换机A接收到该ARP响应数据包后,发现目的MAC为主机A,因此直接将该ARP响应包转发至主机A。到此,主机A知道了发送数据到主机B需要封装的目的MAC地址。⑤主机A将数据包封装好后发送至交换机A。⑥交换机根据MAC地址将数据都发送至路由器A。⑦路由器A作为局域网A与外网的连接,它同时也要承担网络地址转换的工作,将接收的数据用映射好的外网IP作为源IP进行重新封装,之后将数据转发至外网。(根据NAT地址转换的规则,局域网地址转换为外网地址有三种方式:静态转换、动态转换、端口多路复用。)
外网数据如何被正确的转发至主机B中的过程和上述过程是对称的。
2015.11.16补充
这两天室友问我数据在网络上是怎么传播的,本以为很清楚了,巴拉巴拉给室友讲,结果在讲的过程中发现很多细节的东西还是说不清楚。果然是“绝知此事要躬行”啊,没有实际去跟踪或解析过数据包,了解的也都只是皮毛。今天去乐视面试,又被问到了数据在网络上的转发过程,还好庆幸当时室友问完赶紧去查了查。
一个是关于数据包传输过程中IP地址和MAC地址的变化:
IP地址在传输过程中不会发生改变,除非遇到NAT
MAC地址在传输过程中,在同一个广播域内不发生变化,跨广播域时发生变化。也就是在经过路由器的时候MAC地址会发生改变。
(http://www.cnblogs.com/hnrainll/archive/2012/11/23/2783697.html,这里讲的更清楚)