TCP/IP-(4)-TCP协议

TCP是基于IP 报文上层的一个协议,和上文所言的UDP不同,TCP是为了在恶劣的网络条件下,依然可以提供可靠的网络连接所提供的一种协议。

TCP 协议概述

TCP

  • TCP提供的是流(可以想象成一个管道)
  • TCP拥有发送和接受缓存
  • TCP按报文段分发
  • TCP是可靠的会进行数据包检查

总而言之和UDP不同,TCP是提供面向连接的协议,比如需要在A-B之间通讯,我们需要使用TCP在A和B之间建立连接

TCP 编号系统

TCP会将每一个字节都编号,比如我们有 6000个字节系统,我们的序号从 1002开始,那最后一个序号就是 7002,而分段机制根据我们的运行的最大长度切分开。因为我们需要检测,所以我们会有一个·确认号的机制,如果我们接受的报文是 1054,那接受者的返回应该是 1055(发送号+1)。

TCP 的生命周期分述

1. 连接建立

TCP的建立是三次握手,这块就不展开细聊了。转一个链接 图解TCP协议中的三次握手和四次挥手

不过有一个值得注意的地方:在服务端最后一个ACK的时候,下一次客户端就需要发送TCP数据包了,他的seq号是上一次的ack号,而在三次握手中的第二次的SEQ的用途仅仅是是为了第三次的ACK。见图

2. 数据发送过程

这里需要注意的是

  • 上面我们知道了TCP是有缓存的,如果我们想要跳过缓存服务,可以设置P的推送字段为1

3. 连接中止

很多网上会有中止的四次挥手之说,这里其实无论是三次还是四次都是可以的,关键在于是否存在半关闭的问题。

  • case 1: 直接关闭

  • case 2: 半关闭

TCP 的窗口

TCP的流控,差错,拥堵都依赖于窗口机制。待补充

ACK确认机制

  • 累计确认: 无需每个包都确认可以累计一系列连续的包再确认
  • 选择确认: 这个是高级功能

重传

  • RTO超时重传
  • 超过3次ACK之后的重传

计时器

  • 重传计时器:TTL时间估算
  • 持续计时器:这个为了防止窗口大小都为0的时候,ack重新激活,但是丢失了,之后会进入一个死锁的状态
  • 保活计时器:无响应的持续
  • TIME-WAIT:FIN阶段专用的

参考资料

  1. TCP/IP协议卷一: 详解
  2. TCP/IP协议族