CCNA-数据包在网络设备直接的通信流程
工作以来,感触最深的就是很多人学完了网络,甚至做了几年项目,还没有搞明白数据包的走向问题以及设备的转发原理。导致工作过程中出现问题,在拍错的时候一头雾水,抓耳挠腮,今天我用这个图简单说说PC1 访问 PC2 的一个HTTPS的WEB网站的数据包走向问题(最后附带了TCP包头和IP包头的格式,基础不好的可以先看最后两个图得内容):
先看拓扑图:
大家可以瞅瞅我下面总结的流程,感觉不错的话可以记下来PC1 地址192.168.1.100/24,网关地址192.168.1.1----也就是路由器f0/0口的地址;
PC2地址172.16.1.100/24,网关地址172.16.1.1----也就是路由器f1/0口的地址。
下面从OSI七层模型对数据包进行封装,封装完毕通过物理线路发送出去,结合路由器交换机工作原理进行描述:
1、PC1在应用层发起个目标IP为172.16.1.100的Https请求。
2、传输层(TCP层)接到上层请求的数据,将数据分段并加上传输层报头(也就是TCP包头,目的端口号为443)。下传到网络层。
3、网络层接收来处上层的数据后,根据IP协议(三层)进行封装,添加PC1的IP为源IP为和PC2的IP为目标IP后封装成数据包,同时协议号位6(TCP的协议号,标识包头里面是TCP的内容)。下传到数据链路层(二层),因PC1 IP与PC2 IP不在同一网段,所以数据包将发往网关路由条目的下一跳,也就是路由器F0/0口。
4、数据链路层接收网络层封装好的数据包后,继续进行封装帧头,添加源MAC地址为PC1的MAC地址,目标MAC地址则查询自己的ARP缓存表以获取网关MAC地址(路由器F0/0口的MAC)。如果PC1 ARP缓存表中没有网关对应的MAC地址,则PC1发出一个ARP广播报文。ARP报文中源MAC地址为PC1 MAC地址,所要请求的是网关IP对应的MAC地址.
5、交换机SW1从F0/0接收到ARP广播帧后,检查自己ARP缓存表中是否有与F0/0口相对应PC1的MAC地址。没有,则将PC1MAC地址与F0/0接口对应起来,存储到交换机SW1的ARP缓存表中。然后将该ARP请求报文进行除F0/0口以外的其他所有端口进行泛洪。
6、Router收到ARP广播后,进行解封装,发现所要请求的MAC地址是自己的。则Router将PC1的MAC地址写入ARP缓存表中。然后向 PC1发送一个ARP单播回应。该单播消息包括目标IP为PC1 IP,目标MAC为PC1 MAC地址,源IP为Router的F0/0口IP,源MAC为 Router的F0/0的MAC。
7、交换机通过F0/1口收到ARP单播帧,交换机同样检查MAC表,然后将F0/1口与Router的F0/0(ARP单播包里面的源MAC)的MAC地址对应起来,存入MAC缓存表中,然后转发该帧。
8、PC1接收到Router的ARP应答帧后,将Router的F0/0的MAC地址存入ARP缓存中(缓存默认4个小时超时),并将Router的F0/0的MAC地址作为目标地址封装到数据帧中。发给下层(物理层)进行网络传输。
9、Router的F0/0接收这个帧后,看目标mac地址是否指向自己。是,PC2则将帧头去掉,然后检查目标IP地址,发现这个目标IP不是自己,刚不再进行解封装。
10、Router在自己的路由表中检查自己的是否有去往目标地址的路由,没有则丢弃该帧。有,路由器经检查发现是去往与F1/0口直连的网段。则路由器对数据包进行二层封装成帧,源IP为PC1的IP,源mac地址为Router F1/0口的MAC地址,目标IP为PC2的IP,目标MAC地址则检查自己的ARP缓存表获取。如果没有,则发送ARP请求报文(这里就不再描述ARP请求过程了)。
11.Router把二层帧封装完毕,完后把数据帧发给SW2,SW2查看MAC地址表,根据之前ARP的映射缓存表项通过F0/1口转发数据帧。
12.PC2收到数据帧拆开最外面的帧头,一看目的MAC是自己,他继续拆IP包头
15、PC2拆开IP包头,发现目标IP和自己匹配,则继续拆封装,发现IP里面协议号是6,代表是TCP的数据,将数据向上层传输。
16、传输层(TCP)接收来自下层的Https请求TCP报文,则去掉TCP报头,向应用层传送。
17、应用层收到Https请求后,发送一个Https回应报文给PC1
回包过程同理。