免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1560 | 回复: 6
打印 上一主题 下一主题

[网络管理] 请教一个网络编程中端口的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-26 12:24 |只看该作者 |倒序浏览
本人网络编程的知识有限,现在有个想不清的问题,麻烦大家指教。
我知道服务器的80端口是为HTTP开放的,我有一下问题请求指正。
1 80端口是网站服务器监听用的端口;
2 一旦收到client的请求,便会开启另外一个端口发送网页内容,而开启的这个端口是随机的,也就是说是系统临时分配的;
3 client使用某个端口向服务器的80端口发送请求,连接后,开启一个新的socket,并且把这个socket与该端口绑定接受数据,client上的这个端口也是系统随机指定的;
4 网络编程中,许多网络进程之间都有类似的关系;
5 如果我要控制它们之间的传输带宽,请问我该怎样做呢?我在服务器上控制80端口还是控制那个发送数据用的端口。

以上5点是我个人的理解,请问是否有错误,如果有,麻烦大家一一指出并且更正,本人不胜感激!

论坛徽章:
0
2 [报告]
发表于 2006-11-26 12:30 |只看该作者
1、只针对大部分网站有效,IANA 分配的端口是 80 而已
2、不对,不用开另外的端口。如果另开端口,很有可能是 FTP/TFTP
3、一般是这样的,但也有程序用固定端口发起到 server:www 的连接
4、没明白
5、先解释一下第 4 条,谢谢

论坛徽章:
0
3 [报告]
发表于 2006-11-26 12:47 |只看该作者
多谢指教!
1 如果某些网站服务器不使用80端口,那客户端怎么知道是哪个端口?
2 如果它不另外创建一个新的端口的话,如果有很多客户端向它请求,难道它始终用同一个80端口向所有的客户机发送数据?
3 这个好像弄明白了。。。
4 我的意思是,网络编程中,如果两个进程之间要使用socket通信,它们之间端口的关系是不是类似于以上的关系,也就是说是这样的:两个进程约定好使用某一个端口,一个进程使用这个端口监听,另一个进程向该端口发送请求,服务进程收到请求后,连接,并且开启一个新的socket,与某个端口绑定(该端口是系统随即分配的),向客户进程发送数据;客户进程使用一个随机的端口请求连接,一旦连接成功后,就使用这个端口接受数据。
5 如果我要控制着两个进程的带宽,我是控制服务进程所在机器的监听端口呢,还是那个传送数据的随机端口?

我现在就是想不通整个过程,请高手详细的说明这个过程,万分感谢!!!

论坛徽章:
0
4 [报告]
发表于 2006-11-26 12:57 |只看该作者
1、服务器端口在提供给客户浏览器的 URL 里已经指定了,比如:http://www.specific.net:3108/,3108 就是这个端口号。https://www2.duron.com:4443/,4443 就是这个端口号。如果不显式地给出端口号,一般表示使用 IANA 分配的默认号码,https:// 为 443,shttp 和 http:// 为 80,等等等等
2、这个和 TCP/IP 实现有关。以 4.4BSD 的实现为标准的话,所有与标准兼容的实现都在 accept() 的时候得到一个不同于 bind() 时候的 socket descriptor,这样就使得程序能继续用原先 bind() 得到的 sd 来监听,可以接受源源不断的连接请求。
3、<...>
4、澄清了第二点,这个应该明了了吧
5、控制带宽,有很多方法,不知道你需要的是哪一种

[ 本帖最后由 langue 于 2006-11-26 13:01 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-11-26 13:11 |只看该作者
多谢指点!!!
1 好像明白了。。。
2 你意思是说,accept()后服务器创建一个新的socket,并且将这个新的socket与原来监听用的端口绑定,这样一方面,服务器使用原来的socket通过监听端口继续监听,同时使用一个新的socket通过这个监听的端口向客户机发送数据?如果又来了一个新的客户请求,它再创建一个socket,还是和这个监听的端口绑定,并且发送数据?请确认一下我的理解是否正确。
3 pass
4 是不是几乎所有的网络编程中的进程通信(使用socket的)都有一个类似的过程(在Linux中),或者还是有例外?
5 我现在想简单的控制两台机器之间的通信带宽。如果我在服务器端该怎么做?或者在客户机端又该怎么做?我使用了cbq.init,在配置文件中如下:
DEVICE=eth0,100Mbit,10Mbit  
RATE=1Kbit  
WEIGHT=100bit
PRIO=5
RULE=160.63.43.178(client机器的IP地址)
我在服务器上运行cbq.init后,按理来说应该从服务器到客户机方向的带宽应该被限定到了1kbits,于是我想测试一下,我便在客户端使用sftp试图从服务器上拷贝一个文件,但是传输的带宽竟然有7M,也就是说我的控制带宽失败,请问我使用的这个配置文件有错误吗?还是我其他地方有问题?多谢指教!!!

论坛徽章:
0
6 [报告]
发表于 2006-11-26 13:30 |只看该作者
1、Done
2、仅仅再在最初 bind() 得到的 socket descriptor 上 accept() 一下,没有绑定。通讯当然是使用了 accept() 得到的 socket descriptor。
3、Done
4、这个,建议参考 Unix 方面 IPC 的书籍,我说的不十分透彻。
5、专门的 TCP/IP 队列,我不很清楚。如果只是要在万维网服务器上做带宽控制,使用服务器自带的功能,或者模块扩展,就可以了。对于 Apache HTTPd,有个模块,mod_cband

论坛徽章:
0
7 [报告]
发表于 2006-11-26 14:51 |只看该作者
原始短消息: 还是有点不明白
你好,感谢你刚才的耐心答复。关于第二点,我还是有点不明白。
服务器发送数据用的那个socket不需要于任何端口绑定吗?端口的作用是不是我这样理解的:当远端机器需要发送信息给本地进程的时候,这个通信用的socket就一定要和本地的一个port绑定,如果只是本地进程向远端进程发送数据,那就没有必要和本地的一个端口绑定。请问是不是这样的?
多谢指教!!!


和进程关系不大,至于是否绑定,要看需要。监听的一端的 socket 应该绑定,而连接的一端的 socket 可以绑定,也可以不绑定。一般浏览器的做法是不绑定,由操作系统的 TCP/IP 实现自己选择一个可用的端口

可能我说得不清楚、不明白,这种地方,你可以看书。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP