ACK : acknowledge - 确认、告知已收到
SYN: Synchronize - 同步,这里是客户端同步连接
FIN:Finall的意思,断开连接
用wireshark抓包查看是否正确:
自己ip : 192.168.1.4 目标ip : 115.182.41.180
1、三次握手
2、4次挥手:
第一次[FIN,ACK] 或 只有[Fin] ,客户端请求断开连接
第二次[FIN,ACK], 这里FIN和ACK一般分开来,服务端要准备断开的工作,才会发ACK包。但这次FIN和ACK同时发过来(可能是因为目标服务器的确没有东西发过来了)
第三次[ACK],被称为 Last ACK
最后发起方进入超时等待……
为什么有3次握手
每当建立一个TCP/IP连接的时候都要经历3次握手,这是为了保证建立一个可靠,保险的连接。
为什么有4次挥手
保证断开FIN包能互相收到,比握手多一次是在建立连接时SYN,ACK可以同时发过来,但是断开连接时,被挥手方(服务端)并不来得及断开,先发ACK包,然后做完所有工作(查看是否已发送完全部包)后再断开,然后发FIN回应。
举例:
3次握手
上图中的三次挥手说的是,客户端向服务器发请求,服务器接收请求,服务器接收请求之后发送一个连接标志,客户端接收连接标志之后也向服务器发送一个连接标志,至此连接完成。用打电话类比的话就是:
小明拨打小红的电话
小红按下通话键并说了声,喂 (一次握手)
小明听到小红的回应,也说了声,喂 (二次握手)
小红接收到小明的回应 (三次握手)
4次挥手
为什么有4次挥手呢,4次挥手的作用就是断开连接,之所以要断开连接是因为TCP/IP协议是要占用端口的,而计算机的端口是有限的,所以一次传输完成之后是要断开连接的,断开连接的方式就是4次挥手。
连接是由客户端发起的,所以断开连接也要有客户端发起,因为服务器是被动的。上图的最后一部分就是4次挥手,还是用小明和小红打电话来类比,
小明:我这没事儿了,你还有事儿吗? (1次挥手)
小红:我也没事儿了,你确定没事儿了吗? (2次挥手)
小红:我要挂电话了。 (3次挥手)
小明:好吧,你挂吧。 (4次挥手)