前言:TCP是非常常见的面试题,是必会的知识点,记录一下与各位共同学习。
三次握手
问:为什么要三次握手?
因为三次握手才能保证双方具有接收和发送的能力
-
第一次握手:客户端
发送带有 SYN
标志的连接请求数据包
给服务端
-
第二次握手:服务端
发送带有 SYN+ACK
标志的连接请求和应答数据包
给客户端
-
第三次握手:客户端
发送带有 ACK
标志的应答数据包
给服务端(可以携带数据了)
-
简单比喻:
- 发送方:小明,接收方:小红
- 小明给小红打电话,小红接听了并回复(确认小红的接受能力),小明收到回复(确认小明的接受能力和发送能力)。
-
这时小明已经确认了小红的发送能力,但是小红自己不能确认
,所以需要小明回复一次,小红接收消息(确认小红的发送能力),到此双方的收发能力确认完毕,接下来就可以进行数据传输。
四次挥手
问:为什么挥手需要四次?
等到收发双发数据传输完毕,并不是发送方传输完毕整个传输过程就结束,还需等待接收方发送数据和接收数据
-
客户端打算关闭连接,此时会发送一个 TCP 首部 FIN
标志位被置为 1
的报文,也即 FIN
报文,之后客户端进入 FIN_WAIT_1
状态。
-
服务端收到该报文后,就向客户端发送 ACK
应答报文,接着服务端进入 CLOSED_WAIT
状态。
-
客户端收到服务端的 ACK
应答报文后,之后进入 FIN_WAIT_2
状态。
-
等待服务端处理完数据后,也向客户端发送 FIN
报文,之后服务端进入 LAST_ACK
状态。
-
客户端收到服务端的 FIN
报文后,回一个 ACK
应答报文,之后进入 TIME_WAIT
状态
-
服务器收到了 ACK
应答报文后,就进入了 CLOSE
状态,至此服务端已经完成连接的关闭。
-
客户端在经过 2MSL
一段时间后,自动进入 CLOSE
状态,至此客户端也完成连接的关闭。
-
简单比喻:
- 发送方:小明,接收方:小红
- 小明给小红打电话,小明说没有什么要说的了,小红收到后回复(确认小明关闭发送功能,小红关闭接收功能)
- 小红的话说完了,告知小明,小明收到后回复(确认小红关闭发送功能,小明关闭接收功能)
其他
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)