美文网首页
HTTP,UDP,TCP协议

HTTP,UDP,TCP协议

作者: zhouluyao | 来源:发表于2020-03-31 17:52 被阅读0次

    HTTP协议:

    HTTP2.0 相比 HTTP 1.1做的优化:

    HTTP 1.1 在应用层以纯文本的形式进行通信。每次通信都要带完整的 HTTP 的头,为了解决这些问题,HTTP 2.0 会对 HTTP 的头进行一定的压缩,将原来每次都要携带的大量 key value 在两端建立一个索引表,对相同的头只发送索引表中的索引。

    QUIC解决TCP按序到达等待问题:

    基于序列号的TCP:

    当其中一个数据包遇到问题,TCP 连接需要等待这个包完成重传之后才能继续进行。TCP 的流量控制是通过滑动窗口协议。TCP 的 ACK 机制是基于序列号的累计应答,一旦 ACK 了一个系列号,就说明前面的都到了,所以只要前面的没到,后面的到了也不能 ACK,就会导致后面的到了,也有可能超时重传,浪费带宽。

    对每一个发送了,但是没有 ACK 的包,都有设一个定时器,超过了一定的时间,就重新尝试。TCP 的策略是超时间隔加倍。每当遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍。两次超时,就说明网络环境差,不宜频繁反复发送。

    基于offset的UDP:

    1.QUIC重新定义了重传机制,使用序列号+偏移量的方式,发送的数据在这个数据流里面有个偏移量 offset,可以通过 offset 查看数据发送到了哪里,这样只要这个 offset 的包没有来,就要重发;如果来了,按照 offset 拼接,还是能够拼成一个流。

    2.QUIC 的 ACK 是基于 offset 的,每个 offset 的包来了,进了缓存,就可以应答,应答后就不会重发,中间的空挡会等待到来或者重发即可,而窗口的起始位置为当前收到的最大 offset,从这个 offset 到当前的 stream 所能容纳的最大缓存,是真正的窗口大小。

    HTTPS 是综合了对称加密和非对称加密算法的 HTTP 协议。既保证传输安全,也保证传输效率。

    1.客户端从服务器网站请求一个证书去CA去进行验证,验证通过后获得公钥.

    2.客户端生成一个随机数,通过服务器的公钥进行加密,发送给服务器

    3.服务器通过客户端生成的随机数进行加密消息,进行对称加密的沟通

    UDP协议:

    UDP特点:

    TCP 是面向连接的,UDP 是面向无连接的。所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。

    通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达,而 UDP 继承了 IP 包的特性,不保证不丢失,不保证按顺序到达。TCP 是可以有拥塞控制的。它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行为,看看是不是发快了,要不要发慢点。UDP 就不会,应用让我发就发。

    使用场景:

    1.需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用。

    2.不需要一对一沟通,建立连接,而是可以广播的应用。

    3.需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的时候。

    TCP协议:

    三次握手除了双方建立连接外,主要还是为了沟通一件事情,就是 TCP 包的序号的问题。

    快速重传算法:

    接收方发现 6 收到了,8 也收到了,但是 7 还没来,那肯定是丢了,于是发送 6 的 ACK,要求下一个是 7。接下来,收到后续的包,仍然发送 6 的 ACK,要求下一个是 7。当客户端收到 3 个重复 ACK,就会发现 7 的确丢了,不等超时,马上重发。当接收端发现丢了一个中间包的时候,发送三次前一个包的 ACK,于是发送端就会快速的重传,不必等待超时再重传。

    发送端滑动窗口的大小指的是:发送未确认+未发送可发送
    滑动窗口.jpg

    1.这个新的窗口 8 通过 6 的确认消息到达发送端的时候,你会发现窗口没有平行右移,而是仅仅左面的边右移了,窗口的大小从 9 改成了 8。如果接收端还是一直不处理数据,则随着确认的包越来越多,窗口越来越小,直到为 0。

    2.发送端窗口左侧要不要右移取决于确认消息到达发送端.

    3.发送端窗口右侧要不要右移取决于接收端是否处理数据.

    快速重传机制:

    接收方发现 6 收到了,8 也收到了,但是 7 还没来,那肯定是丢了,于是发送 6 的 ACK,要求下一个是 7。接下来,收到后续的包,仍然发送 6 的 ACK,要求下一个是 7。当客户端收到 3 个重复 ACK,就会发现 7 的确丢了,不等超时,马上重发。

    接收端的窗口大小:等待接收未确认区间
    tcp_窗口_receive.jpg

    1.如果接收端还是一直不处理数据,则随着确认的包越来越多,窗口越来越小,直到为 0。

    2.接收缓冲要不要右移,取决接收已确认的读取速度。

    窗口为缓冲区大小的一半时再通知发送端发送数据

    当接收方比较慢的时候,要防止低能窗口综合征,别空出一个字节来就赶快告诉发送方,然后马上又填满了,可以当窗口太小的时候,不更新窗口,直到达到一定大小,或者缓冲区一半为空,才更新窗口。

    相关文章

      网友评论

          本文标题:HTTP,UDP,TCP协议

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