Menu

三次握手(个人理解版本)

2018年5月13日 - TCP/IP

TCP结构:

TCP:包括源端口号,目的端口号,序号,确认号,数据偏移,报文长度,ACK(确认号),SYN(同步序号),FIN()

序号:用于对字节流进行编号,序号为100,如果携带数据报文长度为50,下一个序列号为150

确认号:期望收到的下一个报文的长度,列如:B正确收到A发来的报文段,序号为101,携带数据长度为100,B发送给A的报文段201

数据偏移:指的是数据部分距离豹纹起始处的偏移量,实际上指首部的长度。

确认ACK:当ACK=1时确认字段有效,否则无效。TCP规定,在连接建立后所有传送的报文段ACK=1;

同步SYN:在连接建立时用来同步序号。当SYN=1,ACK=0时表示这是一个连接请求报文段。若对方同意建立连接,则报文中SYN=1,ACK=1;

终止FIN:用来释放一个连接,当FIN=1时,表示此报文段的发送方的数据已发送完毕,并要求释放运输连接。

窗口:窗口值作为接收方让发送方设置其发送窗口的依据。接收方的数据缓存空间是有限的。

ack确认号,seq初始号

三次挥手详细解释版本:

假设A为客户端 ,B为服务器端

1.首先B处于LISTEN(监听)状态,等待客户的连接请求。

2.A向B发送连接请求报文段,SYN=1;ACK=0,选择一个初始的序号X。

3.B收到连接请求报文段,如果同意建立连接,则向A发送连接确认报文段,SYN=1,ACK=1,确认号为X+1,同时选择一个初始的序号Y

4A收到B的连接确认报文段后,还要向B发出确认,确认号为y+1,序号为x+1.

5.B收到A的确认后,连接建立。

 

三次握手的意义:为了防止失效的连接请求到达服务器,让服务器错误打开连接。

失效的连接请求是指,客户端发送的连接请求在网络中滞留,客户端因为没有及时收到服务器端发送的连接确认,因此就重新发送了连接请求。滞留的连接请求并不是丢失,之后还是会到达服务器,不进行第三次挥手,服务器会以为客户端重新发送了连接,打开了第二个连接请求,但这不是客户端真正打开的连接,因此客户端不会给服务器发送数据,这个连接就浪费了。

 

 

 

以下为借鉴内容:供参考

TCP协议头部的格式,由于它太重要了,是理解其它内容的基础,下面就将每个字段的信息都详细的说明一下。

URG:此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据;

ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1,为1的时候表示应答域有效,反之为0;

PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队;

RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;

SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1,ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全的主机将会强制要求一个连接严格的进行TCP的三次握手;

FIN: 表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: