原始套接字和普通的TCP套接字有什么不同?

 我来答
qyq592140
2018-05-29 · TA获得超过9812个赞
知道小有建树答主
回答量:106
采纳率:100%
帮助的人:3.4万
展开全部

原始套接字可以读写内核没有处理的IP数据包,而流套接字(就是TCP流)只能读取TCP协议的数据,数据包套接字只能读取UDP协议的数据。

这两句程序你就可以创建一个原始套接字.然而这种类型套接字的功能却与TCP或者UDP类型套接字的功能有很大的不同:TCP/UDP类型的套接字只能够访问传输层以及传输层以上的数据,因为当IP层把数据传递给传输层时。

下层的数据包头已经被丢掉了.而原始套接字却可以访问传输层以下的数据,,所以使用raw套接字你可以实现上至应用层的数据操作,也可以实现下至链路层的数据操作.

比如:通过sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP))方式创建的raw socket就能直接读取链路层的数据.

1、使用原始套接字时应该注意的问题(参考<<unix网络编程>>以及网上的优秀文档)

2、对于UDP/TCP产生的IP数据包,内核不将它传递给任何原始套接字,而只是将这些数据交给对应的

UDP/TCP数据处理句柄(所以,如果你想要通过原始套接字来访问TCP/UDP或者其它类型的数据,调用socket。


已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式