笔记--linux网络(5 其他)

        ---arp----
            查看arp列表:
                arp -vn
            抓arp包:
                tcpdump -n -i eno1|grep -i arp
            删除arp:
                arp -d 192.168.0.1
                
            内核参数:
                rp_filter
                    rp_filter全称reverse path filter用于控制系统是否开启对数据包源地址的校验。这是一个网卡级别的参数也就是说每张网卡可以设置不同的值。此参数有三个值0、1、2具体含义
                    0不开启源地址校验。
                    1开启严格的反向路径校验。对每个进来的数据包校验其反向路径是否是最佳路径接收报文的网卡和回数据的网卡是否是同一张网卡。如果反向路径不是最佳路径则直接丢弃该数据包。
                    2开启松散的反向路径校验。对每个进来的数据包校验其源地址是否可达即反向路径是否能通通过任意网卡如果反向路径不通则直接丢弃该数据包。
                arp_filter
                    arp_filter和rp_filter类似都是进行反向路径检验不过是专门针对arp协议的。而且行为也有所不同。
                    arp_filter将对arp报文的源ip进行判断决定响应行为官方文档描述如下
                    当arp_filter设置为0时如果从某张网卡上收到了一个arp请求同时目的ip在此主机上不论目的ip是否在接收到此arp请求的网卡上那么主机便会进行响应响应的mac地址为接收到此请求的网卡的mac地址。    当arp_filter设置为1时如果从某张网卡上收到了一个arp请求同时目的ip在此主机上不要求目的ip是一定在接收到此arp请求的网卡上那么主机便会查询到此请求的源ip的路由是通过哪张网卡如果是接收到此arp请求的网卡则发送arp响应响应的mac地址为接收到此请求的网卡的mac地址
                arp_ignore
                    定义对目标地址为本机IP的ARP查询不同的应答模式
                    参数说明
                    整型值的范围为0-8常用的只有012默认为0。
                    0(默认值回应任何网络接口上对任何本地IP地址的arp查询请求比如eth0=192.168.0.1/24, eth1=10.1.1.1/24,那么即使eth0收到来自10.1.1. 2这样地址发起的对10.1.1.1的arp查询也会回应一而原本这个请求该是出现在eth1上也该由eth1回应的响应的mac自然是eth0的mac。
                    1 只回答目标IP地址是来访网络接口本地地址的ARP查询请求比如eth0=192.168.0.1/24, eth1=10.1.1.1/24,那么当eth0收到对192.168.0.1的查询请求时会进行回复(不论arp请求源地址是啥)而对待查询的ip为10.1.1.1的arp查询不会进行回复
                    2 只回答目标IP地址是来访网络接口本地地址并且请求源IP必须在该网络接口的子网段内的ARP查询请求。比如eth0=192.168.0.1/24, eth1=10.1.1.1/24, eth0收到对192.168.0.1的查询请求源地址为 10.1.1.2(不同网段)不会进行不会回答而会回答192.168.0.2发起的对192.168.0.1的arp查询请求
                    那么当arp_ignore设置为1时eth3和eth4就只会分别回复对103和104的arp请求不仅解决了同一个主机上有多张同网段的网卡的通信问题。而且103和104和mac的对应关系也是正确的。
                     
                    当某张网卡收到一个arp报文会先进行arp_filter检验如果检验失败直接丢弃报文。如果校验成功则会进行arp_ignore检验。可以理解为arp_filter是一个比较粗糙的检验而arp_ignore是一个比较细致的检验。为什么要设置两级校验呢arp_filter与rp_filter又是什么关系呢
                    arp_ignore用来设置对arp查询请求的应答模式还有一个参数arp_announce用来设置主动发送arp请求时对源地址的选择模式。
                arp_announce
                    arp_announce的作用是控制系统在对外发送arp请求时如何选择arp请求数据包的源IP地址。比如系统准备通过网卡发送一个数据包a这时数据包a的源IP和目的IP一般都是知道的然后根据目的IP查询路由表确定发送数据包的网卡。链路层要转发数据需要获取下一跳的MAC地址通过发送arp请求得到。arp请求的目的IP是下一跳IP而arp请求的源IP是什么呢 可能第一反应会以为肯定是数据包a的源IP地址但是这个也不是一定的arp请求的源IP是可以选择的控制这个地址如何选择就是arp_announce的作用
                      arp_announce参数常用的取值有012。
                    0允许使用任意网卡上的IP地址作为arp请求的源IP通常就是使用数据包的源IP。
                    1Try to avoid local addresses that are not in the target’s subnet for this interface. This mode is useful when target hosts reachable via this interface require the source IP address in ARP requests to be part of their logical network configured on the receiving interface. When we generate the request we will check all our subnets that include the target IP and will preserve the source address if it is from such subnet. If there is no such subnet we select source address according to the rules for level 2
                    个人理解
                    在发送该数据包的网卡上如果找到和数据包的源地址在同一个网段的地址则使用数据包的源地址作为arp请求的源地址。否则使用配置为2时的规则。
                    2忽略IP数据包的源IP地址在发送此请求的网卡上查找与arp请求的目标地址一般和数据包的目标地址并不相同在同一网段的ip地址作为arp请求的源地址。如果找不到则随便取某张网卡的第一个ip地址。
                    sysctl.conf中包含all和eth/lo具体网卡的arp_announce参数其中较大的值生效。
                         由此也可以理解为什么LVS在DR模式下要配置
                    echo"2" >/proc/sys/net/ipv4/conf/all/arp_announce
                       因为如果使用数据包的源ip浮动ip发送arp请求则会更新其他主机的arp缓存导致报文不能被正常转发至LVS从而导致LVS不能正常工作。设置为2则arp请求会使用发送arp请求的网卡上合适的地址而浮动ip配置在环回地址上所以一定不会以浮动ip作为arp请求的源地址。
                 
            base_reachable_time
                arp表项mac缓存表老化时间
            
        ---netstat/ss----
            选项:
                -n, --numeric       don't resolve service names
                -a, --all           display all sockets(default: connected)
                -l, --listening     display listening sockets
                -p, --processes     show process using socket
            结果:
                --------------------------netstat中的各种状态------------------------------
                    CLOSED         初始(无连接)状态。
                    LISTEN         侦听状态,等待远程机器的连接请求。
                    SYN_SEND       在TCP三次握手期间,主动连接端发送了SYN包后,进入SYN_SEND状态,等待对方的ACK包。
                    SYN_RECV       在TCP三次握手期间,主动连接端收到SYN包后,进入SYN_RECV状态。
                    ESTABLISHED    完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。
                    FIN_WAIT_1     在TCP四次挥手时,主动关闭端发送FIN包后,进入FIN_WAIT_1状态。
                    FIN_WAIT_2     在TCP四次挥手时,主动关闭端收到ACK包后,进入FIN_WAIT_2状态。
                    TIME_WAIT      在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。
                    CLOSING        在TCP四次挥手期间,主动关闭端发送了FIN包后,没有收到对应的ACK包,却收到对方的FIN包,此时,进入CLOSING状态。
                    CLOSE_WAIT     在TCP四次挥手期间,被动关闭端收到FIN包后,进入CLOSE_WAIT状态。
                    LAST_ACK       在TCP四次挥手时,被动关闭端发送FIN包后,进入LAST_ACK状态,等待对方的ACK包。
                     
                    主动连接端可能的状态有:    CLOSED        SYN_SEND        ESTABLISHED
                    主动关闭端可能的状态有:    FIN_WAIT_1    FIN_WAIT_2      TIME_WAIT
                    被动连接端可能的状态有:    LISTEN        SYN_RECV        ESTABLISHED
                    被动关闭端可能的状态有:    CLOSE_WAIT    LAST_ACK        CLOSED
            例:
                统计CLOSE_WAIT数量:
                    netstat -anp|awk 'NR==1 || /CLOSE_WAIT/'|awk '{print $4}'|sort|uniq -c
        
        ---dig/nslookup---
            格式 
                nslookup xxx.com
                dig @8.8.8.8 xxx.xxx.com
            其他:
                dig @8.8.8.8 xxx.xxx.com +short    #简短显示
                dig -f xxfile +noall +answer|grep -v NS        #从xxxfile中批量读取

猜你喜欢

转载自blog.csdn.net/weixin_42573277/article/details/113859700
今日推荐