7.13一次完整的Http请求过程

7.13一次完整的Http请求过程

一次完整请求的图解

逐层来拆解

TCP/IP协议三次握手

首先根据OSI七层模型--->实际应用是四层,这两个协议分别位于传输层(TCP)和网络层(IP)

TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议

数据进入协议栈以后每一层都会封装对应的头部或者尾部信息:

数据的封装和解封装的过程

TCP三次握手

TCP的特点:

  • 面向连接的:--->无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。

  • 连接的进行:

    • 三次握手进行初始化

    • 三次握手的目的:

      • 同步连接双方的序列号和确认号并交换 TCP窗口大小信息。

一次详细的TCP三次握手过程:

TCP的报文段分析

暂时需要的信息:

  • ACK:TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1

  • SYN(synchronization):连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,SYN置1就表示这是一个连接请求或连接接受报文。

  • FIN(finish):终结,用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。

什么是序号?

TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。其特点是

  • 整个要传送的字节流的起始序号必须在连接建立啥时设置

三次握手的整个过程:

  • 由Client发出请求连接即 SYN=1 ACK=0 , TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此声明自己的序号是 seq=x--->理解为:告诉服务器需要同步,所以syn=1,但是没有建立连接。所以ack=0

  • Server 进行回复确认,即 SYN=1 ACK=1 seq=y, ack=x+1.--->这时在服务端已经收到了syn同步请求,所以回应syn=1告诉Client已经同步。然后由Server向Client建立TCP连接。所以ack=1。

  • Client 再进行一次确认,但不用SYN 了,这时即为 ACK=1, seq=x+1, ack=y+1.--->为什么需要第三次握手?因为在Server端看来已经建立了连接,所以ack=1如果Client没收到ack=1这个返回信号则默认没有连接成功,所以Client要告诉Server自己的ack也已经=1建立了连接了。

(可以理解为ACK=1是确保双方都能够发送信息和接收信息,syn是确保Client和Server的状态是同步的)

这样Client和Server就建立起了一个套接字接口通道(socket)

It's a lonely road!!!
原文地址:https://www.cnblogs.com/JunkingBoy/p/15008012.html