TCP的三次握手四次挥手过程
三次握手
- 客户端
->发送带有SYN标记的报文->服务端 (客户端向服务端请求发起连接) - 客户端
<-发送带有SYN+ACK标记的报文<-服务端 (服务端告知客户端表示可以连接) - 客户端
->发送带有ACK标记的报文->服务端 (客户端告知服务端表示收到了服务端可以连接的消息,此时连接建立)
为什么要三次握手?
为了确认双方发送与接收的功能是正常的。
四次挥手
- 客户端 -> 发送带有FIN标记的报文 -> 服务端 (客户端向服务端请求断开连接)
- 客户端 <- 发送带有ACK标记的报文 <- 服务端 (服务端告知客户端表示收到请求,准备断开连接)
服务端继续发送剩余数据 - 客户端 <- 发送带有FIN标记的报文 <- 服务端 (服务端告知客户端表示可以断开连接)
- 客户端 -> 发送带有ACK标记的报文 -> 服务端 (连接断开)
为什么要四次挥手?
客户端与服务端要断开连接时,除了和三次握手逻辑相似的三次报文发送与接收外,服务端还需确保数据已经全部发送至客户端。当服务端接收到客户端的断开请求后,发送了ACK和FIN两次报文,发送ACK时服务端可能还在发送数据给客户端,当服务端发送完所有数据后,发送FIN给客户端,告知数据发送完毕。
观察TCP连接
我们使用WireShark进行抓包,观察三次握手
上图,客户端大毛的IP地址为192.168.0.18,服务端小芸的IP地址为40.126.7.97。大毛向小芸发送了一个Flag为SYN的报文,表示想和小芸发起连接请求。小芸会怎么做呢?我们继续往下看。
上图,小芸向大毛发送了一个Flag为SYN和ACK的报文,表示愿意和大毛发起连接。
上图,大毛向小芸发送了一个ACK报文,此时大毛和小芸的连接建立。
以上就是两端使用TCP协议进行连接的过程。
HTTP Methods
未完待续