端口
一、端口
1、什么是端口
端口(port),可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。
端口是指接口电路中的一些寄存器,这些寄存器分别用来存放数据信息、控制信息和状态信息,相应的端口分别称为数据端口、控制端口和状态端口。
电脑运行的系统程序,其实就像一个闭合的圆圈,但是电脑是为人服务的,他需要接受一些指令,并且要按照指令调整系统功能来工作,于是系统程序设计者,就把这个圆圈截成好多段,这些线段接口就叫端口(通俗讲是断口,就是中断),系统运行到这些端口时,一看端口是否打开或关闭,如果关闭,就是绳子接通了,系统往下运行,如果端口是打开的,系统就得到命令,有外部数据输入,接受外部数据并执行。
2、为什么需要端口
那为什么一定要端口这个东西呢? 它到底起了什么作用, 想必大家都想了解, 下面就来说说为什么。
你在浏览器地址栏输入某个网站的域名, 然后回车, 就生成了一次请求, 然后服务器响应你的请求, 浏览器再把结果渲染出来, 你就能最终看到到一个网页.我们可以通过ping域名得到ip地址。有了ip地址自然可以找到主机,但是还有一个问题,主机上运行着很多进程。如果请求只有ip地址这一信息,操作系统将不知道把这个请求交给哪个进城去处理。
那么,所谓的端口,其实可以简单地视作为进程ID,但是为什么区分端口号和进程ID呢?有以下原因,首先作为客户端无法知道服务端对应的进程ID,其次服务端对应的进程ID重启后会改变,并且每个网站的进程ID都不同。
在没有引入端口之前,客户端要与服务端通讯, 就要知道服务端对应进程的 ID, 也即是客户端是依赖于服务端的,显然这种模式是不合适的,而引入端口作为间接层,服务端与客户端的依赖关系反转,客户端把请求发送到对应端口,要求服务端来适应,变成了一种反向依赖。
二、端口类型
1、硬件端口
CPU通过接口寄存器或特定电路与外设进行数据传送,这些寄存器或特定电路称之为端口。其中硬件领域的端口又称接口,如:并行端口、串行端口等。
2、网络端口
在网络技术中,端口有好几种意思,集线器、交换机、路由器的端口指的是连接其他网络设备的接口,如RJ-45端口、Serial端口等。我这里所指的端口不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻辑意义上的端口。
三、端口号划分
1、周知端口(Well Know Ports)
周知端口是众所周知的端口号,范围从0到1023,它们紧密绑定于一些服务,通常这些端口的通讯明确表明了某种服务的协议。
例如:80端口实际上总是HTTP通讯。
2、注册端口(Registered Ports)
从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。
例如:mysql的3306、redis的6379、tomcat的8080、mongo的27017等等。
3、动态/私有端口(Dynamicand or PrivatePorts)
动态端口的范围是从49152到65535。之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配或者是由开发者自行配置。
系统管理员可以"重定向"端口:一种常见的技术是把一个端口重定向到另一个地址。实现重定向是为了隐藏公认的默认端口,降低受破坏率。
四、端口操作
1、查询端口进程
首先安装依赖程序:yum -y install net-tools
netstat -anp (查看哪些端口被打开)
netstat -ntlp. (查看哪些tcp端口被打开)
netstat -ntulp |grep xxxx (查看指定端口使用情况)
查询内容:Local、Address、Foreign、State、Program name
Local:访问端口的方式
Address:端口号
Foregin Address:对外开放,一般使用0.0.0.0:*
State:端口状态LISTEN(监听)、ESTABLISHED(建立连接)、CLOSE_WAIT(对方主动关闭连接)、TIME_WAIT(我方通过调用close()关闭连接)。
Program name:此端口是哪个程序在使用,程序挂载此端口
lsof -i:端口号 用于查看某一端口的占用情况
查寻内容:Command、PID、User、FD、Type、Device、Size、Node、Name
Command:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别文件。如txt等。
TYPE:文件类型。
DEVICE:指定磁盘的名称。
SIZE:文件的大小。
NODE:索引节点(文件在磁盘上的标示)
NAME:打开文件的确切名称。
2、开放关闭端口
# 永久的开放需要的端口
firewall-cmd --zone=public --add-port=端口号/tcp --permanent
firewall-cmd --reload
# 永久关闭某端口
firewall-cmd --remove-port=端口号/tcp --permanent
3、防火墙相关命令
1:查看防火状态
systemctl status firewalld
service iptables status
2:暂时关闭防火墙
systemctl stop firewalld
service iptables stop
3:永久关闭防火墙
systemctl disable firewalld
chkconfig iptables off
4:重启防火墙
systemctl enable firewalld
service iptables restart
5:永久关闭后重启
chkconfig iptables on
4、解决端口冲突
netstat -ano|findstr xxxx(冲突端口号)
tasklist|findstr "10744"
taskkill /f /t /im node.exe