我理解TCP"数据包"包含几个标题(以太网,IP,TCP,...)。在read()
套接字上调用SOCK_STREAM
时,包含哪些标头信息?在将数据暴露给应用程序空间之前,内核是否剥离了一些头文件?
场景:我想在我的应用程序中读取套接字上的TCP数据包。要获得完整的数据包,我需要知道数据包的长度。要知道这一点,我需要知道如何解释SOCK_STREAM
套接字读取的数据,为此,我需要知道我读取的数据是包含TCP标头还是仅包含标头之后的信息。
答案 0 :(得分:1)
当您拨打read()
时,您只获取数据,而不是标题信息。
您可以使用getsockaddr()
和ioctl()
等功能获取有关套接字的信息。但是这不会返回有关单个数据包的信息。
如果您需要数据包级详细信息,则需要使用libpcap
。
答案 1 :(得分:0)
使用read()
不会为您提供所需的标题信息,但只会为您提供数据