您的位置:首页 > 理论基础 > 计算机网络

解析TCP三次握手四次挥手

2017-06-20 00:37 260 查看
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发送确认,重新启动时间等待计时器;

②防止出现网络中延迟分组问题;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: