端口号指的是网络应用/软件的标识号。这个端口号是可变的,可以由用户指定(需要在一定范围内进行指定,需要排除已经使用的端口号)。因为每一个网络应用都需要端口号来识别,那么有一些基础网络应用已经占用了一部分端口号(称为”Well Known Ports“),如:FTP应用为20和21,HTTP协议为80,TELNET协议为23等。
0-1023是已经被占用的公共端口号,操作系统已经把这些端口号进行处理,我们不能使用,而1024-65535是可以用户使用的端口号范围。理解了端口号是什么以后,我们要来讲一下为什么需要端口号?
当一台终端(电脑)启动了一个网络应用程序,他想要和外界进行网络通信至少需要打开(监听)一个端口号和其他应用交互,在这里端口是用来标识这个网络应用是哪一个应用,打个比方来说,当我们住宿舍的时候,大家住的床都是一样的,那么为什么我们不会上错床呢?因为我们的形象思维已经标识了哪一个床是我的,而计算机是没有形象思维的,它只有逻辑思维,根据不同的值来判断不同的事物。由此可见为什么要有端口号的概念了。
学习过网络七层协议的朋友可能会知道,网络第四层(传输层)封装的数据里包含两个数据字段,源端口号和目的端口号,目的端口号是为了标识数据的接收者,源端口号是用来标识数据的发送者。源端口号一般是由系统从1024-65535的号码中动态生成的。当一台终端(简称为S)通过网络访问另一台终端(简称D)时,S发送给D的数据中包含了源端口和目的端口,当D收到S发送的数据后,根据源端口可以了解到是S发来的,如果S需要对方返回数据的话,D则将源端口封装到数据的目的端口号中,把自己的端口号作为源端口号(就是把收到的数据中的源和目的端口号反过来)发送数据,S再重复这个过程如此直到数据传输完成。由此可见同一个软件每次传输数据时不一定是同一个源端口号,只要能在操作系统当前运行的程序中唯一标识这个网络程序即可