使用 Java 程序进行通信时创建的 HTTP、TCP 数据包在哪里?

Where are the HTTP, TCP packets created when communicating using a Java program?

当我编写一个与 HTTP endpoint/server 对话的 Java 程序时,我会理想地使用一些库来创建我的 HTTP 请求,使用该库提供的 类 并使打电话。

我想弄清楚网络堆栈中每一步的数据包创建到底发生在哪里?当我使用这些 HTTP 库时,这些库是否会处理 HTTP 数据包创建?是他们放置了所有 HTTP header 信息并附加数据并创建数据包吗?

然后TCP包是在哪里组装的呢?它是在内核级别完成的吗?创建的HTTP数据包是否由jvm提交给内核网络模块,内核用TCP信息等信息包装数据包?

我正试图清楚地描绘出这些事情发生的位置,这样我就可以弄清楚我想要为我的项目创意入侵的确切位置。

谢谢
沙比尔

When I use these HTTP libraries are the HTTP packet creation handles by these libraries?

没有 HTTP 数据包这样的东西。有 HTTP 请求和响应。见下文。

Is it them who puts all the HTTP header information and append the data and create the packet?

库创建 headers。应用程序提供数据。

And then where are the TCP packets assembled?

没有所谓的TCP数据包。有 TCP 段和 IP 数据包(和以太网帧,...)。见下文。

Is it done at the kernel level?

是的。

Is the created HTTP packet submitted to the kernel network module by the JVM

基本上是。

and the kernel wraps the packet with TCP information and so on?

是的。具体来说,网络栈的TCP层提供TCPheader和segment isding,IP层提供IPheader和packetising等