BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #41966同步于 2010/7/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

我想做这么一件事,关于rawsocket,请问谁有想法?

puretna
2010/7/30镜像同步5 回复
我想做一个连续向同一地址发送时间戳的程序,为了提高效率,省去每次发包都要层层打包校验的过程。 我自己写好udp包头,ip包头,以太包头,然后每次发包,就是把时间戳直接和这些头拼接,然后发送出去。希望我说明白了。 导师要求用raw socket,因为可以控制比较低层的东西。 主要问题就是如何构造这个udp包,谁有相关的例子请发给我或者贴上来。谢谢 2010becool@sina.com
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
ericyosho机器人#1 · 2010/7/30
raw socket你也得至少符合IP协议啊,不然当中的节点,怎么会帮你传呢? 像你这个意思,基本上就要写个简单的协议栈了吧……
puretna机器人#2 · 2010/8/1
请问协议栈都包括什么? 我觉得我只要把2 3 4 层的包头的数据结构按照需要填正确就行了,比如4层写好端口号 ,3层写好ip地址,2层写好以太网地址。其他的信息类似的写好。这样是不是就可以了,我现在主要是找不到合适的例子。最基本的怎么把我写好的2层数据包直接给到发送网口的缓存里,让他发送出去。 你看我这样做合理么?谢谢 【 在 ericyosho 的大作中提到: 】 : raw socket你也得至少符合IP协议啊,不然当中的节点,怎么会帮你传呢? : 像你这个意思,基本上就要写个简单的协议栈了吧…… : -- : ...................
ericyosho机器人#3 · 2010/8/1
协议栈的意思,就是说,你要把从上到下的2、3、4从上到下的功能都实现一遍。 socket在IP层以下的东西,是不提供支持的,也就是说,你要从网卡的驱动开始写起。 而且就算你写出来了,在网络上也传不了,因为连接你的客户和服务器的中间节点(路由器啊)之类的,不认识你写的这个新协议。
puretna机器人#4 · 2010/8/2
我还是不明白,我举例说明,第二层,我把以太网的目的地址写成广播,源地址是我的本机网卡mac,这个本地网关能收到吧,第三层,我填好源地址,目的地址,中间的路由器是可以根据这个路由的啊,为什么会向你说的不认识我的协议呢,我没有自己新写个协议,我是按照现有的以太网和ip协议 自己填写头部而已啊? 【 在 ericyosho 的大作中提到: 】 : 协议栈的意思,就是说,你要把从上到下的2、3、4从上到下的功能都实现一遍。 : socket在IP层以下的东西,是不提供支持的,也就是说,你要从网卡的驱动开始写起。 : 而且就算你写出来了,在网络上也传不了,因为连接你的客户和服务器的中间节点(路由器啊)之类的,不认识你写的这个新协议。 : ...................
ericyosho机器人#5 · 2010/8/2
你的这些东西,都是由系统调用和网卡驱动自动完成的。你非要人为地去进行介入。 我不是特别了解内部的细节,你的头部改掉了,难道CRC校验功能不会出错么? 而且我好像看到你想要把那些什么校验的功能都去掉。但是当中的路由器,并不知道你的校验功能是不需要的啊,它们还是照常检测啊。那和你填入的那些东西不一致,就直接被扔掉了,怎么还会帮你传呢?