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倍。

  • 相关阅读:
    经常使用排序算法
    windows和Linux内存的对齐方式
    Oracle实现数据不存在则插入,数据存在则更新(insert or update)
    hysbz 2243 染色(树链剖分)
    HDU 3864 D_num Miller Rabin 质数推断+Pollard Rho大整数分解
    逆序排列
    PHP盛宴——经常使用函数集锦
    怎样 TabHostFragment自己定义 tab键(indicator)
    不是IT圈人的IT创业优劣势!
    2星|汪丁丁《经济的限度》:访谈文字稿+几篇偏专业的文章,不适合无经济学专业背景知识的读者阅读
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333368.html
Copyright © 2011-2022 走看看