TCP/IP协议是一个分层联网协议。它包含IP和位于其上的其他协议层。
TCP/IP协议具有一个重要原则——封装。其关键概念为:低层不会对高层传来的信息进行解释。
当信息从高层传向低层,会加一层本层的头信息。而信息从低层传向高层时,会有一个解包的过程。
一个应用A向应用B传输信息的大致过程
1 | 封装为 包 封装为 帧 检查 IP 头部 若匹配,剥离 IP 头部,将段交给传输层。 |
IP是一种无连接
和不可靠
的协议。它不保证包到达的顺序和发送的顺序一致。也不保证不会重复发送和到达接收者。网络的可靠性由如TCP一样的可靠传输层协议维护。
TCP是一种面向连接的、可靠的传输协议。 它需要先建立连接,后传输数据。
TCP通过三次握手
建立连接,通过四次挥手
终止连接
三次握手
- 客户端向服务器发送一个带有标志位
SYN
的数据包,表明自己希望与服务器建立连接。 客户端的TCP状态变为SYN_SENT
- 服务器回复一个带有标志位
SYN
和ACK
的数据包,表示同意建立连接。 服务器的TCP状态变为SYN_RECEIVED
- 客户端接收到服务器的
SYN-ACK
包后,回应一个ACK
包,表示连接建立。 服务器和客户端的TCP状态都变为ESTABLISHED
,连接建立。
1 | 三次握手 |
四次挥手
- 主动方向被动方发送一个带标志位
FIN
的数据包,表示自己想要终止连接。 主动方进入FIN_WAIT_1
状态。 - 被动方收到
FIN
包,回应一个ACK
包,表示确认收到关闭请求。 被动关闭方进入CLOSE_WAIT
状态。 主动方接收ACK后进入FIN_WAIT_2
状态 - 被动方在数据发送完毕后,向主动方发送一个带
FIN
标识位的数据包,表示被动方也要终止连接。 被动方进入LAST_ACK
状态。 - 主动方收到
FIN
包后,向被动方发送一个ACK
包,并进入TIME_WAIT
状态。被动方接收ACK
后终止连接,主动方一段时间后终止连接。
1 | 发送FIN 接收ACK 接收FIN并发送ACK |