三次握手
在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。
通过这样的三次握手,客户端与服务端建立起可靠的双工的连接,开始传送数据。 三次握手的最主要目的是保证连接是双工的,可靠更多的是通过重传机制来保证的。但是为什么一定要进行三次握手来保证连接是双工的呢,一次不行么?两次不行么?
举一个现实中例子来解释三次握手。
和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次。有时候聊天的过程中,我的网络或者她的网络可能会不好,视频就会卡住,听不到对方的声音,过一会儿之后才会恢复。
中间双方可能就要不断的确认网络是否恢复,但是有时候会:
她:“你可以听到了吗?”
我:“可以了,你呢?”
她:“喂喂,你可以听到了吗?”
我:“可以了,我可以听到了,你呢?”
她:“你可以听到了吗?”
.....
这种情况很蛋疼,那么怎样才能找一个简单的办法,让两个人都确认自己可以听到对方的声音,对方也可以听到自己的声音呢?
于是有了如下对话:
我:1+1等于几?
她:2,2+2等于几?
我:4
四次挥手
由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭。这好比,我们打电话(全双工),正常的情况下(出于礼貌),通话的双方都要说再见后才能挂电话,保证通信双方都把话说完了才挂电话。
套接字端口复用
如果客户端和服务器已经连接成功的前提下,通常的情况下,先关闭客户端,再关闭服务器,如果是先关闭服务器,立马启动服务器是,服务器绑定的端口不会立马释放(如下图),要过 1~2 分钟左右才会释放。
# 套接字端口复用
tcp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定信息
tcp.bind(("", 8888))
评论 (0)