网络相关知识笔记

网络协议和管理

网络概念:

常见的网络物理组建

RJ-45连接器、路由器、交换机、网络接口卡等…

VPN(虚拟私有网络)

openVPN

网络协议

网络模型

网络拓扑

  • 总线拓扑
    • 所有设备均可接收信息
  • 星型拓扑
    • 通过中心点传输
    • 单一故障点(缺点)
  • 扩展星型拓扑结构
  • 环形拓扑
    • 信号绕环传输
    • 单一故障点
  • 双环拓扑
    • 信号沿相反方向传输
    • 比单环的复原能力更强
    • 同一台网络设备连接有两条链路
  • 全网状拓扑
    • 容错能力强
    • 实施成本高
  • 部分网状拓扑
    • 在容错能力与成本之间寻求平衡

逻辑拓扑

hub		集线器
bridge	网桥
switch	交换机
router	路由器

OSI标准

OSI英文名称

  • application
  • presention
  • session
  • transport
  • network
  • data link
  • physical

特点

  • 降低复杂性
  • 标准化接口
  • 简化模块化设计
  • 确保技术的互操作性
  • 加快发展速度
  • 简化教学

通讯模式

  • 单工
  • 半双工 HALF Duplex,HD
  • 全双工 FULL Duplex,FD
  • 单播UNICAST、广播BROADCAST、组播或多播MULTCAST

查看网卡的属性

ethtool eth0
# or
mii-tool -v eth0

局域网Local Area Network

WAN Wide

LAN Local

LAN组成

  • computer
  • interconnections
  • Network devices
  • Protocols(协议)
    • Ethernet
    • IP
    • ARP
    • DHCP

网络线缆和接口

  • Twisted-Pair,双绞线
  • Coaxial,同轴电缆
  • Fiber-Optic,光纤

UTP

橙白、橙、白绿、蓝、白蓝、绿、白棕、棕

100M实际用到12/36两组线

1、2用来发送 TX

3、6用来接收 RX

1000M实际用到12/36/45/78四祖线

GBICs

光纤转换器

Ethernet Evolution

image-20200604000640719.png

MAC地址

MAC地址,物理地址,每个网络设备都有独立的MAC地址

6个字节bytes,前三个标明生产厂家,后三个是厂家独立自由设置的地址

前3个字节中的第一个1字节中的第8位:

  • 0:unicast单播

  • 1:multicast多播组播

  • 当所有字节都为1时,即ff:ff:ff:ff 代表广播BROADCAST

冲突检测的载波侦听多路访问CSMA/CD

  1. 侦听线路是否有数据正在发送
  2. 有冲突时利用算法后延若干毫秒,直至传输成功

特点:

​ 不适合太多网络设备

冲突域

广播域

wireshark

安装

使用

以太网

  • 数据链路层设备

拨号网络PPP

拨号网络PPPOE

  • 属于数据链路层

Hub集线器

多端口中继器

flow泛洪:Hub并不记忆该信息包发给哪个MAC而是广播的形式

特点:

  • 共享带宽
  • 半双工

工作在数据链路层

第一层(物理层)设备

网卡是工作在数据链路层

网桥

简介:

网桥中有CAM功能,内存记录连接网桥内的Port和MAC

CAM:内容可寻址存储器CAM(Coment-Addressable Memo-ry)

  • 包含MAC和port
  • 隔断冲突域
  • 不能隔断广播

镜像端口:

  • 可以监听所有的数据报文
  • 数据链路层设备

Switch交换机

交换机每个端口便是一个冲突域

连接wifi后扫描网路中的设备,可以截获信息

交换器是第二层设备

Router路由器

  • 隔断广播域,路由器隔开的便是一个网段
  • 选择路由表中到达目标的最好路径,路由器只记录最优的路径
  • 维护和检查路由信息,每个电脑主机
  • 连接局域网与广域网,一般认为路由器是广域网设备
  • 标准路由器是第三层(网络层)设备

window查看路由表

route print

linux查看路由表

[root@localhost ~]# route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 ens33
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0


Iface	接口:信息从哪个口发出去
Gateway	网络关口:下一个路由器临近我的接口的IP,下一跳的地址

添加路由

route add -net IP gw netmask dev eth0

删除路由

route del....

默认路由

route add -net 0.0.0.0/0 gw ip
#or
route add default  gw 192.168.37.123

全部路由都不匹配时才走该路由,未知网络都走默认路由
当删除默认路由时,则连不了外网

抓包

tcpdump -i dev icmp -nn

通过写文件的方式永久保存网络设置信息

网卡配置文件

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
# 网络配置文件
[root@localhost network-scripts]# ls
ifcfg-ens33  ifdown-ipv6    ifdown-TeamPort  ifup-ippp   ifup-routes       network-functions
ifcfg-lo     ifdown-isdn    ifdown-tunnel    ifup-ipv6   ifup-sit          network-functions-ipv6
ifdown       ifdown-post    ifup             ifup-isdn   ifup-Team
ifdown-bnep  ifdown-ppp     ifup-aliases     ifup-plip   ifup-TeamPort
ifdown-eth   ifdown-routes  ifup-bnep        ifup-plusb  ifup-tunnel
ifdown-ib    ifdown-sit     ifup-eth         ifup-post   ifup-wireless
ifdown-ippp  ifdown-Team    ifup-ib          ifup-ppp    init.ipv6-global

# 该文件下的内容都是脚本文件,开启时会自动运行


[root@localhost network-scripts]# vim ifcfg-ens33 

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp	# 更改为DHCP后之后的IP设置会无效 需要设置为none或static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33	# 图形上显示的名称
UUID=4406dfba-d1de-401b-8837-28ab4d9524e9
DEVICE=ens33	# 配置的目标网卡
ONBOOT=no	# 是否禁用该网卡

#IPADDR=
#NETMASK=
#PREFIX=

#########################

service NetworkManager restart
# 重新启动服务,或
service Network restart
#在CentOS7中
systemctl restart network
# 该服务经常会和Network冲突

Linux启用路由功能:路由转发

cat /proc/sys/net/ipv4/ip_forward
0
# 开启路由转发功能
echo 1 > /proc/sys/ney/ipv4/ip_forward

禁用防火墙

chkconfig iptables off
service iptables stop

跟踪路由

traceroute DESTIP

#or
tracepath DESTIP

#or 
mtr DESTIP
#q退出

路由表

即使两台机器在同一个网段中,没有路由表的话依然无法通讯

回环网卡上的路由是没有路由表的,不能网络通讯,所以只能自己连自己

直连网络路由是直接生成的

NETID目标网络 INTERFACE接口 GATEWAY网关

配置动态路由

用数学算法编写数学协议运行在路由器上自动生成路由表

  • RIP
  • OSPF
  • BGP

quagga软件包

包内含有多种动态路由协议

开启ospf协议

service ospfd start

配置路由器

vtysh

操作语句

show running-config

config terminal

exit

学习判断最佳路径的方法

RIP

  • 经过路径最少判断为最优

OSPF

  • 区别带宽

netstate命令与ss命令

netstate

Linux netstat 命令用于显示网络状态。

利用 netstat 指令可让你得知整个 Linux 系统的网络情况。

语法

netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

参数说明

  • -a或–all 显示所有连线中的Socket。
  • -A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
  • -c或–continuous 持续列出网络状态。
  • -C或–cache 显示路由器配置的快取信息。
  • -e或–extend 显示网络其他相关信息。
  • -F或–fib 显示FIB。
  • -g或–groups 显示多重广播功能群组组员名单。
  • -h或–help 在线帮助。
  • -i或–interfaces 显示网络界面信息表单。
  • -l或–listening 显示监控中的服务器的Socket。
  • -M或–masquerade 显示伪装的网络连线。
  • -n或–numeric 直接使用IP地址,而不通过域名服务器。
  • -N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
  • -o或–timers 显示计时器。
  • -p或–programs 显示正在使用Socket的程序识别码和程序名称。
  • -r或–route 显示Routing Table。
  • -s或–statistics 显示网络工作信息统计表。
  • -t或–tcp 显示TCP传输协议的连线状况。
  • -u或–udp 显示UDP传输协议的连线状况。
  • -v或–verbose 显示指令执行过程。
  • -V或–version 显示版本信息。
  • -w或–raw 显示RAW传输协议的连线状况。
  • -x或–unix 此参数的效果和指定"-A unix"参数相同。
  • –ip或–inet 此参数的效果和指定"-A inet"参数相同。
netstate -n
netstate -nt	#tcp
netstate -ntu	#udp
netstate -ntul	#显示监听端口

显示详细的网络状况

# netstat -a

显示当前户籍UDP连接状况

# netstat -nu

显示UDP端口号的使用情况

# netstat -apu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address        Foreign Address       State    PID/Program name  
udp    0   0 *:32768           *:*                   -          
udp    0   0 *:nfs            *:*                   -          
udp    0   0 *:641            *:*                   3006/rpc.statd   
udp    0   0 192.168.0.3:netbios-ns   *:*                   3537/nmbd      
udp    0   0 *:netbios-ns        *:*                   3537/nmbd      

查询监听端口的程序

lsof -i :6000
netstate -ntulpe

显示网卡列表

# netstat -i
Kernel Interface table
Iface    MTU Met  RX-OK RX-ERR RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0    1500  0  181864   0   0   0  141278   0   0   0 BMRU
lo    16436  0   3362   0   0   0   3362   0   0   0 LRU

显示组播组的关系

# netstat -g
IPv6/IPv4 Group Memberships
Interface    RefCnt Group
--------------- ------ ---------------------
lo       1   ALL-SYSTEMS.MCAST.NET
eth0      1   ALL-SYSTEMS.MCAST.NET
lo       1   ff02::1

显示网络统计信息

# netstat -s
Ip:
  184695 total packets received
  0 forwarded
  0 incoming packets discarded
  184687 incoming packets delivered
  143917 requests sent out
  32 outgoing packets dropped
  30 dropped because of missing route
Icmp:
  676 ICMP messages received
  5 input ICMP message failed.
  ICMP input histogram:
    destination unreachable: 44
    echo requests: 287

显示监听的套接口

# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address        Foreign Address       State   
tcp    0   0 *:32769           *:*             LISTEN   
tcp    0   0 *:nfs            *:*             LISTEN   
tcp    0   0 *:644            *:*             LISTEN   
tcp    0   0 *:1002           *:*             LISTEN   
tcp    0   0 *:netbios-ssn        *:*             LISTEN   
tcp    0   0 *:sunrpc          *:*             LISTEN   
tcp    0   0 vm-dev:ipp         *:*             LISTEN

查看网卡吞吐量

netstate -I=eth1
netstate -Ieth1

每秒观察吞吐量

watch -n1 netstate -Ieth1
# watch方法,每秒观察一次

watch

watch可以帮你监测一个命令的运行结果,来监测你想要的一切命令的结果变化

常见命令参数

Usage: watch [-dhntv] [--differences[=cumulative]] [--help] [--interval=<n>] [--no-title] [--version] <command>
  -d, --differences[=cumulative]        highlight changes between updates
                (cumulative means highlighting is cumulative)
  -h, --help                            print a summary of the options
  -n, --interval=<seconds>              seconds to wait between updates
  -v, --version                         print the version number
  -t, --no-title                        turns off showing the header

每隔一秒高亮显示网络链接数的变化情况

watch -n 1 -d netstat -ant 【-n 设置间隔,-d,difference,高亮显示不同】
 
   watch -d 'ls /home/omd'       【-d 高亮显示】
 
   watch -t 'ls /home/omd'       【-t会关闭watch命令在顶部的时间间隔】
 
说明: 切换终端: Ctrl+x     退出watch:Ctrl+g

每隔一秒高亮显示http链接数的变化情况

watch -n 1 -d 'pstree|grep http'
 
实时查看模拟攻击客户机建立起来的连接数
 
watch -n 1 -d 'netstat -an | grep "21" | egrep "192.168.25.100"| wc -l'
 
监测当前目录中 scf' 的文件的变化
 
watch -d 'ls -l|grep scf'
 
10秒一次输出系统的平均负载
 
watch -n 1 -d "uptime"

ip命令

在Centos6中安装bash-completion包来支持ip命令的参数补全

用ip命令来代替ifconfig

设置和删除Ip地址

要给你的机器设置一个IP地址,可以使用下列ip命令:

# ip addr add 192.168.17.30/24 dev eth0
# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:84:0c:21 brd ff:ff:ff:ff:ff:ff
    inet 192.168.17.129/24 brd 192.168.17.255 scope global eth0
    inet 192.168.17.30/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe84:c21/64 scope link
       valid_lft forever preferred_lft forever

你也可以使用相同的方式来删除IP地址,只需用del代替add

列出路由表条目

# ip route show

192.168.17.0/24 dev eth0  proto kernel  scope link  src 192.168.17.129
169.254.0.0/16 dev eth0  scope link  metric 1002
default via 192.168.17.2 dev eth0

更改默认路由

# ip route add default via 192.168.17.3

显示网络统计数据

# ip -s link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast  
    0          0        0       0       0       0     
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0     
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:0c:29:84:0c:21 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast  
    135268     1134     0       0       0       0     
    TX: bytes  packets  errors  dropped carrier collsns
    134830     960      0       0       0       0

当你需要获取一个特定网络接口的信息时,在网络接口名字后面添加选项ls即可。使用多个选项-s会给你这个特定接口更详细的信息。特别是在排除网络连接故障时,这会非常有用。

ip -s -s link ls p2p1

ARP条目

# ip neighbour

激活和停止网卡

# ip link set eth0 down
  
# ip link set eth0 up

获取帮助

# ip route help
Usage: ip route { list | flush } SELECTOR
       ip route get ADDRESS [ from ADDRESS iif STRING ]
                            [ oif STRING ]  [ tos TOS ]
       ip route { add | del | change | append | replace | monitor } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
            [ table TABLE_ID ] [ proto RTPROTO ]
            [ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
             [ table TABLE_ID ] [ proto RTPROTO ]
             [ scope SCOPE ] [ metric METRIC ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]
           [ rtt TIME ] [ rttvar TIME ] [reordering NUMBER ]
           [ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ]
           [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]
           [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ]
TYPE := [ unicast | local | broadcast | multicast | throw |
          unreachable | prohibit | blackhole | nat ]
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
FLAGS := [ equalize ]
MP_ALGO := { rr | drr | random | wrandom }
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
TIME := NUMBER[s|ms]

修改物理地址(逻辑上)

查看MAC地址信息

[root@localhost ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:85:00:0e brd ff:ff:ff:ff:ff:ff
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:55:45:d1 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:55:45:d1 brd ff:ff:ff:ff:ff:ff

打开网卡配置文件

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth1"
UUID="205b51bf-479e-4f00-8b6a-39703c79e967"
DEVICE="ens33"
ONBOOT="yes"
MACADDR=11:33:44:55:66
~                                      

socket套接字

通过写入与读取socket套接字文件来实现数据传输的效果

WIFI简介

无限局域网标准:WIFI

国内无限局域网络标准:WAPI

WLAN:无线局域网统称

  • 包括WIFI、WAPI等

VLAN

虚拟局域网,隔断广播域

trunk链路:所有广播域共用的端口线路

trunk协议:IEEE 802.1Q 帧结构

以太网帧需要加一个VLAN片段:

  • 该片段4个字节

  • 其中12bit内容为VLAN变化(理论4096(2^12)个vlan网络)

    • 但当云技术出现,需要的网络数大于4096个vlan网络时,这时候需要的新的虚拟化 技术解决——vxlan

    • vxlan介绍

  • 单臂路由、带路由功能交换机,可以解决跨vlan通讯

  • 事实上的网络拓扑与逻辑上的网络拓扑可能有区别

  • 通过物理上的MAC加上逻辑上的IP网段区别不同VLAN

  • 属于数据链路层

分层的网络架构

  1. 访问层 Access Layer
    • 将设备接入网络的层级(终端接入)
    • 交换机设备
  2. 分布层 Distribution Layer
    • 隔断广播域,路由,安全,远程接入,访问层汇聚
    • 路由器设备、VLAN
  3. 核心层 Core Layer
    • 企业级应用快速转发
    • 存储服务器、磁盘整列、核心层交换机:背板宽带要求非常高(每个网口都是万兆的)

TCP/IP协议栈

TCP/IP协议栈

TCP协议

  • 面向连接协议

  • 确认机制

  • 将数据打包成段、排序

  • 工作在传输层

  • 半关闭

  • 错误检查

  • 数据恢复、重传

  • 流量控制、滑动窗口

  • 拥塞控制、慢启动和拥塞避免算法

  • man 7 tcp

应用

  • E-mail
  • File sharing
  • Downloading

TCP报文头

TCP_head.png)]

常见服务及其使用的端口号

cat /etc/services

可用端口号范围为

0-65535

IANA:互联网数字分配机构(负责域名、数字资源、协议分配)

0-1023
# 系统端口或特权端口(仅管理员可用),众所周知,永久分配给固定的系统应用使用:22/tcp(ssh)	80/tcp(http)	433/tcp(https)

1024-49151
# 用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用:1433/tcp(SqlServer), 1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp (memcached)

49152-65535
# 动态端口或私有端口,客户端程序随机使用的端口
其范围的定义:/proc/sys/net/ipv4/ip_local_port_range

显示主机上正在使用的端口号

ss -ntul

显示主机上正在使用的端口号和使用该端口的程序

ss -ntulp
lsof -i :6010

window中

C:\Users\Administrator>tasklist | findstr TIM
TIM.exe                      17328 Console                    1    217,088 K

查询该端口对应信息

C:\Users\Administrator>netstat -no | findstr 17328
  TCP    192.168.1.3:5369       61.129.7.17:443        CLOSE_WAIT      17328
  TCP    192.168.1.3:13637      117.41.243.27:80       ESTABLISHED     17328
  
  # 17328是进程编号

TCP滑动窗口

  • ACK:希望下次发几号包
  • Window Size=Window size value * Window size scaling factor(固定的,64)

窗口大小决定通讯效率,窗口大小会随时变化

六个标记位

  • URG:0表示紧急指针无效
  • ACK:1则表示确认字号段有效
  • PSH:1则不经过缓存直接交给应用
    • 默认:网卡缓冲区buffer——>内核缓存区buffer——>应用
  • RST:1说明主机连接出现严重错误,必须重新链接
  • SYN:同步
    • SYN=1 seq=x,第一次握手标志
  • FIN:结束

sync半连接和accept全连接队列

  • sync queue:sync半连接队列,队列长度是有限的
    • 查看未完成连接队列大小,建议调整大小为1024以上
      • cat /proc/sys/net/ipv4/tcp_max_syn_backlog
    • 查看完成队列大小,建议调整大小为1024以上
      • cat /proc/sys/net/core/somaxconn
    • 当连接数满时,访问将被拒绝(黑客攻击方式)

STP生成树协议

spaining tree protocol

  • 避免网络回环出现网络风暴
  • 选择一个链路进行禁用,逻辑上禁用;当其他路断开时,此链路重新启用。

TCP四次挥手

  • FIN=1,seq=u
  • ACK=1,seq=v,ack=u+1
  • FIN=1,ACK=1,seq=w,ack=u+1
  • ACK=1,seq=u+1,ack=w+1

有限状态机FSM

img

  • 粗实线箭头表示对客户进程的正常变迁。

  • 粗虚线箭头表示对服务器进程的正常变迁。

  • 另一种细线箭头表示异常变迁。

MSL

数据生存时间

孤儿连接状态

连接长时间地停留在FIN_WAIT_2状态,即服务器不发送关闭连接,客户端执行半关闭。此时客户端连接由内核接管

Linux在内核中定义了两个内核参数:

# 指定内核能接管的孤儿连接数目
/proc/sys/net/ipv4/tcp_max_orphans

# 指定孤儿连接在内核中生存的时间
/proc/sys/net/ipv4/tcp_fin_timeout

TCP超时重传

tcp超时重传功能使得连接会更加可靠

实验

模拟网络连接中断

# 将收到192.168.37.7 的包直接丢弃,造成网络连接中断现象
iptables -A INPUT -s 192.168.37.7 -j DROP

# 监听http服务的80端口
tcpdump -i eth0 -nn port 80

连接测试

# 使用curl命令
curl 192.168.37.8

与TCP超时重传相关的两个内核参数

# 指定在底层IP接管之前TCP最少执行的重传次数,默认为3
/pro/sys/net/ipv4/tcp_retries1

# 指定连接放弃前TCP最多可以执行重传次数,默认值15(对应13~30min)
/pro/sys/net/ipv4/tcp_retires2

拥塞控制

TCP拥塞控制的标准文档是RFC 5681,其中详细介绍了拥塞控制的四个部分:慢启动(slow start)、拥塞避免(congestion avoidance)、快速重传(fast retransmit)和快速恢复(fast recovery)。拥塞控制算法在Linux下有多种实现,比如reno算法、vegas算法和cubic算法等。它们或者部分或者全部实现了上述四个部分

# 当前所使用的拥塞控制算法
/proc/sys/net/ipv4/tcp_congestion_control

UDP协议

  • 工作在传输层
  • 提供不可靠的网络访问
  • 非面向连接协议
  • 有限的错误检查
  • 传输性能高
  • 无数据恢复特性
  • man 7 udp

应用场景

  • vioce streaming
  • video streaming

Internet层

协议:

IP协议

  • PDU报头

http://www.malaoshi.top/upload/0/0/1EF2boAmI25c.png

注意:标志有3位,只有后两位才有意义

  • DF(不允许分片):Don’t Fragment 中间的一位,只有当DF=0 时才允许分片
  • MF(有分片):More Fragment 最后一位,MF=1表示后面还有分片,MF=0表示最后一个分片

IP地址

  • 他们可唯一标识IP网络中的每台设备

  • 每台主机、网络设备、外围设备必须具有唯一地址

  • IP地址由两部分组成

    • 网络ID
      • 标识网络
      • 每个网段分配一个网络ID
    • 主机ID
      • 标识单个主机
      • 由组织分配给各设备
    • 网络数:
      • 2^可变的网络ID位
    • 主机数:
      • 2^主机ID位-2
      • 10.0.0.0与10.255.255.255不能要
  • A类:前8位是网络ID,后24位是主机ID

    • 0XXXXXXX.X.Y.Z
    • 1-126.X.Y.Z
    • 0开头,初始地址
    • 127开头:回环地址
    • 2^24-2=16777214台主机
  • B类:前16位网络ID,后16位是主机ID

    10XXXXXX.X.Y.Z
    
    128-192.x.y.z
    
    10000000	128
    
    10111111	192
    
    • 网络数:
      • 2^14=16384
    • 主机数:
      • 2^16-2=65534
  • C类:前24位网络ID,后8位是主机ID

    110XXXXX.X.Y.Z
    
    192-223.X.Y.Z
    
    11000000	192
    
    11011111	223
    
    • 网络数:
      • 2^21=2097152
    • 主机数:
      • 2^8-2=254
  • D类:多播、组播

    224-239.X.Y.Z
    
  • E类:科研用

    240-254.X.Y.Z
    
  • 无类:

    • 网络ID、主机ID任意位

    • CIDR表示法:无类域间路由

      • IP/网络ID位数

        10.0.0.0/8
        172.16.0.100/16
        
        
        

netmask:子网掩码

在这里插入图片描述

功能:确定网络ID位数,32位的二进制数据,对应IP网络ID位为1,对应IP中主机ID为0

202.123.180.200/20 求netmask

ICMP 协议

  • 网络层。在该层中ip的上层

  • # 可以查看数据链路层协议
    tcpdump -i eth0 -nn icmp -e -X
    
  • 禁用ICMP协议内核参数

    /proc/sys/net/ipv4/icmp_echo_ignore_all
    # 改完立即生效
    
  • 网络ID=iP 与 netmask

    0与任何都是0 ,1与任何数都是其原值
    
    203.110.200.123/21
    1.netmask?
    2.网络ID
    3.网络中最多主机数?
    
    200的二进制为:11001 000
    123的二进制位:01111011
    1. 255.255.248.0
    2. 203.110.200.0
    3. 2^(32-21)-2 = 2046
    
    ########
    
    222.100.140.1/19
    1.netmask?255.255.224.0
    2.网络ID	222.100.128.0
    3.网络中最多主机数? 2^(32-19)-2 = 8190
    4.此网络中最小IP与最大IP
    222.100.10000000.1~222.100.10011111.254
    222.100.128.1~222.100.159.254
    

判断网络ID是否相同,即是否在同一个网段

  • 用自己的IP和自己的子网掩码相与
  • 再用自己的子网掩码和对方的IP相与
  • 再比较是否相同
A:192.168.37.7/16
B:192.168.36.6/19

A:172.16.129.100/16
B:178.16.128.100/17

私有IP地址

mage-20200607225301966.png

只在局域网中使用

非唯一

公有地址

查看公有地址

[root@localhost ~]# curl ipinfo.io/ip

要上网必须要用公有地址

划分子网

将一个大网络(主机多,主机ID位多)分割成多个小网络(主机少,主机ID位少),所以,原有的网络ID位变少,网络ID向主机ID借位

子网数:2^网络ID向主机ID借的位数

问题1:10.0.0.0/8 给32个省,每个省分配独立的子网
1. 每个省的子网络对应netmask?
2. 每个省的子网络主机多少
3. 最小的子网络的网络ID
4. 最大的子网络的IP范围


1. 2^n=32;n=5
即:10.00000 000.0.0/13 
10.11111 000.0.0 	255.248.0.0

2. 10.0.0.1-10.7.255.254 
2^(32-13)-2
524286

3. 10.00000 000.0.0/13

4. 10.11111 000.0.1/13 ~ 10.11111 111.255.254

#############################################
问题2:将第10个子网分配河南省,河南省再次分18个子网给各个地市使用。
1. 每个地市的子网络对应netmask?
2. 每个地市的子网络主机多少
3. 最小的子网络的网络ID
4. 最大的子网络的IP范围

1. 10.01001 000.00 (借5位) 000000.0/18 255.255.192.0
2. 2^14-2 = 16382
3. 10.01001 000.00 000000.00000000/18
4. 10.01001 111.11 000000.00000001/18~10.01001 111.11  111111.11111110
	10.79.192.1~10.79.255.254

合并网络

将多个子网合并成一个大网,也称超网;即主机ID向网络ID借位

220.78.168.0/24
220.78.169.0
220.78.170.0
220.78.171.0
220.78.172.0
220.78.173.0
220.78.174.0
220.78.175.0

# 
220.78.10101 000.0
220.78.10101 001.0
220.78.10101 010.0
220.78.10101 011.0
...
220.78.10101 111.0

# 借位合并后
220.78.168.0/21

跨网络通信

路由:

  • 主机路由
  • 网络路由
  • 默认路由

优先级:精度越高、优先级越高

动态主机配置协议DHCP自动获取IP

  • 需要DHCP服务器

image-20200608003500784.png

获取:IP、网关、租期

基本网络配置

  • 主机名
  • IP
  • netmask
  • 路由:默认网关
  • DNS服务器
    • 主DNS服务器
    • 次DNS服务器
    • 第三DNS服务器

CentOS6网卡名称

网卡名控制

[root@localhost ~]# ls /etc/udev/rules.d/
60-fprint-autosuspend.rules  90-hal.rules
60-pcmcia.rules              97-bluetooth-serial.rules
60-raw.rules                 98-kexec.rules
70-persistent-cd.rules       99-fuse.rules
70-persistent-net.rules      99-vmware-scsi-udev.rules
90-alsa.rules

[root@localhost ~]# cat /etc/udev/rules.d/70-persistent-net.rules 
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:e5:c3:0b", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

卸载网卡驱动、再重新加载

rmmod e1000
#or
modprobe -r e1000

加载

modprobe e1000

ip命令设置网卡

# CentOS7
[root@centos7 ~]# ip 
address      help         link         monitor      neigh        ntable       tcp_metrics  tuntap
addrlabel    ila          macsec       mroute       netconf      route        token        vrf
fou          l2tp         maddress     mrule        netns        rule         tunnel       xfrm

ipv6

fe80::97cf:b445:cc42:aa08/64

ipv6 是128位,128/16=8 有8块16进制字符组成
其中::中的内容都是0

广播

正常情况下个主机是不响应广播ping的,将下方内容该为0则相应广播ping

cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

ARP协议

arp先于三次握手

  • 第一次通讯会发送一次广播,并将响应记录在广播表中

  • arp缓存表:arp -n

    • 记录缓存地址的时间默认一般为10min

    • 假冒机器网关

    • ARP欺骗

    • 解决方案,手工绑定网关

      arp -s IP MAC
      
  • 不能跨网段(路由器)通讯,解决方案:通过网关

    • 跨网关通讯中IP地址始终不变
    • MAC地址会与网关MAC互换

RARP协议

  • 反向ARP:通过MAC找寻IP

  • 确认网络中不会有相同的IP地址

  • 自问自答形式,当其他主机回复时,自答的IP将会

IGMP数据包

当对方系统是较老的系统时。发送大量的IGMP数据包,系统会崩溃

网关Gateway

路由器接口地址

查看网关:

route -n

修改主机名

vim /etc/sysconfig/network

DNS

利用dns服务器进行名词解析

dns配置文件

[root@localhost ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 192.168.247.2

排错顺序

主机网络故障的排查思路

# ping网关 rounte -n
# 	如果网关无法ping通,说明与网关之间通信中断,检查路由表、网卡、是否添加了2条默认路由

# ping另一个网段主机
#	如果ping不同,说明路由器转发问题

# 查看dns

抓包工具查看:wireshark

多网卡绑定bonding

冗余、高可用及负载均衡

工作模式

Mode 0:balance-rr

轮转策略Round-robin:从头到尾顺序的在每一个slave接口上面发送数据表,本模式提供负载均衡和容错能力

Mode 1:active-backup

活动-备份(主备)策略:只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave,为了避免交换机发生混乱,此绑定的MAC地址只有一个外部端口可见

Mode 3:broadcast

广播策略:在所有的slave接口上传送所有的报文,提供容错能力

配置

加一个bond虚拟网卡的配置文件

vim /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
BOOTPROTO=none
BONDING_OPTS="miimon=100 mode=0" #mode是上述中的3种模式

在被绑定网卡配置文件中加入

MASTER=bond0
SLAVE=yes

查看配置信息

cat /proc/net/bond/bond0

更改网卡名

# 修改文件
vim /etc/default/grub
...
GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0"
...


#之后运行命令,生成配置文件
grub2-mkconfig -o /etc/grub2/grub.cfg #CentOS7

grub-mkconfig -o /etc/grun/grun.cfg	#Ubuntu

# 重启系统
reboot

Centos7上修改主机名

hostnamectl set-hostname NEWNAME

hostnamectl status

Centos7网络配置工具

图形工具
	nm-connection-editor
字符配置tui工具
	nmtui
命令行工具
	nmcli(推荐)

nmcli命令详解

为网卡设置多套配置文件

需要哪个就启用哪个

创建

nmcli connection add con-name eth1-test ifname eth1 type ethernet ipv4.method manual ipv4.addresses 1.1.1.1/24

启用配置文件

nmcli connection up eth1-test

如果是直接复制并修改文件的方式需要reload

nmcli connetcion reload

删除配置文件

nmcli connection delete eth1-test2

网桥实现

桥接:

创建软件网桥

nmcli con add con-name mybr0 type bridge con-name br0 ifname br0
nmcli con modify mybr0 ipv4.addresses 192.168.0.100/24 ipv4.method manual
nmcli con add con-name br0-port0 type bridge-slave ifname eth0 master br0

查看配置文件

cat /etc/sysconfig/network-scripts/ifcfg-br0
cat /etc/sysconfig/network-scripts/ifcfg-br0-port0

工具包

yum install bridge-utils

查看网桥

brctl show

查看CAM表

brctl showmacs br0

添加和删除网桥

brctl addbr | delbr br0

添加和删除网桥中网卡

brctl addif | delif eth0

注意:NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口

Ubuntu网络配置

官网文档

网卡名称

默认ubuntu的网卡名称和CentOS 7类似,如:ens33,ens38等

修改工卡名称为传统命名方式:

  • 修改配置文件为下面形式
vi /etc/default/grub
GRUB_CMDLINE_LINUX="net.ifnames=0"
  • 生效新的grub.cfg文件
grub-mkconfig -o /boot/grub/grub.cfg
  • reboot

配置自动获取IP

cat /etc/netplan/01-netcfg.yaml
network:
	version: 2
	renderer: networkd
	ethernets:
	ens33:
		dhcp4: yes

# 严格缩进
修改网卡配置文件后需执行命令生效:netplan apply

配置静态IP

cat /etc/netplan/01-netcfg.yaml
network:
	version: 2
	renderer: networkd
	ethernets:
	eth0:
		addresses:
			- 192.168.6.10/24
			- 10.10.10.10/24
		gateway4: 192.168.6.1
		nameservers:
			search: [mydomain, otherdomain]# 自动补全
			addresses: [223.5.5.5, 8.8.8.8, 1.1.1.1]# DNS

查看ip和gateway

ip addr
route -n

查看DNS

ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Dec 12 11:36 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf


systemd-resolve –status

修改主机名

hostnamectl set-hostname ubuntu1804

猜你喜欢

转载自blog.csdn.net/FlamencaH/article/details/106725486