大学时候对于tcp的连接和关闭,都是靠强行记忆下来,发现即不能记得牢,就算记住了,也不是很了解为什么要这么麻烦。
TCP全双工通信
要明白为什么需要这么麻烦,首先要了解tcp它是全双工通信的,意味着数据端的两方,都有权利向对方发送数据。所以在一条tcp连接上,就需要连接或者关闭两次(两个方向),而每次连接syn或者关闭fin,都需要一个ack返回,才能确定这一方向,真正关闭。
三次握手
根据tcp连接图的客户端在左边,服务器在右边的习惯,首先客户端发送syn给服务端,服务端返回一个ack,代表服务端同意了客户端从左到右的连接。服务器在发送给客户端ack的同时,还将服务器请求syn给客户端,即从右到左方向的连接,客户端返回ack,代表从右到左的连接也成功。这样,两个方向上都成传输数据。可能你会想,如果客户端连接成功了服务端,而服务端却失败连接服务端,也就是第三次握手失败,是不是客户端还是能发送数据给服务器?这可能就变成单工通信了,这样客户端虽然能发送数据给服务端,但是服务端无法发送回去,这样的tcp连接是无法终止的,所以这种应该不可能,而且请求一般是客户端发出的,当服务端请求ack,一般客户端是马上响应ack。
举个例子,小明相约小红,打电话的小明说“小红,我今天想喂你吃饭,可以吗?”这时候小红回答说好,这时候,小明心里就已经确定自己能喂小红吃饭了。小红在回答好后,同时也问了小明“小明,我也想