V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
httpbin - 协议调试工具
httpstatuses - 协议状态码查询
httpie - cURL-like tool for humans
Fiddler
wsWmsw
V2EX  ›  HTTP

一个 http 请求由多个 tcp 数据包组成,一个 tcp 连接可以发送多个 http 请求,是这样吗?

  •  
  •   wsWmsw · Nov 16, 2022 · 2956 views
    This topic created in 1260 days ago, the information mentioned may be changed or developed.

    tcp 连接tcp 数据包的区别

    26 replies    2022-11-17 11:39:55 +08:00
    admirez
        1
    admirez  
       Nov 16, 2022 via iPhone
    tcp 是流不是包啊
    coolzjy
        2
    coolzjy  
       Nov 16, 2022 via iPhone
    一个 http 请求由多个 tcp 数据包组成:不确定

    一个 tcp 连接可以发送多个 http 请求:是的
    kop1989smurf
        3
    kop1989smurf  
       Nov 16, 2022 via iPhone
    一个 http 请求包含一个完整的 tcp 链接生命周期(从握手到断开)。所以后半句是错的。

    http 请求是一种使用 tcp 实现的通信标准,他不能和 tcp 混在一起讨论。

    类似于寿司和米饭的关系。
    kop1989smurf
        4
    kop1989smurf  
       Nov 16, 2022 via iPhone
    当然,就像楼上说的,http 后来也进行了标准的优化,在 http1.1 中引入了 HTTP 持久连接( HTTP keep-alive )的设计,但这就是后话了。
    villivateur
        5
    villivateur  
       Nov 16, 2022   ❤️ 1
    @kop1989smurf http2 似乎是复用一个 tcp 连接,同时传输多个 http
    kop1989smurf
        6
    kop1989smurf  
       Nov 16, 2022 via iPhone
    @villivateur 感谢指正,我也想到这么说有过度简化导致误导的嫌疑,所以上文也补充了
    strengthen
        7
    strengthen  
       Nov 16, 2022
    HTTP 请求
    TCP 请求
    是两个概念。。
    tf2
        8
    tf2  
       Nov 16, 2022   ❤️ 3
    一个 tcp 连接只能收发一个 http/1.0 请求
    一个 tcp 只能依次顺序收发多个 http/1.1 非 pipeline 请求。如果是 pipeline 可以批量收发
    一个 tcp 连接可以乱序收发多个 http/2 请求,一个 http/2 请求可以 demux 到多个 tcp 连接上
    一个或多个 udp 包(无连接)可以收发多个 http/3 请求
    wsWmsw
        9
    wsWmsw  
    OP
       Nov 16, 2022
    @coolzjy 为什么 http 请求由多个数据包组成是不确定的?

    @lambdaq
    @coolzjy 有的浏览器有一个 host 最大打开 6 个 tcp 的限制,请问可以确定 1 个 tcp 可以发送多少 http 连接吗?这样我能确定哪些请求被阻塞了
    monkeyWie
        10
    monkeyWie  
       Nov 16, 2022
    @wsWmsw #9 一个 tcp 可以发送无限个 http 请求,如果不想被浏览器最大并发 tcp 连接限制,直接上 http2 就行了
    tf2
        11
    tf2  
       Nov 16, 2022
    @wsWmsw 因为 IP 网络是包交换网络。包有大有小,但是系统内核会负责把包裹按顺序组装好给应用使用。
    xtinput
        12
    xtinput  
       Nov 16, 2022
    @kop1989smurf 最新的 http 是可复用的,不需要频繁建立连接
    otakustay
        13
    otakustay  
       Nov 16, 2022
    @wsWmsw #9 一个包够用了的话,自然就不会由多个数据包组成了
    liuxingdeyu
        14
    liuxingdeyu  
       Nov 16, 2022
    tcp 是把数据切成一个包一个包的发,然后收到的那边校验数据完整性并根据序号排序,这样你就可以认为这东西是流。http 是再往上的协议,tcp 负责的是把 http 想要的东西完整的扔过去,所以 http 可以选择一个请求建一个 tcp 链接,也可以拉个长链接一直用。当然,不用 tcp 也不是不行,quic 就是用的 udp ,但是自己做了校验和排序
    tianyou666shen
        15
    tianyou666shen  
       Nov 16, 2022
    这个系统的教程看看理解一下呗
    只言片语也没法给你一个整体的脉络层级
    wsWmsw
        16
    wsWmsw  
    OP
       Nov 16, 2022
    @tianyou666shen 《网络是怎样连接的》、《图解 HTTP 》、《图解 TCP/IP 》这三本以外有推荐的吗,博文也行
    tianyou666shen
        17
    tianyou666shen  
       Nov 16, 2022
    @wsWmsw
    我是看的慕课网
    咚咚呛的计算机基础 讲的比较细
    Jooooooooo
        18
    Jooooooooo  
       Nov 16, 2022
    粘包警告
    wsWmsw
        19
    wsWmsw  
    OP
       Nov 16, 2022 via Android
    @tianyou666shen ok ,谢谢
    7wN5407klUw768m0
        20
    7wN5407klUw768m0  
       Nov 16, 2022
    @admirez 粘包警察巴甫洛夫反射前能不能了解下什么是 TCP packet
    wsWmsw
        21
    wsWmsw  
    OP
       Nov 16, 2022
    @lambdaq
    @liuxingdeyu 谢谢。那就是包够大、http/1.0 ,1 个 http 请求会建立 1 个 tcp 连接,而且连接中会收发各 1 个包,可以这样理解吗,这里的包没有明确定义,可以说是网络包也可以是 tcp 数据包吧?
    tf2
        22
    tf2  
       Nov 17, 2022
    @wsWmsw 网络包 和 tcp 数据包这种概念你还是多去了解下吧。不要胡猜。。。
    wsWmsw
        23
    wsWmsw  
    OP
       Nov 17, 2022
    @lambdaq 😮‍💨嗯,好的
    julyclyde
        24
    julyclyde  
       Nov 17, 2022
    @Taojun0714 TCP 没有 packet 。TCP 只有 segment
    julyclyde
        25
    julyclyde  
       Nov 17, 2022
    要抱着分层的思想来学习网络知识
    HTTP 使用了 TCP 提供的服务
    TCP 提供的服务是“流”
    TCP 本身由 segment 构成,那是 TCP 自己的事,和 HTTP 没啥关系
    liuxingdeyu
        26
    liuxingdeyu  
       Nov 17, 2022   ❤️ 1
    @wsWmsw 建议看看 osi 的七层模型。ip 层就是一个一个的数据包,扔给目标机器,加上端口,目标机器就能知道给哪个监听程序处理这个数据包(这会还跟 tcp 、udp 无关),tcp 收到包之后,校验完整性再发 ack 再排序,这样对于上面的 http 来看,tcp 提供的就是个完整的通道。你可以理解成,tcp 是个物流公司,有一台一台的大卡车,谁先到谁后到无所谓,车上有编号,也有人查货物完整性。http 是个用物流的,每次用的时候找个物流公司可以,找个长期的物流公司也行。quic 就相当于是找了一堆车自己维护货物的顺序自己查货损没损坏
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1103 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 18:26 · PVG 02:26 · LAX 11:26 · JFK 14:26
    ♥ Do have faith in what you're doing.