使用read()时,TCP流中包含哪些标头?

时间:2017-11-30 20:49:51

标签: c++ c linux sockets tcp

我理解TCP"数据包"包含几个标题(以太网,IP,TCP,...)。在read()套接字上调用SOCK_STREAM时,包含哪些标头信息?在将数据暴露给应用程序空间之前,内核是否剥离了一些头文件?

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

2 个答案:

答案 0 :(得分:1)

当您拨打read()时,您只获取数据,而不是标题信息。

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

如果您需要数据包级详细信息,则需要使用libpcap

之类的内容

答案 1 :(得分:0)

使用read()不会为您提供所需的标题信息,但只会为您提供数据