Skip to content

Latest commit

 

History

History
60 lines (55 loc) · 3.69 KB

FAQ.org

File metadata and controls

60 lines (55 loc) · 3.69 KB

网络相关

访问网页的完整过程?

使用 tcpdump 抓包发现有大量丢包情况出现:n packets dropped by kernel?

错误报告

tcpdump -i eth0 dst port 1234 and udp -s 2048 -X -tt >a.pack
264 packets captured
3043 packets received by filter
2706 packets dropped by kernel

丢包原因

造成这种丢包的原因是由于 libcap 抓到包后, tcpdump 上层没有及时的取出,导致 libcap 缓冲区溢出,从而覆盖了未处理包,此处即显示为 “dropped by kernel”,注意,这里的 kernel 并不是说是被 linux 内核抛弃的,而是被 tcpdump的内核,即 libcap 抛弃掉的,上层监听到 1234 端口的 server 可以正常的获取数据。

解决方法

根据以上分析,可以通过改善 tcpdump 上层的处理效率来减少丢包率,下面的几步根据需要选用,每一步都能减少一定的丢包率

  1. 最小化抓取过滤范围,即通过指定网卡,端口,包流向,包大小减少包数量
  1. 添加 -n 选项,禁止反向域名解析
    tcpdump -i eth0 dst port 1234 and udp -s 2048 -n -X -tt >a.pack
        

    大多数情况这样就可以解决了

  2. 将数据包输出到 cap 文件
    tcpdump -i eth0 dst port 1234 and udp -s 2048 -n -X -tt  -w a.cap
        

    用了这一步,基本上所有的网络 server 都可以搞定了

  3. 用 sysctl 修改 SO_REVBUF 参数,增加 libcap 缓冲区长度,这一步是绝招了,由于设计内核参数修改,尽量不要使用,要用了不行,那就没办法了

子网内的主机是如何与互联网上的主机建立 TCP 连接的?

我们知道,建立 TCP 连接的两台主机是需要三次握手的。首先发起连接的一方填入本机的IP地址(局域网地址)、端口号(可以是随机的) NAT 地址转换协议的工作过程,也就是解释题主为什么不能使用局域网内的主机作为外部可主动链接的目标机的原因NAT地址转换过程NAT地址转换过程如下:1、客户机将数据包发给运行NAT的计算机。2、NAT主机将数据包中的源端口号和源私有IP地址转换成自己的端口号和公网的IP地址,然后将数据包发给外部网络的目的主机,同时记录一条跟踪信息在地址转换映像表中,以便向客户机发送响应信息。3、外部网络发送回送信息给NAT主机。4、NAT主机根据映像表中的记录,将所收到数据包的端口号和公用IP地址转换成目标主机的端口号和内部网络中目标主机的专用IP地址,并转发给目标主机。 例如:内网机器(192.168.0.5) 访问 目标主机(220.181.28.42)1、客户机发送数据包    目的主机 220.181.28.42  目的端口 80  源主机 192.168.0.5 (内网的私有IP)  源端口 1025 (随机打开)2、进行地址转换    目的主机 220.181.28.42  目的端口 80  源主机 218.22.192.21 (NAT服务器的公网IP)  源端口 5000 (随机打开)3、记录映像  192.168.0.5 tcp 1025 ----- 218.22.192.21 tcp 50004、外部网络主机向NAT主机发送响应信息    目的主机 218.22.192.21  目的端口 5000  源主机 220.181.28.42  源端口 805、查找映像关系将数据包发给客户机    目的主机 192.168.0.5  目的端口 1025  源主机 220.181.28.42  源端口 80

DB

MySql 忘记 root 密码?

在 /etc/my.cnf 中加入一行:

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-grant-tables