传输控制协议 Transmission Control Protocol

大部分应用使用的正是TCP传输层协议,比如HTTP应用层协议

TCP相比UDP多了许多特性,比如流量控制、超时重传、拥塞控制等,目的是保证数据包的可靠传输

TCP包头格式:

image.png

源端口号目标端口号负责标识发送方和接收方的应用

序号解决包的乱序的问题

确认号负责确认发出去对方是否有收到,若没有需要重发直到送达,负责解决丢包的问题

状态位引起双方的状态变更,SYN发起连接、ACK回复、RST重新连接、FIN结束连接

TCP是面向连接的,因而双方要维护连接的状态

窗口大小,TCP要做流量控制,通信双方各声明一个窗口(缓存大小),标识自己当前能够处理的能力

TCP还需要做拥塞控制,控制自己发送的速度。

TCP传输数据之前,要先三次握手建立连接(双方计算机里维护一个状态机)

image.png

三次握手目的是保证双方都有发送和接收的能力

当传输层的数据包大小超过MSSTCP最大报文段长度),就要将数据包分块,中途某个分块丢失或者损坏只需要重新发送该分块,不要重新发送整个数据包

在TCP协议中,每个分块称为一个TCP段TCP Segment

应用层的应用程序数据包括HTTP头部和消息体

TCP 报文中的数据部分就是存放 HTTP 头部 + 数据

image.png