一次完整请求的图解
逐层来拆解
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的状态是同步的)