美文网首页
HTTP网络分层

HTTP网络分层

作者: 我要离开浪浪山 | 来源:发表于2022-10-16 22:46 被阅读0次

    一、TCP/IP 网络分层模型

    TCP/IP 当初的设计者真的是非常聪明,创造性地提出了“分层”的概念,把复杂的网络通信划分出多个层次,再给每一个层次分配不同的职责,层次内只专心做自己的事情就好,用“分而治之”的思想把一个“大麻烦”拆分成了数个“小麻烦”,从而解决了网络通信的难题。

    你应该对 TCP/IP 的协议栈有所了解吧,这里我再贴一下层次图。

    image.png

    TCP/IP 协议总共有四层,就像搭积木一样,每一层需要下层的支撑,同时又支撑着上层,任何一层被抽掉都可能会导致整个协议栈坍塌。

    1、http网络4层分布

    1、application layer(应用层):各种面向具体应用的协议,如HTTP、Telnet、SSH、FTP、SMTP等等。传输单位:消息、报文(message)。
    2、transport layer(传输层):这层次协议的职责是保证数据在IP地址标记的两点之间“可靠”地传输,TCP、UDP协议工作层。传输单位:段(segment)。
    3、internet layer(网络互连层):IP协议就处在这一层。因为IP协议定义了“IP地址”的概念,在“链接层”的基础上,用IP地址取代MAC地址,把局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时把IP地址再“翻译”成MAC地址即可。传输单位:包(packet)。

    4、link layer(链接层):负责在以太网、WiFi这样的底层网络上发送原始数据包,工作在网卡这个层次,使用MAC地址来标记网络上的设备,也叫MAC层 ,传输单位 :帧(frame)。

    两个协议:TCP 传输控制协议,可靠。UDP 用户数据报协议,不可靠,无连接的协议。

    2、TCP的三次握手流程:

    • 第一次握手:建立连接。客户端发送连接请求报文段,将 SYN 设置为 1、Sequence Number(seq)为 x;接下来客户端进入SYN_SENT状态,等待服务端的确认。
    • 第二次握手:服务器收到客户端的 SYN 报文段,对 SYN 报文段进行确认,设置Acknowledgment Number(ACK)为 x+1(seq+1);同时自己还要发送 SYN 请求信息,将SYN设置为1、seq为y。服务端将上述所有信息放到SYN+ACK报文段中,一并发送给客户端,此时服务端进入SYN_RCVD状态。
    • 第三次握手:客户端收到服务端的SYN+ACK报文段;然后将ACK设置为y+1,向服务端发送ACK报文段,这个报文段发送完毕后,客户端和服务端都进入ESTABLISHED (TCP连接成功)状态,完成TCP的 三次握手。

    3、TCP的四次挥手过程:

    • 第一次挥手:客户端设置seq和ACK,向服务端发送一个FIN报文段。此时,客户端进入FIN_WAIT_1 状态,表示客户端没有数据要发送给服务端了。
    • 第二次挥手:服务端收到了客户端发送的FIN报文段,向客户端回了一个ACK报文段。
    • 第三次挥手:服务端向客户端发送 FIN 报文段,请求关闭连接,同时服务端进入LAST_ACK状态。
    • 第四次挥手:客户端收到服务端发送的FIN报文段,向服务端发送ACK报文段,然后客户端进入 TIME_WAIT状态。服务端收到客户端的ACK报文段以后,就关闭连接。此时,客户端等待2MSL(最大报 文段生存时间)后依然没有收到回复,则说明服务端已正常关闭,这样客户端也可以关闭连接了。

    4、TCP/IP 协议栈的工作方式:

    image.png

    HTTP 协议的传输过程就是这样通过协议栈逐层向下,每一层都添加本层的专有数据,层层打包,然后通过下层发送出去。接收数据则是相反的操作,从下往上穿过协议栈,逐层拆包,每层去掉本层的专有头,上层就会拿到自己的数据。

    把 HTTP 利用 TCP/IP 协议栈传输数据想象成一个发快递的过程。
    假设你想把一件毛绒玩具送给朋友,但你要先拿个塑料袋套一下,这件玩具就相当于 HTTP 协议里要传输的内容,比如 HTML,然后 HTTP 协议为它加一个 HTTP 专用附加数据。
    你把玩具交给快递小哥,为了保护货物,他又加了层包装再贴了个标签,相当于在 TCP 层给数据再次打包,加上了 TCP 头。
    接着快递小哥下楼,把包裹放进了三轮车里,运到集散点,然后再装进更大的卡车里,相当于在 IP 层、MAC 层对 TCP 数据包加上了 IP 头、MAC 头。
    之后经过漫长的运输,包裹到达目的地,要卸货再放进另一位快递员的三轮车,就是在 IP 层、MAC 层传输后拆包。快递员到了你朋友的家门口,撕掉标签,去除了 TCP 层的头,你朋友再拆掉塑料袋包装,也就是 HTTP 头,最后就拿到了玩具,也就是真正的 HTML 页面。
    这个比喻里省略了很多 TCP/IP 协议里的细节,比如建连、路由、数据切分与重组、错误检查等,但核心的数据传输过程是差不多的。

    二、OSI 网络分层模型

    OSI全称是开放式系统互联通信参考模型”(Open System Interconnection Reference Model)。

    OSI 模型分成了七层,部分层次与 TCP/IP 很像,从下到上分别是:

    image.png

    1、第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
    2、第二层:数据链路层,它基本相当于 TCP/IP 的链接层;
    3、第三层:网络层,相当于 TCP/IP 里的网际层;
    4、第四层:传输层,相当于 TCP/IP 里的传输层;
    5、第五层:会话层,维护网络中的连接状态,即保持会话和同步;
    6、第六层:表示层,把数据转换为合适、可理解的语法和语义;
    7、第七层:应用层,面向具体的应用传输数据。

    OSI不是一个标准或者说它只是一个参考。

    但 OSI 模型也是有优点的。对比一下就可以看出,TCP/IP 是一个纯软件的栈,没有网络应有的最根基的电缆、网卡等物理设备的位置。而 OSI 则补足了这个缺失,在理论层面上描述网络更加完整。

    三、两个分层模型的映射关系

    现在我们有了两个网络分层模型:TCP/IP 和 OSI,新的问题又出现了,一个是四层模型,一个是七层模型,这两者应该如何互相映射或者说互相解释呢?

    好在 OSI 在设计之初就参考了 TCP/IP 等多个协议,可以比较容易但不是很精确地实现对应关系。

    image.png

    1、第一层:物理层,TCP/IP 里无对应;
    2、第二层:数据链路层,对应 TCP/IP 的链接层;
    3、第三层:网络层,对应 TCP/IP 的网际层;
    4、第四层:传输层,对应 TCP/IP 的传输层;
    5、第五、六、七层:统一对应到 TCP/IP 的应用层。

    OSI 的分层模型在四层以上分的太细,而 TCP/IP 实际应用时的会话管理、编码转换、压缩等和具体应用经常联系的很紧密,很难分开。例如,HTTP 协议就同时包含了连接管理和数据格式定义。

    所谓的“四层负载均衡”就是指工作在传输层上,基于 TCP/IP 协议的特性,例如 IP 地址、端口号等实现对后端服务器的负载均衡。

    所谓的“七层负载均衡”就是指工作在应用层上,看到的是 HTTP 协议,解析 HTTP 报文里的 URI、主机名、资源类型等数据,再用适当的策略转发给后端服务器。


    链接:https://zhuanlan.zhihu.com/p/389011451
    链接:https://zhuanlan.zhihu.com/p/435312931

    相关文章

      网友评论

          本文标题:HTTP网络分层

          本文链接:https://www.haomeiwen.com/subject/gwkrzrtx.html