我们一起带着问题来阅读吧!
四次挥手是怎么进行的?为什么要四次挥手?三次不行吗?挥手完就算连接结束了吗?会产生别的问题吗?平时四次挥手需要注意些什么呢?当TCP客户端使用完之后,需要断掉连接,避免一直占用资源。建立连接那么严谨,断掉连接同样很重要,我们一起来看看吧! 1.主动关闭方发起关闭:将FIN标志位(关闭标志位) 置为1,将顺序号seq 赋值为x(x为一个半随机的值),形成一个包发送给对方。此时主动关闭方不再发送业务报文。 2.被动关闭方回复: 被动关闭方将顺序号seq赋值为y(半随机的值),将ack(接收顺序号) 置为x+1,并将ACK(响应标志) 设置为1.将其打包发送给对方。此时被动关闭方不再接收对方的业务报文 3.被动关闭方关闭通知: 当被动关闭方不需要再发送业务报文时,则发送FIN标志位置为1,ack为x,seq为z给对方。 4.主动关闭方回复:将seq设置为x,ack设置为z发送给被动关闭方进入TIME_WAIT(等待状态),然后等待2*MSL(报文最大生存时间) 再进入关闭状态。当被动关闭方收到这个回复则直接进入关闭状态。 当上面的流程完成,连接也就真正断开。
还是自来水的故事:书接上回,水管连好了,这个时候A罐管理员工作完成了便想把水管拔掉收工。于是: 1.A罐管理员发短信给B:我这里是A罐的x管道,我的水放完了,我想拔掉水管。 2.B管理员收到后回复:我收到了你x管道的信息了,我知道你放完了,我再不接收你的水咯! 当B罐管理员这边的水也放完了时。 3.B管理员发送信息:x管道,我这里y管道也用完了,准备关掉了哟。你那边不用再接了。 4.A管理员收到后发送信息: y管道,我x管道收到你的信息了,你可以拔掉水管了。
当A管理员发送最后一条信息时,会等待一段时间,让水管里面还可能存在的水都流完。避免有一些水还在管子里。当时间到了时就拔掉水管。而B管理员收到信息就拔掉水管了。两个管理员完成了今天的工作。
入门:《图解TCP/IP》,《TCP/IP网络编程》
深入:《Unix 高级环境编程》,《Unix 网络编程》 第 1 卷 套接口 API 、第 2 卷 进程间通信
拥塞控制
ps:IT10分钟会持续更新,有兴趣的同学可以关注一下,有想了解的知识点可以评论。