40、端口号和套接字

经过了上节的学习之后,接下来我们再要了解的一个知识就是端口号和套接字。尤其端口号,是传输层中最为重要的基础概念之一,我们在以后的学习中会经常提及到端口号。


端口号

曾经在学习TCP/IP模型的时候,我们曾学过“SAP”即服务访问点的概念,传输层的SAP即是端口号。也就是说,传输层是通过不同的端口和上面的应用层来交换数据的。我们上节提到过的传输层为两台主机的应用进程之间通信提供服务,其实说到本质上也就是端口号在起作用。

要理解端口号,首先需要理解什么是端口,上面我们说到应用进程,当数据发送方的QQ进程发出消息,消息到达接收方的时候,接收方能够判断出这个消息该由自己的QQ进程来接收。这就是因为每一个应用进程都有自己的一个端口,把每一个端口给它编号就是端口号,端口号可以唯一标识一个应用进程,不同应用进程的端口号是不同的,接收方就是根据端口号来判断应把数据交给哪个应用程序的。

那么我们为所有的应用程序都安排一个固定的端口号就可以解决问题了,比如规定QQ进程的端口号是10,微信进程的端口号是20。这样就可以了吗?其实不然,因为应用进程是一个动态的概念,可以随时被创建和撤销,也就是我可以随时打开一个应用程序,不想用了也可以随时关闭,这样的话和端口号的配合就不够灵活。所以,比较好的一个解决办法就是:当应用进程创建的时候,由系统自动为应用进程分配一个随机的端口号,让端口号也做到“动态地创建和撤销”(除熟知端口号外)。

不过要说明的一点是,虽然端口号是由系统创建应用进程时随机分配的,但这并不等于“随便分配”。端口号也是有范围的:0~65535,虽然数量是有限的,但这个数量对一个计算机来说足够用了。


端口号的类型

在0~65535这个大范围内,又把端口号分了三个小类,分别是:熟知端口号、登记端口号和短暂端口号

其中,熟知端口号又叫“知名端口号”,这类端口号的范围是0~1023,这类端口号一般都是在服务器端为一些比较重要的知名的应用程序固定使用的,目的就是为了让所有的客户程序都能找到服务器上相应的程序,所以必须是固定的且熟知的。就像日常生活中的110、119、120等报警和急救电话一样,是大家共同熟知并且共同遵守的。当然我们不需要把所有的熟知端口号都记住,但在各类考试中我们必须要记住几个常考的:

例如,HTTP使用的端口号是80,SMTP的端口号是25,POP3的是110,DNS的是53,FTP的是20和21,TELNET的是23。这些都是各类考试中常会考的几个熟知端口号。

第二类是登记端口号,其范围是1024~49151,这一类端口也一般是在服务器端使用,是为一些还没有熟知端口号的应用程序使用的,不是太重要,简单知道就可以。

第三类是短暂端口号,其范围是49152~65535,这类端口一般是在客户端使用的,仅在客户进程运行时才被动态选择。也就是说,这种端口的存在时期是短暂的,应用进程创建时被分配,应用进程撤销时被收回。我们前面举的例子,QQ和微信这种应用程序就是在创建时被动态的分配一个短暂端口号。其实在应用程序的角度看来,自己被分配的端口号是多少并不重要,因为所有的端口号对它们来说都是一样的,只需要有一个端口,能够进行通信的工作即可。


套接字(socket)

套接字这个概念,对我们而言是一个新的说法。我们之前说“两台主机之间互相通信”这个说法不准确,因为其本质是两台主机的应用进程之间的通信。后来我们讲的是“两台主机应用进程之间的通信”,这个说法,准确了,但是不全面。

如果要既全面又准确的表达这个意思,有一个专门的术语,叫做Socket,也就是套接字。套接字的表达形式就是用冒号把IP地址和端口号连接起来,例如:(192.168.0.1:8080)所以,传输层的连接,最准确的说法应该是两端套接字的连接。

学到这里,我们应该也能更加清晰地理解前面NAPT技术的原理了,私网IP地址能够映射到同一个公网IP地址,但是使用不同的端口号。也就是在(私网IP → 公网IP)这样形式的NAT基础上,变成了(私网IP:端口号  →  公网IP:端口号)。


本节我们学习了传输层的端口号和套接字的概念。下面一节内容,我们将开始学习传输层两大协议中TCP协议具体的细节。

参考教材:谢希仁《计算机网络》第八版

你可能感兴趣的:(计算机网络(TCP/IP原理),网络)