netstat命令
服务器循环收数据,客户端循环发数据
我们现在把服务器端的代码改动如下:
1次只收1个字符的数据
我们的服务器代码是:每收一次数据,就给客户端发一个ok
为什么现在只收到1个ok,应该收到6个ok啊?
这时候,我们通过这个命令netstat查看
Recv-Q是接收缓冲区,Send-Q是发送缓冲区, Local是本地IP和端口,Foregn是对方的IP和端口,我们刚才说:服务器应该给客户端回复6个ok,我们看到图中cli的接收缓冲区,有10字节,就是剩下的5个ok,
如果我们现在再给服务器发送数据,就会把此时缓冲区的5个ok读出来
然后a和\n到达服务器后,服务器发送2个ok,这2个ok在客户端的接收缓冲区中。
这就是粘包问题,对方send好几次,客户端一次性读到。
netstat命令,对应的选项比较多,功能比较强大。netstat 常用来查看,后台服务进程的相关状态。
netstat 可以用来打印网络连接、路由表、连接的数据统计。
打印所有连接
使用 -a,列出所有连接。
打印 TCP 或 UDP 连接
使用 -t 选项列出 TCP 协议的连接。
使用 -u 选项列出 UDP 协议的连接。
禁用反向域名解析
使用 -n 选项禁用域名解析功能,这样可以加快查找速度。
显示对应的程序识别码和程序名称
使用 -p 选项列出正在监听的套接字。
打印监听中的连接
使用 -l 选项列出正在监听的套接字。
打印连接进程信息
使用 -p 选项查看进程信息。
打印网络工作信息统计表
使用 -s 选项查看进程信息(只展示部分结果)。
打印网络接口
使用 -i 选项查看进程信息。
持续输出信息
使用 -c 选项查看进程信息。
根据进程pid查端口
利用 grep 命令,通过进程 pid 查出监听端口。
根据端口查进程
利用 grep 命令,通过监听端口查出进程 pid 。
统计网络socket状态
借助 awk 命令,统计socket状态对应的个数。