技术积累linux

三握四挥过程,三次握手原因,四次挥手原因,TIME_WAIT作用

2019-04-27  本文已影响20人  第四单元

TCP连接的端点

TCP连接的端点是套接字(socket)。
socket=(IP地址:端口号)

TCP的首部

如下图所示,TCP的首部最少有20个字节 ,后面还有4n个字节是可选的。
首部的主要包含:

TCP首部.png

TCP三次握手过程

TCP三次握手.png

三次握手涉及到TCP首部的,同步为SYN,确认位ACK,序号seq,请求号ack.

假设A是客户端,B是服务端。
首先,B处于监听状态,等待客户端的连接请求

第一次:
A向B发送SYN=1,ACK=0,选择一个初始序号seq=x

第二次:
B向A发送SYN=1,ACK=1,确认号ack=x+1 , 同样选择一个序号seq = y

第三次:
A向B发送ACK=1,seq = x+1, ack=y+1

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

为什么需要三次握手

第三次握手是为了防止失效的连接请求到底服务器,让服务器错误地打开连接,白白浪费资源。

假设客户端发送的第一次请求在网络中滞留,客户端得到不到相应后就会重新发送请求建立连接。假设第一次无效的连接,很久后又到达了服务器,假设只有两次握手,则这时服务的就会进入连接建立状态,而客户端却认为这次请求是无效的,服务的还傻傻地等等数据的到来,浪费了资源。如果有三次握手,客户端会忽略服务的第二次握手的请求,使得连接不会建立,避免了资源浪费。

TCP四次挥手

TCP四次挥手.png

TCP的四次挥手主要涉及首部的FIN,ACK,序号,确认号
假设是客户端A首先向服务的B请求接受连接
第一次:A向B发送报文,首部FIN=1,序号seq=u。A进入FIN_WAIT_1状态
第二次:B收到A的请求,发送报文,首部seq=v,ack=u+1,ACK=1 。进入close_wait状态
第三次:B的数据发送完毕,发送报文,首部 ack=u+1,seq = w,ACK=1,FIN=1。进入LAST_ACK状态
第四次:A收到B的断开请求,发送报文 ,首部ack=w+1,seq=u+1,ACK=1。进入TIME_WAIT状态
B收到第四次握手信息后进入close状态

A发送第四次握手后,等等2MSL,进入CLOSE状态

为什么需要四次握手

因为客户端发送FIN连接请求释放连接后,服务器接受请求后进入CLOSE_WAIT状态,这个状态就是为了让服务段发送还没有发送完的数据,发送完成后再发送FIN信号。

TIME_WAIT

客户端收到服务的释放连接的请求后,不是立马进入CLOSE状态,而是还要再等待2MSL。理由是:

上一篇下一篇

猜你喜欢

热点阅读