浅谈TCP/IP协议栈(十)TCP的连接和状态迁移

上一节讲了TCP报文头的格式以及其中一些字段的含义和作用,相信大家对于TCP协议已经有了初步的了解,下面我们还是围绕TCP协议的概述,也就是面向连接的可靠的字节流服务来进一步介绍TCP协议

虽然只有3个关键字:面向连接、可靠、字节流,但实际上真正理解TCP还是有一定难度的,不过也不要紧,让我们分解关键字,一个一个细细道来,今天为大家介绍TCP面向连接的特性

提起TCP协议,相信大家也都听过三次握手和四次挥手了,所谓三次握手是指在建立连接时,客户端和服务端需要进行三次交互才能建立连接,而四次挥手则是指在断开连接时需要进行四次交互才可以,经典的三握四挥流程图如下:
这里写图片描述

举个简单的例子,两个人小S和小C打电话,他们的三次握手建立连接过程就是:
小S:喂,是小C么?
小C:嗯嗯是的,你是小S么?
小S:是的是的,咱们开始愉快的聊天吧!

而四次挥手的过程则是:
小S:喂,小C,我有点累啦,今天要不就这样吧
小C:好呀,你休息下,我再说两句
小C:哎呀,我也好累呀,今天就到这里吧
小S:好,那就到这吧,886

然后小S和小C就挂了电话,我们注意到,在四次挥手的过程中,小S先提出了断开连接,但实际上他们的对话并没有结束,后面小C确认这个消息后,并没有立马断开连接,而是继续对话,这是因为TCP协议具备全双工特性,简单点说就是一个连接,存在小C——小S和小S到小C两条线路,而小S提出并由小C确认关闭的只是小S——小C这条线路,因此小C还可以继续向小S发消息,直到小C也觉得要关闭连接并由小S确认后,两人的所有连接才彻底关闭。

因此可以看到,无论哪一方想关闭连接,并不是真的能够立马关闭,而是需要对方确认后才能关闭一端的连接,这个时候只是不再主动发送数据到对端,实际上还需要接收数据,这也就是为什么关闭连接需要四次挥手的原因。还有一种极端情况,就是小S或者小C突然关机了,另一方如何去关闭这个连接的问题,这里涉及到一些定时器的知识,后续我们会详细介绍。

介绍完三握四挥以后,我们再来看一个非常著名的TCP迁移图:
这里写图片描述
可以说只要理解了这张状态迁移图,就算是掌握了TCP的基础(划重点,状态迁移图必考,这10分白送就看你要不要了)

下面我们就对各个状态做一个简单的说明:
ESTABLISHED:正在通讯和传输数据,表明连接已建立并可以正常传输数据
TIME_WAIT:连接关闭时,主动提出关闭一方需要,也就是上述例子中的小S
CLOSE_WAIT:连接关闭时,被动关闭连接的一方,上述例子中的小C
FIN_WAIT1:连接关闭时,主动提出关闭的一方,发送FIN报后的状态
LAST_ACK:连接关闭时,被动关闭一方需要收到最后一个ack报前所处状态

还有一些状态码,比较好理解,就不再一一赘述啦,对于有Linux系统和Mac系统的小伙伴,可以用这个命令行看一下——
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
查询结果如下:
这里写图片描述

今天就暂时到这里啦,后面开始介绍TCP协议中的各种定时器,敬请期待!

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值