下班回家路上,说起TCP,简直汗颜。虽然好久前,看过TCP,但是原生的还是觉得一来一回算是一次握手,真是汗颜。
三次握手
使用wireshark分析如下:
三次握手,主要为了客户端和服务端都要对传输报文确认。
第一次握手:客户端发送 SYN包 (syn=1, seq=x )到服务端
第二次握手:服务端接收SYN 包并确认ack=x+1,并同时发送一个 SYN(y=k)包到客户端, 即SYN+ACK包
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1), 并建立连接
为什么不两次握手?
防止失效的连接请求报文段突然又传送到服务端,建立打量无效的连接,使服务端崩溃。
四次挥手
四次挥手:
第一次挥手: 客户端发送 FIN包(seq=x) 到服务端
第二次挥手: 服务端接收到FIN包,发送ACK(seq=x=1), 客户端等待服务端终止
第三次挥手:服务端终止后,发送FIN(seq=y)给客户端
第四次挥手:客户端接收到FIN后,发送确认ACK(seq=y+1)
为什么不是三次挥手(和握手一样,第二次和第三次一起发送) ?
主要是等待服务器停止,可能还在处理某些请求