TCP(Transport Control Protocol)是一个传输层协议,提供 Host-To-Host 数据的可靠传输,支持全双工,是一个连接导向的协议。
TCP 是一个连接导向的协议,设计有建立连接(握手)和断开连接(挥手)的过程。TCP 没有设计会话(Session),因为会话通常是一个应用的行为。
TCP 协议有这样几个基本操作:
如果一个 Host 主动向另一个 Host 发起连接,称为 SYN(Synchronization),请求同步;
如果一个 Host 主动断开请求,称为 FIN(Finish),请求完成;
如果一个 Host 给另一个 Host 发送数据,称为 PSH(Push),数据推送。
以上 3 种情况,接收方收到数据后,都需要给发送方一个 ACK(Acknowledgement)响应。请求/响应的模型是可靠性的要求,如果一个请求没有响应,发送方可能会认为自己需要重发这个请求。
建立连接的过程
1 服务器主动进入监听状态
2 客户端主动给服务端发送SYN包,客户端进入syn-sent状态
3 服务端给客户端发送syn+ack包,服务端进入syn-RCVD状态
4 客户端给服务端发送ack包,客户端进入establish状态
5服务端接收客户端包,进入establish状态
断开连接的过程
1 客户端发送断开连接的请求,进入fin1状态
2 服务器收到断开连接的请求,发送ack给客户端,进入close_wait状态,客户端进入fin_wait2状态
3 服务器过一段时间再给客户端发送fin报文,服务端进入last_ack状态
4 客户端收到请求后发送ack报文给服务端,进入time_wait状态,一段时间后关闭连接
5 服务端收到ack报文后,进入close状态,关闭连接
此文章为7月Day09学习笔记,内容来源于极客时间《趣谈网络协议》,强烈推荐该课程!