TCP是一种面向连接的流传输协议,提供了对数据传输时的各种控制功能,比如
- 当丢包时可以重新发送
- 即使数据到达顺序错乱也可以保证数据的有序性
由于TCP是面向连接的协议,所以必须在确定通信对端存在时才会发送数据,即三次握手。
好比于A和B打电话,电话拨通后
A对B说:”你好,我是A,你能听见我说话吗”(第一次握手)
B听到A的询问回答说:”你好,我能听见你说话,你能听见我说话吗”(第二次握手)
A听见B的回复后告诉B说:”我也能听见你说话”(第三次握手)
此时A和B都已确定对方能够听见自己的声音,即A和B的通讯连接已经建立
三次握手
三次握手主要需要解决以下三个问题
- 要使每一方能够知道对方的存在
- 要允许双方协商一些参数(如最大窗口值,是否使用窗口扩大选项和时间戳选项以及服务质量等)
- 能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配
三次握手的时序图如下,其中,客户端进行主动连接,称为主动打开(执行connect),而服务器进行连接请求的接收,称为被动打开(执行accept)
三次握手流程
第一次握手
- 客户端调用connect函数,请求连接服务器,并发送连接请求报文段,此时报文首部的同步