tcp/ip中三次握手和四次挥手

近期在学习网络基础,对于tcp很多人在讨论,于是便结合自己的认知简单讲一下tcp协议中的三次握手和四次挥手。

一、三次握手和四次挥手的工作原理

1.1 三次握手

第一次握手:客户端向服务器发送一个带有 SYN 标志的数据包,请求建立连接。此时客户端进入 SYN_SENT 状态。

第二次握手:服务器收到客户端的 SYN 数据包后,向客户端发送一个带有 SYN 和 ACK 标志的数据包,确认客户端的请求并也请求建立连接。服务器进入 SYN_RECV 状态。

第三次握手:客户端收到服务器的 SYN+ACK 数据包后,向服务器发送一个带有 ACK 标志的数据包,确认服务器的请求。此时客户端和服务器都进入 ESTABLISHED 状态,连接建立成功。

1.2 四次挥手

第一次挥手:客户端发送一个带有 FIN 标志的数据包,表示客户端没有数据要发送了,想要关闭连接。客户端进入 FIN_WAIT_1 状态。

第二次挥手:服务器收到客户端的 FIN 数据包后,发送一个带有 ACK 标志的数据包,确认收到客户端的关闭请求。服务器进入 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态。

第三次挥手:服务器处理完剩余的数据后,发送一个带有 FIN 标志的数据包,表示服务器也没有数据要发送了,想要关闭连接。服务器进入 LAST_ACK 状态。

第四次挥手:客户端收到服务器的 FIN 数据包后,发送一个带有 ACK 标志的数据包,确认收到服务器的关闭请求。此时客户端进入 TIME_WAIT 状态,经过一段时间后进入 CLOSED 状态。服务器收到客户端的 ACK 数据包后,直接进入 CLOSED 状态,连接关闭。

1.3  各个状态的意思

SYN_SENT状态是客户端发送连接请求后的等待状态,表示已发送请求但还未收到服务器的确认。

SYN_RCVD状态是服务器接收到客户端连接请求后的等待状态,表示已接收到请求但还未收到客户端的确认。

ESTABLISHED状态表示连接已经建立,双方可以进行数据传输。

FIN_WAIT_1:等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。

FIN_WAIT_2:等待远端TCP 的连接终止请求。

CLOSE_WAIT:等待本地用户的连接终止请求。

CLOSING:等待远端TCP 的连接终止请求确认。

LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认)

TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。

TIME_WAIT 两个存在的理由

二、为什么是三次握手

        因为一次握手不行,因为在建立连接时需要确认双方的发送和接收能力是否正常。如果只进行一次握手,那么无法确认对方是否能够接收到自己的消息。  两次握手表明客户端可以正常的像服务器发送报文(因为此时已经有ACK响应报文)。 但是服务器并不知道自己所发送的报文是能被客户端正常接收到!!!因为服务器向客户端发送的报文并没有得到过客户端的ACK响应报文。而第三次握手,客户端就能确保和服务端建立连接,同时四次握手也不行,因为多余的握手会导致过多的网络开销和资源消耗。三次握手就已经能够确认双方的发送和接收能力是正常的。

三、为什么是四次挥手

       由于 TCP 是全双工通信,客户端(或者说主动关闭方)发送 FIN 请求只能表示客户端不再发送数据了,不代表完全断开连接,服务端(或者说被动关闭方)可能还要发送数据。所以不能将服务端的 FIN 包和对客户端的 ACK 包合并发送,只能先确认主动关闭方的 FIN,等服务端数据发送完毕时再发送 FIN 包,故挥手需要四次。

以上就是我对三次握手和四次挥手的简单理解,如有不足,还请各位补充。

  • 22
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值