文章目录
一、TCP协议简介
TCP协议是有连接的,面向字节流的传输层协议。主要实现端到端的数据传输,保证可靠,信息准确无误
TCP首部格式
这里数据偏移也可以定义为TCP首部的长度,控制位包括8位控制标识 如图
- ACK:为1时,表示确认应答的字段生效
- SYN:为1时,表示希望建立连接,并且可以设置序列号
- FIN:为1时,表示希望断开连接
二、TCP三次握手,四次挥手
1.三次握手
- 客户端将TCP首部控制位的SYN设为1,并将序号seq=x发送,此时客户端进入SYN_SEND
- 服务端接收到后,将控制位SYN和ACK都设为1, 并将确认应答号ack=x+1,序号seq=y发送,此时服务端进入SYN_RECV
- 客户端接收到后,将控制位SYN设为1,并将确认应答ack=y+1发送,此时客户端进入ESTABLISHED,随后服务端接收到后,也进入ESTABLISHED,就可以通信了。
黏包问题
2.四次挥手
- 客户端向服务端发送控制位FIN为1报文段,并设置序列号seq=x,此时客户端进入FIN_WAIT_1。
- 服务端接收到后,向客户端返回一个标志位ACK为1的报文段,设置ack=x+1,此时服务端进入CLOSE_WAIT。客户端接收到后进入FIN_WAIT_2。
- 服务端向客户端发送FIN为1的报文段,并设置seq=y发送,此时服务端进入LAST_ACK。
- 客户端向服务端发送ACK为1的报文段,并设置ack=y+1,此时客户端进入TIME_WAIT,服务端收到后进入CLOSED,随后客户端等待2MSL的时间后,也进入CLOSED。
3.为什么是四次挥手不是三次?
因为TCP协议是全双工模式,两端都可以发送和接收数据,第二次挥手服