TCP连接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP连接相关的知识,希望对你有一定的参考价值。
来源:TCP的三次握手和四次挥手 和 TIME_WAIT是什么
三次握手
SYN_SENT
我们能成为朋友吗?【发送SYN】,不知道他会怎么回复我呢?【我进入SYN_SENT状态,等待对方确认】
SYN_RECV
什么?【收到请求,进入SYN_RECV】,当然可以啦【回复一个ACK确认】
ESTABLISHED
收到回复【收到对方的ACK】,太好了,以后可以常联系了【主动方进入ESTABLISH状态】,你有事没事也记得可以联系我【发送ACK】,ok【被动方进入ESTABLISH状态】
【三次握手失败:他问能不能成为朋友,我说当然可以,然后他居然不回我了(最后的ACK丢失),才刚成为朋友就这么摆架子?那我也不想理他了(关闭连接),跟他说绝交(向对方发送RTS报文)】
数据传输
你觉得这本书x怎么样?【发送ACK,seq=x】
我觉得x不好【回复ACK x+1】
.....
【超时重传 :假如等了一段时间后,对方没有回复对应的话题,我就再问一次】
【快速重传:我问他x这本书怎么样,他居然连续回复我三次x这本书不好,而没有回复我x1这本书怎么样,看来他当时没听到,那我就不等了,赶紧再问一次,x1这本书怎么样】
【流量控制:怕对方问我问题问太快了,我反应不过来,就跟他说你问慢一点吧,要不然我就无视你这些问题了】
四次挥手
FIN_WAIT_1
A不想和B聊天了【主动方希望关闭连接】,但A希望B知道这件事【向被动方发送FIN】,接下来A只能和B说关于绝交的事【只能发送关于挥手断开连接的数据包】,B也可以跟A说说B最近过得这么样【被动方可以向我发送普通数据】,但A对此不会有任何评论【主动关闭方再也不会发送普通数据了】,A希望得到B的回复看看B是怎么想的【我进入FIN_WAIT_1状态等待对方确认】
CLOSE_WAIT
B知道A的想法了【收到主动方的FIN】,对于绝交的事情虽然希望不大,但B还想考虑一下【被动方进入CLOSE_WAIT状态】,就通知A我收到你消息了,要不再等等?【向主动方发送一个ACK】
FIN_WAIT_2
A说好吧【接收到ACK】,B你就考虑一下吧,我等你回复【主动方进入FIN_WAIT_2】
LAST_ACK
B想通了,还是绝交吧【向主动方发送FIN】,等A回复B,B就知道A看到这条消息了【现在进入LAST_ACK,等待对方最后一次确认】,那B就撤了【关闭连接】
TIME_WAIT
B考虑完终于回复A了【收到对方的FIN】,B怎么可能这么轻易就答应了?真的假的?A不信【进入TIME_WAIT】,A得再问问B看是不是真的【发送最后的ACK】,等1~4分钟【等待2MLS】B还不回A的话,那就真的是绝交了,那A也走人【关闭连接】
问题:不要TIME_WAIT行不行?
答:等待的时间主要确保主动关闭方(A)最后的ACK能到达被关闭方(B),如果没如果没到达,B就会认为A没有收到我的最终决定,B就会重发一次,为了能收到B重发的消息,A必须要等
以上是关于TCP连接的主要内容,如果未能解决你的问题,请参考以下文章