1.TCP的运输连接
TCP的运输连接用于传送TCP报文,包括三个阶段:建立连接、数据传送、释放连接;
2.TCP建立连接要解决的问题:
①使双方要知道对方的存在;
②允许双方协商一些参数,如最大窗口值
③能对运输实体资源进行分配,如缓存大小;
3.TCP三次握手过程(假设客户端为A,服务器端为B)
①A向B发送建立连接请求(SYN设置为有效);
②B收到A的连接请求报文段后,同意建立连接,向A发送确认(SYN+ACK设置为有效);
③A收到B的确认后,向B给出确认(ACK设置为有效);
此时,三次握手完成,连接建立成功,然后就可以进行数据传送了。
4.三次握手的原因:
(1)假设建立连接经过二次握手:包括A请求连接,B收到请求后向A发送确认。
A发出的第一个连接请求报文段没有丢失,而是在某个网络结点长时间的滞留了,以致延误到某个时间才到达B。
本来这是一个早已失效的报文段,但B收到此失效的连接请求报文段后,就向A发出确认报文段,同意建立连接。
只要A发出确认,新的连接就建立了。由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送ack包。
(2)假设建立连接经过四次握手:
①A向B发送建立连接请求(SYN设置为有效);
②B收到A的连接请求报文段后,同意建立连接,向A发送确认(SYN+ACK设置为有效);
③A收到B的确认后,向B给出确认(ACK设置为有效);
④B收到A的确认后,再次向A发送确认(ACK设置为有效);
但第四次握手是完全没有必要的,造成了资源浪费
所以,二次握手可能引起网络中延迟分组问题,四次握手造成资源浪费问题,只有三次握手刚好可以建立连接并且不浪费资源。
5.TCP四次挥手过程:(假设客户端为A,服务器端为B)
①A向B发送断开连接请求,并且停止发送数据,关闭TCP连接(FIN设置为有效);
②B收到断开连接请求后,向A发送确认(ACK设置为有效),A进入终止等待状态;
③此时TCP处于半关闭状态,即B如果向A发送数据时,A仍然要接收,但B没有要发送的数据时,通知TCP断开连接,向A发送断开连接报文(FIN+ACK设置为有效);
④A收到B的断开连接报文后,向B发送确认(ACK设置为有效),A进入时间等待状态,经过时间等待计时器设置的2MSL后,进入关闭状态;
6.四次挥手的原因:
首先,A第一次发送的请求和最后一次发送的确认是必不可少的,这和三次握手的原因类似。其次, 由于上面提到过,当B收到A的断开连接请求时,B必须先向A发出一个确认收到请求,让A进入终止等待,但此时TCP处于半关闭状态,B仍然可以向A发送数据,A必须要接收,同时B还要重复发送确认号,进入最后确认状态,所以B的两次确认不能缺少。
7.为什么请求断开连接的一方必须在时间等待计时器状态等待2MSL?
①为了保证A发送的最后一个确认报文能到达B:
因为这个确认报文可能丢失,B在收不到这个确认报文时,超时重传FIN+ACK报文段,A能在2MSL时间内收到这个重传报文,然后再次向B发送确认,重新启动时间等待计时器;
②防止出现网络中延迟分组问题;