Linux Network学习笔记(TCP/IP,HTTP,路由,tcpdump,网卡配置)

1 网络发展概述

第一代:远程终端连接
20世纪60年代早期

面向终端的计算机网络:主机是网络的中心和控制者,终端(键盘和显示器)分布在各处并与主机相连,用户通过本地的终端使用远程的主机。
只提供终端和主机之间的通信,子网之间无法通信。

第二代:计算机网络阶段(局域网
20世纪60年代中期

多个主机互联,实现计算机和计算机之间的通信。
包括:通信子网、用户资源子网。
终端用户可以访问本地主机和通信子网上所有主机的软硬件资源。
电路交换和分组交换。

第三代:计算机网络互联阶段(广域网、Internet)
1981年国际标准化组织(ISO)制订:开放体系互联基本参考模型(OSI/RM),实现不同厂家生产的计算机之间实现互连。

TCP/IP协议的诞生。

第四代:信息高速公路(高速,多业务,大数据量)

宽带综合业务数字网:信息高速公路
ATM技术、ISDN、千兆以太网
交互性:网上电视点播、电视会议、可视电话、网上购物、网上银行、网络图书馆等高速、可视化。

网络设备发展

  • 如何实现多台主机两两同通信-拉一根总线

在这里插入图片描述

  • 如何解决总线传输的冲突
    csma/cd协议载波侦听多路访问冲突检测(没完全解决)
  • 随着网络规模增大,冲突依然存在
    MAC地址:唯一标示每一台地址
  • 如何保证正确的对象接收数据
    包头(TCP/UDP/IP/MAC 包头结构小结)
  • 如何获取对方MAC地址
    在这里插入图片描述

广播地址
在这里插入图片描述

  • 如何解决网络接入问题
    给每哥对象做标准接口:集线器(已淘汰,冲突问题仍然无法避免)
    在这里插入图片描述
  • 如何进一步解决连接冲突问题(减小冲突域)
    网桥:
    在这里插入图片描述
  • 完全解决网络冲突
    交换机:每个电信号通过独立线路传输,同一个交换机构成同一个广播域
    在这里插入图片描述

2 网络基础

2.1 OSI 七层模型

ISO(International Standardization Organization) 国际标准化组织 在1987年制定了OSI七层参考模型
OSI(Open System Interconnection) 开放系统互联

应用层(Application layer)
应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程间通信和交互的规则,如HTTP,FTP等
表示层(Presentation layer):数据的表示、压缩和加密等 MP3、JPEG
会话层(Session Layer):允许不同机器上的用户之间建立会话关系

传输层(Transport Layer)
传输层的任务是负责向两台主机中进程之间的通信通用的数据传输服务。所谓“通用的”,是指并不针对某个特定的网络应用。
传输层主要使用以下两种协议:
• TCP:传输控制协议,提供面向连接的可靠的数据传输、适合传输大数据、速度慢
• UDP:用户数据报协议,提供非面向连接的不可靠的数据传输、传输小数据、速度快

网络层(Network Layer)
网络层负责为分组交换网上的不同主机提供通信服务。提供逻辑地址(IP地址)、选路、数据从源端到目的端的传输。
网络层的主要设备:路由器 router
网络层的主要协议:IP,ICMP,RIP,OSPF,BGP

数据链路层(Data Link Layer)
将上层数据封装成帧,用MAC地址访问媒介,错误的检测和修正
数据链路层主要设备:交换机 switch

物理层(Physical Layer)
提供设备之间的比特流传输 bit 0101001
物理层的主要设备:集线器(HUB)

在这里插入图片描述
osi 模型只是参考模型。
真正使用的是TCP/IP协议模型
在这里插入图片描述

2.2 IP

ipv4地址组成 : IP地址由4部分数字组成,每部分数字对应于8位二进制数字,各部分之间用小数点分开 这是点分2进制 如果换算为十进制我们称为点分十进制.每个ip地址由两部分组成网络地址(NetID)和主机地址(HostID). 网络地址表示其属于互联网中的哪一个网络,而主机地址则表示其属于该网络中的哪一台主机.

1.1 1.2

00000000 - 11111111
0 - 255

  1. ip地址的划分

ip地址划分为五类 为 A,B,C,D,E
A类地址:范围从0-127,0是保留的并且表示所有IP地址,而127也是保留的地址,并且是用于测试环回用的。因此A类地址的范围其实是从1-126之间。
  如:10.0.0.1,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。转换为2进制来说,一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 地址范围从0.0.0.1 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机(2的24次方的-2主机数目)。
以子网掩码来进行区别::255.0.0.0
127.0.0.0到127.255.255.255是保留地址,用做循环测试用的

B类地址:范围从128-191,如172.168.1.1,第一和第二段号码为网络号码,剩下的2段号码为本地计算机的号码。转换为2进制来说,一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。(2的16次方-2)
以子网掩码来进行区别:255.255.0.0
169.254.0.0到169.254.255.255是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器,这时你将会从169.254.0.0到169.254.255.255中临时获得一个IP地址。

C类地址:范围从192-223,如192.168.1.1,第一,第二,第三段号码为网络号码,剩下的最后一段号码为本地计算机的号码。转换为2进制来说,一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。(2的7次方-2)
以子网掩码来进行区别: 255.255.255.0

D类地址:范围从224-239,D类IP地址第一个字节以“1110”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
224.0.0.0-239.255.255.255 组播地址

E类地址:范围从240-254,以“11110”开始,为将来使用保留。 全零(“0.0.0.0”)地址对应于当前主机。全"1"的IP地址(“255.255.255.255”)是当前子网的广播地 址。
240.0.0.0-255.255.255.254 保留地址

  • 子网掩码
    就是为了区分ip地址的中的网络号和主机号的
    对于一台具体的主机,子网掩码用于判断要通信的对象跟自己是否在同一网络

  • 私有地址
    所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址
    在A类地址中,10.0.0.0到10.255.255.255是私有地址
    在B类地址中,172.16.0.0到172.31.255.255是私有地址。
    在C类地址中,192.168.0.0到192.168.255.255是私有地址。

2.3 vmare虚拟机NAT网络

在这里插入图片描述
在这里插入图片描述
宿主机: 虚拟化软件所安装的机器,通常是物理机
客户机: 虚拟机


vmware的桥接网络
相当于把虚拟机和物理机接在同一个交换机上

2.4 路由

路由概念
路由是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程

路由工作包含两个基本的动作
1.通过网络传输信息
2.确定最佳路径

路由的分类
通常情况下,指导 IP 转发的路由信息可以通过如下三种不同的途径来获得:
1)静态路由 由系统管理员手动配置的到目标网络的唯一路径,当网络结构发生变化时也必须由系统管理员手动的修改配置。但合理的使用静态路由可以改进网络的性能,为重要的应用保存带宽。
2)缺省路由 由系统管理员手动配置的一种特殊路由,可以将所有找不到匹配路由的报文转发到指定的缺省网关。
3)动态路由 由动态路由协议从其他路由器学到的到达目标网络的发送路径,可以根据网络结构的变化动态地更新路由信息

路由表
所谓路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径

路由表中若有相同条目
*掩码长度一样,路由表中谁在上面用谁
*掩码长度不一样,哪个掩码长用谁
*内核自动维护

查看路由信息

 # route -n

添加静态路由

# route  add   -net 192.168.10.0  netmask 255.255.255.0   gw 192.168.20.12
             添加   目标网络                      掩码                               下一跳

添加网关

# route add default gw 192.168.10.12

开启路由转发
临时开启

# echo 1 > /proc/sys/net/ipv4/ip_forward 

永久开启

# vim /etc/sysctl.conf
    net.ipv4.ip_forward = 1
# sysctl -p           #重新加载配置文件

永久添加静态路由

el6:
    # vim /etc/sysconfig/static-routes
        any  net 192.168.100.0/24  gw 192.168.10.12
el7:    
    # vim /etc/sysconfig/network-scripts/route-interface  #interface:网卡名称
    192.168.10.0/24 via 192.168.20.1 

3 网络协议

ARP: 地址解析协议, 将IP地址解析为物理地址

DHCP: 动态主机配置协议, 动态给主机分配IP, 网关, DNS等
服务器: UDP/67
客户端: UDP/68

实验: 配置DHCP服务器

  1. 准备工作
    停止NAT网桥上自带的DHCP服务
    在这里插入图片描述
  2. 服务器配置 (NAT): DHCP服务器一定要静态IP
    服务器安装软件并配置:
[root@host1 ~]# yum install dhcp -y
[root@host1 ~]# vim /etc/dhcp/dhcpd.conf
    subnet 192.168.10.0 netmask 255.255.255.0 {           #子网为服务器所在的子网
      range 192.168.10.101 192.168.10.200;                      #可分配的IP池
      option domain-name-servers 114.114.114.114;       #分配DNS
      option routers 192.168.10.2;                                        #分配网关
    }

    host boss {                                                                        #给某个网卡分配固定IP
      hardware ethernet 00:0c:29:4c:8f:82;
      fixed-address 192.168.10.88;
    }
  1. 启动服务:
[root@host1 ~]# systemctl start dhcpd
  1. 查看服务:
[root@host1 ~]# netstat -uanp |grep dhcp
udp        0      0 0.0.0.0:67              0.0.0.0:*                           1516/dhcpd
  1. 客户端验证
    客户端采用NAT连接, 将网卡配置文件中的BOOTPROTO改为dhcp, 重启网卡, 查看IP情况

3.1 TCP

TCP(Transmission Control Protocol)传输控制协议:提供面向连接的可靠的数据传输、适合传输大数据、速度慢

3.1.1 Tcp三次握手

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。
在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。
三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。
在这里插入图片描述

  1. 第一次握手:建立连接。客户端发送连接请求报文,将SYN位置为1,Seq (Sequence Number)为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
  2. 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Ack (Acknowledgment Number)为x+1(Seq+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Seq为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
  3. 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Ack设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

完成了三次握手,客户端和服务器端就可以开始传送数据。

3.1.2 Tcp四次挥手

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
在这里插入图片描述

客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

  1. 第一次挥手:主机1(可以使客户端,也可以是服务器端),设置Seq和Ack,向主机2发送一个FIN报文段, 主机1进入FIN_WAIT_1状态
    主机1告诉主机2: 我没有数据要发送了,请求关闭连接
  2. 第二次挥手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Ackr为Seq加1;主机1进入FIN_WAIT_2状态;
    主机2回复主机1,我收到你的关闭请求了
  3. 第三次挥手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;
    主机2告诉主机1: 我也没有数据要发送了,请求关闭连接
  4. 第四次挥手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;
    主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明主机2已正常关闭,那好,主机1也可以关闭连接了。

各个状态的意义

LISTEN - 侦听来自远方TCP端口的连接请求;
SYN-SENT -在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;
FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2 - 从远程TCP等待连接中断请求;
CLOSE-WAIT - 等待从本地用户发来的连接中断请求;
CLOSING -等待远程TCP对连接中断的确认;
LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认;
TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认;
CLOSED - 没有任何连接状态

3.2 HTTP

超文本传输协议(Hypertext transfer protocol),详细规定了浏览器和万维网(World Wide Web)服务器之间互相通信的规则,是通过因特网传送万维网文档的数据传送协议.它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等.

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.浏览器作为HTTP客户端通过URL向HTTP服务端(即WEB服务器)发送请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS.

  • HTTP的特点
    无连接 - 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    媒体独立 - 这意味着,只要客户端和服务器知道如何处理,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
    无状态 - 无状态是对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,它必须重传,这种情况可能会导致传送的数据量增大。

另一方面,服务器如果不需要先前信息时, 它的应答会较快,效率较高。

  • HTTP请求报文(Request)
    HTTP的请求由请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,如下图:
    在这里插入图片描述

  • HTTP响应报文(Response)
    HTTP响应也由4部分组成,分别是:状态行、响应头、空行和响应体,如下图所示:
    在这里插入图片描述

  • HTTP状态码
    HTTP协议的状态码由3位数字组成,第一个数字定义了响应的类别,共有5中类别:
    1xx: 指示信息–表示请求已接收,继续处理 hold on
    2xx: 成功–表示请求已被成功接收、理解、接受 here you go
    3xx: 重定向–要完成请求必须进行更进一步的操作 go away
    4xx: 客户端错误–请求有语法错误或请求无法实现 you fucked up
    5xx: 服务器端错误–服务器在处理请求的过程中发生了错误 I fucked up

常见状态码:

  200: 请求成功
  301: 永久重定向。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
  302: 临时重定向。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
  403: 服务器理解请求客户端的请求,但是拒绝执行此请求.可能是没有权限访问或是人为设置不允许访问.
  404: 需要访问的文件不存在
  500: 服务端代码异常,代码语法错误,连接不上数据库等
  502: 代理情况下会出现,一般是后端服务器出现问题,PHP-FPM挂掉
  504: 后端服务器响应超时.PHP-FPM的执行时间大于超时时间就会出现504
  • HTTP请求方法
    HTTP/1.0定义了三种请求方法:GET、POST 和 HEAD
    HTTP/1.1新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE 和 CONNECT。

各个请求方法的具体功能如下:

 GET - 请求指定的页面信息,并返回实体主体。
  HEAD - 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
  POST - 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
  PUT - 从客户端向服务器传送的数据取代指定的文档的内容。
  DELETE - 请求服务器删除指定的页面。
  CONNECT - HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  OPTIONS - 允许客户端查看服务器的性能。
  TRACE - 回显服务器收到的请求,主要用于测试或诊断。

实际应用过程中,GET和POST使用的比较多
GET请求会把请求的参数拼接在URL后面,以?分隔,多个参数之间用&连接;如果是英文或数字,原样发送,如果是空格或中文,则用Base64编码
POST请求会把提交的数据放在请求体中,不会在URL中显示出来

  • URL
    URL(Universal Resource Locator): 统一资源定位符. 用于定位资源.

例如: http://www.qf.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

一个完整的URL由以下几部分组成:

  协议部分:URL的协议部分为"http:",这代表网页使用的是HTTP协议."//"为分隔符.
  
  域名部分:URL的域名部分为"www.qf.com". 这部分也可以是一个IP地址.
  
  端口部分: 跟在域名后面的是端口,域名和端口之间使用":"作为分隔符.如果省略端口部分,将采用默认端口  
  
  虚拟目录部分: 从域名后的第一个"/"开始到最后一个"/"为止,是虚拟目录部分.本例为/news/
  
  文件名部分:从域名后的最后一个"/"开始到"?"为止.如果没有"?",则是从域名后的最后一个"/"开始到"#"为止;如果没有"?""#",那么从域名后的最后一个"/"开始到结束,都是文件名部分。本例为"index.asp"
  
  参数部分:从"?"开始到"#"之间的部分,又称搜索部分、查询部分.多个参数,"&"分隔.本例中的参数部分为"boardID=5&ID=24618&page=1".
  
  锚部分:从"#"开始到最后,都是锚部分.本例中的锚部分是"name".

4 网络分析工具

4.1 wireshark

4.2 tcpdump

tcpdump: linux命令行抓包工具

语法: tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] [ -s snaplen ] [ -w file ] [ expression ]
常用选项

-c:指定要抓取的包数量
-i :指定tcpdump需要监听的接口。可使用'any'关键字表示所有网络接口
-n:对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析
-nn:除了-n的作用外,还把端口显示为数值,否则显示端口服务名
-Q:指定要抓取的包是流入还是流出的包。可以给定的值为"in""out""inout",默认为"inout"
-D:列出可用于抓包的接口。将会列出接口的数值编号和接口名,它们都可以用于"-i"-F:从文件中读取抓包的表达式。若使用该选项,则命令行中给定的其他表达式都将失效
-w:将抓包数据保存到文件中
-r:从给定的数据包文件中读取数据。使用"-"表示从标准输入中读取
-XX:输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细
-v:当分析和打印的时候,产生详细的输出
-vv:产生比-v更详细的输出
-vvv:产生比-vv更详细的输出

表达式
表达式用于筛选数据包,如果没有给定表达式,所有的数据包都将输出。在表达式中出现的shell元字符建议使用单引号包围。
tcpdump的表达式由一个或多个"单元"组成,每个单元一般包含ID的修饰符和一个ID(数字或名称)。有三种修饰符:

(1).type:指定ID的类型。
可以给定的值有host/net/port/portrange。例如’host foo’,‘net 172.16’,‘port 80’,‘portrange 6000-6008’。默认的type为host。

(2).dir:指定ID的方向。
可以给定的值包括src/dst / src or dst / src and dst,默认为src or dst。
例如,"src foo"表示源主机为foo的数据包,"dst net 128.3"表示目标网络为128.3的数据包,"src or dst port 22"表示源或目的端口为22的数据包。

(3).proto:通过给定协议限定匹配的数据包类型。
常用的协议有tcp/udp/arp/ip/ether/icmp等,若未给定协议类型,则匹配所有可能的类型。例如"tcp port 21",“udp portrange 7000-7009”。
表达式单元之间可以使用操作符" and / && / or / || / not / ! "进行连接

示例
1).抓取流经网卡ens33的所有的数据包

[root@test1 ~]# tcpdump -i ens33

2).抓取指定主机的数据包,例如所有进入或离开desk.qf.com的数据包

[root@test1 ~]# tcpdump host desk.qf.com

3).抓取host1与host2之间通信的数据包

[root@test1 ~]# tcpdump host host1 and host2

4).抓取10个由host1发送出去的包,并保存到/tmp/host1-send.cap文件中

[root@test1 ~]# tcpdump -c 10 src host host1 -w /tmp/host1-send.cap

5).抓取目标端口为80的包

[root@test1 ~]# tcpdump tcp dst port 80

6).抓取3个来源为192.168.10.32的ping包

[root@test1 ~]# tcpdump -c3 -nnvvv icmp and src 192.168.10.32           
#注意icmp不支持host这个type,故不能写成 icmp src 192.168.10.32

5 网卡bond

网卡(接口)绑定是将多块 网卡 逻辑地连接到一起从而允许故障转移或者提高吞吐率的方法。
Linux 绑定驱动程序提供了一种将多个网卡聚合到一个逻辑的绑定接口的方法。

bond网卡的支持的工作模式:
0 - round robin(轮循模式)
特点:
(1)所有链路处于负载均衡状态,轮询方式往每条链路发送报文,基于per packet方式发送。
(2)这模式的特点增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。

1 - active-backup(主备模式)
特点:一个链路处于主状态 ,一个处于从状态,所有流量都在主链路上处理,从不会有任何流量。当主端口down掉时,从端口接手主状态。

-----------------以下了解即可----------------------

2 - load balancing (xor)
特点:该模式将限定流量,以保证到达特定对端的流量总是从同一个接口上发出。既然目的地是通过MAC地址来决定的,因此该模式在“本地”网络配置下可以工作得很好。如果所有流量是通过单个路由器(比如 “网关”型网络配置,只有一个网关时,源和目标mac都固定了,那么这个算法算出的线路就一直是同一条,那么这种模式就没有多少意义了。),那该模式就不是最好的选择。和balance-rr一样,交换机端口需要能配置为“port channel”。这模式是通过源和目标mac做hash因子来做xor算法来选路的。

3 - fault-tolerance (broadcast)
特点:这种模式的特点是一个报文会复制两份往bond下的两个接口分别发送出去,当有对端交换机失效,我们感觉不到任何downtime,但此法过于浪费资源;不过这种模式有很好的容错机制。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。

4 - lacp
特点:802.3ad模式是IEEE标准,因此所有实现了802.3ad的对端都可以很好的互操作。802.3ad 协议包括聚合的自动配置,因此只需要很少的对交换机的手动配置(要指出的是,只有某些设备才能使用802.3ad)。802.3ad标准也要求帧按顺序(一定程度上)传递,因此通常单个连接不会看到包的乱序。802.3ad也有些缺点:标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和除了balance-rr模式外的其它bonding负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。 此外,linux bonding的802.3ad实现通过对端来分发流量(通过MAC地址的XOR值),因此在“网关”型配置下,所有外出(Outgoing)流量将使用同一个设备。进入(Incoming)的流量也可能在同一个设备上终止,这依赖于对端802.3ad实现里的均衡策略。在“本地”型配置下,路两将通过 bond里的设备进行分发。

5 - transmit load balancing
特点:balance-tlb模式通过对端均衡外出(outgoing)流量。既然它是根据MAC地址进行均衡,在“网关”型配置(如上文所述)下,该模式会通过单个设备来发送所有流量,然而,在“本地”型网络配置下,该模式以相对智能的方式(不是balance-xor或802.3ad模式里提及的XOR方式)来均衡多个本地网络对端,因此那些数字不幸的MAC地址(比如XOR得到同样值)不会聚集到同一个接口上。 不像802.3ad,该模式的接口可以有不同的速率,而且不需要特别的交换机配置。不利的一面在于,该模式下所有进入的(incoming)流量会到达同一个接口;该模式要求slave接口的网络设备驱动有某种ethtool支持;而且ARP监控不可用。

6 - adaptive load balancing。
bond6:adaptive load balancing特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。所有端口都会收到对端的arp请求报文,回复arp回时,bond驱动模块会截获所发的arp回复报文,根据算法算到相应端口,这时会把arp回复报文的源mac,send源mac都改成相应端口mac。从抓包情况分析回复报文是第一个从端口1发,第二个从端口2发。以此类推。 (还有一个点:每个端口除发送本端口回复的报文,也同样会发送其他端口回复的报文,mac还是其他端口的mac)这样来自服务器端的接收流量也会被均衡。 当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave(这个算法和上面一样,比如算到1口,就给发送arp请求,1回复时mac用1的mac)。使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个问题通过给所有的对端发送更新(ARP应答)来解决,往所有端口发送应答,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。当新的slave加入到bond中时,或者某个未激活的slave重新激活时,接收流量也要重新分布。接收的负载被顺序地分布(round robin)在bond中最高速的slave上 当某个链路被重新接上,或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配,通过使用指定的MAC地址给每个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答不会被switch(交换机)阻截。 必要条件: 条件1:ethtool支持获取每个slave的速率; 条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管。

以上值Centos6的bond支持的模式,而在Centos7以后就开始选择team,即链路聚合的方式进行双网卡的绑定。

5.1 实验:配置网卡bond

(待完成)

6 扩展:vlan

虚拟局域网VLAN基本配置
【实验名称】单交换机VLAN的配置
【实验目的】掌握基于端口的VLAN的配置与删除方法
【实验设备】S2960交换机(1台)、计算机(2台)、直连线(2根)、配置电缆(1根)
【实验拓扑】实验拓扑如下图所示:

在这里插入图片描述

【实现功能】通过划分Port VLAN实现本交换机端口隔离
【技术原理】
VLAN(Virtual Local Area Network)的中文名为"虚拟局域网"。
虚拟局域网(VLAN)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的通信就好像它们在同一个网段中一样,由此得名虚拟局域网。VLAN是一种比较新的技术,工作在OSI参考模型的第2层和第3层,一个VLAN就是一个广播域,VLAN之间的通信是通过第3层的路由器来完成的。
与传统的局域网技术相比较,VLAN技术更加灵活,它具有以下优点: 网络设备的移动、添加和修改的管理开销减少;可以控制广播活动;可提高网络的安全性。
在计算机网络中,一个二层网络可以被划分为多个不同的广播域,一个广播域对应了一个特定的用户组,默认情况下这些不同的广播域是相互隔离的。不同的广播域之间想要通信,需要通过一个或多个路由器。这样的一个广播域就称为VLAN。
在这里插入图片描述

VLAN的实现方式有:静态VLAN和动态VLAN。静态VLAN是明确指定交换机各端口所属VLAN的方法,也称为基于端口的VLAN(Port VLAN),属于同一个VLAN的端口,可来自一台交换机,也可来自多台交换机,即可以跨交换机设置VLAN。动态VLAN是根据每个端口所连的计算机动态设置端口所属VLAN的设定方法,通常包括基于MAC地址的VLAN、基于子网的VLAN和基于用户的VLAN。
一个VLAN是以VLAN ID来标识的,支持的VLAN遵循IEEE 802.1q标准,最多支持250个VLAN(VLAN1~VLAN4094)。其中VLAN1是不可删除的默认VLAN。

【实验步骤】
(1)连线。
按照图2-7连线。
(2)配置IP地址和子网掩码,测试能互相ping通。
(3)配置VLAN。
1)在交换机上创建VLAN10,并将f0/1-2端口划分到VLAN10中。
switch# configure terminal !进入全局配置模式
switch(config)# vlan 10 !创建VLAN10
switch(config-vlan)# name student !将VLAN10命名为student(名字可为任意),此操作可略
switch(config-vlan)#exit !返回到全局配置模式
switch(config)#interface range fastethernet 0/1-2 !进入接口配置模式
switch(config-if)#switchport mode access !将f0/1-2端口模式设为access
switch(config-if)#switchport access vlan 10 !将f0/1-2端口划分到VLAN10
switch(config-if)#end
2)检查已创建VLAN10,并将f0/1-2端口划分到VLAN10中。
switch# show vlan id 10 !显示VLAN10
VLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
10 student active Fa0/1 Fa0/2
3)用同样方法在交换机上创建VLAN20,并将f0/3-4端口划分到VLAN20中。
(4)测试。相同VLAN的主机可以ping 通,不同VLAN的主机不能ping 通。
(5)保存配置。
switch#copy running-config startup config !将当前配置保存到配置文件中
或者
switch#write memory
注意:如果把一个接口分配给一个不存在的VLAN,那么这个VLAN将自动被创建。假设VLAN2不存在,则以下命令创建VLAN2的同时将f0/5口加入VLAN2中:
switchA(config)#interface fastEthernet 0/5
switchA(config-if)#switchport access vlan 2

VLAN的删除
删除VLAN分为两步:①将该VLAN中的端口都移到默认的VLAN1中;②用no vlan vlanid命令将其删除。
(1)删除VLAN10。
switch#configure terminal
switch(config)#interface range fastEthernet 0/1-2
switch(config-if)# switchport access vlan 1 !将VLAN内的端口全部移到VLAN1中
switch(config-if)#exit
switch(config)#no vlan 10 !删除VLAN10
(2)用同样的操作将VLAN20删除。
检查是否已将VLAN10、VLAN20删除。
switch#show vlan !查看所有VLAN
VLAN Name Status Ports


1 default active Fa0/1 ,Fa0/2 ,Fa0/3
Fa0/4 ,Fa0/5 ,Fa0/6
Fa0/7 ,Fa0/8 ,Fa0/9
Fa0/10,Fa0/11,Fa0/12
Fa0/13,Fa0/14,Fa0/15
Fa0/16,Fa0/17,Fa0/18
Fa0/19,Fa0/20,Fa0/21
Fa0/22,Fa0/23,Fa0/24
由以上查看结果可知,当前所有接口都属于默认VLAN1,已将VLAN10和VLAN20删除。
注意:不能删除默认的VLAN1。


Centos7 修改网卡名称

  1. 设置系统的环境变量,设置成不自动命名
# vim /etc/default/grub

往 GRUB_COMLINE_LINUX 里面加上“net.ifnames=0”

  1. 重新生成 grub 文件
# grub2-mkconfig -o /etc/grub2.cfg

如果希望网卡名称和RHEL6一样为 eth* ,直接看第 3 步


如果希望自己命名网卡,还需要以下步骤:
创建 /etc/udev/rules.d/70-persistent-net.rules 文件(我是从 centos6 中拷贝过来的),并修改以下内容:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:e4:f8:ee", ATTR{type}=="1", KERNEL=="eth*", NAME="enp3s0"

其中:“ATTR{address} ==” 后面是网卡的MAC 地址, “NAME” 后面就是我们自定义的名称了


  1. 修改网卡文件名称,网卡名称(DEVICE, NAME)

  2. 重启

Reference

1.课堂笔记

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值