• 面向连接的、可靠的、基于字节流的传输层通信协议
  • 将应用层的数据流分割成报文段并发送给目标节点的TCP层
  • 数据包都有序号,对方收到则发送ACK确认,未收到则重传
  • 使用校验和来检验数据在传输过程中是否有误

image.png
TCP(Transmission Control Protocol)是面向连接的通信协议,通过三次握手建立连接, 然后才能开始数据的读写,通讯完成时要拆除连接,由于 TCP 是面向连接的所以只能用于端 到端的通讯。
TCP 提供的是一种可靠的数据流服务,数据有可能被拆分后发送,那么采用超时重传机制是和应答确认机制是组成 TCP可靠传输的关键设计。
而超时重传机制中最最重要的就是重传超时(RTO,Retransmission TimeOut)的时间选择,很明显,在工程上和现实中网络环境是十分复杂多变的,有时候可能突然的抽风,有时 候可能突然的又很顺畅。在数据发送的过程中,如果用一个固定的值一直作为超时计时器的时长是非常不经济也非常不准确的方法,这样的话,超时的时长就需要根据网络情况动态调整,就需要采样统计一个数据包从发送端发送出去到接收到这个包的回复这段时长来动态设置重传超时值,这个时长就是为 RTT,学名 round-trip time,然后再根据这个 RTT 通过各种 算法和公式平滑 RTT 值后,最终确定重传超时值。
而 IP 层进行数据传输时,是不能保证数据包按照发送的顺序达到目的机器。当 IP 将把它们向‘上’传送到 TCP 层后,TCP 将包排序并进行错误检查。TCP 数据包中包括序号和确认, 所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。 TCP 还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用 以限制发送方的发送速度。
同时 TCP 还允许在一个 TCP 连接上,通信的双方可以同时传输数据,也就是所谓的全双工
面向连接的服务(例如 Telnet、FTP、rlogin、X Windows 和 SMTP)需要高度的可靠性, 所以它们使用了 TCP。DNS 在某些情况下使用 TCP(发送和接收域名数据库),但使用 UDP 传送有关单个主机的信息。

TCP Flags

  • URG :紧急指针标志
  • ACK :确认序号标志
  • PSH : push标志
  • RST :重置连接标志
  • SYN :同步序号,用于建立连接过程
  • FIN : finish标志,用于释放连接