QUIC 和 HTTP/3 多路复用(通过 UDP)与 HTTP/2(通过 TCP)带来的有何不同?
我正在实现DPLPMTUDerrno = EMSGSIZE ,当我发送的 UDP 数据包长于本地接口的 MTU 时,我想阻止 Linux 内核返回 -1 。我想避免在发送多个数据报时(特别是使用sendmmsg(2))时处理错误处理的痛苦,每个数据报可能属于不同的连接。我宁愿让内核丢弃数据包并让应用程序 DPLPMTUD 逻辑计算出 MTU。
ip(7)有这样说:
It is possible to implement RFC 4821 MTU probing with SOCK_DGRAM\n or SOCK_RAW sockets by setting a value of IP_PMTUDISC_PROBE\n (available since Linux 2.6.22). This is also particularly use\xe2\x80\x90\n ful for diagnostic tools such as tracepath(8) that wish to de\xe2\x80\x90\n liberately send probe packets larger than the observed Path MTU.\nRun Code Online (Sandbox Code Playgroud)\n然而设置此选项并不会产生预期的效果。下面是说明问题的代码:
\n It is possible to …Run Code Online (Sandbox Code Playgroud) 我正在编写一个将由网络用户使用的分析服务器。我要测试的参数之一是它们的浏览器支持。请告诉我是否可以获得休耕信息以及如何:
作为一名开发人员,我对 HTTP/3.0 的下一个版本感到非常兴奋。前段时间我注意到,当我打开 Google.com 时,我可以在 Devtools > Network 中看到该协议显示为 Quic。但现在当我打开它时,我只看到 h2 。这是为什么?
我还注意到 alt-svc 标头表明该资源也可以快速使用。但它仍然在 h2 上加载。
alt-svc: quic=":443";
Run Code Online (Sandbox Code Playgroud)
我在使用curl时注意到同样的事情,使用的协议是h2而不是h3。但谷歌多年来一直在使用 Quic。为什么会有这样的改变?
curl -v https://www.google.com/
* ALPN, offering h2
* ALPN, offering http/1.1
* ALPN, server accepted to use h2
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
> GET / HTTP/2
> Host: www.google.com
> User-Agent: curl/7.61.1
> Accept: */*
Run Code Online (Sandbox Code Playgroud) 我正在编写一个简单的速度测试程序,该程序应该测量两个设备之间的快速吞吐量。有一个 python 脚本可以启动客户端或服务器端。客户端产生流量,服务器测量它接收到的流量。就如此容易。但不知何故,即使我在同一台机器上运行服务器和客户端,它的上限也为 ca。115 MB/秒。在同一台机器上,当我生成 TCP 或 UDP 流量时,其流量约为 30 Gb/s,因此带宽不是问题。我使用的库是 aioquic,不幸的是它几乎没有文档记录。问题是如何提高吞吐量?我主要担心 #HERE 注释周围的一些代码。看起来 Transmission() 是一个阻塞函数,但是当我没有暂停/继续机制或某种粗略的 sleep() 时,程序就会挂起,甚至产生低流量。
from connector import * #my base class
import asyncio as asc
import aioquic.asyncio
from aioquic.quic.configuration import QuicConfiguration
import ssl
class QUIC_client(client):
def __init__(self, host, port, use_json):
super().__init__(host, port, use_json)
self.traffic_type = 'quic'
self.payload = b'p'*(self.quic_payload_size-1)+b'\n'
self.config = QuicConfiguration(
is_client = True,
verify_mode = ssl.CERT_NONE
)
async def _maintask(self, time):
self._infomessage(f'connecting to server {self.host}:{self.port}')
async with aioquic.asyncio.connect(host=self.host, port=self.port, configuration=self.config) as client:
await client.wait_connected() …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 HTTP/2、HTTP1.1、QUIC 和 TCP 在 Chromium 中进行一些测试。我想尝试协议的不同组合。不过,我在浏览器中遇到了一些非常奇怪的行为。当我想尝试 HTTP1.1+QUIC 时,我使用以下命令启动浏览器:
chromium-browser --disable-http2 --enable-quic
Run Code Online (Sandbox Code Playgroud)
我可以在 chrome://net-internals/ 上看到 HTTP2 已禁用,而 QUIC 已启用。但是,当我向支持 HTTP2 和 QUIC 的服务器发出 Web 请求时,我得到以下信息:

http2 enabled: false当它在 chrome://net-internals/如此明确地说明时,为什么会说使用了 HTTP/2 ?
我之前已经成功使用 QUIC 运行 HTTP1.1。QUIC 是否已更新为仅适用于 HTTP/2?或者“协议”字段是否显示错误的协议?
我很想知道是否有人成功地将 QUIC 与 HTTP1.1 结合使用
非常感谢!
最近 Chrome、Firefox、cURL 等宣布支持 HTTP/3(之前称为 HTTP-over-QUIC)。
您如何从以下变化的角度看待其适应影响:
应用程序(基于网络的、移动的、基于纯套接字的等)
托管基础设施(网络/应用服务器、防火墙、负载均衡器、CDN、路由器、交换机等)和 ISP 等。
安全性(新威胁、漏洞、VAPT 工具的前景等)
拥塞控制
据我了解,QUIC 为每个连接都有一个唯一的 ID,允许参与者更改其 IP 地址(例如,从 WIFI 移动到移动网络时),但仍然相互发送数据包,这些数据包仍然可以分配给正确的连接。
但接收方如何知道对方要发送数据包的新 IP 地址呢?
我已经阅读了规范,但我不太明白它是如何工作的
我可以使用 curl 使用 HTTP/3 而不是 HTTP/2、HTTP/1.1 或 HTTP/1.0.curl 来卷曲支持 HTTP/3 的网站吗?这可能吗?如果是这样,如何做到这一点?
使用Wireshark 3.2.5版本时,无法捕获QUIC下的数据包,仅显示为UDP。但是Wireshark文档显示支持QUIC?
我正在研究 QUIC 协议,我的教授问了我这个问题。据说 QUIC 是建立在 UDP 之上并使用 TLS 数据包的。TLS本身需要可靠的连接,即TCP。那么,为什么 QUIC 不说是建立在 TCP 之上的呢?PS:如果我的概念错误,请纠正我,如果可能,请深入解释 QUIC 数据包的工作原理。