TCP 是面向连接的协议,即是发送数据前会先建立连接。 TCP 的运输连接,分为连接建立、数据传送和连接释放。 TCP 的运输连接管理是让运输连接的建立和释放顺利进行。连接建立,即是三次握手。连接释放,是四次挥手。
- TCP 的连接建立:
在连接建立过程,要解决三个过程:
(1)要使每一方知道对方的存在;
(2)双方需要协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项等);
(3)能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
TCP 连接的建立,使用客户-服务器方式,称主动发起建立请求的为客户(client),被动等待的称为服务器(server)。
(1)client 发出连接建立请求报文段。主要内容是,首部的同步位 SYN = 1,且选择一个初始序号 seq = x,这表明下一个报文段的第一个数据字节序号是 x+1。
(2)server 发送确认报文段,确认报文段中,同步位 SYN 和确认位 ACK 都需要为 1,确认号是 ack = x +1;同时为自己选择了一个初始序号 seq = y。
(3)客户机发送确认段。主要内容是,确认位 ACK = 1,确认号 ack = y+1,而自己的初始序号是 seq = y+1。
之后发送数据开始,发送方向接收方发送第一个数据时,序号为 x+1,因为前一个确认报文段并不消耗序号。 - TCP 连接释放:
发出释放请求的是客户,接收释放请求的是服务器。但是会比建立连接的时候复杂一点,因为这时已经建立连接了,所以需要考虑数据是否已经完全接收到了的问题。