TCP的运输连接管理:TCP连接建立
5.8.1 TCP的运输连接管理:TCP连接建立(三次握手)
三个问题
TCP使用“三报文握手”建立连接
要有主动连接的TCP客户
,和被动连接的TCP服务器
。
首先,TCP服务器开启监听,对建立连接的请求进行监听;
当TCP客户发起TCP连接请求时,会发送一个SYN包,其中SYN=1表明这是一个TCP连接请求报文段,seq=x作为TCP客户进程的初始序号;(注:SYN等于1时表明该报文段无法携带数据,但要消耗一个序号)
TCP服务器接受后,将SYN和ACK全设置为1,表明这是一个TCP连接请求确认报文段,seq设置为y,作为TCP服务器进程的初始序号,ack=x+1这是对客户进程所选择初始序号的确认。
TCP客户进程接受后,再发送一个ACK包作为TCP确认报文段,seq=x+1是因为最开始发送的SYN包中seq=x,ack=y+1是因为回传的包seq=y,因为这没有SYN包的事,所以该报文段可以携带数据,但如果不携带数据,则不消耗序号。
完后双方都进入连接已建立状态,可以进行可靠的数据传输了。
问题:为什么在最后还要发送一个对服务器的ack确认包呢?能不能用两次握手解决问题?
不能 若有一滞留数据报在进程中未到达,引起超时重传,当这次的连接完成后,滞留的数据报才到达,服务器收到后,以为是客户又要建立连接,直接进入连接已建立状态,发送确认报文但客户机不理睬,将会浪费这一条通道。