netstat指令输出内容解析
本文的重点是弄清楚指令中每一列的含义在探寻每一列含义的过程中,会顺便记录一些其他的(比如)以及一些网络概念(比如这个是平时用的最多的,用来查看本机ip。这个一般不怎么用,这里列出是为了介绍一下相关的网络概念。和跟进程相关。通过netstat的输出内容,也可以窥见TCP建立连接的三次握手的过程。所以文中还涉及了一点点的网络编程,客户端 服务器之间通过tcp协议,建立连接,断开连接,服务器监听等的状态
本文的重点是弄清楚netstat指令中每一列的含义
在探寻每一列含义的过程中,会顺便记录一些其他的网络指令(比如ipconfig,tracert,arp,netstat,tasklist)以及一些网络概念(比如localhost,loopback,和0.0.0.0 的区别)
ipconfig指令这个是平时用的最多的,用来查看本机ip。
tracert,arp指令这个一般不怎么用,这里列出是为了介绍一下相关的网络概念。
netstat和tasklist指令跟进程相关。
通过netstat的输出内容,也可以窥见TCP建立连接的三次握手的过程。所以文中还涉及了一点点的网络编程,客户端 服务器之间通过tcp协议,建立连接,断开连接,服务器监听等的状态。
如果要查看具体每个指令命令的参数设置输入: commandname /? ,比如ipconfig /?。
目录
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.com到www.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:显示所有的有效连接列表,监听端口。
协议包括TCP,UDP、IP和ICMP协议
状态包括 LISTENING,TIME_WAIT,ESTABLISHED,CLOSE_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远程桌面的设置
更多推荐
所有评论(0)