一、TCP(传输控制协议)
是一种面向连接的可靠传输协议。
TCP协议建立的连接是双向连接。
二、TCP 的特点
1、面向连接:在数据传输之前,收发双方需要预先建立一条逻辑通路。
2、可靠传输
确认机制(每收到一个TCP数据段,都需要发送一次确认报文。)
重传机制(超时重传,当一个数据段中的某个报文丢失,发送端会主动重新发送一次该报文。) 排序机制(传输数据段时,被分为多个报文,从不同路径传输,最终达到目的地的顺序会被打乱, 需要根据序列号字段进行重新排序。)
流控机制(滑动窗口机制):可以通过调节窗口大小(Windows)来对流量进行控制
三、TCP 报文段格式
1. 源端口和目的端口:各占 16 位,标识发送和接收进程。
2. 序号:32 位,本报文段发送数据的第一个字节的序号。
3. 确认号:32 位,期望收到对方下一个报文段的第一个数据字节的序号。
4. 数据偏移:4 位,指出 TCP 报文段首部的长度。
5. 保留:6 位,保留为今后使用。
6. 控制位:
● URG:紧急指针有效。
● ACK:确认位(当该标记位置为1时,确认序列号有意义 。)
● PSH:接收方应尽快将数据交付应用层。
● RST:重置连接。
● SYN:同步序号,用于建立连接。(是在TCP三次握手建立通道时的标记)
● FIN:释放TCP连接。
7. 窗口:16 位,告知对方自己的接收窗口大小。
8. 校验和:16 位,用于检验 TCP 报文段的正确性。
9. 紧急指针:16 位,指出本报文段中紧急数据的字节数。
四、面向连接
1、三次握手建立连接
1、客户端发送SYN报文,进入SYN_SENT 状态。
2、服务器收到SYN报文,回复SYN+ACK报文,进入SYN_RCVD 状态。
3、客户端收到 SYN+ACK报文,回复ACK报文,进入ESTABLISHED状态,服务器收到ACK报文也进入ESTABLISHED状态。
2、四次挥手释放连接
1、客户端发送 FIN 报文,进入 FIN_WAIT_1 状态。
2、 服务器收到 FIN 报文,回复 ACK 报文,进入 CLOSE_WAIT 状态,客户端收到 ACK 报文进入 FIN_WAIT_2 状态。
3、服务器发送 FIN 报文,进入 LAST_ACK 状态。
4、客户端收到 FIN 报文,回复 ACK 报文,进入 TIME_WAIT 状态,服务器收到 ACK 报文后关闭连接,客户端等待 2MSL 后关闭连接。