1、OSI七层模型 物理层:二进制传输,为启动、维护以及关闭物理链路定义了电气规范、机械规范、功能规范和过程规范 数据链路层:访问介质,定义如何格式化数据以便进行数据传输,以及如何控制对网络的访问;支持错误 检测 网络层;数据传输,路由数据包;选择传输数据的最佳路径;支持逻辑寻址和路径选择 传输层:确保数据的可靠性传输;建立、维护及终止虚拟电路;通过错误检测和恢复;信息流控制来保障 可靠性 会话层:建立、管理和终止在应用程序的会话 表示层:确保接收系统可以读出该数据;格式化数据;构建数据;协商用于应用层的数据传输语法 应用层:为应用程序进程提供网络服务;提供用户身份验证 2、PDU(Protocol Data Unit),协议数据单元是指对应层之间传递的单位 物理层的PDU是数据位 bit 数据链路层的PDU是数据帧 frame 网络层的PDU是数据包 packet 传输层的PDU是数据段 segment 其他更高层次的PDU是消息 message 3、UTP(Unshielded Twisted-Pair Cable) *T568B,白澄澄 白绿蓝 白蓝绿 白棕棕 ;T568A与T568B之间1256相调换 4、Ethernet Frame 5、MAC地址 5、TCP/IP协议栈 应用层:ftp,tftp,nfs,smtp,telnet,rlogin,snmp,dns TCP: 工作在传输层 面向连接协议 全双工协议 半关闭 错误检查 将数据打包成段,排序 确认机制 数据恢复,重传 流量控制,滑动窗口 拥塞控制,慢启动和拥塞避免算法 URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgentpointer)只有当 URG=1时才有效 ACK:表示是否前面的确认号字段是否有效。ACK=1,表示有效。只有当ACK=1时,前面的确认号字段才 有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段 PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1 则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就 会一直停留在TCP接收缓冲区中 RST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接, 然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段 称为复位报文段 SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段; 当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报 文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段 FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据 已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段 TCP三次握手: TCP四次挥手: CLOSED 没有任何连接状态 LISTEN 侦听状态,等待来自远方TCP端口的连接请求 SYN-SENT 在发送连接请求后,等待对方确认 SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认 ESTABLISHED 代表传输连接建立,双方进入数据传送状态 FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认 FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求 TIME-WAIT 完成双向传输连接关闭,等待所有分组消失 CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认 LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失 CLOSING 双方同时尝试关闭传输连接,等待对方确认 有限状态机 客户端先发送一个FIN给服务端,自己进入了FIN_WAIT_1状态,这时等待接收服务端的报文,该报文会有三 种可能: 只有服务端的ACK 只有服务端的FIN 基于服务端的ACK,又有FIN 1、只收到服务器的ACK,客户端会进入FIN_WAIT_2状态,后续当收到服务端的FIN时,回应发送一个ACK 会进入到TIME_WAIT状态,这个状态会持续2MSL(TCP报文段在网络中的最大生存时间, RFC 1122标准的建 议值是2min).客户端等待2MSL,是为了当最后一个ACK丢失时,可以再发送一次。因为服务端在等待超时后 会再发送一个FIN给客户端,进而客户端知道ACK已丢失 2、只有服务端的FIN时,回应一个ACK给服务端,进入CLOSING状态,然后接收到服 务端的ACK时,进入TIME_WAIT状态 3、同时收到服务端的ACK和FIN,直接进入TIME_WAIT状态 客户端的典型状态转移 客户端通过connect系统调用主动与服务器建立连接connect系统调用首先给服务器发送一个同步报文段使 连接转移到SYN_SENT状态此后connect系统调用可能因为如下两个原因失败返回: 1、如果connect连接的目标端口不存在(未被任何进程监听),或者该端口仍被处于TIME_WAIT状态的连 接所占用(见后文),则服务器将给客户端发送一个复位报文段,connect调用失败。 2、如果目标端口存在,但connect在超时时间内未收到服务器的确认报文段,则connect调用失败。 3、connect调用失败将使连接立即返回到初始的CLOSED状态。如果客户端成功收到服务器的同步报文段和 确认,则connect调用成功返回,连接转移至ESTABLISHED状态 当客户端执行主动关闭时,它将向服务器发送一个结束报文段,同时连接进入FIN_WAIT_1状态。若此时客 户端收到服务器专门用于确认目的的确认报文段,则连接转移至FIN_WAIT_2状态。当客户端处于FIN_WAIT_2 状态时,服务器处于CLOSE_WAIT状态,这一对状态是可能发生半关闭的状态。此时如果服务器也关闭连接 (发送结束报文段),则客户端将给予确认并进入TIME_WAIT状态 客户端从FIN_WAIT_1状态可能直接进入TIME_WAIT状态(不经过FIN_WAIT_2状态),前提是处于 FIN_WAIT_1状态的服务器直接收到带确认信息的结束报文段(而不是先收到确认报文段,再收到结束报文段) 处于FIN_WAIT_2状态的客户端需要等待服务器发送结束报文段,才能转移至TIME_WAIT状态,否则它将一 直停留在这个状态。如果不是为了在半关闭状态下继续接收数据,连接长时间地停留在FIN_WAIT_2状态并无 益处。连接停留在FIN_WAIT_2状态的情况可能发生在:客户端执行半关闭后,未等服务器关闭连接就强行退 出了。此时客户端连接由内核来接管,可称之为孤儿连接(和孤儿进程类似) Linux为了防止孤儿连接长时间存留在内核中,定义了两个内核参数: /proc/sys/net/ipv4/tcp_max_orphans 指定内核能接管的孤儿连接数目 /proc/sys/net/ipv4/tcp_fin_timeout 指定孤儿连接在内核中生存的时间 TCP超时重传 异常网络状况下(开始出现超时或丢包),TCP控制数据传输以保证其承诺的可靠服务 TCP服务必须能够重传超时时间内未收到确认的TCP报文段。为此,TCP模块为每个TCP报文段都维护一个重 传定时器,该定时器在TCP报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,TCP模块将重 传TCP报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是TCP的重传 策略 与TCP超时重传相关的两个内核参数: /proc/sys/net/ipv4/tcp_retries1,指定在底层IP接管之前TCP最少执行的重传次数,默认值是3 /proc/sys/net/ipv4/tcp_retries2,指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对 应13~30min) UDP ARP 查看ARP表 ┌─[root@yyc]─[~] └──╼ #ip neigh 172.20.0.2 dev eth0 lladdr 00:11:22:33:44:55 STALE 172.20.93.93 dev eth0 lladdr 80:fa:5b:0a:32:02 STALE 172.20.10.6 dev eth0 lladdr 28:d2:44:38:07:c2 DELAY 172.20.110.164 dev eth0 lladdr 00:0c:29:5f:26:51 STALE ┌─[root@yyc]─[~] └──╼ #arp -n Address HWtype HWaddress Flags Mask Iface 172.20.0.2 ether 00:11:22:33:44:55 C eth0 172.20.93.93 ether 80:fa:5b:0a:32:02 C eth0 172.20.10.6 ether 28:d2:44:38:07:c2 C eth0 172.20.110.164 ether 00:0c:29:5f:26:51 C eth0 IP 版本:占4位,指 IP 协议的版本目前的IP协议版本号为4 首部长度:占4位,可表示的最大数值是15个单位,一个单位为4字节,因此IP 的首部长度的最大值是60字节 区分服务:占8位,用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过,后改名为区分服 务.只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下都不使用 总长度:占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为65535 字节.总长度必须不 超过最大传送单元 MTU 标识:占16位,它是一个计数器,通常,每发送一个报文,该值会加1,也用于数据包分片,在同一个包的若干 分片中,该值是相同的 标志(flag):占3位,目前只有后两位有意义 DF: Don‘t Fragment,中间的一位,只有当 DF=0 时才允许分片 MF: More Fragment,最高位,MF=1表示后面还有分片。MF=0 表示最后一个分片 片偏移:占12位,指较长的分组在分片后,该分片在原分组中的相对位置.片偏移以8个字节为偏移单位 生存时间:占8位,记为TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值,TTL 字段是由发送 端初始设置一个 8 bit字段.推荐的初始值由分配数字RFC 指定,当前值为 64.发送 ICMP 回显应答时经常把 TTL 设为最大值 255 协议:占8位,指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给哪个处理过程, 1 表示为 ICMP 协议, 2表示为 IGMP 协议, 6表示为TCP 协议, 17表示为 UDP 协议 首部检验和:占16位,只检验数据报的首部不检验数据部分.这里不采用 CRC 检验码而采用简单的计算方法 源地址和目的地址:都各占4字节,分别记录源地址和目的地址 IP地址分类 可变长度的子网掩码 网络位到主机位借位 10000000 128 11000000 192 11100000 224 11110000 240 11111000 248 11111100 252 11111110 254 11111111 255 Centos网卡名称 接口命名方式:CentOS 6 以太网:eth[0,1,2,...] ppp:ppp[0,1,2,...] 网络接口识别并命名相关的udev配置文件: /etc/udev/rules.d/70-persistent-net.rules 查看网卡: dmesg |grep –i eth ethtool -i eth0 卸载网卡驱动: modprobe -r e1000 rmmod e1000 装载网卡驱动: modprobe e1000
┌─[root@yyc]─[~] └──╼ #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:61:e8:7b", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" ┌─[root@yyc]─[~] └──╼ #dmesg | grep -i eth e1000 0000:02:01.0: eth0: (PCI:66MHz:32-bit) 00:0c:29:61:e8:7b e1000 0000:02:01.0: eth0: Intel(R) PRO/1000 Network Connection e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None 8021q: adding VLAN 0 to HW filter on device eth0 eth0: no IPv6 routers present ┌─[root@yyc]─[~] └──╼ #ethtool -i eth0 driver: e1000 version: 7.3.21-k8-NAPI firmware-version: bus-info: 0000:02:01.0 supports-statistics: yes supports-test: yes supports-eeprom-access: yes supports-register-dump: yes supports-priv-flags: no 网络配置命令 ifconfig ifconfig [interface] ifconfig -a ifconfig IFACE [up|down] ifconfig interface [aftype] options | address ... ifconfig IFACE IP/netmask [up] ifconfig IFACE IP netmask NETMASK 注意:立即生效 启用混杂模式:[-]promisc route 路由管理命令 查看:route -n 添加:route add route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If] 目标:192.168.1.3 网关:172.16.0.1 route add -host 192.168.1.3 gw 172.16.0.1 dev eth0 目标:192.168.0.0 网关:172.16.0.1 route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0 route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0 netstat 显示网络连接: netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [-- numeric|-n] [--extend|-e[--extend|-e]] [--program|-p] -t: tcp协议相关 -u: udp协议相关 -w: raw socket相关 -l: 处于监听状态 -a: 所有状态 -n: 以数字显示IP和端口; -e:扩展格式 -p: 显示相关进程及PID 显示接口统计数据: netstat -i netstat –I=IFACE ifconfig -s eth0 ip命令 ip addr { add | del } IFADDR dev STRING [label LABEL]:添加地址时指明网卡别名 [scope {global|link|host}]:指明作用域 global: 全局可用 link: 仅链接可用 host: 本机可用 [broadcast ADDRESS]:指明广播地址 ip address show - look at protocol addresses [dev DEVICE] [label PATTERN] [primary and secondary] ip address flush - 使用格式同show 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 label eth0:0 ip route - routing table management 添加路由:ip route add ip route add TARGET via GW dev IFACE src SOURCE_IP TARGET: 主机路由:IP 网络路由:NETWORK/MASK ip route add 192.168.0.0/24 via 172.16.0.1 ip route add 192.168.1.13 via 172.16.0.1 添加网关:ip route add default via GW dev IFACE ip route add default via 172.16.0.1 删除路由:ip route delete ip route del TARGET 显示路由:ip route show|list 清空路由表:ip route flush [dev IFACE] [via PREFIX] ip route flush dev eth0 ss命令 格式:ss [OPTION]... [FILTER] netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取socket信息。 选项: -t: tcp协议相关 -u: udp协议相关 -w: 裸套接字相关 -x:unix sock相关 -l: listen状态的连接 -a: 所有 -n: 数字格式 -p: 相关的程序及PID -e: 扩展的信息 -m:内存用量 -o:计时器信息 扩展, ss -o state established '( dport = :ssh or sport = :ssh )' 显示所有已建立的ssh连接 ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接 网络接口配置-bonding Bonding 将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP 地址是不可以的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址 Bonding工作模式 Mode 0 (balance-rr) 轮转(Round-robin)策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡 和容错的能力 Mode 1 (active-backup) 活动-备份(主备)策略:只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave。 为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见 Mode 3 (broadcast) 广播策略:在所有的slave接口上传送所有的报文,提供容错能力active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。如: Cisco 交换机需要在模式 0、2 和 3 中使用 EtherChannel,但在模式4中需要 LACP和EtherChannel 创建bonding设备的配置文件 /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 BOOTPROTO=none BONDING_OPTS= “miimon=100 mode=0” /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none MASTER=bond0 SLAVE=yes USERCTL=no 查看bond0状态:/proc/net/bonding/bond0 miimon 是用来进行链路监测的。如果miimon=100,那么系统每100ms 监测一次链路连接状态,如果有一 条线路不通就转入另一条线路 删除bond0 ifconfig bond0 down rmmod bonding centos7更改网卡名 (1) 编辑/etc/default/grub配置文件 GRUB_CMDLINE_LINUX="rhgb quiet net.ifnames=0" 或:修改/boot/grub2/grub.cfg (2) 为grub2生成其配置文件 grub2-mkconfig -o /etc/grub2.cfg (3) 重启系统 更改主机名 centos6 /etc/sysconfig/netwrok centos7 /etc/host nmcli命令 地址配置工具:nmcli NeworkManager是管理和监控网络设置的守护进程设备即网络接口,连接是对网络接口的配置。一个 网络接口可有多个连接配置,但同时只有一个连接配置生效 显示所有包括不活动连接 nmcli con show 显示所有活动连接 nmcli con show --active 显示网络连接配置 nmcli con show "System eth0“ 显示设备状态 nmcli dev status 显示网络接口属性 nmcli dev show eth0 创建新连接default,IP自动通过dhcp获取 nmcli con add con-name default type Ethernet ifname eth0 删除连接 nmcli con del default 创建新连接static ,指定静态IP,不自动连接 nmcti con add con-name static ifname eth0 autoconnect no type Ethernet ipv4.addresses 172.25.X.10/24 ipv4.gateway 172.25.X.254 启用static连接配置 nmcli con up static 启用default连接配置 nmcli con up default 查看帮助 nmcli con add help 修改连接设置 nmcli con mod “static” connection.autoconnect no nmcli con mod “static” ipv4.dns 172.25.X.254 nmcli con mod “static” +ipv4.dns 8.8.8.8 nmcli con mod “static” -ipv4.dns 8.8.8.8 nmcli con mod “static” ipv4.addresses “172.25.X.10/24 172.25.X.254” nmcli con mod “static” +ipv4.addresses 10.10.10.10/16 DNS设置,存放在/etc/resolv.conf文件中 PEERDNS=no 表示当IP通过dhcp自动获取时,dns仍是手动设置,不自动获取。等价于下面命令: nmcli con mod “system eth0” ipv4.ignore-auto-dns yes 修改连接配置后,需要重新加载配置 nmcli con reload nmcli con down “system eth0” 可被自动激活 nmcli con up “system eth0” nmcli dev dis eth0 禁用网卡,访止被自动激活 图形工具 nm-connection-editor 字符工具 nmtui nmtui-connect nmtui-edit nmtui-hostname nmcli命令 nmcli实现bonding 添加bonding接口 nmcli con add type bond con-name mybond0 ifname mybond0 mode active-backup 添加从属接口 nmcli con add type bond-slave ifname ens7 master mybond0 nmcli con add type bond-slave ifname ens3 master mybond0 注:如无为从属接口提供连接名,则该名称是接口名称加类型构成 要启动绑定,则必须首先启动从属接口 nmcli con up bond-slave-eth0 nmcli con up bond-slave-eth1 启动绑定 nmcli con up mybond0 网络组:是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量 网络组不同于旧版中bonding技术,提供更好的性能和扩展性 网络组由内核驱动和teamd守护进程实现. 多种方式runner broadcast roundrobin activebackup loadbalance lacp (implements the 802.3ad Link Aggregation Control Protocol) 网络组Network Teaming 启动网络组接口不会自动启动网络组中的port接口 启动网络组接口中的port接口总会自动启动网络组接口 禁用网络组接口会自动禁用网络组中的port接口 没有port接口的网络组接口可以启动静态IP连接 启用DHCP连接时,没有port接口的网络组会等待port接口的加入 nmcli con add type team con-name CNAME ifname INAME [config JSON]CNAME 连接名, INAME 接口名 JSON 指定runner方式 格式:'{"runner": {"name": "METHOD"}}' METHOD 可以是broadcast, roundrobin,activebackup, loadbalance, lacp 创建网络组接口 nmcli con add type team-slave con-name CNAME ifname INAME master TEAM CNAME 连接名 INAME 网络接口名 TEAM 网络组接口名 连接名若不指定,默认为team-slave-IFACE nmcli dev dis INAME nmcli con up CNAME INAME 设备名 CNAME 网络组接口名或port接口 nmcli con add type team con-name team0 ifname team0 config‘{"runner": {"name": "loadbalance"}}' nmcli con mod team0 ipv4.addresses 192.168.1.100/24 nmcli con mod team0 ipv4.method manual nmcli con add con-name team0-eth1 type team-slave ifname eth1 master team0 nmcli con add con-name team0-eth2 type team-slave ifname eth2 master team0 nmcli con up team0 nmcli con up team0-eth1 nmcli con up team0-eth2 teamdctl team0 state; nmcli dev dis eth1 ip link nmcli con add type team con-name team0 ifname team0 config'{"runner": {"name": "activebackup"}}' nmcli con mod team0 ipv4.addresses '192.168.0.100/24' nmcli con mod team0 ipv4.method manual nmcli con add con-name team0-port1 type team-slave ifname eth1 master team0 nmcli con add con-name team0-port2 type team-slave ifname eth2 master team0 teamdctl team0 state 实验:创建网络组 ping -I team0 192.168.0.254 nmcli dev dis eno1 teamdctl team0 state nmcli con up team0-port1 nmcli dev dis eno2 teamdctl team0 state nmcli con up team0-port2 teamdctl team0 state /etc/sysconfig/network-scripts/ifcfg-team0 DEVICE=team0 DEVICETYPE=Team TEAM_CONFIG="{\"runner\": {\"name\": \"broadcast\"}}" BOOTPROTO=none IPADDR0=172.25.5.100 PREFIX0=24 NAME=team0 ONBOOT=yes /etc/sysconfig/network-scripts/ifcfg-team0-eth1 DEVICE=eth1 DEVICETYPE=TeamPort TEAM_MASTER=team0 NAME=team0-eth1 ONBOOT=yes /etc/sysconfig/network-scripts/ifcfg-team0-eth1 DEVICE=eth1 DEVICETYPE=TeamPort TEAM_MASTER=team0 NAME=team0-eth1 ONBOOT=yes 删除网络组 nmcli connection down team0 teamdctl team0 state nmcli connection show nmcli connectioni delete team0-eth0 nmcli connectioni delete team0-eth1 nmcli connection show 配置实现网桥 创建软件网桥 nmcli con add type bridge con-name br0 ifname br0 nmcli connection modify br0 ipv4.addresses 192.168.74.100/24 ipv4.method manuall nmcli con add type bridge-slave con-name br0-port0 ifname eth0 master br0 查看网桥 cat /etc/sysconfig/network-scripts/ifcfg-br0 cat /etc/sysconfig/network-scripts/ifcfg-br0-port0 brctl show 删除网桥 brctl delbr br0 删除网桥中网卡 brctl delif eth0 注意:NetworkManager只支持以太网接口接口连接到网桥,不支持聚合接口 网络客户端工具 ftp,lftp:子命令:get、mget、ls、help lftp [-p port] [-u user[,password]] SERVER lftpget URL wget [option]... [URL]... -q: 静默模式 -c: 断点续传 -P:保存在指定目录 -O: 保存为指定的文件名 --limit-rate=: 指定传输速率,单位K,M等 links URL --dump --source
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97366