那为何会说TCP是在HTTP报文外面包了一层TCP的信息?
这得从网络的OSI七层协议说起。TCP协议属于传输层,工作在第4层。而HTTP协议属于应用层,工作在第7层。所有网络传输最后都必须有第1层物理层来完成,也就是0101的物理电信号。上层数据都是被层层封装,最后再转化为物理信号传输的。
1、OSI七层网络模型的来源早在互联网起源的时代,网络通讯并不是统一标准的,而是各家有各家的通讯方法。而OSI七层模型最早是由Honeywell Information System公司的一个小组完成设计的。他们的目的只是在设计数据库系统通讯时,需要一个结构化的分布式通讯体系结构。于是在1977年六提出了分布式系统体系结构(DSA)。它就是7层模型的主题,1978年OSI专家委员会召开会议,达成了共识,认为这个分层结构能满足开放系统的大多数要求,1979年稍做修改就成了最终版本。
2、OSI七层模型的分层结构在OSI七层模型中,将网络通讯分为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层共7个层次。1-4层属于偏机器侧的下层,5-7层属于偏人类侧的上层。每个层次的功能如下:
应用层:它是用户的一个交互接口,通常是采用人类最容易懂的语言展示的。HTTP协议就是我们最常见的应用层协议。这里通过HTTP报文头对应用过程进行控制,比如,定义HTTP版本、缓存、连接状态、传输加密等等表示层:这里是对应用层的一个很好扩展,它主要是将应用层数据进行适当转换格式,以达到最优的通讯效果。比如:对数据进行压缩以减少网络带宽的压力;对数据进行加密方便安全传输。常用的格式有:JPEG、ASCII、EBCDIC等。会话层:这里负责控制会话的建立、管理和终止。它依然属于上层应用。一个会话就类似于两台机器的一次沟通。一个会话可以有很多下层连接。传输层:这里主要定义数输数据的协议端口号,以及流控和差错校验。其实也就是为了每个协议不冲突,他们用不同端口来区分不同协议。同时,流控和差错校验是为了保障传输不出错和优先级。TCP和UDP就是工作在这里。这里是可以理解为对上3层的数据进行多通道传输。比如:我们一次HTTP请求,可能需要获取文字、图片、视频三类资源。文字图片可能就走TCP 80端口,优先级一般,视频则可能走RTSP协议,优先级高。网络层:主要是进行逻辑寻址和不同网络之间的选路。可以理解为网络世界的导航、也可以理解为网络世界的路牌。它可以帮助数据包找到最优的路径去传输。数据链路层:这里主要是进行硬件寻址和建立逻辑连接,也有差错校验功能。如果把网络层的寻址比喻为找到每个人唯一名字(IP),那这里就是找到名字对应的身份证号码(MAC地址)。MAC地址就是硬件地址,每一个网口都有一个全球唯一MAC地址。物理层:这里最容易理解,就是定义网络线路的电气特性,并控制通讯的建立、传输、断开三种物理状态。我们常常用到的RJ45网线就是这里定义的。3、计算机网络通讯是如何完成了解了OSI七层模型,我们来看看计算机网络通讯到底如何完成的。假设电脑A要用网页访问网站B。那么网络会如何来通讯呢?当电脑A输入网址敲回车,计算机会先找你配置的DNS服务器,去找它将网址中的域名翻译成IP地址。得到IP地址后开始进行通讯。
①、电脑A处一直在层层封装
在应用层:A把“自己想要什么东西”这段信息用HTTP报文进行封装,HTTP报文头写明:自己能希望的HTTP协议、传输缓存等等。可以理解为在封装上贴了一个备注。在表示层:如果需要加密,则在表示层把自己的HTTP信息进行加密。到了会话层:A会对上面这个数据报文贴上会话ID、超时信息等等会话控制的关键信息。到了传输层:A会对上3层处理好的数据报文进行再次封装。并加上传输层的控制信息,如TCP协议、80端口、传输窗口等等。到了网络层:A会在传输层封装好的基础上,再次封装上IP报文头。加上控制信息主要有:源IP、目的IP、TTL生存时间、校验和之类的。到了数据链路层:它会在IP报文的基础上,再次封装成数据帧。加上控制信息主要有:物理地址、MTU最大传输单元、校验和等。到了物理层:A把数据帧直接用0101的脉冲电信号发送给对方。②、网络中间传输
电脑A出来的电信号不是直接到网站B。而是和A直连的二层交换机。二层交换机网卡收到后,会将脉冲重新合成数据帧。然后对数据帧的物理地址进行查看,如果本交换机内没有该物理地址。那就转交给网关的三层交换机。三层交换机如果发现数据帧并不是本地的,就需要拆开数据帧查看IP报文头里的IP地址,通过比对自己的路由表,然后找到该发给的下一个路由设备。就这样一跳接一跳,重复着拆包查看地址,然后封包继续传输的动作,直到来到网站B的公网IP。然后由二层交换机查看数据帧的物理地址转交给网站B网口。
③、网站B收到信号就是层层解封装
在物理层:B的网口收到电信号后,立即合成数据帧,然后比对MAC地址是否和自己网卡相同,如果相同则继续,不同则丢弃。在数据链路层:B会除了前面比对地址,还会比自己计算校验和和帧控制信息的校验和是否相同,如果相同表示数据无误,则解封装数据帧。如果有误则丢弃。在网络层:B比对IP报文头,IP地址信息和校验信息如果正确则继续解封装IP报文。不正确则丢弃在传输层:B比对TCP报文控制信息,正确无误则将数据转交给相应应用程序的端口。在会话层:B比对会话层的控制信息,同样需要正确才会将数据转交给表示层。在表示层:如果有加密,这里就进行解密并转交给上层应用。没有则跳过了。在应用层:将收到的HTTP信息传给网站后台程序。(如果是B向A传输资源,A就是可以在浏览器上看到信息了)。★当B收到A的请求后,B回应A则以相反的过程再走一遍。这个过程看起来很啰嗦很复杂,但其实计算机的电信号处理非常快,我们实际应用感觉不到慢。
总结从OSI七层模型来看,TCP只是在传输层进行的控制协议,HTTP是在应用层控制的协议。而计算机要在网络中传输信息,发送方就必须层层往下封装,而接收方则层层往上解封装。从而实现通信过程和控制过程。
感谢阅读,我是数智风,用经验回答问题,欢迎关注评论。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有