大家好,今天小编来为大家解答Linux 《荒岛余生》 (5) 网络这个问题,很多人还不知道,现在让我们一起来看看吧!
首先,每个连接都是一个文件句柄,因此需要有文件描述符数量的支持。每个socket内存占用15k-20k之间。这样,仅仅维护对应的socket就需要20G内存;广播1KB的消息需要占用带宽1000M!
查看当前系统连接
如何查看当前系统有多少个连接?可以使用netstat结合awk进行统计。下面的脚本统计各个状态下的tcp连接数
但如果你在有几万个连接的服务器上执行这个命令,你可能会等待很长时间。因此,我们有了第二代网络状态统计工具:netstat=ss(不要与越狱工具混淆)。
# ss -sTotal: 191 (内核220)TCP: 5056 (estab 42, 关闭5000, 孤立3, synrecv 0, timewait 5000/0), 端口3469.
Netstat属于net-tools工具集,而ss属于iproute。对应的命令如下。是时候对网络工具说再见了。
使用
网络工具
ip路由
统计数据
如果配置
SS
地址
网络统计
IP地址
路由
路线
ip路由
邻居
ARP
IP邻居
VPN
网络隧道
IP隧道
虚拟局域网
虚拟配置
ip链接
组播
ip地址
ip地址
SS命令
基本使用
我们根据使用场景来看看ss的用法。
查看系统正在监听的tcp连接
ss -atr ss -atn # 仅ip
查看系统中所有连接
SS-替代
查看监听444端口的进程pid
SS-LTP| grep 444
查看555进程占用了哪些端口
ss-ltp|正则表达式555

显示所有udp连接
SS-u-a
要查看TCP 套接字,请使用-ta 选项查看UDP 套接字,使用-ua 选项查看RAW 套接字,使用-wa 选项查看UNIX 套接字,使用-xa 选项
到某个IP的所有连接
SS 夏令时10.66.224.130ss 夏令时10.66.224.130:https 夏令时10.66.224.130:smtpss 夏令时10.66.224.130:443
显示所有http连接
ssd端口=:http
查看与本机连接最多的前10 个IP 地址
netstat -antp | 网络统计awk '{print $4}' |切-d ':' -f1 |排序| uniq-c|排序-n -k1 -r |头-n 10
Recv-Q 和Send-Q
注意ss的执行结果。让我们解释一下Recv-Q 和Send-Q。
这两个值分别在LISTEN和ESTAB状态下。。不同的含义。一般来说,对于正常应用来说,这两个值都应该为0(backlog除外)。值越大,问题越严重。
收听状态
Recv-Q:。。有多少已建立的连接尚未被接受。例如,Nginx 接受新连接变得非常慢。
Send-Q:表示监听积压值
ESTAB 状态
Recv-Q:内核中有多少字节的数据还没有被应用程序读取,发生了一定程度的阻塞。
Send-Q:表示还有多少字节的数据还在内核中的发送队列中,还没有收到ack。对端的接收和处理能力不强。
查看网络流量
查看路况
有很多工具可以查看网络流量,但sar 是我最喜欢的。 sar是Linux上最全面的监控软件。如图,使用sar -n DEV 1每秒刷新一次网络流量。
观看猫/proc/net/dev
查看流量最多的IP
有时我们发现网络带宽使用率很高,但无法确定流量来自哪里。这时候iftop就可以帮忙了。如图所示,可以轻松查出流量来自哪台主机。
抓包
tcp转储
当我们需要判断是否有流量或者调试一个比较棘手的netty应用问题时,我们可以通过抓包来进行进一步的判断。在Linux上,可以通过tcpdump命令捕获数据,然后使用Wireshark进行分析。
tcpdump -i eth0 -nn -s0 -v 端口80
-i 指定抓包的网卡
-n 与ss相同,表示不解析域名
-nn 两个n表示端口也是数字,否则会解析成服务名
-s 设置抓包长度,0表示不限制
-v 捕获数据包时显示详细输出,-vv 和-vvv 按顺序显示更详细的信息。
1)添加-A选项将打印ascii,-X将打印十六进制代码。
tcpdump -A -s0 端口80
2)捕获特定IP的相关包
tcpdump -i eth0 主机10.10.1.1tcpdump -i eth0 dst 10.10.1.20
3)-w参数将捕获的数据包写入文件
tcpdump -i eth0 -s0 -w test.pcap
4)tcpdump支持表达式,还有更复杂的例子,比如捕获系统中的get和post请求(非https)
tcpdump -s 0 -v -n -l | tcpdump -s 0 -v -n -l | tcpdump -s 0 -v -n -l | egrep -i 'POST /|GET /|Host:'

有关更多信息,请参阅https://hackertarget.com/tcpdump-examples/
捕获的数据可以使用wireshark查看。
http数据包捕获
抓包工具将自己视为代理,可以捕获您的浏览器与服务器之间的通信,并提供修改、重放和批量执行的功能。它是发现问题、分析协议和攻击站点的强大工具。常用的有以下三种:
Burpsuite(跨平台)
小提琴2(获胜)
查尔斯(麦克)
坏事应该暗中做。
戈尔
TCP重播
TCP复制
连接数过多问题
根据TCP/IP,套接字大约包含10 种连接状态。除了针对SYN的拒绝服务攻击之外,如果我们在日常工作中遇到异常情况,很有可能是TIME_WAIT和CLOSE_WAIT的问题。 TIME_WAIT一般可以通过优化内核参数来解决; CLOSE_WAIT一般是由于编程不合理造成的,应该引起开发者的注意。
TIME_WAIT
TIME_WAIT是主动关闭连接的一方维护的状态。像nginx和爬虫服务器,经常会出现大量处于time_wait状态的连接。 TCP一般在主动关闭连接后等待2MS,然后彻底关闭连接。由于HTTP使用TCP协议,因此这些频繁切换连接的服务器上会积压TIME_WAIT状态连接。
有些系统可以通过dmesg看到以下信息。
__ratelimit: 2170 个回调被抑制TCP: 时间等待桶表溢出TCP: 时间等待桶表溢出TCP: 时间等待桶表溢出TCP: 时间等待桶表溢出
通过ss -s命令查看,可以看到已经有20000个timewaits了。
ss -sTotal: 174(内核199)TCP: 20047(estab 32,关闭20000,孤立4,synrecv 0,timewait 20000/0),端口10785
sysctl命令可以设置这些参数。如果希望重启后生效,请将其添加到/etc/sysctl.conf文件中。
# 修改阈值net.ipv4.tcp_max_tw_buckets=50000 # 表示开启TCP连接中TIME-WAIT套接字的快速回收net.ipv4.tcp_tw_reuse=1 # 启用timewait快速回收。必须打开此功能,默认情况下它是关闭的。 net.ipv4.tcp_tw_recycle=1 # 修改系统默认TIMEOUT时间,默认为60snet.ipv4.tcp_fin_timeout=10
测试参数可以使用sysctl -w net.ipv4.tcp_tw_reuse=1这样的命令,如果是写入文件,则使用sysctl -p才能生效。
CLOSE_WAIT
CLOSE_WAIT一般是由于peer主动关闭而我们没有正确处理造成的。说白了就是程序的编写出现了问题,这是一个比较危害性的问题。
我们以“csdn同名太郎”遇到的典型案例来说明。
该代码是使用HttpClient 的使用片段。在此代码中,通过调用in.close() 来清理连接资源。但不幸的是,代码中有一个判断:非200状态的连接直接返回null。这种情况下,in连赋值的机会都没有,当然也无法关闭,然后就发生了连接泄漏。
因此,关闭HttpClient的正确方法是使用它的api:abort()。
其他常用命令
应用软件
# 继续下载文件wget -c $url# 下载全站wget -r -p -np -k $url# 发送网络连接(常用)curl -XGET $url# 传输文件scpsftp# 数据镜像备份rsync
检测工具
# 连通性检测ping google.com# 路由到对等点检测Tracepath google.com# 域名检测dig google.comnslookup google.com# 网络扫描工具nmap# 压力测试iperf# 综合监控工具(好东西) nmon
配置工具
# 停止某块网卡ifdown# 启动某块网卡ifup# 多功能管理工具ethtool
压力测试
wrkabwebbenchhttp_load
多功能工具
# 远程登录telnetsshnc# 防火墙iptables -L
结束
我们在I/O章节中已经提到过NIO,这里不再详细介绍。当你遇到所谓的拆包和粘帖问题、心跳和限流问题、甚至流量整形问题时,证明你离一个专业的网络编程程序员越来越近了。
标题:Linux 《荒岛余生》 (5) 网络
链接:https://www.ltthb.com/news/xydt/130178.html
版权:文章转载自网络,如有侵权,请联系删除!
用户评论
终于等到了LINUX版的《荒岛余生》,这个开放世界生存游戏我还是挺喜欢的,之前玩PC版本太久,想在Linux下体验一下全新感。
有20位网友表示赞同!
网络版的游戏体验肯定要比单机版本更有意思,可以和朋友一起去探险、建造、甚至互相坑害。哈哈哈
有19位网友表示赞同!
这游戏的难度还是蛮高的,需要你时刻保持警惕,才能在这个荒岛上生存下去。尤其是在网络版里,危险系数又更高了。
有16位网友表示赞同!
画风不错,环境还原性强,感觉真的回到了原始社会一样,有挑战也有乐趣。
有5位网友表示赞同!
虽然是Linux版本,但操作流畅度很高,帧数也保持稳定,玩起来很舒服。
有5位网友表示赞同!
这款游戏的生存系统太牛了,从寻找食物、水源到建造庇护所,每一步都充满了真实感。要时刻留意时间和天气变化啊!
有20位网友表示赞同!
我很喜欢游戏里的生物多样性,各种动物都有自己的行为模式,有些甚至还有威胁性。遇上大型野兽的时候真的压力山大!
有10位网友表示赞同!
网络版的协作元素非常强大,可以组队建造大型建筑,一起对抗敌人,感觉很像是真实的合作项目。
有19位网友表示赞同!
我觉得这个游戏很有教育意义,它能让你了解到生存的艰辛,以及如何在恶劣环境下保持理智和冷静。
有5位网友表示赞同!
虽然是Linux平台上的游戏,但它的硬件要求并不高,适合我的配置运行起来很流畅。
有19位网友表示赞同!
这次网络版的联机体验比我想象的要好很多!玩家之间互动丰富有趣,感觉像是在共同经历一段冒险故事一样。
有12位网友表示赞同!
希望开发者能继续更新内容,添加更多样化的游戏模式和玩法,让这个游戏能够持续保持新鲜感。
有20位网友表示赞同!
这款游戏的剧情发展很棒,充满了悬疑感和代入感,让人欲罢不能!
有5位网友表示赞同!
我建议新手玩家可以先从单人模式开始玩,熟悉游戏规则、掌握生存技能后再来尝试网络版的游戏挑战。
有7位网友表示赞同!
游戏里的音乐很好听,能很好的烘托出荒岛的氛围,让人感觉身临其境。
有6位网友表示赞同!
这个Linux版的《荒岛余生》绝对值得推荐给所有喜欢生存游戏的玩家!
有5位网友表示赞同!
游戏的画面表现细腻逼真,特别是夜晚的光影效果,给人一种很强烈的视觉冲击力。
有14位网友表示赞同!
我觉得这款游戏很有潜力的,期待后续开发者能加入更多创意和内容,让它成为一款真正优秀的生存游戏巅峰之作!
有15位网友表示赞同!