美文网首页计算机相关基础知识
TCP 三次握手和四次断开

TCP 三次握手和四次断开

作者: 宇晨棒棒的 | 来源:发表于2020-05-19 14:39 被阅读0次

    1.TCP三次握手建立连接

    一对终端同时初始化一个它们之间的连接是可能的。但通常是由一端打开一个套接字(socket)然后监听来自另一方的连接,这就是通常所指的被动打开(passive open)。服务器端被被动打开以后,用户端就能开始创建主动打开(active open)。

    三次握手流程

    第一次握手:

    Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认

    第二次握手:

    Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

    第三次握手:

    Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

    解释为什么连接的时候A要发送一次确认:

    为了防止已失效的连接请求报文段突然又传送到了B,由于A并未发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。但B却以为新的运输连接已经建立了,并一直等待A发来数据,因此白白浪费了许多资源

    2.TCP四次断开

    TCP连接终止使用了四次握手过程(four-wayhandshake),在这个过程中每个终端的连接都能独立地被终止。因此,一个典型的拆接过程需要每个终端都提供一对FIN和ACK、

    四次断开

    第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

    第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

    第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

    第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手

    解释为啥会有2MLS的TIME-WAIT的时间等待:

    1)为了保证A发送的最后一个ACK报文段能够到达B。即最后这个确认报文段很有可能丢失,那么B会超时重传,然后A再一次确认,同时启动2MSL计时器,如此下去。如果没有等待时间,发送完确认报文段就立即释放连接的话,B就无法重传了(连接已被释放,任何数据都不能出传了),因而也就收不到确认,就无法按照步骤进入CLOSE状态,即必须收到确认才能close。 

    2)防止“已失效的连接请求报文段”出现在连接中。经过2MSL,那些在这个连接持续的时间内,产生的所有报文段就可以都从网络中消失。即在这个连接释放的过程中会有一些无效的报文段滞留在楼阁结点,但是呢,经过2MSL这些无效报文段就肯定可以发送到目的地,不会滞留在网络中。这样的话,在下一个连接中就不会出现上一个连接遗留下来的请求报文段了。

    3.简单理解流量控制和拥塞控制

    A、流量控制:

    1)作用:控制发送方的窗口大小,让接收方来得及接收

    2)实现原理:通过滑动窗口就可以实现,接收方告知发送方自己的窗口大小,发送方立刻更改即可实现流量控制。

    B、拥塞控制

    1)作用:避免给整体的网络造成较大的堵塞

    当我们每个人都在高速上网时,可能因为并发量太大,数据太多,导致链路压力太大,最后大家网速都不咋地,类似于过节开车上高速堵住一样。

    拥塞控制就是防止这种现象的发生,或者缓解拥堵问题。

    2)实现原理:四种算法(慢开始,拥塞避免、快重传、快恢复)

    发送方会维持一个拥塞窗口(动态变化),拥塞窗口的大小代表着网络的拥塞程度。发送方的滑动窗口小于等于该拥塞窗口。

    a、慢开始

    发送方先探测一下网络的拥塞程度,并不是一开始就发送大量的数据,然后根据拥塞程度慢慢的增大或减小拥塞窗口

    b、拥塞避免

    该算法用来控制拥塞窗口的增长速率,每一次 RTT (往返时延,是指数据从网络一端传到另一端所需的时间)往返之后,拥塞窗口 + 1 而不是翻倍,这样的话拥塞窗口以线性速率增长,流量可控

    c、快重传

    当发送方没有在超时期限内收到确认信号的话就认为网络阻塞了,此时拥塞窗口变为 1 ,同时把慢开始门限值 ssthresh 减半。

    接收方收到一个失序的报文段后就立刻发出重复确认,如下图,M3丢失,会重复确认 M2

    快重传示意图

    一旦接收方连续 3 次收到同一个重复确认就会立马启动快重传算法,即立马重传 M3,而不会等待 M3 的超时时间到期

    d、快恢复

    快恢复是配合快重传使用的。

    上图所示的 M3 丢失,可能是因为 M3 在某个节点因为网络波动等非网络拥挤情况阻塞住了。

    也就是网络其实并没有拥塞,快恢复就是在此情况下避免直接重传会真正导致网络阻塞,其原理就是先将拥塞窗口设置成 ssthresh 的大小,然后执行拥塞避免算法

    从连续收到三个重复的确认转入拥塞避免

    相关文章

      网友评论

        本文标题:TCP 三次握手和四次断开

        本文链接:https://www.haomeiwen.com/subject/fegvohtx.html