数据包从源主机到达目标主机的过程


情景一:同一广播域内,两台主机通信过程

———————————————————————————————————————————————————————————————————

两主机要通信时,要把应用数据封装成IP包,然后再交给下一层数据链路层继续封装成帧,之后根据MAC地址把数据从一台主机发送出去,传送到另一台主机。
如图,当n0和n1通信时,假如n0知道n1的IP地址(IP地址一般由由用户手动输入或者应用程序填充,或者通过DNS域名解析协议得知)却不知道它的MAC地址。通信步骤如下:

  • n0发送一个ARP广播请求(源IP是n0,目的IP是n1,源MAC是n0,目标MAC为FFFF:FFFF:FFFF)给同一广播域中的所有成员
  • 交换机sw0从自己的1接口收到该广播包,然后读取该帧的源MAC地址和目的MAC地址,由于sw0刚启动时,它的MAC表是空的,所以它会把n0的MAC地址和与之对应的接口1放到一张表里,这张表就是MAC地址表。然后交换机从其它接口广播该帧。
  • 其它主机收到该帧后,因为是广播帧,所以主机都可以拆掉二层的封装,查看目标IP地址是不是自己。目标IP不是自己的,丢弃此包。目标IP是自己的,首先把源主机的IP地址和MAC地址映射关系存入自己的ARP映射表中,然后构建ARP响应数据包,此时,二层的源MAC为被解析设备的MAC,目的为ARP解析发起者的MAC。这个响应不再以广播形式发送,而是直接发给主机A。
  • sw0收到应答包,又会检查源MAC、目标MAC,把n1的MAC和自身的接口2放进MAC地址表中。再查看自己的MAC地址表,发现存在目标MAC与自己的1接口对应,那它就会直接把这个应答包从接口1发送出去。
  • 主机n0收到应答包,发现目标MAC地址是自己,就会处理这个包。并把n1的MAC与IP放进自己的ARP缓存表中。这时,主机n0知道了n1的MAC地址了,就可以进行二层封装发送数据了。

情景二:跨路由的数据传输
——————————————————————————————————————————————————————————————————
  • 当n0和n2通信时,n0检查发现n2与自己处于不同的网段。所以,n0将数据包发送给它的网关,也就是路由r0上的f0/0接口。此时源IP和源MAC是n0自己的,目标IP是n2的,目标MAC是r0上接口f0/0的(如果n0不知道f0/0的MAC地址,与场景一相似,n0会发一个目标IP为自己的网关的ARP广播来得到f0/0的MAC地址)
  • 数据包到达r0时,路由器r0拆掉二层封装,查看目标IP是否是自己,由于目标IP不是自己,路由器r0查看自己的路由表,找出到达n2网段的路由,如果没有相关条目,就直接丢弃。
  • r0查看路由表后发现到达n2网段的出接口是f0/1,下一跳IP为路由r1的f0/1接口。于是经过二层封装,把数据包经由f0/1接口转发至路由器r1。此时,数据包的源IP是n0,源MAC是f0/1,目标IP是n2,目标MAC是r1的f0/1接口。
  • r1收到数据包后,发现目标MAC是自己,拆掉二层封装,检查目标IP是否是自己,发现不是,r1查找自己的路由表,发现目标IP跟自己的f0/0接口在同一网段,于是经过二层封装后将数据包发送到f0/0接口上。此时,数据包的源IP是n0,源MAC为r1的f0/0,目标IP是n2,目标MAC是n2。(如果r1上的ARP缓存表中没有n2的MAC地址,则接口f0/0会发送一个ARP广播给它相连的广播域中,这个ARP请求包的源IP是接口F0/0的IP 源MAC也是F0/0的MAC  目标IP是N2 目标MAC为12个F,假如n2的IP地址和MAC地址的映射关系已经在r1的ARP缓存中了,那就直接对数据包进行二层封装)。
  • 包达到n2,n2发现目标MAC是自己,收下。

 总结
——————————————————————————————————————————————————————————————————
同一广播域中,包的源、目标IP,源、目标MAC是真实的两台主机上的IP与MAC地址。

跨路由中,包的源IP与目标IP始终不会发生变化,源和目标MAC根据所经过的路由接口不同而发生相应变化。

 
参考:http://blog.chinaunix.net/uid-23886490-id-3038875.html
 
 

主机发送IP数据包过程主要包括以下几个步骤: 1. 应用层发送数据:应用层产生需要发送的数据,并通过套接字接口将数据传递给传输层。 2. 传输层封装数据:传输层在将数据发送给网络层之前,需要将数据进行封装,添加传输层协议的首部,如TCP或UDP首部。 3. 网络层封装数据:网络层在将数据发送给数据链路层之前,需要将数据进行封装,添加网络层协议的首部,如IP首部。 4. 数据链路层封装数据:数据链路层在将数据发送给物理层之前,需要将数据进行封装,添加数据链路层协议的首部和尾部,如以太网帧首部和尾部。 5. 物理层发送数据:物理层将封装后的数据通过物理介质进行传输,如通过网线或者无线信号发送数据。 6. 路由选择和转发:在数据包从源主机发送到目标主机过程中,可能需要经过多个路由器进行转发,每个路由器根据路由表选择下一跳,并将数据包进行转发。 7. 接收端接收数据:当数据包到达目标主机,从物理层开始,逐层解包,将数据传递给目标应用程序。 总的来说,主机发送IP数据包过程就是不断进行封装和转发的过程,每层协议都会对数据进行封装,并添加相应的协议首部,以便下一层协议进行处理和传输。在传输过程中,还需要进行路由选择和转发,以确保数据能够准确地到达目标主机
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值