TCP可靠性的简要概述

TCP的可靠性

参考:https://blog.cc1234.cc/posts/tcp-reliability/

  1. 复杂网络环境下的问题

    • 乱序

    • 冗余

    • 丢包

    • 干扰

  2. 解决方法

    • 干扰:就是在数据包传送的过程中数据发生了改变,这里TCP引入了checksum去解决。

      checksum类似于数字签名,对整个报文(头部+数据部分)进行计算;接收方在收到报文后也会计算checksum,如果发现结果不符合期望值,则直接丢包。
    • 乱序和冗余:乱序就是接收方数据包的接收数据问题,冗余就是因为网络原因发送方发送了多个相同的数据包,TCP主要是给报文加上序号(seq)的方式解决。

      因为加上序号之后,接收方就能对接收的报名进行排序和组合,就能知道自己缺失哪一段报文,同时也可以把多余的报文丢弃和通过seq和ack告诉发送方,我已经收到哪段报文和期待接收哪段报文。
      因为有seq,发送方可以发送多个报文段,让接收方接收。
    • 丢包:如何确认接收方收到信息,ACK 和 ack

      接收方会发送确认号给发送方,而发送方也会存在超时重传机制,如果过了一定的时间后还没受到对于某段报文的确认号,则会重传该报文。
      计时器:每个已发送但未确认数据包都会被放进队列里, 这个队列持有一个单独的计时器。当第一个数据包进入队列时,计时器启动了。如果计时器超时,队列头部的数据包会被重发,并且计时器重新计时。当收到ACK时,计时器也会重启。队列的所有数据都被确认了的话,就关闭定时器。
  3. TCP的拥塞控制

    参考:https://www.cnblogs.com/tuyang1129/p/12439862.html

    • 什么是拥塞控制: 路由器的内存是有限的,若同一时间到达某个路由器的数据太多,这个路由器将无法接收所有的数据,只能将一部分丢弃;或者同一台路由器数据太多,后面到达的数据将要等待较长的时间才会被转发。网络中的数据太多,导致某个路由器处理不过来或处理地太慢,这就是网络拥塞。若是对于TCP这种有重传机制的传输协议,当发生数据丢失时,重传数据将延长数据到达的时间;同时,高频率的重传,也将导致网络的拥塞得不到缓解。拥塞控制,就是在网络中发生拥塞时,减少向网络中发送数据的速度,防止造成恶性循环;同时在网络空闲时,提高发送数据的速度,最大限度地利用网络资源

    • 拥塞控制的两种方法

      • 端到端的拥塞控制:在这种拥塞控制方法中,由发送数据的端系统自己来判断是否拥塞,然后调整传输速率。比如说发送的数据已经超时却还没有接收到确认报文,数据往返时延过高,接收到对同一个数据段的重复确认......都可以认为是网络拥塞的现象;若发送端检测到这种现象,就应该降低发送数据的速率,若没有,则可以慢慢提高速率;

      • 网络辅助的拥塞控制:由网络中的路由器来告诉发送方,网络的拥塞情况。一般有两种方式:(1)路由器直接向发送端发送报文,告知网络拥塞情况;(2)路由器更改数据段中的某个标志,来提示网络中的拥塞情况,然后数据将这个标志携带到目的主机,再由目的主机根据这个标志,向发送端发送报文,告知拥塞情况(被包含在确认报文中);

    • TCP的方法因为网络层不会提供拥塞的反馈信息,所以TCP协议采用的是第一种方式——自己判断网络的拥塞情况。当TCP检测到网络拥塞,则降低数据的发送速率,否则增加数据的发送速率。这里就将面临三个问题:

      1. TCP如何限制数据的发送速率;

      2. TCP如何检测网络中是否拥塞;

      3. TCP采用什么算法来调整速率(什么时候调整,调整多少);

        首先来回答第一个问题。了解TCP的应该知道,TCP不是发送一个数据段,接收到确认后再发送另一个数据段,它采用的是流水线的方式。TCP的每一个数据段都有一个序号,而TCP维护一个发送窗口来发送是数据,这个窗口就是一个区间。所有序号位于这个窗口内的数据段都会被一次性发送,而不需要等待之前发送的数据段被确认。而每当最早发送出去的数据段被确认,窗口就会向前移动,直到移动到第一个没有被确认的序号,这时候又会有新的数据段序号被包含在窗口中,然后被发送出去。所以限制数据发送速率最好的方式就是限制窗口的大小。在发送方的TCP程序会跟踪和维护一个叫做拥塞窗口的变量,用来进行拥塞控制。拥塞窗口被称为cwnd。在TCP发送端,所有被发送但是还没收到确认的数据段必须落在这个窗口中,所有,当网络拥塞时,TCP程序将减小cwnd,而网络通畅时,增大cwnd,以此来控制数据发送的速率。
        ​
          接着来回答第二个问题。TCP程序将通过数据发送的一些现象来推测网络是否拥塞,比如:
        ​
        若发送一条数据段后,成功接收到了接收方的确认报文,则可以认为网络没有拥塞;
        ​
        若发送出一条数据段后,在规定时间内没有收到确认报文(丢失或时延太大),则可以认为网络出现了拥塞;
        ​
        若连续收到接收方对同一条报文的三次冗余确认(也就是四次确认),则可以推测那条报文丢失,即发生了拥塞;
        ​
          TCP无法保证数据能够按顺序到达接收端,所以,可能出现序号靠后的数据报反倒先到达的情况。而TCP接收方并不是接收到哪一条报文,就向发送方发送哪条报文的确认,它是通过发送当前应该接收到的序号最小的报文进行确认。
          
          TCP如何调整发送速率——在没有丢包时慢慢提高拥塞窗口cwnd的大小,当发生丢包事件时,减少cwnd的大小。当然,具体的算法要复杂的多,TCP调整拥塞窗口的主要算法有 慢启动 , 拥塞避免 以及 快速恢复 ,其中前两个是TCP规范要求必须实现的,而第三个则是推荐实现的,TCP根据情况在这三者之间切换。 
    • 慢启动是建立TCP连接后,采用的第一个调整发送速率的算法(或叫模式)。在这个阶段,cwnd通常被初始化为1MSS,这个值比较小,在这个时候,网络一般还有足够的富余,而慢启动的目的就是尽快找到上限。在慢启动阶段,发送方每接收到一个确认报文,就会将cwnd增加1MSS的大小,于是:

      • 初始cwnd=1MSS,所以可以发送一个TCP最大报文段,成功确认后,cwnd = 2MSS

      • 此时可以发送两个TCP最大报文段,成功接收后,cwnd = 4 MSS

      • 此时可以发送四个TCP最大报文段,成功接收后,cwnd = 8 MSS......

    • 拥塞避免:刚进入这个模式时,cwnd的大小近似的等于上次拥塞时的值的一半(这是由进入这个模式的条件决定的),也就是说当前的cwnd很接近产生拥塞的值。所以,拥塞避免是一个速率缓慢且线性增长的过程,在这个模式下,每经历一个RTT(请注意2.4中有关RTT的结论),cwnd的大小增加1MSS,也就是说,假设cwnd包含10个报文的大小,则每接收到一个确认报文,cwnd增加1/10 MSS。这个线性增长的过程什么时候结束,分为两种情况:

      • 第一种:在这个过程中,发生了超时,则表示网络拥塞,这时候,ssthresh被修改为cwnd / 2,然后cwnd被置为1MSS,并进入慢启动阶段;

      • 第二种:若发送方接收到了某个报文的三次冗余确认(即触发了快速重传的条件),此时也认为发生了拥塞,则,ssthresh 被修改为 cwnd / 2,然后cwnd被置为ssthresh + 3MSS,并进入快速恢复模式;

    • 快速恢复:快速恢复和上面两种模式不太一样,这种模式在TCP规范中并没有强制要求实现,只是一种推荐实现的模式。在快速恢复阶段,每接收到一个冗余的确认报文,cwnd就增加1MSS,其余不变,而当发生以下两种情况时,将退出快速恢复模式:

      • 第一种:在快速恢复过程中,计时器超时,这时候,ssthresh被修改为 cwnd / 2,然后cwnd被置为1MSS,并进入慢启动阶段;

      • 第二种:若发送方接收到一条新的确认报文(不是冗余确认),则cwnd被置为ssthresh,然后进入到拥塞避免模式;

数字签名

  1. 是非对称加密技术与数字摘要技术的综合运用。

  2. 也就是将数据的摘要信息使用发送者的私钥进行加密;然后接收者使用公钥对密文解密,并与自己根据数据计算出的摘要信息进行比较,如果没有差别就说明数据没有发生改变。

  3. 作用:验证数据完整性、认证数据来源、抗否认

  4. 具体原理:

    • 将报文按照双方约定的HASH算法放那得到报文摘要

    • 将报文摘要用发送者的私人密钥进行加密,然后连同报文段和数字证书(包含公钥),一起发送给接受者(数字签名)

    • 接收方收到后,用同样的HASH技术摘要,然后与用发送者的公钥进行解密的摘要信息作比较

    • 同时通过证书颁发机构CA确认证书的有效性即可确认发送的真实身份

  5. 常用数字签名算法:RSA/DSA/ECDSA

  6. 建议了解一下上面这些数字签名算法的使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值