当我编写一个与HTTP端点/服务器通信的Java程序时,理想情况下我会使用某个库来使用该库提供的类创建我的HTTP请求并进行调用。
我试图找出网络堆栈中每一步创建数据包的确切位置?当我使用这些HTTP库时,这些库的HTTP数据包创建处理?是谁将所有 HTTP标头信息放入并附加数据并创建数据包?
然后TCP数据包组装在哪里?它是在内核级别完成的吗?创建的HTTP数据包是否由 jvm 提交给内核网络模块,并且内核用 TCP 信息封装数据包等等?
我试图清楚地描绘出这些事情发生在哪里,这样我就可以弄清楚我想要在哪个项目构想中进行攻击。
谢谢你 沙比尔
答案 0 :(得分:1)
当我使用这些HTTP库时,这些库的HTTP数据包创建处理?
没有HTTP数据包这样的东西。有HTTP请求和响应。见下文。
是谁将所有HTTP头信息放入并附加数据并创建数据包?
库创建标题。应用程序提供数据。
然后TCP数据包组装在哪里?
没有TCP数据包这样的东西。有TCP段和IP包(以及以太网帧,......)。见下文。
是在内核级别完成的吗?
是
JVM是否将创建的HTTP数据包提交给内核网络模块
基本上是的。
并且内核用TCP信息封装数据包等等?
是。具体来说,网络堆栈的TCP层提供TCP报头和分段,IP层提供IP报头和分组等。