The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
hanguofu

HTTP 多线程下载同一个文件,是从不同的客户端口发出的请求吗?

  •  
  •   hanguofu · Apr 19, 2021 · 3714 views
    This topic created in 2024 days ago, the information mentioned may be changed or developed.
    如果使用多线程从同一个服务器上下载同一个文件,假设该服务器支持 获取文件的部分内容 ( range & content-range ) , 客户端如果同时发出 10 个并发请求的话,这些请求是从 客户端 的 同一个端口 发出去的吗 ?
    18 replies  •  2021-04-20 08:37:13 +08:00
    missdeer
    missdeer
    Apr 19, 2021 via Android
    1
    客户端侧不同连接不同端口
    AngryPanda
    AngryPanda
    Apr 19, 2021❤️1
    2
    开启多线程下载:

    ```
    axel -n 20 https://mirrors.163.com/ubuntu-releases/20.10/ubuntu-20.10-live-server-amd64.iso
    ```

    另外开个终端看端口 `netstat -antp | grep axel`, 输出类似于:

    ```
    tcp 0 0 192.168.0.101:50326 125.77.20.37:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:48718 183.146.17.167:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:56402 106.225.229.135:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:48720 183.146.17.167:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:52922 60.174.42.166:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:58068 183.146.17.165:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:50356 125.77.20.37:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:48712 183.146.17.167:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:58060 183.146.17.165:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:58094 183.146.17.165:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:50340 125.77.20.37:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:36068 183.146.17.166:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:33660 106.225.229.134:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:48234 125.77.20.38:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:50324 125.77.20.37:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:44112 60.174.42.167:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:53444 60.174.42.165:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:52910 60.174.42.166:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:33686 106.225.229.134:80 ESTABLISHED 18142/axel
    tcp 0 0 192.168.0.101:48242 125.77.20.38:80 ESTABLISHED 18142/axel
    ```
    ebingtel
    ebingtel
    Apr 19, 2021
    3
    取决于用了几个连接……多连接的话,客户端是从多个端口发出请求
    zongren
    zongren
    Apr 19, 2021
    4
    http 无状态,取决于你的 header 里有没有设备唯一标识
    no1xsyzy
    no1xsyzy
    Apr 19, 2021
    5
    客户端用同一个端口能算是并发请求吗?
    五元组唯一确定一个连接
    jorneyr
    jorneyr
    Apr 19, 2021
    6
    每个连接在客户端都有自己独立的、唯一的、不冲突端口
    abersheeran
    abersheeran
    Apr 19, 2021
    7
    多线程下载能提高速度的原因就是用了多个 TCP 信道。
    ericls
    ericls
    Apr 19, 2021 via iPhone
    8
    看客户端的具体实现
    ch2
    ch2
    Apr 19, 2021 via iPhone
    9
    多连接就是多端口,不开多连接就只有一个端口
    caola
    caola
    Apr 19, 2021
    10
    http2 应该是一个端口通道吧
    est
    est
    Apr 19, 2021
    11
    这个情况可以讨论的

    1. 如果客户端有多个 IP,一般不会来自同一个端口。但是可以做到
    2. 如果服务器端有多个 IP,可以做到客户端来自同一个端口
    3. 传输协议如果是 h2 之类的支持复用的,那么多半是来自同一个端口
    zhengxiaowai
    zhengxiaowai
    Apr 19, 2021
    12
    HTTP/1.1 只能是 ping-pong 模式,所以只能是多个链接。。。
    newmlp
    newmlp
    Apr 19, 2021
    13
    http1.1 肯定是多个端口,因为每个 tcp 链接算一个会话
    ysc3839
    ysc3839
    Apr 19, 2021 via Android
    14
    一般口头上说的“多线程下载”其实指的是多连接下载,在这个语境下是从不同端口发出去的。
    css3
    css3
    Apr 19, 2021
    15
    顺着再请教下这个问题,多个线程下载同一个文件,是要把一个文件拆成多份吗?最后再合并成一个吗?
    atx
    atx
    Apr 19, 2021
    16
    @css3 不需要,多线程下载之前就知道了文件多大.然后创建个等大小的空文件,下载时根据 range 参数填空就行
    css3
    css3
    Apr 20, 2021 via iPhone
    17
    @lc1450 那下载完不是也还是多个吗
    iminto
    iminto
    Apr 20, 2021
    18
    @css3 下载时根据 range 参数填空...怎么就变成多个文件了

    一个大房间,开了四个门,走进来四组人,按顺序就位,不还是一个房间么。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1337 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 19:25 · PVG 03:25 · LAX 11:25 · JFK 14:25
    ♥ Do have faith in what you're doing.