查看: 4539|回复: 2

关于HTTP传输方式的端口使用问题

[复制链接]
发表于 2006-10-31 13:58:37 | 显示全部楼层 |阅读模式
上次看了菜鸟人飞大大的一篇HTTP网页访问应用分析,感觉收获很大!然后自己动手试了一下,呵呵,确实理解有更深了一些,但其中也有几处不太明白,还望各位大大们不吝赐教……


那张HTTP是用科来抓的一次本机与咱论坛的一次HTTP通信,从里面可以看到,正如那篇分析中所说的:在传送一个网页时,Web服务器会打开多个TCP连接,如每一张图片都单独使用一个TCP连接进行传送.在我的样本中,我的电脑在此次通信中一共开了十几个端口,每一个端口在于服务器进行连接时都可以看得到完整的三次握手,而每个端口传输的文件都可以在IE临时文件夹里面找到(废话,呵呵).于是产生了一些疑问:

1.从截图以及文件中可以看出,在每一次新的TCP连接产生时,我的电脑总是会启用一个新的TCP端口,而服务器一端始终使用的是80端口,对于服务器始终使用80端口我可以理解(一共就那么些端口,如果每次相应都需要开很多端口,那么如果同时有很多客户端同时请求的话…… ),但是对于我自己一方就有点不能理解了,为什么我不能也只以一个端口进行传输呢?是为了并行可以加快传输速度?但就算如此的话,服务器只用一个端口,而不是启用相同数量的端口和我并行通信,而一个80端口对于每个TCP请求仍得一个个的处理。能达到并行的效果吗?所以我觉得要是从这个角度解释好像行不通……要么就是HTTP协议本身在客户端和服务端关于端口方面有规定?可是这是为什么呢?

2.关于每个数据包都有的一个序列号和确认号,仔细看了下,好像发现了其中的规律,这些号码都在TCP段,是不是电脑就是通过检查这些号码来判断每个包的先后顺序?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×

评分

1

查看全部评分

回复

使用道具 举报

发表于 2006-10-31 15:44:26 | 显示全部楼层

个人理解

1.从截图以及文件中可以看出,在每一次新的TCP连接产生时,我的电脑总是会启用一个新的TCP端口,而服务器一端始终使用的是80端口,对于服务器始终使用80端口我可以理解(一共就那么些端口,如果每次相应都需要开很多端口,那么如果同时有很多客户端同时请求的话…… ),但是对于我自己一方就有点不能理解了,为什么我不能也只以一个端口进行传输呢?是为了并行可以加快传输速度?但就算如此的话,服务器只用一个端口,而不是启用相同数量的端口和我并行通信,而一个80端口对于每个TCP请求仍得一个个的处理。能达到并行的效果吗?所以我觉得要是从这个角度解释好像行不通……要么就是HTTP协议本身在客户端和服务端关于端口方面有规定?可是这是为什么呢?

关于这个是由应用程序自身决定.TCP协议规定是1024以下端口为固定.

2.关于每个数据包都有的一个序列号和确认号,仔细看了下,好像发现了其中的规律,这些号码都在TCP段,是不是电脑就是通过检查这些号码来判断每个包的先后顺序?

序列号和确认号外加一个IP标示号都是用来确定数据包的顺序.
回复

使用道具 举报

 楼主| 发表于 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端口呢?

真不好意思,还得麻烦各位大大给解释一下……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表