00:00
在进程管理这一节的最后呢,啊,我们来介绍一个查看网络状态的命令啊,其实前面我们介绍网络连接的时候,大家都已经知道了啊呃,跟网络相关的命令最常见的其实就两个啊,一个是if。在Linux里边是I,查看当前的所有的网络连接和IP信息啊,那另外还有一个呢,就是P。就是我们可以直接去P一下,比方说我们当前这个局域网里边,外边的主机不是111.1吗?哎,我们一看可以P通,就可以知道当前的网络连接是没有问题的,这都是最为简单最为直接的测试网络的,或者说查看网络信息的两个命令,但是呢,哎,他们能做的事情就太少了,能够看到的信息也太少了,我们现在要介绍的就是另外一个更加强大,更加常用的。显示网络状态和端口占用信息的这样一个命令叫做net stat啊,那我们知道它其实就是nett嘛,就是显示网络状态,它能显示的网络的信息其实非常的多啊,比方说当前的网络连接状态,诶,能看到所有的路由表的信息啊,包括这个,呃,监控当前每一个端口占用的状态和涉及到的进程的信息,它都能全部显示出来。
01:22
所以这也是为什么我们把这一个命令放在了进程管理类里边,因为它跟进程也是相关的,我们在实际使用的过程当中呢,往往就会结合起来使用,比如说先用net set啊看一看,比方说哪些端口被占用了,是哪个进程被占用的,然后接下来再去去查看进程的状态,然后有可能用Q把它终止掉,哎,所以所有的这些命令都可以结合在一起。接下来我们就来看一下neate的具体的用法,呃,那一般情况ne后面也是要加一些基本的选项的,那我们首先看一下啊,常用的选项有哪些,首先就是杠A啊,因为当前我们这个net state呢,它列出来的信息其实是很多的,那这个杠A呢,就表示我们会显示。
02:11
A嘛,当然就是二了,会显示所有正在监听或者没有在监听的套接字,所谓的套接字就是socket套接字,Socket呢?呃,熟悉计算机网络的同学应该对它是不陌生的啊。呃,那所谓的套接字其实就可以认为是进程之间,哎,他们要做网络通信的时候。我们在机器上的接口这里可以画一个图来看一下啊,比如说我们这里有两台机器。两台机器,哎,比如说我们就考虑当前这是我们自己的PC主机,然后这是我们的远程服务器,现在的话其实就是VM了。他们俩之间要进行通信,要传递数据。我们这里最简单的就是我要利用一个SSH的服务。连接远程连接到虚拟机上面去,哎,那所以这里呢,我有一个远程连接的进程。
03:08
跟服务器那边的SHD进程这就要做一个通信了,那么两者啊这种啊,进程间要做网络通信的话,那怎么办呢?那显然就得在我这个机器上。开一个口,开一个门,接下来呢,哎,我就知道从这个门出去,数据从这个门出去,然后经过网络传输。同样,在远程服务器那边也要开一个门。接下来从这个门进去,传递给相应的那个服务,哎,那这样的话,我们两个进程之间就做完通信数据就可以进行彼此的传输了,所以这里开的这个门,我们可以认为这就是所谓的。套接字socket,那所以一般情况这个socket是以什么样的形式出现呢?那就是你得指定我到底是哪一家哪间房子的哪个门啊,那对应在我们计算机领域里边哪间房子,那就是哪台机器嘛,所以一般就给一个主机名啊,Host name。
04:11
或者我们可以给一个IP192168。我们现在的这个IP是111.1啊,那对应的这边它的这个房子的名称啊,我们的主机名那就是111.100。那同样后边还应该有一个门的名称,因为我们当前他俩这个进程之间是通过这个门走,那你不能混了呀,假如说另外还有一个进程。他要跟另外一个机器通信的时候,他可能就要自己开另外一个门了,因为我们当前这个数据通道是有限的嘛,你不能所有的进程都走同一个门啊,诶,那所以当前我就得指定这个门到底是哪个,这个门所谓的就是当前机器上的一个端口号。Pot。
05:01
那对于一台机器而言,端口号呢?呃,一个IP啊,可以有65536个端口,这个大家可能也知道啊,端口号就从零到65535。那有一些端口号,其实我们已经被固定的服务已经要占用了啊,比如说我们非常熟悉的像这个SSH占用的是什么呢?二二端口对吧。他走的这个门就是22号门啊,那比方说我们非常熟悉的浏览器啊,我们去访问这个网页啊,网页服务,它占用的就是什么呢?呃,就是八零端口对吧,这个我们都非常熟悉,那还有比方说我们自己安装了一个MYSQL。哎,那MYCQ的服务默认占用的端口就是3306,哎,那所以其实就是零到65535中间啊,我们只要选一个数来指定当前这个门的号码就可以了,哎,所以接下来我们这个socket的表示就往往就是一个IP或者一个主机名后面跟上一个冒号,然后指定指定当前的端口号。
06:09
这就是哪个房子的哪个门出来,然后连接到另外一个房子的某一个门,哎,这样的话,门对门我们就可以传递数据了,这就是关于这个端口,以及当前我们这个socket套接字的一个基本的概念啊,计算机网络的知识,我们来做一个复习。所以我们这里边给了杠A参数之后,显示的就是所有正在监听和没有在监听的所有的socket,就是我们所说的这个IP加上端口号这样的一个形式,那什么叫做监听呢?呃,监听就指的是它当前的状态是listen啊,就是说正在听,听的意思就是说两个进程之间要通信,他们之间要建立连接,哎,那首先我应该要做一个监听啊,就是首先你得听着啊,看看这个门里边是不是要来数据,是不是有人要来啊,然后如果说我们已经建立啊,彼此有了这个数据通信,我们知道像这个TCP协议啊,要做三四握手,如果已经成功建立连接之后,那它的状态就由监听会变成establish的,就是建立连接的一个状态啊啊,那所以这是关于我们这个网络状态的一些基本的概念,那所以这个杠A参数呢,就能够把我们当前所有的套结子都。
07:26
显示出来,呃,那当然了,对于这个一般某一个固定的服务,它的端口号其实都是指定的,那如果说假如说啊,我们现在想要打开一个这个MYCQ的服务,诶,那我们知道它占用的这个端口是3306,如果这个时候3306端口已经被其他的服务或者说进程给占用了的话,那我们知道MYSQL就起不起来了啊,我们看他的那个启动日志,你就会发现他报错,他说这个端口已被占用啊,这就相当于我们那个房子的这个门已经被别人堵着了,已经被别人在来回运送货物了,你当然就出不去了嘛,诶所以这个就是所谓的这个端口和我们当前进程的一个关系,呃,那一般情况下都是。
08:10
需要有这个进程间的网络通信的时候,才会涉及到套接字啊,Socket以及端口相关的一些概念。除了杠A之外,那另外还有一个常用的就是杠N,杠N是什么意思呢?哎,我们可以认为它就是要拒绝所有的别名,就是我们说的这个主机名啊,其他的一些形式啊。不用去解析主姓名,主机名,直接全部显示成数字形式的地址,也就是全部都用IP什么什么点192168啊这种形式,不要去显示它是什么名字。另外还有一个就是杠L,杠L我们知道就是listen的首字母嘛,就是只显示当前正在监听的服务啊,或者说就是我们这个对应的套接字啊,Socket只把监听状态列出来,另外还有一个就是杠P,杠P指的就是把当前socket这个套接字啊,这个端口占用所对应所调用它的那个进程。
09:09
也要显示出来,把它的PID和名称全列在这里,这样的话就把我们当前的这个进程管理和对应的这个网络通信的状态连接在一起了,所以一般情况我们用它用这个net啊。基本语法一般都是要把这个结这几个结合起来用,比如说我们直接就告anp啊,就是把所有正在监听和未在监听的所有的soet信息,以及哪个进程在调用都列举出来,那后边呢,我们就可以去筛选某个进程号,看看某个进程诶对应的它在这个网络通信的时候占用的是哪个端口,当前的状态是怎么样的,另外呢,还可以直接grape一个端口号。啊,那这当前的就是查看这个端口到底被占用了没有被哪个进程占用。这就是一般的一些使用的方式啊,那接下来我们就来举一个具体的例子吧。
10:03
我们这里直接可以net state-an nmp,哎,当然了,这个信息我们看到又是比较多,所以我们还是直接加一个管道less分页做一个显示,我们看一下上面这还是一个表的形式啊,所以我们还是先来解析一下上面这个表头是什么意思,首先哦,Pro,那我们知道protocol,这是当前的协议,我们要做。使用套接字进行这个网络传输嘛,啊,那当当然是对应的要有这个网络协议了,我们看比较多的就是TCP啊udp啊,那当然这里的TCP6和udp六指的就是IPV6下的相关的一些协议了,这个我们可以不去考虑啊,呃,那后边呢就是。Receive q,这个指的是连接到当前这个socket的用户程序还没有拷贝的字节数,就是已经接收到了,但是还没有拷贝出来的字节数量。啊,那另外还有一个三个Q,那指的就是已经发出去了,但是远程的主机还没有确认收到的字节数,相当于就是说有可能被丢掉的这个数啊,有可能要重新传递的,这这些数据,这是做了一个展示。
11:15
然后另外呢,后面两个就是local address和foreign address,这个就很明显了,一个是本地地址,另外一个是远程地址,那这里需要给大家解释一下,就是当前的这个地址,它显示的形式其实就是我们所谓的socket的形式,前面是IP。后边是冒号,然后加一个端口号啊,这里我们看到,呃呃,这里有不同的IP啊,然后有后面有不同的端口,这里稍微来解释一下出现的一些不同的IP,那0.0.0.0,这个可能有同学也知道啊,网络里边这个表示的是。本机本地的所有地址,也就是说我我们当前这个IP con的时候,不是看到好几个那个网络地址吗?比方说这个192168111.100,这是我们当前局域网的地址,那还有一个这个比方说122.1,这个其实我们说的本地创建虚拟网络的地址。
12:11
那那不管是谁,0.0.0,把他们就都包括在内了,也就是说当前0.0.0.0的111端口,如果这是本地当前建立连接的一个端口的话啊,它就代表了其他所有地址对应的111端口。啊,这个我们就知道是怎么回事了啊。如果你监听一个0.0.0.0的话,那就相当于监听的是本地所有地址对应的端口,呃,然后另外还有一个比较特殊的,我们也要说一下,就是127.0.0.1啊,这个我们也知道,这是经典的本地回环地址。啊,那这个回环地址一般都是用来做本地监听和测试的啊,那它它代表的就是我们本地的主机,一般情况下就等同于。我们写的这个local host,这也是一个类似于我们一个主机名的一个写法吗?那大家仔细去看那个我们的host文件的话,往往都会看到有一个local host的定义,那里边就会有127.0.0.1啊,这是计算机网络里边的一些基本知识啊,那后面这种写法就是跟IPV6有关,这个我们就不说了,所以我们这里边看到的能够看到的IP本机其实就是这几个也都是本机的地址。
13:25
那远程呢啊,远程地址当然就有0.0.0.0啊,你看我们这连接的啊,所谓连接到的远程地址其实还是自己本机嘛,啊,那这里面需要注意的有一个比较特殊的是这个。这是真正的一个远程远程机器了,跟我们当前这个本机是两回事啊,我们看到当前的这个机器是192.168.111.1。这不就是我们当前的物理主机自己本地的PC吗?啊,要注意的是,我们用叉shell做远程连接的时候,我们认为。自己的物理机是本地,然后啊,那对应的虚拟机或者服务器它是远程,但是如果我们查看服务器状态的时候,那就变成了我们当前的这个虚拟机服务器它是本地local,而物理机我们做远程登录的这个控制的机器,它是远程。
14:15
这个关系有点绕,大家一定要搞清楚啊啊,所以我们就看当前这个比较有特色的这条信息吧,我们看一下它到底表示什么啊。后面我们看到就是当前这个连接对应的状态了,当前这个网络连接的状态啊,呃,我们看大部分都是一个监听状态,Listen在监监听,只有这个是established,已经建立连接了,哎,那这个到底是个什么东西呢?哎,那后面我们就可以看到当前它的PID以及对应的program对应程序的名字,也就是进程的名字,很明显这就是我们当前的SD远程连接的这个进程。啊,所以很显然他做远程连接的时候,网络传输使用的是TCP协议啊,我们做了这个握手,做了这个有效的连接,那它已经建立连接之后,它是从哪个端口到哪个端口呢?诶,那我们是从本机的60100端口,诶这个大家如果看自己机器的话,可能会不太一样,我们这个叉shell,它本机出去的这个门啊,这个端口号是随机分配的,可能比较大,这个数字比较大的话就不会冲突嘛,那连上的虚拟机或者服务器的那个服务端口,这是确定的,因为我们说SSH这个服务啊。
15:30
HD这个守护进程,它对应的开启的端口,开着的门就是二二,哎,所以我们连接到的指定的也就是这个二二端口。啊,这下我们就已经知道这条连接到底是什么意思了。那为了更明确的了解我们当前这个网络状态到底是怎么回事,我们还可以,诶再去登录一个艾特硅谷用户啊,那现在因为当前这个net它也是。静态的一个快照,哎,那所以我们需要退出之后再来查看一下,诶,那现在我们就看到就多了一个艾特硅谷用户远程登录建立的一个连接,那这个连接呢,同样是从我们本地的物理机开了一个随机的端口,现在变成了60222,然后去连接到了远程服务器的我们虚拟机的二二端口,所以我们可以画一个图,当前这个样子,就是我们当前这个是自己的主机。
16:26
这里是我们的远程服务器,是虚拟机VM,那VM这里呢,启动了一个。SHD。为我们提供远程登录服务,它的守护进程,他开着的这个门。诶,那这个端口号是22。所以如果说我们想要做远程登录的话,那就得指定连到对应的。服务器192168111.100。这台机器的。二二端口就必须按照这个地址去连接,那我们这里面呢,哎,那可能我有不同的用户同时要去做连接。
17:06
这里有一个root用户。我们创建了一个远程连接的进程,进程号是4658,诶我直接就写这个PID了。然后同样呢,又有一个艾特硅谷用户。他也想要建立一个远程连接,它的进程号是5288。所以我们看这就是两个进程。两个进程,然后对应的呢,开不同的门。一个门叫60100。一个门叫60222。哎,所以我们看到啊,这个时候他们同样都可以连接到。远程服务器的SD这个服务给我们开放的端口来,然后接下来就可以做远程连接去进行操作,诶整个这个数据传输的过程就是这这个样子啊啊。
18:00
啊,当然有同学可能会说,诶,那你要这么说的话,那呃,当前你这个二二端口,难道它不拥堵吗?啊,当然了,我们这里它只是同一个服务启动出来之后,所有的远程连接信息都走这同一个门,这是没有问题的,对吧?啊就是这样的一个多用户同时连接的操作,SSH还是可以帮帮我们直接搞定的啊这个是没有问题的,但是你如果说是当前我这个。服务器上面的二二端口已经占用了,然后再起SHD,这个可能就没有办法起了,对吧,因为他要求必须指定这个门,这就是我们关于远程连接,然后就可以进一步的看清楚我们当前进程和网络状态的一些关系了。啊,那通过这个例子,我们也就可以更加清楚的了解到在Linux里边做进程管理的方法,这就是关于进程管理类命令的讲解。
我来说两句