首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原始套接字问题: TCP数据包是否传递到原始套接字?

原始套接字问题: TCP数据包是否传递到原始套接字?
EN

Stack Overflow用户
提问于 2011-03-30 00:55:32
回答 1查看 5.6K关注 0票数 8

根据Unix Network Programming Vol1的说法,“接收到的UDP包和TCP包永远不会传递到原始套接字。如果一个进程想要读取包含UDP或TCP包的IP数据包,则必须在数据链路层读取这些包”...

但与此相反的是,在创建原始套接字时有一个IPPROTO_TCP协议选项,在我看来,它就是为这个目的服务的。有人能指出我在理解这一点时可能犯的错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-30 02:30:05

创建原始套接字时,可以使用IPPROTO_TCP等协议选项指定要绑定到的协议。但是,此选项仅确定您打开的套接字的类型,因此在该端口上接收的数据将被转发到您的应用程序。因此,如果您设置IPPROTO_TCP并在端口5000上打开一个原始套接字,您的应用程序将接收发送到端口5000的原始TCP数据包,但不会接收发送到端口5000的原始UDP数据包。

即使包被保证是TCP的,套接字也不会做任何正常的TCP处理(syn、ack、重新排序等),您只会得到原始的IP包,其中包含代表TCP报头的二进制数据块。使用普通的TCP套接字,您接收的数据是嵌入在TCP标头中的数据。对于原始TCP套接字,数据仍然是嵌入在链路层报头中的所有内容,因此您将看到IP报头,然后是TCP报头,然后是接收到的每个数据包的有效负载数据。

有关更多信息,请查看此教程:

A brief programming tutorial in C for raw sockets

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5476112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档