第4章介绍过,每一个连入网络的设备都有可以唯一标志其身份的标志——IP地址。不考虑网络地址转换(NAT),给定一个IP地址,便可以在网络中唯一确定一台主机。但网络通信的真正主体是进程,传输层要实现的也正是进程与进程之间的通信。进程一定运行在某一台主机(端设备)上,而一台主机上则可以运行多个进程,虽然不是每个进程都需要使用网络通信,但同一台主机上同时有多个进程需要访问网络是十分常见的事情。
一台设备上的多个进程如何共用一个IP地址实现通信,这便涉及复用与分用以及主机上参与网络通信的不同进程之间如何进行区分的问题。
类似这样多个进程公用IP通信的场合,当多个主体共享某一通信资源的情况下便出现了复用与分用。关于复用与分用,一个经典的说明方式就是拿邮政信函来打比方。比如,在大学里,每个班级会有一个邮箱地址,注明某某大学某某院系某某信箱。同班所有的同学都使用这一个地址与外界通信。当向外邮信时,所有的同学共用这一个地址,这便是“复用”。收信时,虽然所有的信函都是发往这一个地址的,但却可以依据姓名之类的信息,把信函交付给正确的同学,这便是“分用”。若要正确地进行“复用”与“分用”,就必须采用类似同学姓名这样的信息,把所有的使用者予以区分。
网络层的IP地址就如同班级信箱号这样的通信地址,它可以在互联网上唯一确定一台主机。运行在某一主机上的多个不同进程,就如同班级中不同的同学。不同的进程在与外界进行信息的收发操作时,就可以视为是对IP地址的“复用”与“分用”。使用同一信箱号的学生要依靠姓名来彼此区分,以保障“复用”与“分用”的正常进行。使用同一IP地址的不同进程之间也要有明确的标志来区分彼此。
在传输层中,用以区分不同的进程的标识被称作协议端口号(Protocol Port Number),简称“端口号”。“端口号”这个名词在很多地方都有使用,有着不同的内涵。本书中的“端口号”是在传输层用以区分不同的参与网络通信进程的概念。端口号被定义为一个16 bit长度的数据,取值范围为0~65 535。另外还要注意,在一台主机中,只有参与网络通信的进程才需要用端口号来区分。有的进程可能是不参与网络通信的。
由于网络通信的主体是进程,所以如果给定一个IP地址就可以确定一个主机;给定一个端口号就可以确定该主机上的一个参与网络通信的进程,那么给定IP地址+端口号的组合,就可以在互联网上唯一确定一个进程。这种可以唯一确定一个进程的组合有一种作为惯例的记录方式,用冒号将IP地址和端口号隔开,形如<IP:PORT>。网络通信时,只需要参与通信的进程彼此明确对方的IP地址+端口号,便可在茫茫网络中唯一确定对方。
需要注意的是,端口号只有本地含义。一般的用户进程,如浏览器进程、微信进程、某个网络游戏的客户端进程,它们在不同的主机上获得的端口号是不确定的。即使在一台主机中,当你退出一个进程后,再次运行同一程序形成的新进程,其申请网络通信而获取的端口号和前一次也未必相同。也就是说,端口号只是在用户进程的生命周期中申请网络通信时被任意赋予的,只是在本次通信过程中不会改变——当然这也足够区分任意时刻主机中的不同进程。
不过,这样的情况只是针对一般的用户进程而言的,各种服务进程则是另一种情况。
对于服务进程的端口号,人类需要采用和一般用户进程不一样的处理。简单地说,就是要规定其使用固定的端口号。人类想获取某个服务器提供的服务或者资源,就要用自己主机上面的客户端进程向服务端进程发送服务请求,为了唯一确定服务进程,在通信建立之前就要明确服务进程的IP地址和传输层端口号。一般来说,服务器的IP地址用户是容易获得的,但服务进程的端口号若也是任意分配,用户是没法去猜测的。为了让用户进程每次都能够正确地与服务进程建立通信,人们采取的方法就是规定某种服务进程必须使用某一个固定的传输层端口号。
关于这个问题,需要先了解一下传输层端口号的分类。人们将传输层的端口号分为3类:熟知端口、登记端口和动态端口。(www.xing528.com)
熟知端口的范围为0~1 023。可以认为,这类端口归哪个应用层使用,都是写在特定的应用层协议里的,在互联网的世界里都是有法律效力的。这类端口的分配由互联网赋号管理局(Internet Assigned Numbers Authority,IANA)统一负责分配。任何应用若要让自己的标准成为协议,并想要获得一个熟知端口的使用权,则必须向IANA申请。
登记端口的取值范围为1 024~49 151。这类端口一般由非协议性质的服务进程使用。一个典型的“非协议性服务进程”的例子就是数据库服务进程。数据库是属于特定公司的产品,不存在让不同的生产商的产品彼此兼容工作的问题,所以不需要通过建立协议来使其规范。某个服务产品的生产商,可以为自己的服务进程选定一个没有在IANA登记的端口,自行选定后需要在IANA登记,以防止端口被重复使用。
动态端口的取值范围为49 152~65 535。这类端口是留给用户进程使用的,当进程需要进行网络通信时,由传输层处理程序提供一个没有使用的临时端口。通信结束后这个端口将会被释放,留待其他进程使用。
一些常见的熟知端口和登记端口分配情况见表5-2。有关应用层协议的更进一步知识将在第6章介绍。
表5-2 一些常见的服务端口分配
续表
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。