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