V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
httpbin - 协议调试工具
httpstatuses - 协议状态码查询
httpie - cURL-like tool for humans
Fiddler
wsWmsw
V2EX  ›  HTTP

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

  •  
  •   wsWmsw · 73 天前 · 1384 次点击
    这是一个创建于 73 天前的主题,其中的信息可能已经有所发展或是发生改变。

    tcp 连接tcp 数据包的区别

    26 条回复    2022-11-17 11:39:55 +08:00
    admirez
        1
    admirez  
       73 天前 via iPhone
    tcp 是流不是包啊
    coolzjy
        2
    coolzjy  
       73 天前 via iPhone
    一个 http 请求由多个 tcp 数据包组成:不确定

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

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

    类似于寿司和米饭的关系。
    kop1989smurf
        4
    kop1989smurf  
       73 天前 via iPhone
    当然,就像楼上说的,http 后来也进行了标准的优化,在 http1.1 中引入了 HTTP 持久连接( HTTP keep-alive )的设计,但这就是后话了。
    villivateur
        5
    villivateur  
       73 天前   ❤️ 1
    @kop1989smurf http2 似乎是复用一个 tcp 连接,同时传输多个 http
    kop1989smurf
        6
    kop1989smurf  
       73 天前 via iPhone
    @villivateur 感谢指正,我也想到这么说有过度简化导致误导的嫌疑,所以上文也补充了
    strengthen
        7
    strengthen  
       73 天前
    HTTP 请求
    TCP 请求
    是两个概念。。
    lambdaq
        8
    lambdaq  
       73 天前   ❤️ 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
       73 天前
    @coolzjy 为什么 http 请求由多个数据包组成是不确定的?

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