c++ - 使用 read() 时,TCP 流中包含哪些 header ?

标签 c++ c linux sockets tcp

我知道一个 TCP“数据包”包含多个 header (以太网、IP、TCP 等)。在 SOCK_STREAM 套接字上调用 read() 时,包含哪些 header 信息?在将数据公开到应用程序空间之前,内核是否剥离了一些 header ?

场景:我想在我的应用程序中的套接字上读取 TCP 数据包。要获得完整的数据包,我需要知道数据包的长度。要知道这一点,我需要知道如何解释 SOCK_STREAM 套接字读取的数据,为此我需要知道我读取的数据是包含 TCP header 还是仅包含 header 后的信息.

最佳答案

当您调用 read() 时,您只是获取数据,没有标题信息。

您可以使用 getsockaddr()ioctl() 等函数获取有关套接字的信息。但这不会返回有关单个数据包的信息。

如果您需要数据包级别的详细信息,您需要使用类似 libpcap 的东西。

关于c++ - 使用 read() 时,TCP 流中包含哪些 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47582367/

相关文章:

c++ - 线程安全单例类——我这样做对吗?

c - 如何实现无损 URL 缩短

c - ruby C 扩展 : run an event loop concurrently

python - 在 Linux 上使用 Python 中受密码保护的 Excel 工作表

c++ - 使用 scons 在 Mac OSX 10.9 上构建

c++ - 为什么 lambda 表达式不需要 <functional>,而 function<void()> 需要?

c++ - SOIL_load_image() 返回 null

无法修复 ncurses 中的内存泄漏

c++ - 在 C++ 中为 OSX 创建共享库

linux - 如何用SED命令替换单词?