关于tcp三次握手四次挥手相关的问题,面试经常问,所以临阵磨枪,稍微整理一下。
tcp协议漫谈
tcp是传输层协议,该协议的设计目标为通信双发提供可靠的字节流传输服务。
一个消息可能很大,所以一般需要把消息拆分为较小的报文分批发送。如此以来,就有了下面这些问题:
- 如果保证发送的消息不丢失?
- 如何保证接收方接收的消息顺序与发送方一致?
- 如何处理网络拥堵与对方处理速度过慢的问题?
问题1.的解决方案是请求确认机制。
问题2.的解决方案是问发送的每条消息编号,同时1.中的确认机制也基于这个发送的消息的序号(ACK=SYN+1)。
问题3.的方法是滑动窗口。
一次完整tcp事务包括:
- 建立连接
- 在双方传输数据
- 关闭连接
三次握手
靡不有初,鲜克有终。建立连接是为可靠的数据传输做好准备工作。由于网络状况复杂,所以双发首先需要确定自己收发消息的链路都是OK的。这就有了三次握手。
为什么是三次握手呢?