神六发射成功,兴奋之余,凑巧最近在看tcp/ip,想想神舟是如何与地面通讯的呢?
    查阅相关资料推知(相关资料摘抄+推想):
    地面的网络通过卫星与神舟相连,卫星上有网关协议,神舟上也相应的通讯设备。其中卫星IP的网路
    有不同于地面的情况。
    1、信道差错率大(BER),空间环境出现突发错误几率大,信噪比大,信道丢包率高,而TCP是是一个使用
       分组丢失来控制传输行为的丢失敏感协议,它无法区分拥塞丢失和链路恶化丢失。较大的BER过
       早地触发了窗口减小机制,虽然这时网络并没有拥塞。此外,ACK分组的丢失使吞吐量进一步恶化。
    2、传播延迟
  影响卫星网络延迟的因素有一些,主要的一个是轨道类型。多数情况下低轨系统单向传播延迟是20一25ms,
    中轨系统是110-130 ms,静止轨道系统为250-280ms
   
    [[通信卫星一般位于赤道上空36000km的同步轨道。
    信号从一个地面站到另一地面站需要 239.6ms,往返路径时延(RTT)为558ms,信号传输的RTT是信号
    发出并得到相应应答的时延,并不只是卫星传输带来的,还包括其他因素,如网络中其他路经时延、
    在网关排队等待时间等。如果路径中包括多个卫星信道,时延就会更长。由于卫星信道反馈回路时延长,
     TCP发端需要很长时间来确认数据包是否被正确接收.]]
    
     系统延迟还受星间路由选择、星上处理以及缓存等
    因素的影响。一般而言,延迟对TCP的影响体现在:它降低了TCP对分组丢失的响应,特别对于仅想临界发
    送超过缺省启动窗口大小(仅超过一个TCP数据段)的连接更是如此。此时用户必须在慢启动状态下,
    在第一个ACK分组收到前,等待一个完全的往返延迟;卫星延迟和不断增加的信道速度(10Mbit/S或更高)
    还要求有效的缓存;增加的延迟偏差(variance)反过来也会通过在估算中加入噪声影响TCP 定时器机制,
    这一偏差会过早产生超时或重传,出现不正常的窗口大小,降低了总的带宽效率。简单地增加TCP定时器粒度
    (tranularity)在此没有多大帮助,因为尽管较大的值可以降低错误超时,但带宽利用不足也将因较长的延迟而增加。
   
    3)信道不对称
  许多卫星系统在前向和反向数据信道间有较大的带宽不对称性,采用速度较慢的反向信道可使接收机设计更经济且
    节省了宝贵的卫星带宽。考虑到大量TCP传输的较大单方向性特性(如从 Web服务器到远端主机),慢速反向信道在
    一定程度上是可以接受的。但非对称配置对TCP仍有显著的影响。例如,由于ACK分组会丢失或在较大数据分组后排
    队,较慢的反向信道会引起像ACK丢失和压缩(compression)的有害影响,从而大大减小吞吐量,有资料显示吞吐
    量随不对称的增加呈指数减小。此外,前向和反向信道速率的较大不对称会由于线速率突发错误较大而明显加重前
    向缓存拥塞。
   
    TCP使用基于滑动窗口的流量和拥塞控制方式,通过确认分组流实施控制(接收方窗口通知)。
    TCP使用基于往返定时器(RTh:round-trip timer)的自适应时钟来调谐重发超时。
    TCP 为完成对数据的确认使用了滑动窗口机制,为避免拥塞采用了称为“慢启动”的策略。
   
    发方对丢失或损坏数据的重发,要求保留数据副本直至收到数据确认(ACK)。
    为避免大量可能丢失的数据副本占用大量存储器并浪费带宽,TCP采用了一个滑动窗口装置来限制传送中的数据数量。
    随着确认的返回,TCP在前移窗口的同时,发送不断增加的数据。一旦窗口被占满,发方必须停止传输数据直至更多
    的确认到达。
   
    基本原理是:滑动窗口内含有一组顺序排列的报文序号,在发送端,窗口内报文序号对应的报文可以
    连续发送。这些报文包括已发送但未得到确认、未发送但可连续发送和已发送且已得到确认三种。由于本窗口中前
    面尚有未确认的报文,一旦窗口前面报文得到确认,窗口向前滑动相应位,落入窗口的后续报文又可连续发送。在
    接收端,窗口内的序号对应于容许接收帧。窗口前的帧是已收到且已发回确认的帧,不容许接收;窗口后的帧要等
    待窗口滑动后,才能接收。(我见过最好的描述)
    为了使流控有效、信道效率提高和避免拥塞,TCP采用慢启动、拥塞规避、快速启动和快
    速恢复四种拥塞控制机制,通过调整窗口尺寸来控制流量,避免拥塞,并充分利用信道。信源机用拥塞窗口(cwnd)
    和慢启动门限(ssthresh)两变量来控制流量。cwnd受信宿机通告窗口的限制,也是发送窗口的最大极限。cwnd的
    增减根据网络中现有的拥塞状况而定。当 cwnd<ssthresh时,通过慢启动算法增加cwnd;当cwnh≥ssthresh时,
    则使用拥塞规避的算法。ssthresh初始化为信宿机通告窗口,检测到拥塞后,才设置ssthresh值。
   
    慢启动和拥塞规避 在建立一条新链接时,为了避免拥塞时使用慢启动算法,cwnd初始化为1,ssthresh 为信宿机通告窗口。 这样,强迫TCP每发一个数据段就等待相应的确认(ACK),随着每收到一个确认,cwnd加此一直迟续到。wnd≥ssthresh减者 检测到丢包现象。当cwnd≥ ssthresh时,用拥塞规避算法增加cwnd。在拥塞规避中,cwnd增长得非常缓慢,每收到一个ACK,   cwnd只增加1/cwnd。假设每发一段即收到一个ACK,cwnd在一个往返时间内增加一段。

    虽然TCP能发现数据没有送达,但重新发送会进一步加剧信道的拥塞,从而进一步导致数据丢失。为避免网络因拥塞
    而瘫痪,TCP只能降低传输速率以对数据丢失做出反应。但是从算法上讲, TCP每次进行新的连接都必须从最低的传
    输速率启动,TCP用返回的ACK来指示提高速率,这是一个较慢的线性增加的过程。这就是所说的“慢启动”,即发送
    窗口依每次往返时间递增,以发现可持续的吞吐量。
   
    卫星通信网是一个噪声大、带宽、高延迟产物(BDP:bandwidth-delay product)网络(如较大延迟、较高比特差错率和
    带宽不对称等)。
   
    利用tcp/ip需要改进的地方:

    1.链路层改进
      采用:前向纠错(EEC)方案和自动重传(ARQ)协议是两个主要的差错控制方法。
           自动重传协议包括停止一等待、返回N和选择重传等三种类型。自动重传协议由于额外的重传延迟不适合较高的BER环境。
    2.TCP改进
      对于卫星TCP/IP数据传输,由于延迟时间过长,通常的TCP,滑动窗口大小限制了卫星链路的最高吞吐量;同样,
      由于ACK从卫星返回得十分缓慢,TCP达到全速时需要一个较长的提速时间,即使对于一个较小的数据连接也是如此。
    许多调整的参数可用于增强TCP的性能,包括数据段、定时器和窗口的大小。TCP实现中含有大量拥塞避免算法,
      如俊启动、选择重传和选择确认,它通常能改进像Internet这样的共享网络的性能。但在许多拥塞控制算法,
      特别是慢启动中,当中等数量数据正在一个具有较大带宽延迟特性的链路上传输时,会产生端到端通信的低效带宽利用问题。
      
    (1)基本TCP改进
     由于卫星通道的时延长,传统的TCP滑动窗口协议及拥塞算法将导致信道利用率极低。
     例如,连接建立开始时发一段,并等相应的ACK,至少需要500ms,慢启动所用时间严重超过地面线路情况.
     使用较长的段可以提高TCP性能,但TCP的一个问题是它的缺省窗口大小仅限于16bit,由于要求的窗口大小
     很容易超出最大允许的65 536字节, 这限制了最大吞吐量接近1Mbit/S(低于T1 速率)。窗口扩缩
     (window scaling)选项解决了这一问题,它允许启动时的连接协商一个比例因子,这个因子通常是2的幂,
     最大允许窗口达到32 bit,这对于卫星网络是足够了。然而增大的窗口也会引起序列号回绕的问题,
     要求附加回绕保护序列号(PAWS)机制。
    
     回应选项对于TCP卫星网络很重要.
    
     (2)快速重发和快速恢复 如果信源机在一给定时间内(重传超时RTO)没有收到确认,该段将重传。
       RTO是根据RTT确定的。另外,超时发生后, TCP将认为网络拥塞,置ssthresh=1/2cwnd, cwnd=1,
       慢启动开始,直到cwnd等于原1/2cwnd,然后再使用拥塞规避算法,以检测网络中的剩余容量。
       TCP总是给序号最高的段确认,也就是X段的ACK表示≤X的段的确认。另外,若收编的段序号不按顺序,
       ACK将应答给按顺序中的最高序号段。例如11段丢失,12段收到,则信宿机再发~个10段的确认。
       快速重发就是利用重复确认来检测丢失数据段,若收到 3次重复,TCP就认为这个段确实丢失,
       不等RTO到时,就重发丢失段。快速重发后,通过快速恢复算法调整拥塞窗口:先置ssthresh=1/2cwnd,
       直到cwnd等于原1/2cwnd,最后每收到一个确认,cwnd+1,一旦cwnd允许,TCP就发送新的数据。
       因此检测到丢失后,TCP将以一半的速率传输数据。一般来说,每个窗口内丢失一个数据段,可使用快速重发。
       若丢失多个数据段,则要等RTO超时再进行重发,重发后将进入侵启动状态。 TCP对于拥塞的处理方式根据拥
       塞检测的方式而定。上述四种拥塞控制算法都需要花费一定的时间来验证网络的传输能力,这必将引起带宽
       的浪费,特别是在时延长的卫星链路中。为了避免拥塞崩溃,权衡整个网络的利弊,如何使用好这四种方法十分关键。
    
     (3)较大的窗口尺寸 TCP的吞吐量受下列限制:吞吐量=窗口尺寸/往返时延;当最大窗口尺寸为65 535 byte时,
       吞吐量=65 535/560ms=117 027byte/s。因此,即使在T1的卫星链路中(≈192kbyte/s),使用最大的窗口尺
       寸也将造成信道的浪费,同时还要调整缓冲区的尺寸。
    
     (4)选择性确认改进
     这类协议称为选择性确认(TCP SACK),对TCP协议提出了明显的改进。TCP SACK是一个数据发现算法,
     其中接收方能够有选择地示意哪个数据块(数据段)没有收到。这允许接收方仅精确地重传这些遗漏的分组,
     从而有效地降低了不必要的重传。
    
     研究结果显示TCP SACK适合于具有中等丢失率(低于窗口大小的50%)的长延迟网络环境,对于线路丢失率
     较严重的网络,在SACK基础上改进的前向ACK FACK)建议比较适合。
    
     [[ SACK 當同一個window內漏失多個封包時,因為使用cumulative ack的關係,每個round trip time只會知
       道一個封包漏失,所以原始的TCP可能會有極差的效能。Sack Option header可記錄幾個區域,分別代表尚
       末收到的封包號碼,可以明確地通知傳送方哪幾個封包沒有收到。]]

     [[ FACK SACK Option有記錄目前接收方收到封包中最高的編號,稱之為forward ack。相對於其他的TCP以
        重複的ack來估計網路上的資料數,FACK演算法使用SACK Option來明確的計算網路上的封包數,當小於cwnd
        時就可以繼續傳送資料。]]

     4)非对称性考虑
   信道不对称问题的一个有效的解决办法是确保适当的反向带宽并使用充分大的分组。否则,增加的前向缓在
     要求处理较大的线性速率突发错误。