Tcp三次握手,四次挥手。

SYN:同步标志。
ACK:确认标志。
FIN: 结束标志。

三次握手,建立Tcp连接。

例子一:
比如在红军时代,A连和B连分在左右翼,约定在几时几分一同发起打击。这个几时几分的信息就需要人工通过通讯员来走路传递。所以A连指挥官派出通讯员。这是第一次。

假设通讯员到达了B连,并且告知了B连指挥官几时几分,B连指挥官一定会让通讯员再回去通知A连指挥官,可怜的通讯员只能冒着危险返回A连,因为A连指挥官看不到通讯员返回的话,不知道几时几分这个信息到底传达到了B连没有。
这是第二次。

现在B连指挥官开始担心通讯员是否回到了A连,如果没回到,B连指挥官会设身处地的想一想A连指挥官见不到返回的通讯员,肯定是不敢打的,所以B连指挥官最盼望的是再次看到通讯员出现在B连,所以A连指挥官会让通讯员再回B连一次。
这是第三次。

例子二:
晚上11点,到该睡觉的时间了。
A:“11点了,该睡了。(SYN)”
B:“好的。晚安。(SYN+ACK)”
A:“晚安。(ACK)”
然后两个人都睡觉了。

这就是三次握手。

客户端和客户端建立了Tcp连接后,之间就可以相互通信,客户端发请求,服务端处理请求或向客户端发送文件。

四次挥手,断开Tcp连接。

注意:中断连接端可以是Client端,也可以是Server端。
下图是客户端中断连接:

四次挥手关闭连接.png

Paste_Image.png

假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。

2MSL等待的原因:报文段有生存时间,当连接关闭时,有可能收到迟到的报文段。这时,若立马就建立新的连接(同一端口),那么新的连接就会接收迟到的报文,误以为是发给自己的。另一个原因是可靠的实现全双工连接的终止。

嗯。不打王者荣耀了,换时间来学习!(坚定脸= =)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SYN:同步标志。ACK:确认标志。FIN: 结束标志。 三次握手,建立Tcp连接。 例子一:比如在红军时代,A连...
    玩阿轲睡妲己阅读 1,469评论 0 0
  • 三次握手,建立连接 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状...
    彬哲阅读 3,880评论 0 0
  • 本文参考:http://blog.csdn.net/zxxyyxf/article/details/6609272...
    Levan_li阅读 11,330评论 1 54
  • TCP的运输连接管理 TCP是面向连接的协议。运输连接是用来传送TCP报文的。TCP运输连接的建立和释放是每一次面...
    曲谐_阅读 8,280评论 1 6
  • 1 “你必须明白你即将面对什么,必须经受得住所有你想得到和想不到的打击,还要有顽强的意志力和直面生活的勇气,要不然...
    坏的水阅读 3,345评论 13 10