【发布时间】:2018-05-14 21:48:00
【问题描述】:
我了解 TCP“数据包”包含多个标头(以太网、IP、TCP、...)。在SOCK_STREAM 套接字上调用read() 时,包含哪些标头信息?在将数据暴露给应用程序空间之前,内核是否会剥离一些标头?
场景:我想在我的应用程序的套接字上读取 TCP 数据包。要得到一个完整的数据包,我需要知道数据包的长度。要知道这一点,我需要知道如何解释SOCK_STREAM套接字读取的数据,为此我需要知道我读取的数据是包含TCP头还是仅包含头之后的信息。
【问题讨论】:
-
不包含标题信息。您只需获取数据。
-
是的 - 在应用程序级别,使用 TCP SOCK_STREAM 套接字,没有数据包。读取/接收,如果成功并且连接未关闭,则返回一些大于零且不大于传递的缓冲区大小的流字节数。通过以下任何路由在任何接口上发送或接收的任何数据包或段都不能保证 1-1 对应。