TCP连接管理

TCP连接管理

  • 连接建立
  • 连接传输
  • 连接终止

建立–三次握手

目的在于让通信双方了解一个连接正在建立,也利用数据报的选项来承载特殊的信息,交换初始序列号(Initial Sequence Number, ISN)

终止–四次挥手

要达到双方都安全关闭。

同时关闭与同时打开

同时打开需要交换四个报文段,比正常三次握手多一次。

  • 两端在相同时刻发送SYN报文段,然后都进入SYN_SENT状态
  • 当接收到对方的SYN_SENT状态时,都变为SYN_RECV状态
  • 然后两端都重新发送一个新的SYN并确认之前收到的对方的SYN
  • 当通信双方都收到了SYNACK,状态均变为ESTABLISHED

同时关闭和正常关闭相同,交换四个报文段。

  • 当要关闭连接时,通信双方状态都变为FIN_WAIT_1,于此同时,向对方发送一个FIN
  • 当接收到对方来的FIN之后,两端通信状态从FIN_WAIT_1变为CLOSING
  • 通信双方发送最终的ACK,两端状态变为TIME_WAIT,然后等待2MSL

有趣的TCP选项

长度名称描述
4MSS最大段大小,TCP允许的从对方接收到的最大报文段,只记录数据的字节数,默认536字节
可变SACK“选择确认”选项,其包含接收方已成功接收的数据块的序列号范围
3WSOPT滑动窗口缩放因子,能够将窗口的广告范围从16位增加到30位
10TSOPT时间戳选项,在每个报文段中添加2个4字节的时间戳,接收方在确认中反映该数值,
利用每个接收到的ACK估算RTT
4UTO用户超时选项,表明TCP发送者在对方未能成功接收数据之前愿意等待该数据ACK确认的时间
可变TCP-AOTCP认证选项,增强连接的安全性,增强或替换TCP-MD5机制,使用一种加密散列算法
  • ipv4的经典最大段的大小数值为1460字节,加上TCP头部和IP头部共1550字节(以太网中最大传输单元MTU与互联网路径最大传输单元的经典数值)
  • ipv6的经典最大段的大小数值为1440字节,因为ipv6的头部比ipv4头部长20个字节,20字节用于TCP头部,40字节用于ipv6头部
  • SACK选项只存在于SYN报文段中
  • SACK提供了接收方已经成功接收的数据块的序列号范围,每个范围被称作一个SACK块,由一对32位的序列号表示,一个SACK选项包含nSACK块,长度为 8 n + 2 8n+2 8n+2个字节。
  • WSOPT只能存在于SYN报文段中,当连接建立之后比例因子是与方向绑定的。为保证窗口调整,通信双方都需要包含该选项
  • TSOPT,发送方将一个32位的数值填充到时间戳数值字段(称为TSV)作为时间戳选项的第一部分,接收方将受到的时间戳数值不变地填充至第二部分的时间戳回显重试字段(称为TSER
  • TSOPT估算RTT是为了设置重传超时,告知TCP通信方何时应该重新发送可能已经丢失的数据段

TCP状态转换

TIME_WAIT状态

也成为2MSL等待状态,该状态中,TCP将会等待两倍于最大段生存期(Maximum Segment Lifttime, MSL)的时间。他表示任何报文在被丢弃之前在网络中被允许存在的最长时间。

常见的MSL可以为30秒,1分钟或2分钟。该值可以修改。

  • 可靠地实现TCP全双工连接的终止——若最终发送的ACK丢失,服务器需要重新发送FIN,所以客户端需要维护状态信息
  • 允许老的重复分组在网络中消失——关闭当前连接之后,过很短的时间以相同的IP地址和端口号建立另一个连接,后一个连接成为前一个连接的 化身TCP必须防止来自前一个连接的老的重复分组在新连接中再现,从而被误解成为新连接的分组。2MSL足以让老的连接中某个方向的分组最多存活MSL,另一个方向对最后分组的应答最多存活MSL被丢弃。

FIN_WAIT_2 状态

TCP通信端已经发送一个FIN并得到另一端的确认。

若出现 半关闭 情况,正在关闭的TCP连接一端一直保持FIN_WAIT_2,而另一端一直保持CLOSE_WAIT状态。为避免这种情况出现,需要设置一个定时器,若当定时器超时时连接是空闲的,那么TCP连接就会转移到CLOSED状态。

TCP队列

TCP存在两个队列,在SYN_RECV存在一个snys_queue半连接队列,在ESTABLISHED存在accept_queue全连接队列。

三次握手中

  • 第一步server接收到SYN数据段后,把相关信息放入半连接队列中,同时回复SYN+ACKclient(第二步)
  • server收到clientACK后,若此时全连接队列没满,则从半连接队列中拿出相关信息放入全链接队列,否则客户端会进行多次重传,直至达到超时时间,client会自己发送FIN数据段,结束连接。

参考文献

  • TCP/IP详解卷1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值