端口是什么意思
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
其实网上讲的端口是协议端口,是协议软在传输数据的时候为了区别不同的服务程序而用的一个标志罢了,我们来看看协议端口的作用,我们叫的协议指TCP/IP协议,端口应是应用软件下传输层的一个概念,也是协议中的传输层和应用层进行数据传输的通道,端口是一个抽象的概念,并不存在真正意义上的一个口子,很明确的说端口是一样标志,协议软件在处理网络上的数据时要分析这个报文中的端口号是那个端口,当然协议软件是通过端口来区分各应用程序的,也就是说协议软件是通过端口号才知道这些数据是给谁的,有人会问IP层有没有端口呢?你要这样设计当然没办法,其实根本没必要这么做,因为IP层分析报文,通常是查看报头的上层协议类型(如TCP,UDP)等,来分别交给谁来处理,看起来这个过程也有点像传输层和应用层中的端口来传输和区别数据,只是人们不这么叫,因为作为协议软件来说,通常我们把它看成一个总体,也就说虽然TCP/IP中包含很多协议,可是他们都属于TCP/IP簇。从设计角度来说不管是里面的其它协议,开发时就以全部实现了,而传输层到应用层不是这样,协议软件是定义了一些端口来给应用程序,通常那些应用程序也不是固定不变的,有时我们要运行一个网络程序、有的要运行二个程序、而有的要运行更多的应用程序,这意味道开一或二或更多的端口,每一个网络服务程序最少得有一个端口,而这个端口搬到编程上去时就成了套接字,也就是:“IP+端口”就叫一个套接字,那么端口在内存中是什么样的呢?是不是要占一定的内存空间呢?
这个问题从书面上来回答是很容易的,因为端口是一种抽象,自然就没有什么内存空间的问题,实际上端口是一个存取报文的队列,当传输层处理数据时分析到报头,看他是属于那个端口,然后把不同端口的数据分别存于不同的一个内存块,或者叫做缓冲区,反正是一个内存空间,这个空间存有各应用程序各自所有的数据,而没有其它的应用程序的数据,就象我们一个学校的信箱是一样的,如处面来的信,学校通常是放到信箱里,如三班是12号信箱,二班是13号信箱,自然我们班要信就可以从对应于自己班的信箱中取出来就是了。那么这个信箱就好比端口一样。当然了我们要知道那个信箱是我们班的,自然由学校分配或自己申请了以及双方协议,协议中的端口也是这样,应用程序在运行前,也就是进入内存前并不知道自己是用那个端口,但是他知道要那个端口,也就是说他想要这个端口,给不给还是协议软件的事了,如果协议软件愿意那自然而然这个服务程序就用这个
端口和下层传输层打交道了,如果不给通常是有别的程序先用上了。怎么办,用其它的端口吧。
在网络应用程序中我们常还会碰到FTP这个应用程序,方到协议上来说这就是FTP协议,问题是当我们用FTP应用程序下载时有时会下载一个,有时会下载多个程序或文件,问题是此时同一样程序怎么能区别是那个数据属于那个文件的呢?人们常会这样想,当用FTP下载时,程序会打开两个进程,如果自己的IP为202.103.102.1,对方的IP,也就是我们要下载程序的地方的服务器的IP为202.103.112.4,我们通常会这样想,数据端口也20,控制端口是21,当然21号端口是为了传输控制命令了,以控制数据的传输,20端口是数据端口,进过这个端口来传输数据文件了,问题是两个文件同时下载时,进程怎么区别,也就是FTP应用程序怎么知道网络上传过来的数据是属于那个文件的呢?因为端口是唯一标志这些数据属于谁的。所以用20号端口同时来传输两个文件的数据肯定是不可以的,其实我们别忘了20号端口只是默认端口,实际上下载时用不用这个端口要看协议软件和FTP怎么来决定了,通常下载时两个文件的数据传输并不是用同一个端口,FTP通常会暂时用一个空闲的端口来传输数据,数据有三个文件同时传输会再暂时占用另一个空闲端口。
这是FTP的性质,可是对于我们最常用到的80端口,也就是WEB服务端口,是不是WEB服务也(HTTP协议)和FTP传输一样,如我在IE窗口中打入/index.htm在另一个窗口中打入/image/love.htm,很显然这是同一个网站的不同目录,也就是说对方的IP和端口在两次请求中是一样的,自己用的端口和IP也是一样的,那么窗口是怎么区别这个窗口的数据呢?我们来看看两次请求有什么区别,从目标服务器来讲,他只能看到你计算机上端口,并不知道你计算机上程序的窗口,也就是说他只能以端口作为标志,并不能用每个窗口提供标示,他和一个窗口打入第一个/index.htm然后打入第二个/image/love.htm及两个不同的窗口发出的请求,服务器是没办法区别的,那么这种区别只有在自己的计算机上了,那么计算机上的80端口应用程序是怎么来进行区别的呢。我们会看到请求的唯一区别在于目录的不同,可以从返回的目录来区别的,可是问题又来了,不是每个报文都有目录信息的,这是乎就出现难题了,如果两个超文本请求目标是同一网站的不同主页,那么会对各IE进程产生混乱,因为下层的协议软件只能用端口来对应于特定的应用程序,可是这里只有一个80端口,当传输层把数据上交给应用层时只能通过端口来,除非应用程序中有标志窗
口的或进程的信息而且这个信息在报文的数据段,为什么呢,因为数据到达应用层时报头的信息被各层的协议去掉了,最后只有数据段了。那么IE进程还得处理掉这个信息才能得到真正有用的数据,这种方法有点不可理解,即使它可行。这也会使得应用软件任务过重。还得服务器同意你这样做,也就他传过来的信息要包含特定窗口的标志信息。
其实80端口只是一个控制端口,也就是命令传送端口,数据的传输完全由系统按规律或随机的运用空闲的端口工作的。这就很容易解决了这个问题。
那么我们再来看看计算机上的硬件端口,这个端口和网络协议的端口不同,这些端口要参与其它硬件端口一起编址,是独立的编址,不过和内存编址并不是一回事,它们两个并没有关系,各自分别对应于一个独立的编址系统。硬件端口对于操作系统来说就意味着一个寄存器了,这里的寄存器和内存中的寄存器也不一样,所以说对硬件的控制,我们通常都是向硬件端口,也就是寄存器写入一定的命令数据来被硬件接收,而端口是它们的通道。