【发布时间】:2011-02-05 05:32:35
【问题描述】:
我正在根据教程构建自己的网络服务器。 我找到了一种启动 TCP 连接并发送一段 http 数据的简单方法(网络服务器将在微控制器上运行,因此它会非常小)
不管怎样,以下是我需要经过的顺序:
接收 SYN
发送 SYN、ACK
收到 ACK(连接现已建立)
使用 HTTP GET 命令接收 ACK
发送 ACK
发送带有 HTTP 数据的 FIN、ACK(例如 200 OK)
收到 FIN,ACK
发送 ACK
在我发送确认和 HTTP 200 OK 消息之前,一切正常。 客户端不会向这两个包发送确认,因此 没有显示网页。 我已经添加了一个 pcap 文件,说明了我如何使用 wireshark 记录它。
Pcap 文件:http://cl.ly/5f5/httpdump2.pcap
所有序列号和确认号都正确,校验和正常。旗帜也是正确的。 我不知道出了什么问题。
【问题讨论】:
-
pcap 文件中发生的情况与上述描述不符:捕获显示 SYN 握手,然后是 GET,然后是一堆 HTTP 数据 (65.208.228.233 -> 145.254.160.237)。发送了许多数据包(17,940 字节),全部由客户端确认。
200 ok自己在一个数据包中发送,得到 ACK'd,然后每路发送一个 FIN+ACK 并完成连接。捕获数据错误?? -
Jep,这是错误的数据。对不起。这是正确的:cl.ly/5f5
-
您在服务器中实现的 HTTP 协议是 1.0 还是 1.1,您是否支持持久连接?
-
您是否可以访问完整的 TCP 堆栈和标准套接字 API,或者您基本上是在没有任何操作系统的情况下直接在金属上从头开始编写所有内容?