TCP建立连接三次握手
1)主机A: 主机B,在线吗? 收到请回复。
2)主机B:收到,那你还在线吗?收到请回复。
3)主机A,收到,我还在线;会话连接成功,下面开始说正事吧。
为什么是三次握手
假设只有二次握手,就有可能出现以下的情况:主机A请求连接时,因为网络延迟问题,这条消息主机B迟迟没有收到,因为主机A等待超时又发了一个连接请求,主机B收到请求后同意了连接,所以这次的连接建立了,这时上一次的请求连接消息主机B才收到,主机B当然也是同意的,但是这个连接在主机A看来是过时的,主机A当然不能正常连接,主机B却连接了,这就导致主机B创建了一个无意义的连接,白白浪费了系统资源。
TCP释放连接四次挥手
1)主机A:主机B,我没有要发送的数据了,我请求关闭连接,收到请回复。
2)主机B: 收到,但是你得先等等,我得先确认一下我还有没有数据要发送给你,若有我要发送完毕再联系你。
3)主机B:主机A,我的数据也已经发送完毕,咱们现在关闭会话吧,收到请回复。
4)主机A:收到,可是我要等待2分钟后才能关闭连接,2分钟后连接将会自动关闭。
为什么要等待2分钟呢?
2分钟对应的专业术语是MSL即Maximum Segment Lifetime,也就是最大报文生存时间,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。引用《TCP/IP详解》中的话:“它(MSL)是任何报文段被丢弃前在网络内的最长时间”。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。
因为主机A在对主机B进行回复确认时,可能网络会丢失数据,如果丢失数据了,主机B会重发FIN给主机A的,因为主机B要等收到了主机A的确认时才会close连接,但是如果主机A再回复确认后马上close连接,那就可能会导致主机B不能close连接,所以主机B是比主机A遭关闭的。
为什么是四次挥手
TCP建立连接要进行三次握手,而断开连接要进行四次。这是由于TCP的半关闭造成的。因为TCP连接是全双工的(即数据可在两个方向上同时传递)所以进行关闭时每个方向上都要单独进行关闭。