网络通讯之三次握手与四次挥手

网络连接三次握手

什么是三次握手呢?

建立一个TCP连接,需要客户端和服务端总共发送三个包以确认连接的确立,这个过程叫做三次握手。

第一次握手:客户端请求建立连接

第二次握手:服务端应答客户端,并请求建立连接

第三次握手:客户端针对服务端请求确认应答。

三次握手的原理图

先解释下其中的名词

1、SYN=1, TCP报文里的标记位,代表知道了要进行建立连接

2、seq = 12541 序列号,随机值

3、ACK=1 应答的标记位

4、ack = 21548 随机值,应答的序列号

三次握手步骤

1、客户端发送ACK=1,序列号seq = 12541(随机值),发给服务端后,客户端的状态改为SYN_SENT,代表已发送请求。

2、服务端接收到报文之后,取出判断SYN=1,代表要进行请求连接,取出seq,进行+1,赋值给应答的序列号ack,同时发送SYN=1,代表请求建立连接,ACK=1,代表进行了应答,同时发送ack,与服务端的序列号seq=21547,给客户端,把服务端状态改为SYN_RECEIVED

3、客户端收到服务端的返回值后进行解析,得到SYN=1,解析ack是不是发送的seq+1,相等的话,代表服务端同意建立连接, 此时,再给服务端发送ACK=1,ack = 接收的seq+1,再发送给服务端,告诉服务端已经收到了,状态改为ESTABLISHED

4、服务端收到信号,解析得到ACK=1,再判断接受的ack = seq+1,符合,代表连接成功,服务端的状态也改为ESTABLISHED

为什么需要三次握手呢?

TCP是可靠的传输协议,TCP是面对连接,需要双方都必须维护一个序列号,告诉对方,哪些是我收到的,没收到是要重发,所有三次握手告诉通讯双方,序列号起始值,确认对端收到了序列号。

如果第一次客户端发送的ip是假的,服务器发送的第二次报文永远到不了一个正确位置,服务器就会在接收态等待,等第三次发送,但是客户端不会有应答。

这样可以保证TCP连接的可靠性。

网络断开连接之四次挥手

那么什么是四次挥手呢?

断开一个TCP连接,需要客户端与服务端共发送4个包以确认连接的断开

第一次挥手: 客户端发送关闭请求

第二次挥手:服务器响应客户端关闭请求

第三次挥手:服务器发送关闭端请求

第四次挥手:客户端发送关闭确认请求

四次挥手原理图

先解释下其中的名词

FIN=1: finish的报文,代表不再发送数据

FIN_WAIT: finish等待

TIME_WAIT:客户端等待时间

MSL:最长报文段寿命(存活的最长时间 RFC 2分钟)

CLOSE:等待关闭状态

CLOSED:已关闭状态

四次挥手步骤

1、客户端主动发起close()关闭请求,将FIN=1,seq传给服务端,此时客户端状态改为FIN_WAIT_1,报文传到服务端后,客户端不再发送数据。

2、服务端解析客户端报文后,将seq+1,与ACK=1,发给客户端,给客户端的应答,此时服务端状态改为CLOSE_WAIT

注意:CLOSE_WAIT时,虽然服务端接收不到数据,但是还可以给客户端发送数据,客户端可以接收到数据。

3、服务端再给客户端发送关闭请求,FIN=1,seq(随机值),发送后,服务端状态改为CLOSE

4、客户端收到服务端的请求关闭后,给服务端发送应答ACK=1,seq= 解析的seq+1,此时客户端变为TIME_WAIT状态。

5、服务端接收到客户端报文后,解析,判断FIN与seq的值,正确,服务端变为closed状态,此时服务端已关闭

6、客户端在TIME_WAIT状态下,等待2*MSL的时间,时间到了,变为CLOSED状态,此时客户端关闭。

为什么需要四次挥手呢?

TCP是全双工模式,必须确保双方在同一个时刻既可以读,也可以写,服务端与客户端可以互相发送和接收请求,所有必须要进行四次挥手,才能确保断开的稳定。

为什么有TIME_WAIT状态呢?

服务端发送一个FIN报文给客户端,但是如果出现意外情况,丢失了,服务端会重新发送一次报文,客户端要再进行一次应答,所有客户端必须要存活一点时间来保证可以给应答。

端口可能冲突,A发了8080端口,B起来,也使用8080端口,定义一个TIME_WAITING状态,这个状态下,端口不允许被使用。必须确保closed之后才能继续调用。 这样保证已经发起关闭后接收的报文有足够的诗句被识别且丢弃。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值