本文主要是介绍IP数据包传输的完整过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
主机A与主机B通信,A Ping B,图1:A-交换机-B,AB同一子网
(1)ping数据包用的是ICMP协议,IP协议的一个子协议,位于三层,包含A的IP,B的IP,三层进行IP封装成包,进入二层
(2)A,B处于相同子网,查看缓存中对与目的对应得B第2层mac地址,如果存在,直接进行第2层封装成帧,经物理层信号编码,以0101010010这样的bits流传输在网络介质上。
(3)如果不存在B的MAC,则发送ARP广播请求B的MAC,ARP数据包经物理层进入交换机端口,需要进行源端口号学习,目的端口查找,B响应ARP请求,交换机又可以学习一目的MAC地址与哪个端口对应,在下次传送数据时就不再需要对所有端口进行广播了。B通过ARP单播把B的MAC响应给A,此时再返回(2)的处理过程。
(4)当再进行A与B之间数据包转发,将直接用B的MAC地址封装,数据转发得以高速交换
主机A与主机C通信,A Ping C,图:A-交换机-路由器M-路由器N-交换机-C,AC不同子网
(1)两个机器不在同一子网内,A要与目的C通信,A要向“缺省网关”发出ARP包,而“缺省网关”的IP地址已经在A系统软件中设置。这个IP地址实际上对应路由器M的E0的IP地址。所以A对“缺省网关”的IP地址广播出一个ARP请求时,路由器M的E0口的MAC回复给A,此时A数据包的目的MAC替换为M的E0口MAC。
(2)MAC替换后,经物理层,传输到交换机物理层,再传到交换机数据链路层,再经数据数据链路层到物理层。
(3)经bit流传到路由器M的物理层,然后传到数据链路层,二层解封装,目的IP与路由器M三层IP路由表比较,若匹配正确,交给上层处理,否则会缓存数据包内容,然后根据目标地址查找路由表找到相关表项,得到NEXT HOP及出接口的MAC地址,用这两个地址作为新的目的及源MAC地址封装事先缓存的数据包,然后转发,这个过程称为帧的重写(REWRITE)。
(4)重复进行MAC替换后, 在路由器N中,找到与目的IP匹配表项,若N中存在C对应的MAC表项,则数据传输到C网络层,否则N发送ARP广播请求C的MAC。
(5)当C收到A的数据包后,再从A到C进行一次反向MAC替换过程。反向过程中,每一步省略掉ARP请求NEXT HOP的MAC,因为MAC表已经建立起来。
总结:
IP报文传输过程包括:
1. Host sends packet to default gateway(主机将数据包发送到默认网关)
2. Packet placed in frame(数据包被封装入帧)
3. Router receives frame(路由器接到帧)
4. Router finds destination network in route table(路由器在路由表中发现目标网络)
5. Router chooses next hop toward destination(路由器选择一个更接近目标的下一跳)
6. MAC address of next hop determined(下一跳的MAC地址被确定)
7. Packet placed in frame(数据包被封装入帧)
8. Repeats steps 2 through 7 as necessary(如果需要的话,重复步骤2~7)
9. Router receives frame(路由器接到帧)
10. Router finds network directly connected(路由器发现直连网络)
11. MAC address of end host determined(最终主机的MAC地址被确定)
12. Packet placed in frame to final destination(帧中的数据包被发送到最终主机)
在数据包端到端的传输过程中,逻辑地址始终不会发生改变,而MAC地址则随着具体链路的不同而不同。
路由器在某一个入接口上接收到数据帧后,先检测目的地是否是自己。若是,则交给上层处理,否则会缓存数据包内容,然后根据目标地址查找路由表找到相关表项,得到NEXT HOP及出接口的MAC地址,用这两个地址作为新的目的及源MAC地址封装事先缓存的数据包,然后转发,这个过程称为帧的重写(REWRITE)。
ARP(Address Resolution Protocol,地址解析协议)有以下特点:
ARP由ARP Request(广播)与ARP Reply(单播)组成。
只有当发送方认为目标主机与自己位于同一逻辑网络(同一网段),ARP Request才会发出。
属于本地的MAP(不同于FR MAP)IP地址与MAC地址均属于同一个设备(接口)。
封装
所谓封装是指在发送方发生的自上而下的过程——在每一层为应用数据添加上特定的头部/尾部信息(PDU,Protocol Data Unit,协议数据单元)
解封装
所谓解封装是指在接收方发生的自下而上的过程——逐层的去掉头部以及尾部信息
这篇关于IP数据包传输的完整过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!