4月20日
TCP/IP协议栈
1983年1月1日,TCP/IP取代了旧的网络控制协议NCP
核心为:网络层、传输层
传输过程:
2.帧结构: 帧头8字节 目标地址6字节 源地址6字节 类型2字节 20 20 数据6-1460 FCS4字节
一:传输层.transport
1.TCP特性:
- 工作在传输层
- 面向连接协议
- 全双工协议
- 半关闭
- 错误检查
- 将数据打包成段,排序
- 确认机制
- 数据恢复,重传
- 流量控制,滑动窗口
- 拥塞控制,慢启动和拥塞避免算法
TCP包头结构:
①
服务器端口号:0-1023:(管理员有权使用)
固定值 http:80、mysql:3306, less /etc/services 查看服务器端口号
普通用户端口范围:1024-49151(用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用)
linux客户端端口号默认值范围:32768-60999 查看范围 :cat /proc/sys/net/ipv4/ip_local_port_range 更改: echo 20000 62000 > /proc/sys/net/ipv4/ip_local_port_range
②
序号:seq(发出去的序号)
确认号:ack(对方回应的序号)
TCP确认和固定窗口(固定发送条数,发送一条确认一条或者发多条确认多条)效率低
TCP滑动窗口(先发送多条根据恢复确认的条数再确定下次发的条数)尽最大效率
③
URG,=1时后面的紧急指针数据有效
PSH,=1时提示接收端立即从TCP缓冲区读走数据、=0时先在缓冲区缓存下来
RST,=1时主机出现问题或者上次发送的数据有问题主机拒绝响应
ACK,三次握手建立连接(=1时,前面的确认号才有效)
客户端,主动打开状态、同步发送状态、建立连接状态
服务器端,受到访问被动打开状态,处于监听状态、到收到状态、到建立连接状态
FIN,=1时告诉对方可以释放连接了,带FIN标志的TCP报文段称为结束报文段
TCP超时重传
/proc/sys/net/ipv4/tcp_retries1,指定在底层IP接管之前TCP最少执行的重传次数,默认值是3
/proc/sys/net/ipv4/tcp_retries2,指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对应13~30min)
2.有限状态机:
- CLOSED 没有任何连接状态
- LISTEN 侦听状态,等待来自远方TCP端口的连接请求SYN-SENT 在发送连接请求后,等待对方确认
- SYN-SENT 在发送连接请求后,等待对方确认
- SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
- ESTABLISHED 代表传输连接建立,双方进入数据传送状态
- FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
- FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
- TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
- CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
- LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
- CLOSING 双方同时尝试关闭传输连接,等待对方确认
3.UDP特性:
- 工作在传输层
- 提供不可靠的网络访问
- 非面向连接协议
- 有限的错误检查
- 传输性能高
- 无数据恢复特性
UDP包头:
4.nc (绰号:瑞士军刀)模拟软件,可以相互通话、双工型
客户端:nc -l 9527 开启服务
客户端:nc 10.0.0.8 9527 连接服务
5.ss 监听服务
ss -n t l a
查看端口冲突问题:ss -ntlp lsof -i :端口号
判断端口是否正在打开 < /dev/tcp/127.0.0.1/端口号
echo $?
6.socket 套接字=IP=PORT(tcp/udp)标志网络中唯一的应用程序
7.sync半连接和accept全连接队列(下面文件时对应连接队列大小,工作中需要修改队列值,echo 数值 > 对应文件 )
/proc/sys/net/ipv4/tcp_max_syn_backlog 未完成连接队列大小,默认值128,建议调整大小为1024以上
/proc/sys/net/core/somaxconn 完成连接队列大小,默认值128,建议调整大小为1024以上
二:internet 层
1.利用icmp协议判断网络状态: ping 地址 -f(尽所能发送)-s 65507
2.ARP利用广播实现 同一网段直接广播接收对方MAC地址
不同网段先广播至路由器,再由路由器广播发给接收方得到MAC地址
第一次成功后会互相缓存对方MAC地址,节约资源
arp -n 查看MAC缓存信息
-d 清除缓存
免费ARP:
验证IP是否冲突:一个主机可以通过它来确定另一个主机是否设置了相同的 IP地址
更换物理网卡:如果发送ARP的主机正好改变了物理地址(如更换物理网卡),可以使用此方法通知网络中其它主机及时更新ARP缓存
RARP :将MAC地址转换为IP地址(需要配置DHCP地址分配服务)
3.IP PDU 报头
4.arping ip地址 判断网络中是否此ip地址冲突
arp -s ip MAC地址 手动绑定 ip MAC地址 (防止有ARP欺骗)
4月22日
1.MAC地址 唯一性,IP地址 可管理性
2.10.0.0.1-254 网段=VLAN=subnetwork 子网 =广播域 (每个域用交换机、路由器分隔开)
3.IP 地址分两部分:网络ID位 主机ID位
地址格式:点分十进制记法
网段数=2^可变网络ID的位数
主机数=2^n主机ID的位数-2(全为0的和全为1的去掉)
分为5类:E类保留未使用,240-255
判断是否在一个网段:
A类:判断前八位是否一致 网络数:2^(8-1)=126 主机数:2^24 -2=16777214
B类:判断前十六位是否一致 网络数:2^(16-2)=16384 主机数:2^16 -2=65534
C类:判断前二十四位是否一致 网络数:2^(24-3)=2097152 主机数:2^8 -2=254
D类:组播
4.公共和私有IP地址
私有:
公共:
5.特殊地址:
0.0.0.0 不是一个真正意义上的IP地址。它表示所有不清楚的主机和目的网络。
255.255.255.255 限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机。
127.0.0.1~127.255.255.254 本机回环地址,主要用于测试。
224.0.0.0到239.255.255.255 组播地址,224.0.0.1特指所有主机,224.0.0.2特指所有路由器。224.0.0.5指OSPF 路由器,地址多用于一些特定的程序以及多媒体程序。
169.254.x.x 如果Windows主机使用了DHCP自动分配IP地址,而又无法从DHCP服务器获取地址,系统会为主机分配这样地址。
6.子网掩码:
CIDR:无类域间路由,目前的网络已不再按A,B,C类划分网段,可以任意指定网段的范围
CIDR无类域间路由表示法:IP/网络ID位数,如:172.16.0.100/16
netmask子网掩码:32位或128位的数字,和IP成对使用,用来确认IP地址中的网络ID和主机ID
八位换算:
相关计算公式:
- 一个网络的最多的主机数=2^主机ID位数(32|128 - 网络ID位数)-2
- 网络(段)数=2^网络ID中可变的位数
- 网络ID=IP \'与\' netmask(可判断两主机是否在一个网段,相同为1,不同为0)
判断对方网络ID,使用的子网掩码为请求方自己的子网掩码,会存在A认为B不属于一个网段,而B认为A属于一个网段,造成A到B请求失败、B到A请求超时。
7.划分子网:
将一个大的网络(主机数多)划分成多个小的网络(主机数少),主机ID位数变少,网络ID位数变多,
网络ID位向主机ID位借N位,可以划分2^N个子网
8.合并超网:
将多个小网合并成一个大网,主机ID向网络ID位借位(找共同点,特点:节约路由表提升效率)
超网要包含所有子网:合并几位就必须包含几位的000··到111··
9.跨网络通信(路由选择路径)
路由分类:
主机路由:精确的到达主机的路径(量大不适用)
网络路由:到达某个网段的路径(实用)
默认路由:到达某个地方只有一条路径,默认这个路径
10.动态主机配置协议DHCP:
走的UDP协议 服务器端口:67
客户端端口:68
4月24日
1.基本网络配置:
- 主机名
- IP/netmask
- 路由:默认网关
- DNS服务器
2.配置当前主机网卡名称:
ip link set eth0 down/up 禁用或启动网卡命令
临时修改网卡名 ip link set eth0 name abc
永久修改网卡名:vim /etc/udev/rules.d/70-persistent-net.rules
3.查看网卡状态:
mii-tool eth0
ethtool eth0
4.查看网卡驱动:
dmesg |grep –i eth
ethtool -i eth0
5.卸载网卡驱动:
modprobe -r e1000
rmmod e1000
装载网卡驱动:
modprobe e1000
6.ifconfig 命令 (过时的命令以后用 IP )
列出启用的网卡信息
-a 列出全部网卡信息
-s 查看网卡流量(watch 持续查看)
ifconfig eth0 up / down 启用和禁用网卡
ifconfig eth0 0.0.0.0/0 清空网卡
一个网卡可以加多个ip地址:ifconfig erh0:name xx.x.x.x/x
7.网络配置文件
/etc/sysconfig/network-scripts/ifcfg-xxx
文件内容:
- TYPE:接口类型;常见有的Ethernet, Bridge
- NAME:此配置文件应用到的设备
- DEVICE:设备名
- HWADDR:对应的设备的MAC地址
- UUID:设备的惟一标识
- BOOTPROTO: 激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp
- IPADDR:指明IP地址
- NETMASK:子网掩码,如:255.255.255.0
- PREFIX:网络ID的位数, 如:24
- GATEWAY:默认网关
- DNS1:第一个DNS服务器地址
- DNS2:第二个DNS服务器地址
- DOMAIN:主机不完整时,自动搜索的域名后缀(不设置时候默认主机名为域后缀)
- ONBOOT:在系统引导时是否激活此设备
- USERCTL:普通用户是否可控制此设备
- PEERDNS:如果BOOTPROTO的值为“dhcp”,YES将允许dhcp server分配的dns服务器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf
- NM_CONTROLLED: NM是NetworkManager的简写,此网卡是否接受NM控制
centos6之前 service network restart 重启网络服务生效
8.查看配置文件生效:
DNS:查看/etc/resolv.conf
IP地址、名字:ifconfig、ip a
路由表查看:route -n
添加路由:route add [-net(网络) |-host(仅主机) |default(默认)] target [netmask(掩码)] [gw(网关)] [dev(接口名)]
删除路由:route del [-net(网络) |-host(仅主机)] target [netmask(掩码)] [gw(网关)] [dev(接口名)]
9.配置静态路由:用linux主机模拟路由设备,配置好IP地址、路由表、必须修改文件 【echo 1 > /proc/sys/net/ipv4/ip_forward】才能接受并发送数据
10.配置动态路由:安装quagga包,通过命令vtysh配置
支持多种路由协议:RIP:选择经过路由器最好的路径 OSPF:选择网络带宽最大的路径 BGP:
11.配置当前主机名:
centos6 之前版本:/etc/sysconfig/network
HOSTNAME=xxx
centos7 以后版:/etc/hostname
HOSTNAME=xxx
10.iproute 包 代替 net-tools包
ifconfig 用 ip 替代 netstat 用 ss 替代等
11.ip命令:临时性的
增加网卡地址
ip addr add 172.16.100.100/16 dev eth0 label eth0:0
删除地址
ip addr del 172.16.100.100/16 dev eth0 label eth0:0
全清地址
ip addr flush dev eth0
ip route 查看路由表
ip route add 添加路由
ip route del 删除路由
ip route flush 清空路由
12.单臂路由 一个网卡接口 设置两个ip地址 其他两台机器将这两个ip地址分别设成网关就可通讯
13.物理上一个网段,逻辑上没在一个网段两个机器 ,各自添加默认路由 不设定网关只设定网络接口名,就可以通讯
14.路由相关配置文件: /etc/sysconfig/network-scripts/route-IFACE
两种风格:
(1) TARGET via GW
如:10.0.0.0/8 via 172.16.0.1
(2) 每三行定义一条路由
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW
网络通讯条件:物理上两台机器连接,逻辑上有路由就通
15.global 类型ip地址: 全局可用(默认配置)
link类型ip地址: 仅链接可用
host类型ip地址: 仅本机可用(回环网卡)
16.网卡别名:
ip addr add 添加
永久写成文件:格式如下
cat /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:1
IPADDR=10.0.0.100
PREFIX=8
17.多网卡 bonding:
将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP地址是不可以的。通过 bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址
0-6 Mode 7种模式
- Mode 0 (balance-rr): 轮询(Round-robin)策略
- Mode 1 (active-backup): 活动-备份(主备)策略
- Mode 3 (broadcast):广播策略
配置文件:
/etc/sysconfig/network-scripts/ifcfg-bond0
查看bond0状态:
/proc/net/bonding/bond0
18.centos7 之后:修改ip配置文件生效命令
nmcli con reload
nmcli con up con-name
19.网络组 Network Teaming
网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量
多种方式 runner
- broadcast
- roundrobin
- activebackup
- loadbalance
- lacp (implements the 802.3ad Link Aggregation Control Protocol)
网络组特点
- 启动网络组接口不会自动启动网络组中的port接口
- 启动网络组接口中的port接口总会自动启动网络组接口
- 禁用网络组接口会自动禁用网络组中的port接口
- 没有port接口的网络组接口可以启动静态IP连接
- 启用DHCP连接时,没有port接口的网络组会等待port接口的加入
管理网络组配置文件:
/etc/sysconfig/network-scripts/ifcfg-team0
20.网桥
桥接:把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其
他网口并发送出去。
工具包:bridge-utils,目前 CentOS 8无此包