TCP协议详解之TCP连接的建立和关闭

三次握手和四次挥手

在这里插入图片描述
  第一个TCP报文段包含SYN标志,因此它是一个同步报文段,即左边客户机向右边服务器发起连接请求。同时,该同步报文段包含一个ISN值为535734930的序号。
  第二个TCP报文段也是同步报文段,表示服务器同意与客户机建立连接。同时它发送自己的ISN值为2159701207的序号,并对第一个同步报文段进行确认。确认值是535734931,即第一个同步报文段的序号值加一。(序号值是用来标识TCP数据流中的每一字节的,但同步报文段比较特殊,即使它没有携带任何应用程序数据,它也要占用一个序号值)。
  第三个TCP报文段是客户机对第二个同步报文段的确认。
至此,TCP连接就建立起来了。建立TCP连接的这三个步骤被称为TCP三次握手。


  第四个报文段包含FIN标志,因此它是一个结束报文段,即客户机要求关闭连接。结束报文段和同步报文段一样,也要占用一个序号值。服务器用TCP报文段5来确认该结束报文段。紧接着服务器发送自己的结束报文段6,客户机则用TCP报文段7给予确认。(实际上,仅用于确认目的确认报文段5是可以省略的,因为结束报文段6也携带了该给予确认。确认报文段5是否出现在连接断开的过程中,取决于TCP的延迟确认特性。)
至此,TCP连接断开就完成了,这个过程被称为四次挥手。


  一般而言,TCP连接由客户端发起,并通过三次握手建立连接(特殊情况是同时打开)。在连接的关闭过程中,因为客户机先发送结束报文段,故称为客户机主动关闭,服务器被动关闭。TCP连接的关闭过程相对复杂一些。可能是客户端主动关闭,也可能是服务器执行主动关闭,还可能同时关闭。

半关闭状态

  TCP连接是全双工的,所以允许两个方向的数据传输被独立关闭。换言之,通信的一端可以发送结束报文段给对方,告诉他本端已经完成了数据的发送,但允许继续接收来自对方的数据,直到对方也发送结束报文段以关闭连接。TCP连接的这种状态称为半关闭状态。
在这里插入图片描述
  图中服务器和客户端应用程序判断对方是否已经关闭连接的方法是:read系统调用返回0(即收到结束报文段)。当然。linux还有其他检测连接是否被对方关闭的方法。
  socket网络编程接口通过shutdown函数提供了对半关闭的支持。

连接超时

  当客户端连接一个距离他很远的服务器,或者由于网络繁忙,导致服务器对于客户端发送出的同步报文段没有应答,此时对于提供可靠服务的TCP来说,它必然先进行重连,如果重连仍然无效,则通知应用程序连接超时。
在这里插入图片描述
  可以看到这些TCP报文段被发送的时间间隔,它们分别为1s,2s,4s,8s,16s,可以推断出最后一个报文段的超时时间是32s。因此,TCP模块一共执行了5次重连操作,这是由/proc/sys/net/ipv4/tcp_syn_retries内核变量所定义的。每次重连的超时时间都增加一倍。在五次重连均失败的情况下,TCP模块放弃连接并通知应用程序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值