转载,原文地址https://blog.csdn.net/MakeContral/article/details/77531936
TCP的为什么三次握手就可以建立连接:
我先抛出一个命题,两个人想要正常沟通,至少保证双方都知道自己和对方的发送和接受功能是正常的。
假设这里有两个人,server和client。现在client需要和server建立连接。
① client->server : server,我想和你建立连接。(client什么都确认不了,因为他不知道server有没有接收到,也不能确定自己的信息有没有发出去)
如果这个时候server收到了。那么server可以确认两个事情(1.client可以发送。2.自己的能收到信息)于是server回复信息给client。
② server->client :client我收到你的请求了,我也想要建立连接。(server还是只能确定之前的那两个事情)
如果这个时候client能收到server的回复,表明client第一条信息发出成功,且server能接受到。client可以确定四个事情(1.自己的发送功能是正常的。2.自己的接受是正常的。3.server接受正常。4.server发送正常)
可是server还不知道client能不能接受信息和自己能不能发送信息。于是client需要再发送一条信息。
③ client->server :好的,那么建立连接吧。
如果这个时候server收到了client的回复信息,那么server也可以确认双方都的接受和发送的功能都是OK的,于是连接就可以确认了。
TCP为什么需要四次才能断开连接:
还是client和server,client和server已经建立了连接,client发送请求到server,server接收到请求把响应的信息返回给client。先看第一种情况。
① client->server :server我要断开连接了。
② server->client :好的,那断开链接吧。
因为在建立连接的时候就双发的发送和接受的功能,于是连接断开。诶,为什么两次会话就可以断开连接了?不急,再看另一种情况。
① client->server :server我要断开连接了。
② server->client :等会,我还有一些响应的信息还没发给你。
。。。过了一会
③client->server :你还没发好吗,我要断开连接了。
④server->client :再等会,我还有一些内容还没发好。
。。。过了一会
⑤client->server :你好慢啊,我要断开连接了。
⑥server->client :你好烦,发好了我会给你信息的。
六次会话都还没断开连接,client就学乖了,不要一直找server,它好了会给消息的。于是下次想要断开连接的时候。
① client->server :server我要断开连接了。
② server->client :等会,我还有一些响应的信息还没发给你。
。。。过了一会
③ server->client :响应信息发好了,我要断开连接了。
虽然server信息发好了,但是要考虑到client还在接受信息于是server就在等client的确认信息。
④ client->server :接收好了,断开连接了。
所以综上的情况,要确保连接的断开,至少需要四次的会话。