zoukankan      html  css  js  c++  java
  • 上传压死下载 & 常见TCP选项

    上传压死下载

    下载文件的速度非常低。

    抓取数据包分析,发现:

    服务器 —> 客户端 的包,经历时间 < 1ms后,对方做出反应。

    客户端 —> 服务器 的包,经历几十至几百ms后,对方才有反应。一个文件中的第一个SYN请求还超时,3s后重传。

    服务器 —> 客户端 的包,至少都重传了一遍,不论是在建立连接时,还是在传送数据时。

    可能的原因:客户端 —> 服务器的链路拥塞,丢包率高,客户端的ACK丢失了,服务器就会超时重传。

    标准TCP的实现借助反馈机制(ACK数据包)来控制流量。当链路上行方向带宽用满后,下行方向数据的ACK数据包

    将与上行方向的大数据流竞争上行带宽,丢包的概率增大。ACK数据包的丢失将严重影响TCP的流控机制,从而降低

    下行方向的数据吞吐率,造成下行带宽的严重浪费,即所谓的上传压死下载。

    根本上的解决方法:杜绝上行拥塞,并给予ACK数据包高优先级。

    更具体的猜测:

    P2P软件在下载的同时,也在为其他用户提供上传。BT、迅雷等软件在下载的同时又作为种子为其他人提供下载服务,

    由于ADSL上行带宽最大只有512Kbps,所以使用P2P软件后更容易造成局域网出口上行带宽的拥塞,但是任何上网操作

    均需要上行/下行两个方向的流量,如果上行带宽被占满,就会影响到下行带宽的使用。

    常见TCP SYN包选项构成

    02 04 05 b4

    04 02 08 0a

    00 00 ed d1

    00 00 00 00

    0103 03 06

    Maximum Segment Size

    0x 02 04 05 b4

    Kind = 2

    Length = 4

    Maximum Segment Size = 0x05b4 = 1460

    SACK permitted

    0x 04 02

    Kind = 4

    Length = 2

    Timestamp

    0x 08 0a 00 00 ed d1 00 00 00 00

    Kind = 8

    Length = 10

    Timestamp Value = 0x0000edd1 = 60881

    Timestamp Echo Reply = 0x00000000 = 0

     

    NOP

    0x 01

    Kind = 1

    Window Scale

    0x 03 03 06

    Kind  = 3

    Length = 3

    Shift count = 6

    TCP头中Window size value为14600,表示tcp_rmem为14600字节。接下来的数据包中,这个值就要扩大64倍。

  • 相关阅读:
    Kafka 生产者 自定义分区策略
    同步互斥
    poj 1562 Oil Deposits(dfs)
    poj 2386 Lake Counting(dfs)
    poj 1915 KnightMoves(bfs)
    poj 1664 放苹果(dfs)
    poj 1543 Perfect Cubes (暴搜)
    poj 1166 The Clocks (暴搜)
    poj 3126 Prime Path(bfs)
    处理机调度
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333368.html
Copyright © 2011-2022 走看看