一、TCP FLAG 解析
序列号:表示本报文段所发送数据的第一个字节的编号。在TCP 连接中所传送的字节流的每一个字节都会按顺序编号。
由于序列号由32位表示,所以每2^32 个字节。就会出现序列号回绕,再次从0开始。
确认号:表示接收方期望收到发送方下次报文段的第一个字节数剧的编号,也就是告诉发送方:我希望你
(指发送方)下次发送的数据的第一个字节数据的编号为此确认号
数据偏移:表示TCP 报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段
到底有多长,它指出TCP 报文段的数据起始处距离TCP 报文段的起始处有多远。该字段的单位是32位
(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移就是TCP 首部最大60字节。
URG:表示本报文段中的发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)
只有当UEG=1 时才有效
ACK:表示是否前面确认号字段是否有效。只有当ACk=1 时,前面的确认号字段才有效。TCP规定,
连接建立后,ACK必须为1,带ACK 标志的TCP报文段称为确认报文段
PSH:提示接收端应用程序应该立即从TCP 接收缓冲区中读走数据,为接收后续数据腾出空间,如果为1,
则表示对方应当立即把数据提交给上层应用,而不是缓存起来,主机拒绝响应,带RST 标志的TCP 报文段称为复位报文段。
SYN:在建立连接时使用,用来同步序号,当SYN=1 ,ACK =0 时,表示这是一个请求建立连接报文段;
当SYN=1 ,ACK=1 时,表示对方同意建立连接,SYN=1 ,说明这是一个请求建立连接或同意建立连接的报文。
SYN标识(报文段称为同步报文段)
窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文的确认号开始允许对方发送的数据量,达到此值,
需要ACK确认后才能再继续传送后面数据,由window size value * window size scaling factor (此值在三次握手阶段TCP 选项window scale 协商得到)
得出此值
二、三次握手
客户端状态机: CLOSED、SYN-SENT 、 ESTAB-LISHED
服务器状态机:CLOSED、LISTN、SYN-REVD、ESTAB-LISTHED
三、 四次握手
挥手不一定有。如果服务器崩了之后,或者客户端崩了。
下图为正常客户关闭连接的情况。
客户端ESTABLISHED、FIN-WAIT-1、FIN-WAIT-2、TIME-WAIT 【在这个状态机会存在 2MSL 2倍的最大段生存时间、为了保证服务器端还有数据传输】、CLOSED
服务器ESTABLISHED、CLOSE-WAIT、LAST-ACK、CLOSED
四、怎么查看端口有没有被占用
lsof -i :22
ss -tnlp | grep :22 // p 显示是什么进程在占用该端口
判断端口是否正在打开
< /dev/tcp/127.0.0.1/80
echo $?
五、网卡配置文件
通用linux配置文件
/etc/sysconfig/network-scripts/ifcfg-网卡名称
DEVICE=eth0
TYPE=Ethernet
NAME=eth0
BOOTPROTO=none / static / dhcp
IPADDR=10.0.0.6
PREFIX=24
GATEWAY=10.0.0.1
DNS1=114.114.114.114
DNS2=8.8.8.8
ONBOOT=on
arp -n 查看下arp 地址
arp -s 1.1.1.1 00:00:02:11:22:33
ip addr add 10.1.1.1/24 dev eth0 label 1
修改主机名永久生效
[root@ntp ~]# cat /etc/sysconfig/network
hostname ntp
[root@ntp ~]#
hostname ntp 只是临时生效
当默认去ping的时候 如果没有完整的域名 会自动补充后缀
后缀在 /etc/resolv.conf
search xxxx 补充
可以在配置文件中修改 或者在网卡中添加DOMAIN=xxx
六、怎么查看路由
route
ifconfig
都来自于net-tools 包
现在 逐渐被 iproute 包替代
怎么查看一个指令来自哪个包
which route
/usr/sbin/route
rpm -qf /usr/sbin/route
net-tools-2.0-0.17.20131004git.el7.x86_64
[root@ntp ~]# rpm -qf which route
net-tools-2.0-0.17.20131004git.el7.x86_64
[root@ntp ~]#
七、VMware 复制虚机的问题
vmware 复制后 会自动更新网卡的mac,并且在centos 6系统有些奇怪的现象,会修改网卡名称。
因此需要进入到配置文件
/etc/udev/rule.d/70-persistent-rule.d
注册修改
并且需要重启修复。
如果不需要重新修复。
那么需要重新挂载网卡的驱动
怎么挂载网卡的需求?
查看驱动
dmesg | grep -A 10 -B 10 eth 或者 ethtool -i eth1
查看到驱动后重新挂载
先卸载再加载
modprode -r 驱动名称
modprode 驱动名称
八、配置路由协议
静态路由协议
动态路由协议
通过守护进程获取动态路由
安装quagga包,通过命令vtysh 配置
支持多种路由协议:RIP、OSPF 和 BGP
quagga 可以将linux 实现为软路由
Linux下使用Quagga搭建软路由-OSPFv2学习_支持ospf的软路由-CSDN博客
九、常用的指令
centos6 之前常用network 服务,centos 7 、8 之后network 服务将被遗弃,剩下NetworkManager 服务
网卡命名
centos6网卡命名,网络接口使用连续命名:eth0、eth1等,当增加或删除网卡时,名称可能会发生变化
centos7 以上使用基于硬件、设备类型命名。systemd 对网络设备的命名方式
如果firmware 或 BIOS 为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,如:eno1
如果firmware 或 BIOS 为主板上PCI-E扩展槽所提供的索引信息可用,且可预测则根据此索引进行命名,如:ens1
如果硬件接口的物理位置信息可用,则根据此信息命名,如enp2s0
如果用户显式启动,也可根据mac 地址进行命名,如enx2387a1dc56
上述均不可用时,则使用传统命名机制
基于BIOS 支持启用biosdevname 的软件
内置网卡识别为 em1、em2
pci卡识别为 pYpX Y:slot X:port
网卡组成格式:
en:Ethernet 有线局域网
wl:wlan 无线局域网
ww:wwan 无线广域网
o:集成设备的设备索引号
s:扩展槽的索引号
x:基于mac 地址命名
ps:enp2s1
传统命名方式:
(1)编辑/etc/default/grub配置文件
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
(2)为grub生成其配置文件
grub2-mkconfig -o etc/grub2.cfg
(3)重启系统
centos6 之前的主机名保存在 /etc/sysconfig/network
centos7之后的主机名保存在 /etc/hostname
路由配置文件存放在
/etc/sysconfig/network-scripts/route-IFACE
route-IFACE 文件需要手工添加
填写格式
TARGET via GW
172.168.1.1/24 via 10.1.1.1
接口IP 地址配置
注意每个地址的scope ,分为三种 host【仅本主机访问】,global【全局可以访问,即从本机各个网卡进来都可以访问】,link【从本链路过来的可以接收,仅链路级别生效,例如ipv6 fe80链路本地地址】
其中ping 127.0.0.2 、127.1.1.2 都认为是 127.0.0.1/8 中的回环地址范围
网卡别名
别名注意 别名的网卡的IP地址只能是静态配置,不能动态获取。
ip address add 1.1.1.1 dev lo label lo:1
ip address add 1.1.1.1/24 dev lo label lo:1
不过以上指令都为临时配置,可以使用配置文件保存
/etc/sysconfig/network-scripts/ifcfg-lo:1
DEVICE=lo:1
NAME=lo:1
BOOTPROTO=none
IPADDR=1.1.1.1
PREFIX=32
ONBOOT=yes
修改命令
ip link set eth0 name eno1111
同样的配置文件也需要修改
打印mac地址
ip link
查看mac地址学习情况
ip neigh
后续在centos7之后都使用nmcli 工具,需开启NetworkManager 服务
nmcli connection show
nmcli connection add con-name eth1-work ipv4.method manual ipv4.addresses 172.16.1.1/26 type ethernet ifname eth1
nmcli connection reload
nmcli connection up eth1-work
配置bond
由于bond 其中有多种模式,其中一两种模式需要上联交换机支持配置。因此vmware 只能做出一两种效果
bonding 工作模式:共7种模式:0-6 mode
mode 0( balance-rr) :轮询(round-robin)策略,从头到尾顺序的在每一个slave 接口上面发送数据包。
本模式提供负载均衡和容错能力
mode1(active-backup):活动-备份(主备)策略,只有一个slave 被激活,当且仅当活动的slave 接口失败
时才会激活其他slave,为了避免交换机发生混乱此时绑定的mac 地址只有一个外部端口上可见。
mode3(broadcast):广播策略,在所有slave 接口上传送所有的报文,提供容错能力
说明:active-backup ,balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置,其他绑定模式需要配置交换机以便整合链接。如:
cisco交换机需要在模式0、2和3 种使用etherchannel,但在模式4中需要LACp 和 etherchannel
[root@ntp network-scripts]# cat ifcfg-bond0
DEVICE=bond0
TYPE=bond
BOOTPROTO=none
IPADDR=192.168.24.100
PREFIX=24
BONDING_OPTS="mode=1 miimon=100" //miimon是各个网卡之间的交流信息 配置为100ms 用于判断是否需要切换
ONBOOT=yes
[root@ntp network-scripts]# more ifcfg-eno67109440
DEVICE=eno67109440
TYPE=ethernet
NAME=eno67109440
MASTER=bond0
SLAVE=yes
ONBOOT=yes
[root@ntp network-scripts]# more ifcfg-eno50332184
DEVICE=eno50332184
TYPE=ethernet
NAME=eno50332184
MASTER=bond0
SLAVE=yes
ONBOOT=yes
--------------------
centos 7 之后推荐使用nmcli 命令实现bond
添加bonding 接口
nmcli con add type bond con-name mybond0 ifname bond0 mode active-backup
添加从接口
nmcli con add type bond-slave ifname ens7 master bond0
nmcli con add type bond-slave ifname ens3 master bond0
注:如无为从属接口提供连接名,则该名称是接口名称加类型构成
要启动绑定,则必须首先启动从属接口
nmcli con up bond-slave-eth0
nmcli con up bond-slave-eth1
启动绑定
nmcli con up mybond0
配置网络组team
网络组team 实际是基于内核的另外一种bond技术
网络组team 是将多个网卡聚合在一起方法,从而实现冗余和提高吞吐量
网络组由内核驱动和teamd 守护进程实现
centos 7往后都是网络组team
多种方式runner
broadcast
roundrobin
activebackup
loadbalance
lacp(implements the 802.3ad link aggregation control protocol)
网络组特点
启动网络组接口不会自动启动网络组中的port 接口
启动网络组接口中的port 接口总会自动启动网络组接口
禁用网络组接口会自动禁用网络组的port 接口
没有port 接口的网络组接口可以启动静态IP 连接
启用DHCP连接时,没有port 接口的网络组会等待port 接口的加入
配置参考 创建网络组接口 nmcli con add type team con-nanme CNAME ifname INAME [config JSON] CNAME 连接名 INAME 接口名 JSON 指定runner 方式,格式: '{"runner":{"name":"METHOD"}}' METHOD 可以是broadcast,roundrobin,activebackup,loadbalance,lacp 创建port 接口 nmcli con add type team-slave con-name CNAME ifname INAME master TEAM CNAME 连接名,连接名若不指定,默认为team-slave-IFACE INAME 网络接口名 TEAM 网络组接口名 断开和启动 nmcli dev dis INAME nmcli con up CNAME INAME 设备名 CNAME 网络组接口名或port 接口
网桥
brctl show
brctl addbr br0
brctl delbr br0
brctl addif br0 eno1
brctl showmacs br0
brctl showstp br0