TCP的三次握手和四次挥手

易小灯塔
2017-08-10 / 0 评论 / 3,079 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年10月08日,已超过415天没有更新,若内容或图片失效,请留言反馈。

三次握手

在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。

TCP的三次握手和四次挥手

通过这样的三次握手,客户端与服务端建立起可靠的双工的连接,开始传送数据。 三次握手的最主要目的是保证连接是双工的,可靠更多的是通过重传机制来保证的。但是为什么一定要进行三次握手来保证连接是双工的呢,一次不行么?两次不行么?

举一个现实中例子来解释三次握手。

和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次。有时候聊天的过程中,我的网络或者她的网络可能会不好,视频就会卡住,听不到对方的声音,过一会儿之后才会恢复。

中间双方可能就要不断的确认网络是否恢复,但是有时候会:

她:“你可以听到了吗?”
我:“可以了,你呢?”
她:“喂喂,你可以听到了吗?”
我:“可以了,我可以听到了,你呢?”
她:“你可以听到了吗?”
..... 

这种情况很蛋疼,那么怎样才能找一个简单的办法,让两个人都确认自己可以听到对方的声音,对方也可以听到自己的声音呢?

TCP的三次握手和四次挥手

于是有了如下对话:

我:1+1等于几?
她:2,2+2等于几?
我:4 

四次挥手

由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭。这好比,我们打电话(全双工),正常的情况下(出于礼貌),通话的双方都要说再见后才能挂电话,保证通信双方都把话说完了才挂电话。

TCP的三次握手和四次挥手

套接字端口复用

如果客户端和服务器已经连接成功的前提下,通常的情况下,先关闭客户端,再关闭服务器,如果是先关闭服务器,立马启动服务器是,服务器绑定的端口不会立马释放(如下图),要过 1~2 分钟左右才会释放。

TCP的三次握手和四次挥手

# 套接字端口复用
tcp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# 绑定信息
tcp.bind(("", 8888)) 
0

评论 (0)

取消