|
|
楼主 |
发表于 2006-10-31 22:05:51
|
显示全部楼层
谢版主的热心解答先!
“关于这个是由应用程序自身决定.TCP协议规定是1024以下端口为固定.”
这个我明白,我也知道http默认的是80端口,只是我更想知道为什么在通信中我需要用那么多端口?明显不对等吧……这个是由协议决定的吗?
还有,我无意中看到一个人的问题和我一直想问的,原问题如下:
您好!一个FTP服务器处于被动监听状态(一般在21端口),这时候有一个客户过来要求建立连接,于是服务器和该客户完成了三次握手.这个过程中应该始终客户始终连接的使1端口吧!那么后来客户请求服务器传输数据,这时候的端口应该不是21端口了,应该另外再分配一个新的端口(不然这时候若有别的客户请求的,则21端口已经被占用不能再使用),然后客户和服务器在这个端口上交互数据.想问一下在这种情形下,是不是在完成三次握手以后,服务器还得发个报文通知客户以后在新的端口上传输数据呢?是的话,这个是怎么来实现的?
而另一个人的回答我觉得很有道理,如下:
嗯,这个可以看一下FTP协议的RFC文档,21端口上的连接是控制通道,FTP服务器始终默认在这个端口上进行监听,接受连接,当客户端发出下载或上传一个文件的请求命令后,服务端应该通过一种机制告诉客户端一个新的端口(由服务端开辟,端口号具有一定的随机性)(具体这种机制的实现,我已经忘了,以前做过一个ftp客户端的,在Linux 9.0上,有图形界面的,你也可以看一下gftp客户端的源代码)。然后客户端向这个新的端口发起连接请求,建立数据通道。数据通道上的数据传输受控制通道上的命令的控制。
我觉得这给了我很大的启发,如果80端口也是如上所说的连接是控制通道,很多问题我就能想明白了.80端口是吗?可是如果80端口确实是控制端口,那为什么我抓的包里面始终没有往来于服务器的其他端口的数据,而只有80端口呢?
真不好意思,还得麻烦各位大大给解释一下…… |
|