用TCPIP给你讲数据通信过程太会玩了
2024-03-04 次
用TCPIP给你讲数据通信过程太会玩了给你分享个华为交换机配置指南,包括VLAN、MAC、QinQ、MSTP等,有各种协议的原理描述,也有详细的配置步骤。
(也被称为DoD模型,上图我贴出的并不是标准的TCP/IP模型,为了方便下文的阐述,这里给出的是一个TCP/IP模型与OSI模型的对等模型。)
它将整个数据通信的任务划分成不同的功能层次(Layer),每一个层次有其所定义的功能,以及对应的协议。
打个比方,对于一家公司而言,一笔业务需要各个部门相互协同工作才能完成,部门与部门之间既相互独立,但是又需要相互配合。
根据上图所示的网络拓扑(Topology),我们来分析一下PC访问Server的WEB服务的详细通信过程。
(因此可能会忽略部分技术细节,例如DNS、TCP三次握手等,这些技术细节这里暂不做讨论哈。)
当然这个数据最终要传递到Server并“递交”到Server的HTTP应用来处理,但是HTTP不关心数据怎么传、怎么寻址、怎么做差错校验等等。
这些事情交由专门的Layer来完成,所以HTTP应用数据还的经过一番“折腾”才能从PC传到Server,OK GO。
由于HTTP基于TCP,因此这个应用数据交由TCP/IP模型中的主机到主机层(第4层)进一步处理。
在该层,上层HTTP应用的数据被封装上一个TCP的头部(可以简单的理解为套了一个TCP的信封)。
源端口号为随机产生的端口号(是PC本地专门用于本次会话的端口)开云网址·(中国)官方网站,目的端口号为80(HTTP服务对应的默认端口号是80)。
下一个层是网络层,也叫因特网层(第3层),处于这个层的IP协议为这个上层下来的数据封装上一个IP头部(在之前的基础上又套了一个信封,如下图所示)。
而协议号字段则存放的是值6,这个值是一个众所周知(Well-Known)也就是行业约定的的值。
该值对应上层协议类型TCP,表示这个IP头后面封装的上层协议为TCP(形象点的描述是,协议字段用于表示这个IP信封里装的是一个TCP的信封)。
为了让这个IP数据包能够在链路上传输,还要给数据包封装上一个数据链路层的头部,以便该数据能够在链路上被顺利传输到链路对端。
由于我们这里是以太网链路,因此上层下来的IP数据包被封装上一个以太网的数据帧头(再增加一个信封)。
显然,目的地与自己并不在同一个网段,因此需要借助自己的网关,让网关来帮助自己将数据包转发出去。
另外,以太网数据帧头的类型字段写上0x0800这个值,表示我这个数据帧头后面封装的是一个IP包。
然后会采用相应的机制检查一下数据帧在传输过程中是否有损坏。如果没有损坏,那么就瞅瞅数据帧头部中的目的MAC地址,看看目的MAC地址是不是我收到这个数据帧的GE0/0/0口的MAC。
它查看数据帧头部的类型字段,发现是0x0800,于是它知道里头装的是一个IP包,接着它将以太网数据帧头剥去或者说解封装,然后将里面的数据移交给上层IP协议继续处理。
结果发现有,并且这个路由条目指示它把数据包从从GE0/0/1口送出去交给192.168.12.2这个IP。
于是它不再继续拆开IP头看包裹里头的东东了,而是乖乖的将IP数据包往下交还给数据链路层去处理。
现在数据链路层继续处理上层下来的IP包开云网址·(中国)官方网站,它为这个IP包封装上一个新的以太网帧头,帧头中源MAC地址为R1的GE0/0/1口的MAC:
,目的MAC是这个数据包即将交给的下一跳路由器192.168.12.2对应的MAC。当然初始情况下R1是不知道这个MAC的,因此又是一轮ARP广播并最终拿到这个MAC:。
于是它将这个值填写在目的MAC字段中。完成新的数据帧头的封装后,R1把这个数据帧变成1010101通过电气信号传递给R2。
发现目的MAC填写的就是自己接口的MAC,并且帧头中类型字段写的是0x0800。(指示上层协议是IP,也就是数据帧头内封装的是一个IP包)。
于是它知道,这个数据包不是发送给自己的。它拿着目的IP地址192.168.2.1在路由表中去查,结果发现,R2的GE0/0/1口就连接着192.168.2.0/24网络,
于是查看类型字段,发现是0x0800,知道这里头装的是一个IP包,于是将帧头剥去,将内层的IP数据包交给上层协议IP去处理。
而TCP在处理这个数据的时候,查看TCP头部的目的端口号开云网址·(中国)官方网站,发现目的端口号是80,而本地的TCP80端口是开放的,开放给HTTP应用了。
接着它将TCP头部剥去,交给HTTP应用,好了终于从PC发送出来的HTTP应用数据,到达了目的地 –Server的HTTP应用的手中。