套接字其实就是通信控制信息,或者说是存放控制信息的内存空间。
套接字也是我们传输TCP/IP数据的基础。
在Windows中查看套接字
在Windows中,我们可以使用netstat -ano
命令显示套接字的内容。其中-ano
选项分别表示:
a
:不仅显示正在通信的套接字,还显示包括尚未开始通信等状态的所有套接字。n
:显示IP地址和端口号。o
:显示使用该套接字的程序PID(Process ID,进程标识符)。
下面展示了一个执行netstat -ano
命令的输出示例:
Active Connections
Proto Local Address Foreign Address State PID
----- ------------- --------------- ----- ---
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
TCP 192.168.0.37:9230 58.251.100.102:80 ESTABLISHED 7164
UDP 0.0.0.0:68 *:* 328
上面各个列头的意思分别为:
- Proto(协议):协议类型,使用TCP/IP协议通信的情况下,会显示TCP或UDP。
- Local Address(本地地址):执行
netstat
命令的计算机本身(本地端)的IP地址和端口号。如果计算机安装了多块网卡,则会显示出多个IP地址。0.0.0.0
表示不绑定IP地址。 - Foreign Address(外部地址):通信对象(远程端)的IP地址和端口号。
0.0.0.0
表示还没有开始通信,没有绑定IP地址和端口号。此外,UDP协议中的套接字不绑定对方的地址和端口,因此显示*:*
。 - State(状态):表示通信状态,
LISTENING
是等待对方连接,ESTABLISHED
是完成连接并正在进行数据通信。 - PID(Process ID,进程标识符):使用该套接字的程序PID。
接下来,我们来看看上面输出示例都是什么意思吧。比如:
- 第1行,它表示PID为
4
的程序正在139
端口等待另一方的TCP协议连接,其中本地IP地址和远程IP地址都是0.0.0.0
,这表示通信还没有开始,IP地址不确定。 - 第2行,它表示PID为
7164
的程序正在使用IP地址为192.168.0.37
的网卡与IP地址为58.251.100.102
的对象进行TCP协议通信。 - 第3行,它表示PID为
328
的程序正在68
端口等待另一方的连接,因为这里使用的是UDP协议,而UDP协议中的套接字不绑定对方的地址和端口,因此显示*:*
。
浏览器、邮件等一般应用程序收发数据时用TCP;
DNS查询等收发较短的控制数据时用UDP。
在Linux中查看套接字
在Linux中查看套接字与Windows中非常类似,只是netstat
命令中的o
选项换成p
。
在Linux中查看套接字的命令为netstat -anp
。