04-端口

目标

  • 知道端口分为知名端口、动态端口两类
  • 能够说出80、21、22知名端口的作用

image-20181107235646538

1. 什么是端口

"端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。

image-20180607165851804

比如 A、B两台计算机要进行通讯:

image-20180625005313738

如果一个程序需要收发网络数据,那么就需要有这样的端口

在linux系统中,端口可以有65536(2的16次方)个之多!

既然有这么多,操作系统为了统一管理,所以进行了编号,这就是端口号

2. 端口号

端口是通过端口号来标记的,端口号只有整数,范围是从0到65535

3. 端口是怎样分配的

端口号不是随意使用的,而是按照一定的规定进行分配。

端口的分类标准有好几种,我们这里不做详细讲解,只介绍一下知名端口和动态端口

3.1 知名端口(Well Known Ports)

知名端口是众所周知的端口号,范围从0到1023

image-20180607163104093

可以理解为,一些常用的功能使用的号码是估计的,好比 电话号码110、10086、10010一样

知名端口类似于电话号码中的一些特殊用途的电话号码, 比如:

image-20180608215310518-4494007

知名端口范围从0 ~ 1023.

一般情况下,如果一个程序需要使用知名端口的需要有root权限

3.2 动态端口(Dynamic Ports)

动态端口的范围是从1024到65535

之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。

动态分配是指当一个系统程序或应用程序程序需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。

当这个程序关闭时,同时也就释放了所占用的端口号

3.3 怎样查看端口 ?

netstat命令是一个监控TCP/IP网络的非常有用的工具,可以显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作。

image-20180716131042849

  • 用“netstat -an”查看端口状态

image-20180607163603494

image-20180904221518375

netstat -an | grep 21   查询所有含有21的端口使用情况
  • lsof -i [tcp/udp]:端口号 (可以查看端口号被哪个程序占用)
lsof -i :21

image-20180607164126475

为啥没有查出来21端口对应的程序呢?是因为权限的问题

image-20180607164320405

  • netstat -ntl (可以查看服务器socket)

image-20180716131354703

4. 小总结

端口有什么用呢 ?

我们知道,一台拥有IP地址的主机可以提供许多服务,比如HTTP(万维网服务)、FTP(文件传输)、SMTP(电子邮件)等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。

需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则可能使用“3457”这样的端口。