我知道一个 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/