netstat指令输出内容解析

本文的重点是弄清楚netstat指令中每一列的含义

在探寻每一列含义的过程中,会顺便记录一些其他的网络指令(比如ipconfig,tracert,arp,netstat,tasklist)以及一些网络概念(比如localhost,loopback,和0.0.0.0 的区别

ipconfig指令这个是平时用的最多的,用来查看本机ip。

tracertarp指令这个一般不怎么用,这里列出是为了介绍一下相关的网络概念。

netstattasklist指令跟进程相关。

通过netstat的输出内容,也可以窥见TCP建立连接的三次握手的过程。所以文中还涉及了一点点的网络编程,客户端 服务器之间通过tcp协议,建立连接,断开连接,服务器监听等的状态。

如果要查看具体每个指令命令的参数设置输入: commandname /? ,比如ipconfig /?。

目录

1.ipconfig

子网掩码

网关

私网地址

IP地址分类

查看有几个网卡

2.tracert

查看外网ip

每列含义

域名以及DNS

3.arp

4.localhost,Loopback,0.0.0.0

localhost域名

Loopback接口

0.0.0.0地址

5.netstat

1)参数-ano

2)本地地址

3)PID进程号

4)状态

LISTENING:正在监听

ESTABLISHED:连接已建立

CLOSE_WAIT :等待关闭

TIME_WAIT:等待超时

SYNC_SEND:发送了连接请求

SYNC_RECEIVED:已经收到对方的连接建立请求

5)查找端口占用的进程

6.tasklist


1.IPConfig

用的最多的一个指令,主要是为了看ip地址(如下显示的是内网的地址,还有一个对应的外网地址,tracert会提到)

ip就是网络地址一个ip应该唯一标识一个接口

(而不是唯一标识一台电脑。电脑有几个网卡就有几个ip地址,比如一些笔记本有2个网卡,无线网卡和有线网卡,可以同时启用有线网卡和无线网卡,同时有两个ip地址吗。)

命令行输入ipconfig:

子网掩码

子网掩码:255.255.252.0 也可以写成 /22(位为1)= 32 - 10

子网掩码作用:将IP地址划分为网络主机部分。

所以上述我的IP地址,根据子网掩码划分 网络部分为 10.12.20 主机部分为0.226。

网关

默认网关:默认网关ip地址必须在同一个网络内,默认网关ip地址的主机部分为3.254。

(所以子网掩码对默认网关ip也是适用的咯)

网关:是具有路由功能设备,其IP地址就是其设备的IP地址

(A B IP地址处于不同网络之间,其通信需先转发给A所在网关,路由.....到B所在网关,再到达相应的主机上)

私网地址:a类,b类,c类

一般用作局域网的IP地址有(Private-Use,用做私网地址,不与外网相连):  

10.0.0.0~10.255.255.255(10.0.0.0/8 a类网段中

172.16.0.0~172.31.255.255(172.16.0.0/12 b类网段中

192.168.0.0~192.168.255.255(192.168.0.0/16 c类网段中

所以上述我的IP地址,10.12.20.226 是局域网内的IP地址,a类网段中

IP地址分类:分类的依据是其网络ID所占的字节长度以及网络号前几位是啥

分类

前缀码

开始地址

结束地址

对应CIDR修饰

默认子网掩码

A类地址

0

0.0.0.0

127.255.255.255

/8

255.0.0.0

B类地址

10

128.0.0.0

191.255.255.255

/16

255.255.0.0

C类地址

110

192.0.0.0

223.255.255.255

/24

255.255.255.0

D类地址 (群播

1110

224.0.0.0

239.255.255.255

/4

未定义

E类地址 (保留)

1111

240.0.0.0

255.255.255.255

/4

未定义

A类地址:网络号占1个字节。网络号的第一位固定为0。

B类地址:网络号占2个字节。网络号的前两位固定为10。

C类地址:网络号占3个字节。网络号的前三位固定位110。

D类地址:网络号占4bit。网络号固定位1110。用于多播(multicast),即一对多通信。

E类地址:网络号占4bit。网络号固定位1111。保留为以后使用。

ps:可以发现私网的地址:a类,b类,c类也是分别在这个范围的内的

查看有几个网卡

蓝色选中那个是有线网卡,WAN Miniport?(win10系统 )


2.tracert

tracert 和 arp 也被称为Windows路由跟踪实用程序

tracert 用来追踪数据包路由,经过了哪些节点。(也就是节点跳到哪里了)

命令行输入:

tracert www.baidu.com

从左到右的5列信息分别代表了

第1列:“生存时间”(每途经一个路由器结点自增1)、

第2-4列:“三次发送的ICMP包返回时间”(共计3个,单位为毫秒ms)

第5列:“途经路由器的IP地址”(如果有主机名,还会包含主机名)。

*表示该次ICMP包返回时间超时

命令行输入:

tracert www.smartisan.com

路由过程:

         经过12次路由到达目标ip。后面的IP,就是每个路由节点对应的IP

中间三列ms:

         每个路由节点的速度,返回速度以及多次链接反馈的平均值。

使用tracert查看外网ip

通过上述命令,随便tracert一个网址。

上面两条tracert可以看出 124.207.11.33 就是外网ip。

ps:还可以通过百度搜索 ip。

如果通过百度搜索 ip 查到的外网ip 与上述tracert的不一样,原因:为什么用IP查询网查询的自己的外网IP和用tracert命令查询的自己的出口IP不一样?_百度知道

(这两个IP显然都是公网IP,前者查到的是Web服务器上“看”到的IP,而Tracert查到的大概是你的电脑所联接的第一个公网IP,它是将你的电脑联上互联网的第一个服务员。总的来说,你上网是ISP提供的,他用某个公网IP与你连接,为你搭桥,最终通过另一个IP具体与网络上的各服务器通讯,中间是有一个“管道”的,要知道ISP要同时为很多人联网互务,这中间有一个动态的IP资源按排的问题。并非只是一个简单的网关作用。)

为什么我ping百度的时候,却显示正在ping www.a.shifen.com

这是dns解析过程中,www.baidu.com作为cname记录(相当于别名),在dns服务器中配置了www.baidu.comwww.a.shifen.com的映射记录。而www.a.shifen.com是作为A(address)记录,映射到了真实的IP信息。

域名以及DNS

www.baidu.com 和 www.smartisan.com都是域名,方便可以不记数字形式的ip地址。

通过域名服务器DNS,得到映射的IP地址

DNS服务器存放IP地址域名的对应数据,位于公网,用来完成IP地址解析:电脑访问网络时,会首先到这个服务器里,根据域名找到对应的IP地址,然后才进行路由到目的IP。

DNS服务器在全球范围内都有,一般来说,设置为所在城市的DNS地址。具体地点的DNS地址可以上网搜。

一般都是自动获取:


3.arp

ARP 协议Address Resolution Protocol ),或称地址解析协议

ARP 协议的基本功能就是通过目标设备的 IP 地址,查询目标设备的 MAC 地址,以保证通信的顺利进行。

命令行输入arp -a

第一句 0x5 不知道?

可以看到跟自己在同一个网络内的主机。

想查看具体ip的主机名,比如10.12.20.2,试试

ping -a 10.12.20.2


4.localhost,Loopback,0.0.0.0

在host中会遇到localhost,在配自启的服务器的时候会配localhost

在ping的时候会用到127.0.0.1,

在netstat指令中会看到很多0.0.0.0的地址

localhost域名

localhost 是个域名,是Loopback接口的标准域名。

既然是域名,肯定对应一ip地址了,一般通常情况下都指向 127.0.0.1(ipv4)和 [::1](ipv6),也就是Loopback接口:

但是也可以被配置成其他IP。怎么配置,直接在hosts里面写可以

因为hosts域名解析的优先级高于DNS服务器

对于一个域名,会先在hosts文件中,如果有解析到具体地址,就不会请求DNS地址解析了。

https://laod.cn/hosts/hosts-file-making.html

Loopback接口

虚拟接口,是一种纯软件性质的虚拟接口。任何送到该接口网络数据报文都会被认为是送往设备自身,而不会出现在网络传输中

ping 这个接口ip用来 测试本机的TCP/IP协议

(

ping 使用的是ICMP协议,它发送ICMP回送请求消息给目的主机。

ICMP协议规定:目的主机必须返回ICMP回送应答消息源主机

如果源主机在一定时间内收到应答,则认为主机可达。

大多数的 TCP/IP 实现都在内核中直接支持Ping服务器)

(随着Internet安全意识的增强,

现在有些提供访问控制策略的路由器防火墙已经可以设置过滤特定ICMP报文请求。因此并不能通过简单的ping命令判断远程主机是否在线

那不是不满足ICMP协议了,难道被防火墙过滤了直接就是没有收到这个包吗?

)

整个127.* 网段通常被用作 loopback 网络接口的默认地址,按惯例通常设置为 127.0.0.1。

理论上,整个127IP段(127.0.0.0~127.255.255.255)的IP地址都为loopback地址,与localhost对应,但一般默认的都是指127.0.0.1。(::1 ipv6)。

0.0.0.0地址

在IP数据报中:

只能用作源IP地址,这发生在当设备启动时但又不知道自己的IP地址情况下。

在服务器中:

指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。

在路由中:

0.0.0.0表示的是默认路由,即当路由表中没有找到完全匹配的路由的时候所对应的路由。

127.0.0.1地址

(见localhost 和 Loopback) 

ping 127.0.0.1可以用来测试本机的网络组件是否正常。


5.netstat

网络net统计stat

用于检验本机各端口的连接情况,监视所有的网络连接。

当你使用不同的参数敲下这个命令,会打印出很多行,也就是很多网络连接

一般至少都是会包含两列,标识为 本地地址外部地址

下面会通过例子解答一些疑问:

本地地址0.0.0.0代表什么意思?

外部地址0.0.0.0代表什么意思?

各种状态表示具体连接的状态是如何?

以及 如何查看该端口被哪个进程使用着?

1)最常用参数无脑参数-ano

-a:显示所有的有效连接列表,监听端口

协议包括TCPUDP、IP和ICMP协议

状态包括 LISTENINGTIME_WAITESTABLISHEDCLOSE_WAIT

-n:数字形式显示地址和端口号

-o:显示拥有的与每个连接关联的进程 ID

-p :显示制定协议,TCP,UDP... ...如果只想显示tcp相关的 就 netstat -ano -p tcp

下面分别介绍ano显出出来的各个列的含义:

2)本地地址 列

有3类:

0.0.0.0:端口号——本机所有的ipv4地址,包括10.12.20.226和127.0.0.1

10.23.20.226:端口号——本机地址,本地IP地址

127.0.0.1:端口号——回环地址

[::]是ipv6相关的。

本机地址通常指的是绑定在物理(每台主机上可以有多个物理网卡)或虚拟网络接口(每个物理网卡上可以有多个虚拟网卡)上的IP地址,可供其他设备访问到。

ipconfig出来的10.12.20.226就是有线网卡物理网卡的本机地址。

3)PID 列

可以看到多行都用了同一个PID值

同一个进程打开了多个socket连接socket连接属于一种文件描述符)。

同一个端口号肯定不能被两个PID绑定。

4)状态 列 ———— TCP网络连接过程

  • LISTENING:正在监听

该端口是开放的,等待别人来连接,还没有建立连接。

(服务器创建一个socket(建立了连接以后的socket就是一个四元组,本地地址和端口,远端地址和端口),调用listen函数,进入监听状态。)

外部地址是 为0.0.0.0,无效IP。表示的是所有不清楚的主机和目的网络。因为还没有建立连接嘛

  • ESTABLISHED:连接已建立

双方可以进行方向数据传递。(不会出现0.0.0.0的地址)

  • CLOSE_WAIT :等待关闭

被动关闭连接的一方会进入此状态。

当对方close一个SOCKET后会发送FIN报文给自己,你首先回应一个ACK报文给对方。那此时自己就进入到了CLOSE_WAIT状态

那接下来要做考虑是否还有数据发送给对方

如果没有的话, 那么最后你也就可以close 这个SOCKET,发送 FIN 报文给对方,也即关闭连接。

所以你在CLOSE_WAIT 状态下,需要完成的事情是等待你去关闭连接,等待你发送FIN报文。(当发送了一个FIN报文以后就进入到了LAST_ACK状态,等待对方的ACK)

(TCP 关闭连接的状态转换图,4次挥手,两次来回的 FIN和ACK双方都需要关闭以确认

  • TIME_WAIT:等待超时

主动关闭连接的一方,会进入此状态。指连接已准备关闭。

按照时间顺序我方已经经历了:

1.主动调用了close()断开连接,

2.发送了FIN给对方

3.收到了对方的ACK

4.收到了对方的FIN

5.发送出了ACK报文

然后就是进入了TIME_WAIT状态了。

然后就等2MSL后即可回到CLOSED可用状态了。

(主动关闭连接的一方,经历的状态是FIN_WAIT_1-->FIN_WAIT_2-->TIME_WAIT

FIN_WAIT_1:自己发送了FIN,等待对方的ACK。

FIN_WAIT_2:收到了对方的ACK,等待对方的FIN报文。

TIME_WAIT:收到了FIN,发送了ACK。

如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2 状态。)

这里PID为0的通信均是已“断开”的曾经被进程使用过的连接,而且还没有释放端口。

这里为什么不能马上关闭,而是要等TIME_WAIT的时间

两张动图-彻底明白TCP的三次握手与四次挥手_qzcsu的博客-CSDN博客_三次握手四次挥手详解文章里面会解释 但是我很困 改天我在看 然后简要总结一下

  • SYNC_SENT:发送了连接请求

主动建立连接的一方,会进入此状态。执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待对方的SYNC和ACK报文。收到以后它,再发送ACK给对方会进入到ESTABLISHED状态。

  • SYNC_RECEIVED:已经收到对方的连接建立请求

被动建立连接的一方,会进入此状态。这个状态表示接受到了SYN报文,并且已经发送了SYNC和ACK报文,等待收到客户端的ACK报文。收到以后它会进入到ESTABLISHED状态。这个状态很短暂,类似与FIN_WAIT_1状态。

  • TCP的三次握手 和 四次挥手

两张动图-彻底明白TCP的三次握手与四次挥手_qzcsu的博客-CSDN博客_三次握手四次挥手详解

主动连接的一方经历的状态

被动连接的一方经历的状态

主动关闭的一方经历的状态

被动关闭的一方经历的状态

5)查找端口占用的进程

比如查找2000端口的占用:

netstat -ano|findstr 2000

显示出PID以后输入:

tasklist|findstr PID

6.1)netstat -e 可以用来统计一些基本的网络流量

正常的接收和发送 错误和丢弃 都应该很低

6.2)netstat -s 显示每个协议的统计信息

netstat -r- 用来显示路由表信息

正常的接收和发送 错误和丢弃 都应该很低

参考 netstat用法及TCP state解析 - vigarbuaa - 博客园

(可以了解一下windows下的网络编程 https://blog.csdn.net/Ctrl_qun/article/details/52454232


6.tasklist

会话名 类型:Services Console


7.Telnet

Telnet协议TCP/IP协议家族中的一员

Telnet协议是Internet远程登陆服务的标准协议和主要方式。

最简单的常用功能—— 测试某个主机的某个端口是否可以联通。

(

可以联通的前提是,这个端口得开着。

所以先在某个主机上netstat -ano 看看是不是这个端口在监听着。

没开着肯定连不上

)

windows下:

在命令行窗口输入 telnet 会提示找不到命令,怎么办?

打开 telnet  服务,怎么打开?

 控制面板-程序-启动或关闭windows功能 中开启

{如何找到windows功能

win7 控制面板-程序

win10 直接设置里面搜就行

telnet输入格式:

telnet ip地址 端口号  

注意是空格端口号

(查看某些端口是否打开 用 netstat -ano|findstr LIST )

远程连接上以后黑屏 输入东西不显示

————按Ctrl+]键 ,再按回车,然后输入就有正常显示了。

远程不上对方的主机排错:

1.查看目标ip是否可以ping通 ping ip

(不过有些主机好像关闭了ping)

2.查看对方是否开启了远程访问:

我的电脑-属性-远程设置-允许远程连接

3.查看服务是否正常启动

搜 服务 是不是启动 ,如果启动了可以试着重启一下

Remote Desktop Services

Remote Desktop Configuration

4.一般默认端口都是3389 看能不能本地telnet 127.0.0.1 3389

如果不是就看注册表里的PortNumber是不是3389

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

如果默认的还是不行,就修改默认端口吧,也是修改上述两个注册项。

可能是你的组织禁止了这个3389,所以就怎么都用不了

后来改了用了8989就可以正常远程了。

远程桌面的默认端口号 3389

修改了默认端口以后要修改防火墙的入站规则


8.Windows远程桌面的设置

常见远程桌面连接故障排除 | Microsoft Docs

运维安全:微软远程桌面修改默认远程端口, - 腾讯云开发者社区-腾讯云

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值