TCP是安全的,面向连接的,基于字节流传递数据的传输层控制协议。
TCP的六个标志位
- ACK(acknowledgement 确认) 表示已接收到对方传递的数据
- PSH(push传送)
- FIN(finish结束) 表示连接已断开
- RST(reset重置)
- URG(urgent紧急)
- SYN(synchronous建立联机) 表示已同步(建立连接)
TCP的两个号码:
- seq: Sequence Number(顺序号码) 数据报的顺序号
- ack: Acknowledge Number(确认号码) 希望接收的下一个数据报的顺序号
三次握手
TCP传递数据之前需要通过客户端与服务端进行三次数据传递,保证连接创建成功。
1.客户端发起连接请求,将SYN状态位置为1,表示客户端已准备好建立连接;
同时发送一个数据报,此数据报的序列号为a
2.服务端收到此连接请求,同意则将SYN状态位置为1建立联机关系,同时返回ACK状态位表明已接收到客户端发来的数据;
服务端发送ack号码,希望下次客户端发送序号为a+1的数据报;
服务端也需要向客户端发送一个数据报,此数据报的序号为b
3.客户端收到服务端的数据,将ACK置为1表示接收到消息;
同时发送序号位seq为a+1的报文,并希望服务端下次传来seq为b+1的数据报
此时,连接建立成功,两者可互相传递数据
通过步骤1.2,客户端确认了自己的发送数据和接收数据的能力,
通过步骤1,服务端确认自己的接收数据的能力
通过步骤3,服务端确认自己接收数据的能力
四次挥手
TCP层需要通过四次数据交互,才能完成断开连接,此称为四次挥手。
1.主动方发起断开连接请求,将FIN状态位置为1,表示主动方已准备好断开连接;
同时发送一个数据报,此数据报的序列号为a
2.被动方收到此结束请求,返回ACK状态位表明已接收到客户端发来的数据;
服务端发送ack号码,希望下次客户端发送序号为a+1的数据报;
服务端也需要向客户端发送一个数据报,此数据报的序号为b
之后服务端需要完成一些剩余任务后,方能关闭连接
3.被动方处理完工作后,发起FIN,表示关闭;
同时发送序号位seq为c的报文,并希望服务端下次传来seq为a+1的数据报
4.主动方发送ACK,表示收到消息,并返回数据给被动方。
被动方收到数据后,关闭连接完成。