免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: grayblaze
打印 上一主题 下一主题

同一个ip上的两个不同的socket能否绑定到相同的端口上? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-07-03 20:06 |只看该作者
以前专门看过linuxkernel的代码,如果是UDP,多个进程bind到同一个port,最后一个bind的进程才能收到包
TCP不清楚,但可以肯定地是只能一个进程能收到包。

当然改kernel,什么都是可以做到的

论坛徽章:
0
22 [报告]
发表于 2009-07-03 20:16 |只看该作者
原帖由 grayblaze 于 2009-7-3 17:21 发表
由于某种原因,我们不能做进程间通信(mtu或者同步异步的问题),若能在相同端口监听,不就不需要IPC了吗?做这个的目的就是不想要IPC通信。

原理上,内核只要查一下有哪些socket监听,然后把这些报文分发到这 ...

你现在基于tcp/协议做的,对吧,tcp协议根本就不支持你咋改?改了内核了那就不是tcp了,即便你服务器内核改了,可是客户端的内核你能挨个改吗?建议:1:不要这么做,一个进程接受tcp数据,然后ipc跟别的进程通信,这在计算机上可以很容易的实现,你可以说说你不这么干的理由,也许你的理由并不是理由,那就没必要钻牛角尖了,如果是嵌入式的话我不太清楚了;2:用另外的合适的协议。

[ 本帖最后由 wwdwwd 于 2009-7-3 20:19 编辑 ]

论坛徽章:
0
23 [报告]
发表于 2009-07-03 21:50 |只看该作者
原帖由 grayblaze 于 2009-7-3 17:21 发表
由于某种原因,我们不能做进程间通信(mtu或者同步异步的问题),若能在相同端口监听,不就不需要IPC了吗?做这个的目的就是不想要IPC通信。

原理上,内核只要查一下有哪些socket监听,然后把这些报文分发到这 ...


你这个想法不对。

TCP SOCKET在应用层次上是字节流,无“包”的概念。你在应用程序中简单用一个标志区分是那个进程的包不成立。因为这里无包的概念。

也就是:用TCP SOCKET完成传输的应用,不能考虑有包的概念(不能假设来的数据一定是多少个字节大小的一组),否则程序是错误的。

论坛徽章:
0
24 [报告]
发表于 2009-07-03 22:22 |只看该作者

回复 #21 darkmoonnk 的帖子

对,只能有一个进程收包,现在的内核都这样做的,关于这个问题tcp/ip详解卷一有说明

论坛徽章:
0
25 [报告]
发表于 2009-07-03 22:29 |只看该作者

回复 #22 wwdwwd 的帖子

基于tcp或者udp来做,若用tcp来做,tcp协议本身不需要什么修改,三次握手,重传,拥塞处理等机制还是和原来一样,也就是将报文拷贝到socket的时候多拷贝一份而已,当然和对端的通信也要正常。

论坛徽章:
0
26 [报告]
发表于 2009-07-03 22:41 |只看该作者
个人觉得,只能用抓包的方法实现。或者你重写内核。
在TCP或UDP socket 之上再去做,太弱智了。

论坛徽章:
0
27 [报告]
发表于 2009-07-03 22:46 |只看该作者

回复 #23 思一克 的帖子

“TCP SOCKET在应用层次上是字节流,无“包”的概念”,我不太理解这个意思。我的理解是如果包和包直接存在某种关系,不是独立的,就叫“流”,但tcp的“流”由tcp本身来维护,对于应用层来说,不存在流的概念,tcp那些seq,ack 号以及tcp本身的状态机,应用程序不需要了解。当然,应用程序也可也像tcp一样实现自己的"流"。不知道我理解是否正确?

和tcp不一样,udp没有流的概念,是不是说udp能这样做?

论坛徽章:
0
28 [报告]
发表于 2009-07-05 19:46 |只看该作者
我估计LZ也就是想获取别的进程的一些数据吧(因为没法定制修改那个进程).

其实如上面的 fm971 说的, 直接用抓包的方法去做更加符合逻辑的要求, 在TCP 中强制修改内核估计也只能做做接收数据的动作,要是发送数据,肯定破坏了原监听进程的逻辑(既然这样,何必要去修改内核).

论坛徽章:
0
29 [报告]
发表于 2009-07-05 20:31 |只看该作者
基本概念没搞清楚,一个socket就是一个(ip,port), IP相同,端口也相同,那就是同一个socket。这和kernel没什么关系,kernel只是实现套接字抽象,Windows也实现了,实现的方式可能不一样。如果改了kernel,还能和外界正常通信吗?

论坛徽章:
0
30 [报告]
发表于 2009-07-06 09:10 |只看该作者
Win32下是可以可以实现的,一般用HOOK方式,rootkit的常用伎俩,Linux下就不清楚了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP