TCP为什么需要三次握手和四次挥手?
三次握手的主要目的是保证连接是双工的。可靠更多的是通过重传机制。
因为连接是全双工的,双方必须都收到对方的FIN包及确认才可关闭。
双工指的是:我的发送和接收都是可以同时执行的。并且连接的双方都可以互相发送和接收。
三次握手的详解
三次握手数据包的流向:
首先客户端去向服务端发送同步(SYN)包去请求连接,
服务端响应确认(ACK)包,表示你可以连接,
客户端相应的收到确认(ACK)包去建立这个连接,至此三次握手完毕。
四次挥手的详解
四次挥手数据包的流向:
主动连接方去发送同步(FIN)包去请求关闭,
被动接收方回复确认(ACK)包,表示已经收到请求。
并且在被动接收方完成关闭操作中间有一个间隙,完成关闭操作之后在回复一个同步(FIN)包,表示可以关闭了。
主动关闭方回复确认(ACK)包,表示确认关闭,至此四次挥手就此完毕。
抓包分析三次握手和四次挥手
首先,[s]是同步(FIN)包,[.]是确认(ACK)包,[P]是数据包,[F]是完成(finsh)包
本地IP去访问请求远程IP三次握手:
本地请求的一个SYN包,seq是1186823560,
远程响应回复一个ACK包,seq=1167235484,ack=1186823561,
本地响应ACK包,ack=1167235485
本地IP去访问请求远程IP四次挥手:
本地请求的一个FIN包,seq是1186823638,
远程响应回复一个ACK包,seq=1167235484,ack=1186823639,
远程完成关闭发送一个FIN包,seq=1167238266
本地响应ACK包,ack=1167238267