linux服务器开发中网络数据分析与故障排查( 二 )


linux服务器开发中网络数据分析与故障排查

文章插图
 
5、常见的套接字选项
严格意义上说套接字选项是有不同层级的(level) , 如socket级别、TCP级别、IP级别 , 这里我们不区分具体的级别 。
  • SO_SNDTIMEO与SO_RCVTIMEO
这两个选项用于设置阻塞模式下套接字 , SO_SNDTIMEO用于在send数据由于对端tcp窗口太小 , 发不出去而最大的阻塞时长;SO_RCVTIMEO用于recv函数因接受缓冲区无数据而阻塞的最大阻塞时长 。如果你需要获取它们的默认值 , 请使用getsockopt函数 。
  • TCP_NODELAY
操作系统底层协议栈默认有这样一个机制 , 为了减少网络通信次数 , 会将send等函数提交给tcp协议栈的多个小的数据包合并成一个大的数据包 , 最后再一次性发出去 , 也就是说 , 如果你调用send函数往内核协议栈缓冲区拷贝了一个数据 , 这个数据也许不会马上发到网络上去 , 而是要等到协议栈缓冲区积累到一定量的数据后才会一次性发出去 , 我们把这种机制叫做nagle算法 。默认打开了这个机制 , 有时候我们希望关闭这种机制 , 让send的数据能够立刻发出去 , 我们可以选择关闭这个算法 , 这就可以通过设置套接字选项TCP_NODELAY , 即关闭nagle算法 。
  • SO_LINGER
linger这个单词本身的意思 , 是“暂停、逗留” 。这个选项的用处是用于解决 , 当需要关闭套接字时 , 协议栈发送缓冲区中尚有未发送出去的数据 , 等待这些数据发完的最长等待时间 。
  • SO_REUSEADDR/SO_REUSEPORT
一个端口 , 尤其是作为服务器端端口在四次挥手的最后一步 , 有一个为TIME_WAIT的状态 , 这个状态一般持续2MSL(MSL , maximum segment life ,  最大生存周期 , RFC上建议是2分钟) 。这个状态存在原因如下:1. 保证发出去的ack能被送达(超时会重发ack)2. 让迟来的报文有足够的时间被丢弃 , 反过来说 , 如果不存在这个状态 , 那么可以立刻复用这个地址和端口号 , 那么可能会收到老的连接迟来的数据 , 这显然是不好的 。为了立即回收复用端口号 , 我们可以通过开启套接字SO_REUSEADDR/SO_REUSEPORT 。
  • SO_KEEPALIVE
默认情况下 , 当一个连接长时间没有数据来往 , 会被系统防火墙之类的服务关闭 。为了避免这种现象 , 尤其是一些需要长连接的应用场景下 , 我们需要使用心跳包机制 , 即定时从两端定时发一点数据 , 这种行为叫做“保活” 。而tcp协议栈本身也提供了这种机制 , 那就是设置套接字SO_KEEPALIVE选项 , 开启这个选项后 , tcp协议栈会定时发送心跳包探针 , 但是这个默认时间比较长(2个小时) , 我们可以继续通过相关选项改变这个默认值 。
二、常用的网络故障排查工具
1.ping
ping命令可用于测试网络是否连通 。
2.telnet
命令使用格式:
telnet ip或域名 port
例如:
telnet 120.55.94.78 8888
telnet www.baidu.com 80
结合ping和telnet命令我们就可以判断一个服务器地址上的某个端口号是否可以对外提供服务 。
由于我们使用的开发机器以windows居多 , 默认情况下 , windows系统的telnet命令是没有打开的 , 我们可以在【控制面板】- 【程序】- 【程序和功能】- 【打开或关闭Windows功能】中打开telnet功能 。
linux服务器开发中网络数据分析与故障排查

文章插图
 
3.host命令
host 命令可以解析域名得到对应的ip地址 。例如 , 我们要得到www.baidu.com这个域名的ip地址 , 可以输入:
linux服务器开发中网络数据分析与故障排查

文章插图
 
得到www.google.com的ip地址可以输入:
linux服务器开发中网络数据分析与故障排查

文章插图
 
4 .netstat命令
常见的选项有:
-a (all)显示所有选项 , netstat默认不显示LISTEN相关-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n 拒绝显示别名 , 能显示数字的全部转化成数字 。(重要)-l 仅列出有在 Listen (监听) 的服務状态-p 显示建立相关链接的程序名(macOS中表示协议 -p protocol)-r 显示路由信息 , 路由表-e 显示扩展信息 , 例如uid等-s 按各个协议进行统计 (重要)-c 每隔一个固定时间 , 执行该netstat命令 。


推荐阅读