网络协议和管理
网络概念:
常见的网络物理组建
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
MAC地址
MAC地址,物理地址,每个网络设备都有独立的MAC地址
6个字节bytes,前三个标明生产厂家,后三个是厂家独立自由设置的地址
前3个字节中的第一个1字节中的第8位:
-
0:unicast单播
-
1:multicast多播组播
-
当所有字节都为1时,即ff:ff:ff:ff 代表广播BROADCAST
冲突检测的载波侦听多路访问CSMA/CD
- 侦听线路是否有数据正在发送
- 有冲突时利用算法后延若干毫秒,直至传输成功
特点:
不适合太多网络设备
冲突域
广播域
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
-
-
-
单臂路由、带路由功能交换机,可以解决跨vlan通讯
-
事实上的网络拓扑与逻辑上的网络拓扑可能有区别
-
通过物理上的MAC加上逻辑上的IP网段区别不同VLAN
-
属于数据链路层
分层的网络架构
- 访问层 Access Layer
- 将设备接入网络的层级(终端接入)
- 交换机设备
- 分布层 Distribution Layer
- 隔断广播域,路由,安全,远程接入,访问层汇聚
- 路由器设备、VLAN
- 核心层 Core Layer
- 企业级应用快速转发
- 存储服务器、磁盘整列、核心层交换机:背板宽带要求非常高(每个网口都是万兆的)
TCP/IP协议栈
TCP协议
-
面向连接协议
-
确认机制
-
将数据打包成段、排序
-
工作在传输层
-
半关闭
-
错误检查
-
数据恢复、重传
-
流量控制、滑动窗口
-
拥塞控制、慢启动和拥塞避免算法
-
man 7 tcp
应用
- File sharing
- Downloading
TCP报文头
)]
常见服务及其使用的端口号
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
- 当连接数满时,访问将被拒绝(黑客攻击方式)
- 查看未完成连接队列大小,建议调整大小为1024以上
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
-
粗实线箭头表示对客户进程的正常变迁。
-
粗虚线箭头表示对服务器进程的正常变迁。
-
另一种细线箭头表示异常变迁。
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报头
注意:标志有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不能要
- 网络ID
-
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地址
只在局域网中使用
非唯一
公有地址
查看公有地址
[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服务器
获取: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