数据包详细流程解析

在PC上访问internet的网站:

首先,应用层的浏览器会生成一个数据包,
然后这个数据包到了传输层封装上TCP头,
其源端口为本地随机分配的端口,目的端口为80,
接着到下一层网络层封装上IP头,
这时候主机会跟公司DNS服务器通信,
请求解析www.sina.com的IP地址,
DNS服务器应答后主机就知道了新浪的IP地址。
然后主机为这个数据包封装上ip头,
其目的IP是远端服务器的IP,源IP是本地PC的IP,
然后PC会对目的IP进行判断是否为本网段的IP,
判断为非本地IP后向下一层数据链路层。
这时会发送一个ARP请求,
内容是谁是192.168.1.1(网关),
得到应答后PC就有了网关的MAC地址。
所以这时候数据链路层会封装成数据帧,
目的地址为网关的MAC地址。
当报文到达路由器后,路由器会发现这是内部主机发送到internet的报文,需要做NAT,
首先会检查网络地址转换表,看有没有该PC的转换记录,
如果没有的话就会分选择一个未使用的端口号分配给PC,
将wan口的IP地址也分配给PC,
并在网络地址转换表中创建一条转换记录,将发送报文pc的ip填到in_ip,
分配的wan口IP填到out_ip,所选择的端口号填到out_port,
这时报文的源IP也会变成分配的全局IP,源端口会变成分配的端口,目的IP不变。
路由器通过对IP地址进行判断是否为本地网段地址,如果不是又继续发送ARP请求下
一跳的MAC地址,然后封装数据帧的时候目的MAC为下一条网关的MAC,源地址会变成本地网关的MAC而不是
PC的MAC,因为帧经过路由的时候帧头会被丢弃重新封装帧头.
直到发送到服务器,服务器在接收到数据包后,会发送一个确认,其过程跟之前类似,
然后到了主机最后一个路由器的时候,
路由器接收到包后查询转换记录,把out_ip转换成in_ip,out_port转换成in_port,
然后主机就可以收到服务器返回来的SYN和ACK了,

最后再发送一个ACK给服务器双方就算是正式建立连接可以进行通信了。

 

上网时数据包转发的全过程,下面是电脑和网络设备连接简略图:

 

以PC1 ping PC3为例讲述数据包转发过程:

1、当PC1 ping PC3时,发现它们的IP不在同一网段,PC1就将数据包发送至网关(1.1.1.1/24),这时需要知道网关的MAC地址,

      PC1于是查找自身ARP缓存表,如果没有则会发出ARP广播包,包中的地址分别为:

      源 IP     : 1.1.1.2/24                源 MAC    :   a.a.a(PC1)

      目的 IP :   1.1.1.1/24               目的 MAC :   f.f.f

2、交换机SW1从e0/1接口收到数据包,解封后读取数据包的MAC地址,将其写入SW1的MAC地址表,发现该数据包是广播包,加

      上帧头后向来源接口外的所有接口发送数据包,PC2接口收到该数据包发现其目的IP地址(1.1.1.1/24)与自身不符,丢弃该数据

      包并不做回应。经过交换机后的源IP、源MAC、目的IP、目的MAC都不改变。

3、路由器R1接收到数据包,发现其MAC地址为广播地址,接收该包,再解封,发现请求的目的IP地址为自己的IP(1.1.1.1/24),

      需要向源地址进行ARP回复。读取的数据包来源于1.1.1.1/24,源MAC地址为a.a.a。于是向PC1发送数据包,该包中地址为:

      源 IP    :   1.1.1.1/24                源 MAC    :   b.b.b(R1、e0/0)

      目的 IP :   1.1.1.2/24               目的 MAC :   a.a.a(PC1)

4、交换机SW1收到来自R1的数据包,查看源MAC地址为b.b.b,将改地址连同来源的接口号保存到MAC地址表。查看目的MAC地址

      a.a.a,查看MAC地址表,找到与a.a.a的匹配项,向指定接口转发该包,经该接口封装后向PC1进行单播。PC1收到数据包,解

      封后读到源IP为1.1.1.1/24,源MAC地址为b.b.b,PC1得到网关的MAC地址,并保存到ARP缓存表。

5、PC1向PC3发出数据包,包中地址为:

      源 IP     :   1.1.1.2/24                源 MAC    :  a.a.a(PC1)

      目的 IP :    2.2.2.2/24               目的 MAC :  b.b.b(R1、e0/0)

          该包进入SW1,根据目的MAC地址查询MAC地址表后由上接口转出向R1发送,到达接口s0/1,查到数据包MAC地址为自己MAC

      地址,将包解封到IP层,查询路由表:在路由表中查到最优匹配项,查找到下一跳接口IP地址,并发送出去;如果没有最优匹配

      项,则按照默认路由发送,没有默认路由则丢弃数据包,并发送回应包,目的地址不可达。

           查询路由表后得到转发接口为R1s0/1口,下一跳接口的IP地址为3.3.3.2/24,查询ARP表中IP地址为3.3.3.2的接口的MAC地址,

      得到其MAC地址d.d.d;如果表中无匹配项,则通过s0/1口发送ARP广播,请求3.3.3.2的MAC地址。封装好包后,从接口s0/1转发

      数据包,发出去的包MAC地址改变为:

      源 IP     :   3.3.3.1/24                源 MAC    :   c.c.c(R1、s0/1)

      目的 IP :   2.2.2.2/24                目的 MAC :   d.d.d(R2、s0/0)

6、路由器R2接口s0/0接收到数据包,检验MAC地址后接收并解封至IP层,查询路由表,发现转发接口为E0/0,且目的IP地址与接口

      E0/0在同一网段内,查找ARP表中目的IP(2.2.2.2)的MAC地址,得到PC3的MAC地址e.e.e;如果没有查到,则通过E0/0接口

      发送ARP广播包查询IP地址为2.2.2.2的MAC地址。

7、E0/0接口将封装好的数据包发送出去,报地址为:

      源 IP    :   3.3.3.1/24                   源 MAC     :   g.g.g(R2、E0/0)

      目的 IP :   2.2.2.2/24                   目的 MAC :   e.e.e(PC3)

          经过SW2的上接口进入,根据其目的MAC地址查询MAC地址表,如果找到匹配表项,则根据指定接口转发出去;如果没有找

      到,则向除进接口外的所有接口转发出去。

8、PC3接收到SW2发来的数据包,解封检验MAC地址为自己MAC地址e.e.e,接收数据包,包地址表为:

      源 IP :     3.3.3.1/24                  源 MAC    : g.g.g(R2、E0/0)

      目的 IP : 2.2.2.2/24                 目的 MAC : e.e.e(PC3)

      然后向源地址发送ICMP应答数据包,过程相似。

 

  • 16
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值