阅读视图

发现新文章,点击刷新页面。

iStoreOS 路由系统介绍与安装

最近托管在群晖的 GitLab 非常不稳定,想必是群晖的性能不够用了。想着软路由的性能有很多的冗余,就想移植到软路由。结果运行的爱快怎么都不成,看到前段时间宋童靴的推荐,决定更换到 iStoreOS!

系统介绍

iStoreOS 源于 OpenWRT,重点是做了很多很多的交互简化。iStoreOS 入门极客版本 UI 是默认 UI,目标是提供给懂点技术的入门极客爱好者,或者偷懒极客老手,核心特性:

  1. 首页提供网络向导、磁盘向导、Docker 向导等众多向导,不管新手还是老手,都能快速配置自己想要东西;
  2. 修复众多 OpenWRT 不人性的小问题,如 Samba 设置独立用户名密码很麻烦、磁盘挂载;
  3. 更多首页工具帮手,比如在线升级、各种错误检测、网口图形化配置等;
  4. 其它很多常用功能,如 DDNS 配置、Docker 配置等。

iStoreOS 还提供软件中心,尽可能解决插件之间的依赖关系,可让大家自由自在安装插件。手动安装离线包也是支持的。除此之外,为了方便大家折腾不出问题,避免掉坑,还做了很多防坑操作如:

  1. 救援模式,即是固件完全刷坏,也可以进入救援模式救回来;
  2. 沙箱模式,通过 U 盘进入沙箱模式,后续软件安装更新都在沙箱进行。不管如何安装插件搞坏系统,拔掉 U 盘就会回到上个状态。沙箱模式本身也是系统扩容最简单的方法。

系统截图

iStoreOS 的首页截图:

iStoreOS 的软件中心截图:

准备安装

  1. 一个 U 盘;

  2. 一个可连接软路由的显示器;

  3. 一个键盘;

  4. 一台 Windows 系统的电脑。

系统安装

从官网中下载对应版本固件。请注意看中间日期,如 xxx20221123xx-xxx.img.gz,建议下载最新版本。下载完成之后不要解压。电脑上用 Rufus 做 USB 启动盘。电脑插入 U 盘,选择下载好的固件,把固件写入到 U 盘:

选从 U 盘启动,一般按 F11,选择接入 U 盘,就可以启动了。如找不到 U 盘,那么可能是 U 盘不兼容,需换一个 U 盘。登录 U 盘系统,登录成功之后,输入:

1
quickstart

选择 Install X86 一直按确定:

用 Show Interfaces 查看网线插入到了哪个网口,以及查看当前 LAN 口的 IP。系统写入完成,拔掉外接设备,通电启动。使用如下信息进入后台管理:

1
2
3
4
5
6
# 默认地址
http://192.168.100.1
# 默认用户
root
# 默认密码
password

NAT 的级别是指什么

前段时间写了篇关于内网穿透的文章,突然想到还有个关于 NAT 的知识点,特写此文与大家伙分享。水文一篇,如有错误,欢迎评论!

什么是 NAT

NAT 是英文 Network Address Translation 的简写,中文意为网络地址转换。当在专用网内部的一些主机本来已经分配到了本地 IP 地址即仅在本专用网内使用的专用地址,但又想和因特网上的主机通信并不需要加密时,可使用 NAT 方法。

这种方法需要在专用网私网 IP 连接到因特网公网 IP 的路由器上安装 NAT 软件。装有 NAT 软件的路由叫做 NAT 路由器,它至少有一个有效外部全球 IP 地址公网 IP 地址。这样,所有使用本地地址私网 IP 地址的主机和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和因特网连接。

另外,这种通过使用少量的全球 IP 地址公网 IP 地址代表较多的私有 IP 地址的方式,将有助于减缓可用的 IP 地址空间枯竭。在 RFC 2663 中有对 NAT 说明。

之前写过一篇《思科网络地址转换》感兴趣的可以看看。

NAT 的级别

A 级:部分宽带服务商会为用户提供公网 IP,将光猫设置为桥接模式,再通过路由器拨号上网,并将指定设备设置为 DMZ 映射。或者使用光猫拨号上网,并将指定设备设置为 DMZ 映射「路由需为桥接模式」此时该设备处于 NAT A 等级;

B 级:部分宽带服务商会为用户提供公网 IP,将光猫设置为拨号上网,并将路由器设置 DMZ 映射,且在路由指定设备为 DMZ 映射,此时该设备处于 NAT B 等级;

C 级:部分宽带服务商为用户提供城域网 IP,将光猫设置为桥接模式,再通过路由器拨号上网,并将指定设备设置为 DMZ 映射。或者使用光猫拨号上网,并将指定设备设置为 DMZ 映射「路由需为桥接模式」此时该设备处于 NAT C 等级;

D 级:部分宽带服务商为用户提供城域网 IP,将光猫设置为拨号上网,并将路由器设置 DMZ 映射,且在路由指定设备为 DMZ 映射,此时该设备处于 NAT D 等级。

补充内容

有小伙伴说看不懂,简单的解释呢,就是数据从公网到设备,经过了几个路由器。

上面的级别说明中,光猫和路由都是路由器,但开启桥接模式后,则相当于变成交换设备,故 A 级为一个路由,B 级两个路由,以此类推。

NAT 有很多转换形式,家用路由常用端口转换,即内网设备 IP 转为外网随机端口,此种转换形式需要内网设备产生数据才可生成转换列表,故效率低且外网不可直接访问到内网。所以有了 DMZ 这类的转换模式。这种模式直接将公网地址转换为内网地址,公网地址所收到的请求,都会转至指定内网设备处理,这样内外网可相互通信。

城域网相当于一个大局域网,城域网与广域网的通信节点,相当于一个路由器,所以城域网的用户默认 NAT 等级比较低。

写在最后

虽然 IPv6 已推出很长时间,但 IPv4 仍是主流。随着 IPv4 的资源耗尽,联网设备越来越多,部分地区的宽带运营商已经不再提供公网地址,改为城域网 IP。

虽说此种变更不会影响我们上网速率,但对于一些较特殊需求场景,例如:网络监控、异地组网、云盘存储,城域网 IP 都会影响使用体验。

好在宽带运营商处都会有 IP 存货,通过客服沟通,可申请到公网地址。部分宽带运营商如移动,也可付费获取公网地址。

再有不懂的可在评论区留言,杜老师磨碎了讲给你听!

杜老师说的内网穿透思路与实践

应 MrZeFr 小朋友的需求,更新一篇关于杜老师如何实现家用服务器实现内网穿透教程,其中包含思路与实践的方法,希望可以对有需求的小伙伴提供借鉴参考。

写在前面

杜老师说之前部署在凉心云 Webify 上,前段时间因为受到攻击,导致账户直接欠费 1200 多「账户余额 0.23 元」

杜老师选择弃号改为本地服务器部署。因本地家用网络限制,不开放 80 端口,所以需要通过内网穿透、端口映射等技术手段实现网站的呈现。

网络拓扑

下面简单看下网络拓扑:

穿透思路

  1. 用户访问杜老师说;

  2. 通过网络将请求转发给前端的 CDN;

  3. CDN 通过 DDNS 指定端口回源;

  4. DDNS 解析的公网地址经由光猫处理转发路由;

  5. 路由器查询端口映射表,将请求数据转发服务器;

  6. 服务器将处理好的数据发给路由;

  7. 路由器将数据交给光猫发出;

  8. CDN 获得回源数据在本地保留缓存;

  9. 并同时将数据经由网络发给用户;

  10. 用户收到数据在本地浏览器呈现网站内容。

穿透实践

首先查询当前宽带所在的服务商,比如杜老师是联通。

然后查询外网 IP 的种类,如果是城域网,则需要致电客服询问如何获取公网 IP「联通、电信一般说明按照监控,或是搭建本地存储即可;移动好像需要付费才行」

接下来是路由,为了有更好的映射效果,墙裂建议将光猫调整为桥接模式,使用路由拨号上网,然后通过路由中 DMZ 映射后端服务设备。

因为每次拨号都会分配不同地址,还需在服务端或路由器上开启 DDNS,这样 IP 发生变动时,可以自动调整域名解析。

知识拓展

上诉方法确切来说属于端口映射,将服务器端口映射到路由器,然后通过公网 IP 来调用;

如果是纯内网穿透「具体概念,可以参考《何为内网穿透》一文」需搭建外网映射服务器。

这里推荐下 NATAPP,使用优惠码 2DE16A7D 可九折购买相关的服务。

另外可以参考教程《natapp 树莓派开机启动脚本》一文,进行本地配置。

写在最后

  1. 因宽带商限制 80 端口的访问,如果搭建网站,还是需要 CDN 回源或内网穿透,不然只能手动指定非 80 端口「好像 443 也不行」

  2. DMZ 的端口映射模式,是将路由所有端口与服务器一一对应,这样会降低安全性,建议只做所需要的端口映射。

IPv4 子网查询表

子网划分是网络技术里非常基础且重要的内容,杜老师大学时所修的就是计算机网络技术,当时在学习子网划分时,不知道抓掉了多少头发,如果当时有下面的这些列表,杜老师的头发肯定更加浓密!

Subnets

子网列表如下:

CIDR子网掩码地址数量通配符式掩码
/32255.255.255.25510.0.0.0
/31255.255.255.25420.0.0.1
/30255.255.255.25240.0.0.3
/29255.255.255.24880.0.0.7
/28255.255.255.240160.0.0.15
/27255.255.255.224320.0.0.31
/26255.255.255.192640.0.0.63
/25255.255.255.1281280.0.0.127
/24255.255.255.02560.0.0.255
/23255.255.254.05120.0.1.255
/22255.255.252.01,0240.0.3.255
/21255.255.248.02,0480.0.7.255
/20255.255.240.04,0960.0.15.255
/19255.255.224.08,1920.0.31.255
/18255.255.192.016,3840.0.63.255
/17255.255.128.032,7680.0.127.255
/16255.255.0.065,5360.0.255.255
/15255.254.0.0131,0720.1.255.255
/14255.252.0.0262,1440.3.255.255
/13255.248.0.0524,2880.7.255.255
/12255.240.0.01,048,5760.15.255.255
/11255.224.0.02,097,1520.31.255.255
/10255.192.0.04,194,3040.63.255.255
/9255.128.0.08,388,6080.127.255.255
/8255.0.0.016,777,2160.255.255.255
/7254.0.0.033,554,4321.255.255.255
/6252.0.0.067,108,8643.255.255.255
/5248.0.0.0134,217,7287.255.255.255
/4240.0.0.0268,435,45615.255.255.255
/3224.0.0.0536,870,91231.255.255.255
/2192.0.0.01,073,741,82463.255.255.255
/1128.0.0.02,147,483,648127.255.255.255
/00.0.0.04,294,967,296255.255.255.255

IP Address Classes

IP 地址类列表如下:

ClassIP地址段
A0.0.0.0 - 127.255.255.255
B128.0.0.0 - 191.255.255.255
C192.0.0.0 - 223.255.255.255
D224.0.0.0 - 239.255.255.255
E240.0.0.0 - 255.255.255.255

保留地址

也称私有地址,列表如下:

网段类型网段区间
Class A10.0.0.0 - 10.255.255.255
Class B172.16.0.0 - 172.31.255.255
Class C192.168.0.0 - 192.168.255.255
localhost127.0.0.0 - 127.255.255.255
zeroconf169.254.0.0 - 169.254.255.255

十进制到二进制对应表

十进制的子网掩码对应的二进制十进制通配符对应的二进制
2551111 111100000 0000
2541111 111010000 0001
2521111 110030000 0011
2481111 100070000 0111
2401111 0000150000 1111
2241110 0000310001 1111
1921100 0000630011 1111
1281000 00001270111 1111
00000 00002551111 1111

HTTP 状态码参考

这个页面上是 HTTP 超文本传输协议的常见返回状态码列表。根据互联网的资料,尤其是相关 RFC 中的描述整理而成。杜老师会努力保证这个页面上的描述是准确无误的。如果对其中提到内容有任何问题,欢迎在页面下留言讨论!

1xx Informational

提示信息列表如下:

状态编码英文名称
100Continue
101Switching Protocols
102Processing
103Early Hints

2xx Successful

请求成功列表如下:

状态编码英文名称
200OK
201Created
202Accepted
203Non-Authoritative Information
204No Content
205Reset Content
206Partial Content
207Multi-Status
208Already Reported
226IM Used

3xx Redirection

跳转列表如下:

状态编码英文名称
300Multiple Choices
301Moved Permanently
302Found
303See Other
304Not Modified
305Use Proxy
306Switch Proxy
307Temporary Redirect
308Permanent Redirect

4xx Client Error

客户机端错误列表如下:

状态编码英文名称
400Bad Request
401Unauthorized
402Payment Required
403Forbidden
404Not Found
405Method Not Allowed
406Not Acceptable
407Proxy Authentication Required
408Request Timeout
410Gone
411Length Required
412Precondition Failed
413Payload Too Large
414URI Too Long
415Unsupported Media Type
416Range Not Satisfiable
417Expectation Failed
418I’m a teapot
421Misdirected Request
422Unprocessable Entity
423Locked
424Failed Dependency
425Too Early
426Upgrade Required
428Precondition Required
429Too Many Requests
431Request Header Fields Too Large
451Unavailable For Legal Reasons

5xx Server Error

服务器端错误列表如下:

状态编码英文名称
500 Internal Server Error
501Not Implemented
502Bad Gateway
503Service Unavailable
504Gateway Timeout
505HTTP Version Not Supported
506Variant Also Negotiates
507Insufficient Storage
508Loop Detected
510Not Extended
511Network Authentication Required

中英文对照词汇表

部分中英文对照表如下:

英文中文
Status CodeHTTP 状态码
Request请求
Response响应
Request Method请求方法
Request HeaderHTTP 请求头
Response HeaderHTTP 响应头
RFCRequest For Comment 的缩写,互联网技术标准的定义文档

何为内网穿透

前两天杜老师提到在家里搭建了一台 NAS 服务器,并做了内网穿透可实现随时访问。有小伙伴问我何为内网穿透,今天就跟大家简单说说!

技术介绍

内网穿透简单来说就是将内网外网通过外网服务器隧道打通,内网的数据让外网可以获取。如常用的办公室软件等,一般在办公室或着家里,通过宽带上网,这样办公软件只在本地的局域网之内才能访问,那么问题来了,如果是手机上,或公司外地的办公人员,如何访问到办公软件呢?这时就需要内网穿透工具了。

运行隧道之后,绑定一个专属域名、端口,办公软件就已经在公网上了,在外地的办公人员可在任何地方愉快的访问办公软件了!

能做什么

  1. 外网可访问上文举例的办公软件;

  2. 放在家里的树莓派,服务器等,需远程 SSH 管理,这样打通服务器的 22 端口即可远程通过 SSH 操作服务器了;

  3. 微信、支付宝等本地开发。现在微信、支付宝等应用,需服务器接收微信、支付宝发送的回调信息,而在本地开发程序的话,还得实时上传到服务器,以便支持微信、支付宝的回调信息,如果用了内网穿透软件,将回调地址设置成绑定域名,回调数据可立即传递回本地,这样很方便的在本地就可以实时调试程序,无须再不断上传服务器等繁琐且无意义的步骤;

  4. 一些企业的内部数据库,由于安全性等原因,不愿意放到云服务器上,可将数据库放到办公室本地,然后通过内网穿透隧道映射,这样既可保证安全,又保证公网可正常访问;

  5. 一些开发板做的监控等信息,每台设备运行一条隧道,可以方便的管理监控各个设备的运行情况;

  6. NAS 上运行内网穿透之后,随时随地在任何地方可以访问到 NAS 上应用。

思科策略路由

两点之间直线最短,故图中 R1 如果与 R4 通信,只通过 R2 路由是最快的。但今天我们任性下,让数据包经过 R3 路由器,再发往 R4。

实验拓扑

实验拓扑如图:

数据走向

我们需要数据包的发送走向:

  1. 192.168.1.2
  2. 192.168.2.2
  3. 192.168.3.2
  4. 192.168.4.2

我们需要数据包的接受走向:

  1. 192.168.3.1
  2. 192.168.1.1

操作命令

1
2
3
4
5
6
7
8
9
10
11
R4#configure terminal
R4(config)#interface lo0
R4(config-if)#ip address 2.2.2.2 255.255.255.0
R4(config-if)#exit
R4(config)#interface fastEthernet 0/0
R4(config-if)#ip address 192.168.4.2 255.255.255.0
R4(config-if)#no shutdown
R4(config-if)#exit
R4(config)#router rip
R4(config-router)#network 2.2.2.0
R4(config-router)#network 192.168.4.0

注意:首先我们需要配置基础网络环境,实现全网连通。「仅以 R4 路由器为例」配置如上。

连通测试

然后我们测试一下网络的连通性,通过 traceroute 命令可以看得出,路由先通过 192.168.1.2,然后是 192.168.4.2:

修改走向

1
2
3
4
5
6
7
R2(config)#access-list 100 permit ip host 1.1.1.1 host 2.2.2.2
R2(config)#route-map p1 permit 10
R2(config-route-map)#match ip address 100
R2(config-route-map)#set ip next-hop 192.168.2.2
R2(config-route-map)#exit
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip policy route-map p1

注意:接下来我们修改一下数据包走向。通过拓扑我们可以判断,数据包在 R2 路由器需要转变方向,发送给 R3,所以我们在 R2 路由进行如上配置。

测试走向

看下数据包的走向,可以看出,数据包发向 R2,但是路线并不是期望的那样,第三路线并不是 192.168.3.2:

变更走向

R3(config)#access-list 100 permit ip host 1.1.1.1 host 2.2.2.2
R3(config)#route-map p2 permit 10
R3(config-route-map)#match ip address 100
R3(config-route-map)#set ip next-hop 192.168.3.2
R3(config-route-map)#exit
R3(config)#interface fastEthernet 0/0
R3(config-if)#ip policy route-map p2

注意:我们需要在 R3 配置。

变更测试

再次查看一下数据包的走向:

端口网络地址转换

通过动态网络地址转换,我们可以实现多台终端同时访问外网,但是我们可以发现,随着终端数量增加,外网 IP 的需求也会增加。在现实中,一个外网的 IP 是相当昂贵的,也就是说,当使用动态网络地址转换时,成本很高。那如何低成本解决外网访问问题?我们学习一下端口网络地址转换。

实验拓扑

实验拓扑如图:

实验步骤

第一步当然是配置网络环境,因为我们使用的拓扑与《动态网络地址转换》相同,所以可以参考那篇教程方法配置。

接下来我们开始配置基于端口的网络地址转换,在 R1 路由上面:

1
2
3
4
5
6
7
R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255
R1(config)#ip nat inside source list 1 interface fastEthernet 1/0 overload
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip nat inside
R1(config-if)#exit
R1(config)#interface fastEthernet 1/0
R1(config-if)#ip nat outside

方案测试

我们再来测试一下:

同样我们在 R2 上增加一条 ACL,然后测试下 C2 可否 Ping 通:

最后我们查看一下 R1 路由器的 NAT 转换列表,可以看出多台终端使用一个外网 IP 转发出,但是后面的端口号不同:

动态网络地址转换

在之前的教程中我们学习了网络地址转换。我们可以发现,这种转换是一对一转换形式,如果内网中有多个终端如何解决?今天我们学习一下动态网络地址转换。

实验拓扑

实验拓扑如图:

基本配置

首先我们需要配置一下网络环境,如图配置好每台设备的网络地址,其中 R1 路由器的 f1/0 端口需要设置多 IP,还需在此端口设置默认路由:

1
2
3
4
5
6
7
8
9
10
11
R1#configure terminal
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface fastEthernet 1/0
R1(config-if)#ip address 1.1.1.2 255.255.255.0
R1(config-if)#ip address 1.1.1.3 255.255.255.0 secondary
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#ip route 0.0.0.0 0.0.0.0 fastEthernet 1/0

接下来我们设置 R2 路由,无需过多设置,简单配置各端口 IP 即可:

1
2
3
4
5
6
7
8
R2#configure terminal
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip address 1.1.1.1 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface fastEthernet 1/0
R2(config-if)#ip address 2.2.2.1 255.255.255.0
R2(config-if)#no shutdown

转换配置

1
2
3
4
5
6
7
8
R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255
R1(config)#ip nat pool cjk 1.1.1.2 1.1.1.3 netmask 255.255.255.0
R1(config)#ip nat inside source list 1 pool cjk
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip nat inside
R1(config-if)#exit
R1(config)#interface fastEthernet 1/0
R1(config-if)#ip nat outside

注意:我们开始在 R1 设置动态网络地址转换。

综合测试

最后测试一下:

C1 已经可以和 C3 通信了,那 C2 是否可以?我们在 R2 上加入 ACL 限制 C2 的地址:

1
2
3
4
R2(config)#access-list 1 deny host 192.168.1.3
R2(config)#access-list 1 permit any
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip access-group 1 in

然后再测试 C2 去 Ping 通 C3:

我们查看的 NAT 列表:

RIP 如何实现与 OSPF 的通信

之前我们学习了思科的动态路由,这种路由协议,一般应用于中小型架构。后来,我们又了解 OSPF 路由协议,这种协议一般用于大型网络。那么如何让这两种网络通信!

实验前提

相比 OSPF 的区域宣告,动态路由使用全网宣告,这两个矛盾体如何实现通信?今天我们就来学习下路由重定向。

首先需要对照《思科动态路由》以及《简单聊OSPF》教程配置下图,Router0 和 Router1 使用的动态路由,剩下路由使用的 OSPF 协议,其中 Router2 和 Router3 的 Fa0/0 都是 area 0,Router3 的 Fa0/1 口、Router4 和 Router5 都是 area 1。

实验拓扑

实验拓扑如图:

方案步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface FastEthernet0/0
Router(config-if)#no shutdown
Router(config-if)#ip address 192.168.2.2 255.255.255.0
Router(config-if)#exit
Router(config)#interface FastEthernet0/1
Router(config-if)#no shutdown
Router(config-if)#ip address 192.168.3.1 255.255.255.0
Router(config-if)#exit
Router(config)#router rip
Router(config-router)#network 192.168.2.0
Router(config-router)#exit
Router(config)#router ospf 1111
Router(config-router)#network 192.168.3.0 0.0.0.255 area 0
Router(config-router)#exit
Router(config)#route rip
Router(config-router)#redistribute ospf 1111 metric 2
Router(config-router)#exit
Router(config)#router ospf 1111
Router(config-router)#redistribute rip subnets

注意:以上命令在 Router1 路由器上设置,我们可以发现,在做重定向时,需要在连接的路由器上,同时配置动态路由和 OSPF。

方案测试

最后我们测试一下,首先是 Ping:

然后查看下路由表:

简单聊 OSPF

之前我们学习了 RIP 动态路由协议。针对多个区域,RIP 因跳数限制无法满足使用需求,这时我们需要思科另外一种动态路由技术,叫 OSPF,今天杜老师就来简单聊一下。

实验拓扑

实验拓扑如图:

实验方案

在上面拓扑中不难看出,我们将几个路由分隔开,划成不同区域,为什么要这么做呢?

我们知道,RIP 是通过宣告网段,让其它路由器通过学习,了解路由走向。而宣告出去的数据,会通过链路传递到网络中的各个设备,网络愈加庞大,要传播的数据也就越多,这样无疑加大了网络的耗损。

这时我们可以通过 OSPF 来划分区域,让路由宣告的数据只在区域内部传递,这样就可以减少网络的耗损。

下面我们通过一个实验,简单了解一下 OSPF 的配置流程。

方案步骤

  • Router0 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router ospf 1111
Router(config-router)#network 192.168.1.0 0.0.0.255 area 0
Router(config-router)#network 192.168.2.0 0.0.0.255 area 0
  • Router1 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.2.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.3.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router ospf 1111
Router(config-router)#network 192.168.2.0 0.0.0.255 area 0
Router(config-router)#network 192.168.3.0 0.0.0.255 area 1
  • Router2 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.3.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.4.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router ospf 1111
Router(config-router)#network 192.168.3.0 0.0.0.255 area 1
Router(config-router)#network 192.168.4.0 0.0.0.255 area 1
  • Router3 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.4.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.5.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router ospf 1111
Router(config-router)#network 192.168.4.0 0.0.0.255 area 1
Router(config-router)#network 192.168.5.0 0.0.0.255 area 1

方案测试

配置完成之后,我们测试一下:

测试成功之后,我们查看下路由表信息:

Cisco 以太网通道

以太网通道通过捆绑多条以太网链路来提高链路的带宽,并且运行一种机制,将多个以太网端口捆绑成一条逻辑的链路。这样就突破了端口带宽限制。

实验背景

下面的拓扑中,数据包的走向相信大家都能看懂:

项目需求

那么我们先普及一下关于端口的基本知识。图中端口为 F 端口,这个 F 代表是百兆端口,除此之外,还有 E 十兆的端口,G 千兆的端口。

每个类型的端口通过的流量也是不一样的。在当前拓扑中,每个端口都是百兆,如果 PC0 要和 PC3 通信,那么它们之间最大传输速率是 100M。如果在通信时,PC1 和 PC4 建立了通信,那么传输速率为共享 100M。也就是说,当同时建立的传输为几份时,100M 的带宽就被分成几份使用。

现在知道为啥你家办了百兆宽带,但是上网速度没那么快?原因就可能是别人正在与你共享。有人可能会说,接入的宽带增大些不就好了?可是设备的端口是百兆,就算接入千兆,它也无法使用,怎么办呢?

今天我们就来学习一个新的技术:Cisco 以太网通道。

项目拓扑

如图我们可以看到,我们通过三条网线,连接两台交换。并在这三条网线上,开启以太网通道的模式:

实验步骤

1
2
3
4
Switch>enable
Switch#configure terminal
Switch(config)#interface range fastEthernet 0/4-6
Switch(config-if-range)#channel-group 1 mode on

注意:上面配置在两台交换上执行。

简单聊 VRRP

在部署网络时,我们要考虑到负载均衡和高可用,如何将流量分布到两个设备上面,如何在一台设备坏掉时,另一个设备负责负载所有的流量。这里我们可以通过思科的 VRRP 实现。

实验拓扑

拓扑如下:

操作命令

  • R1 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
R1#vlan database
R1(vlan)#vlan 10
R1(vlan)#vlan 20
R1(vlan)#vlan 30
R1(vlan)#vlan 40
R1(vlan)#exit
R1#configure terminal
R1(config)#interface range fastEthernet 0/0-1
R1(config-if-range)#switchport trunk encapsulation dot1q
R1(config-if-range)#switchport mode trunk
R1(config-if-range)#exit
R1(config)#interface vlan 10
R1(config-if)#ip address 192.168.10.252 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#vrrp 10 ip 192.168.10.254
R1(config-if)#vrrp 10 priority 150
R1(config-if)#vrrp 10 preempt
R1(config-if)#exit
R1(config)#interface vlan 20
R1(config-if)#ip add 192.168.20.252 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#vrrp 20 ip 192.168.20.254
R1(config-if)#vrrp 20 priority 150
R1(config-if)#vrrp 20 preempt
R1(config-if)#exit
R1(config)#interface vlan 30
R1(config-if)#ip address 192.168.30.252 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#vrrp 30 ip 192.168.30.254
R1(config-if)#vrrp 30 priority 100
R1(config-if)#vrrp 30 preempt
R1(config-if)#exit
R1(config)#interface vlan 40
R1(config-if)#ip address 192.168.40.252 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#vrrp 40 ip 192.168.40.254
R1(config-if)#vrrp 40 priority 100
R1(config-if)#vrrp 40 preempt
  • R2 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
R2#vlan database  
R2(vlan)#vlan 10
R2(vlan)#vlan 20
R2(vlan)#vlan 30
R2(vlan)#vlan 40
R2(vlan)#exit
R2#configure terminal
R2(config)#interface range fastEthernet 0/0-1
R2(config-if-range)#switchport trunk encapsulation dot1q
R2(config-if-range)#switchport mode trunk
R2(config-if-range)#exit
R2(config)#interface vlan 10
R2(config-if)#ip address 192.168.10.253 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#vrrp 10 ip 192.168.10.254
R2(config-if)#vrrp 10 priority 100
R2(config-if)#vrrp 10 preempt
R2(config-if)#exit
R2(config)#interface vlan 20
R2(config-if)#ip add 192.168.20.253 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#vrrp 20 ip 192.168.20.254
R2(config-if)#vrrp 20 priority 100
R2(config-if)#vrrp 20 preempt
R2(config-if)#exit
R2(config)#interface vlan 30
R2(config-if)#ip address 192.168.30.253 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#vrrp 30 ip 192.168.30.254
R2(config-if)#vrrp 30 priority 150
R2(config-if)#vrrp 30 preempt
R2(config-if)#exit
R2(config)#interface vlan 40
R2(config-if)#ip address 192.168.40.253 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#vrrp 40 ip 192.168.40.254
R2(config-if)#vrrp 40 priority 150
R2(config-if)#vrrp 40 preempt
  • R3 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
R3#vlan database  
R3(vlan)#vlan 10
R3(vlan)#vlan 20
R3(vlan)#vlan 30
R3(vlan)#vlan 40
R3(vlan)#exit
R3#configure terminal
R3(config)#interface range fastEthernet 0/0-1
R3(config-if-range)#switchport trunk encapsulation dot1q
R3(config-if-range)#switchport mode trunk
R3(config-if-range)#exit
R3(config)#interface fastEthernet 0/2
R3(config-if)#switchport access vlan 10
R3(config)#interface fastEthernet 0/3
R3(config-if)#switchport access vlan 20
  • R4 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
R4#vlan database  
R4(vlan)#vlan 10
R4(vlan)#vlan 20
R4(vlan)#vlan 30
R4(vlan)#vlan 40
R4(vlan)#exit
R4#configure terminal
R4(config)#interface range fastEthernet 0/0-1
R4(config-if-range)#switchport trunk encapsulation dot1q
R4(config-if-range)#switchport mode trunk
R4(config-if-range)#exit
R4(config)#interface fastEthernet 0/2
R4(config-if)#switchport access vlan 30
R4(config)#interface fastEthernet 0/3
R4(config-if)#switchport access vlan 40

实现效果

根据上面配置,当 VLAN10/VLAN20 发送数据,会通过 R1,而 VLAN30/VLAN40 发送数据,会通过 R2。

这就是负载均衡了,流量均衡到两台设备上,降低了设备的负载;当出现故障时,例如 R2 宕机了,R1 就会承担 R2 流量。

实现原理

终端在发送数据时,会先去找网关,而网关地址是通过 R1/R2 的优先级决定的,优先级高的会抢虚拟网关 IP,而优先级低的只能等高的设备宕机后再抢过来,以此实现高可用性。

而将两台设备的优先级平均分配,这样就实现了负载均衡。

简单聊 Tunnel

首先简单说下 Tunnel 的意思,翻译成中文叫隧道,类似生活中的隧道,里面的内容我们看不到,除非身处隧道。企业在进行跨网数据传输时,为了数据安全,就会用到隧道技术。

实验拓扑

下图中的实验,我们在 R1 和 R3 上面建立隧道,而 R2 是隧道传输数据的介质:

实验配置

  • R1 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
R1#configure terminal
R1(config)#interface fastEthernet 0/0
R1(config-if)#ip address 192.168.10.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface fastEthernet 1/0
R1(config-if)#ip address 12.1.1.2 255.255.255.0
R1(config-if)#no shutdown
R1(config)#interface tunnel 1
R1(config-if)#tunnel source 12.1.1.2
R1(config-if)#tunnel destination 23.1.1.2
R1(config-if)#ip address 100.1.1.1 255.255.255.0
R1(config-if)#exit
R1(config)#ip route 0.0.0.0 0.0.0.0 f1/0
R1(config)#ip route 192.168.20.0 255.255.255.0 tunnel 1
  • R2 路由器:
1
2
3
4
5
6
7
8
R2#configure terminal
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip address 12.1.1.1 255.255.255.0
R2(config-if)#no shutdown
R2(config-if)#exit
R2(config)#interface fastEthernet 1/0
R2(config-if)#ip address 23.1.1.1 255.255.255.0
R2(config-if)#no shutdown
  • R3 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
R3#configure terminal
R3(config)#interface fastEthernet 0/0
R3(config-if)#ip address 192.168.20.1 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#interface fastEthernet 1/0
R3(config-if)#ip address 23.1.1.2 255.255.255.0
R3(config-if)#no shutdown
R3(config-if)#exit
R3(config)#interface tunnel 2
R3(config-if)#tunnel source 23.1.1.2
R3(config-if)#tunnel destination 12.1.1.2
R3(config-if)#ip address 100.1.1.2 255.255.255.0
R3(config-if)#exit
R3(config)#ip route 0.0.0.0 0.0.0.0 f1/0
R3(config)#ip route 192.168.10.0 255.255.255.0 tunnel 2

测试结果

成功通信:

再次测试

接下来我们在 R2 上添加 ACL 禁止 192.168.10.0 网段通过 R2 路由器,命令如下:

1
2
3
4
R2(config)#access-list 1 deny 192.168.10.0 0.0.0.255
R2(config)#access-list 1 permit any
R2(config)#interface fastEthernet 0/0
R2(config-if)#ip access-group 1 in

数据成功通过。因为 R2 并未处在隧道中,只是数据通信介质,所以并不能对数据进行限制:

安装 GNS3 思科模拟器

我们在学习思科时,会经常用到一款虚拟机,它就是 Packet Tracer。不过这款虚拟工具并不能满足我们的需求,我们需要一个更强大的虚拟工具,这里向大家推荐 GNS3。

系统介绍

GNS3 是一款具有图形化界面可以运行在多平台的网络虚拟软件。Cisco 网络设备管理员或是想要通过 CCNA/CCNP/CCIE 等 Cisco 认证考试的相关人士可通过它来完成相关的实验模拟操作。同时它也可以用于虚拟体验 Cisco 网际操作系统 IOS 或者是检验将要在真实的路由器上部署实施的相关配置。

简单说来它是 Dynamips 的一个图形前端,相比直接使用 Dynamips 这样的虚拟软件要更容易上手和更具有可操作性。

效果演示

双击安装程序,打开安装界面:

同意安装协议:

设置开始目录名称:

安装组件,这里记得勾选上 SuperPutty:

设置安装路径,这里不要出现中文:

开始安装,会先安装 WinPcap 工具包:

同意协议:

开机是否自动启动:

安装 Wireshark 工具包:

同意协议:

选择组件,默认即可:

选择快捷方式,可以将在桌面上建立快捷方式勾选上:

设置安装路径,同样不要出现中文:

因为已经安装过 WinPcap,所以不用重新安装:

安装完成:

是否运行 Wireshark 工具包,这里不要运行:

GNS3 安装完成了:

需要填写邮箱:

不填写也可以:

安装完成:

思科设备连接指南

杜老师编写的网络教程,一般都是在 PT 模拟器中实验演示,当需在真实的环境下操作时,又是如何连接思科设备的呢?

前提准备

首先,需要连接思科设备,我们这里使用 COM 转 Console 线连接。一端连接主机 COM 口,一端连接设备 Console 口。如果用的是笔记本,没有 COM 口,可以使用 USB 转 COM 线,使用前记得安装下驱动。

然后要在电脑上安装控制端,例如 XShell 或超级终端。这里我们以超级终端软件为例演示下如何连接。

连接操作

我们已经安装完成,启动软件:

这是软件界面,因为没有打开连接,所以显示空白:

我们点击文件,选择新建连接:

选择对应接口,当前为 COM3。此数字为随机,所以使用时一定要确定哪个端口,可到设备管理器中查看:

这里只有一项需要设置,它就是波特率,需要修改为 9600。代表设备通信速率,只有匹配才可显示设备信息:

确认连接时可能会显示空白,因为设备处于待机模式,回车即可看到反馈:

TCP 的四次挥手

之前杜老师为大家讲过 TCP 的三次握手,通过三次握手,我们可以建立 TCP 的连接,然后进行数据传输,那么数据传输完成之后,如何断开 TCP 的连接?今天杜老师为大家讲解 TCP 的四次挥手!

技术前提

在将四次挥手之前,我需要大家先知道,什么是全双工和半双工。

半双工是在同时刻,只允许数据在一个方向传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息,可以实现双向通信,如对讲机。

全双工是允许数据同时在两个方向上传输,它要求发送设备和接收设备都有独立的接收和发送能力;在同一时间可以同时接受和发送信息,实现双向通信,例如电话通信。

TCP 的数据通信,则是全双工的通信,所以不管客户端还是服务端,都可以同时上传和下载数据。

挥手图示

图示如下:

图示解读

客户端在与服务端完成数据通信之后,客户端会主动断开数据连接,发送断开请求,此请求会收到服务端的确认信息,之后则断开客户端向服务端的数据流。需要注意的是:客户端不能向服务端再发送数据,但服务端仍可以继续给客户端发数据,这就好比电话这头的你不想说了,但你不能让另一端闭嘴。

直接服务端会向客户端发送断开请求,并收到客户端确认,连接彻底断开。

相关扩展

在断开请求和确认信息收到之前,都会有一个等待的时间,是为了确保请求信息和确认信息可被对方收到,防止长时间保持连接而浪费资源。

另外上面提到的断开连接后,则不可以发送数据,这里的数据不包含确认数据。

思科单臂路由

单臂路由是指在路由器的一个接口上通过配置子接口的方式,实现原来相互隔离的不同 VLAN 虚拟局域网之间的互联互通。Cisco 网络认证体系中,单臂路由是一个重要知识点。通过单臂路由能够深入的了解 VLAN 虚拟局域网的划分、封装、通信原理。

项目拓扑

项目拓扑如图:

需求分析

PC3 可以 Ping 通 PC0/Server0。

公司因为业务需求,需要部门之间可以通信。因为处于不同网段,所以需要路由实现寻址。又因多个部门使用同一交换划 VLAN,所以需要借助单臂路由技术。

项目方案

通过单臂路由实现。

通过在路由器上开启子接口,并将子接口划分在各部门的 VLAN 内,通过 Trunk 封装实现交换机与路由间的 VLAN 同步,从而实现跨 VLAN 通信。

方案步骤

  • Router0 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#no shutdown
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1.2
Router(config-subif)#encapsulation dot1Q 2
Router(config-subif)#ip address 192.168.2.1 255.255.255.0
Router(config-subif)#exit
Router(config)#interface fastEthernet 0/1.3
Router(config-subif)#encapsulation dot1Q 3
Router(config-subif)#ip address 192.168.3.1 255.255.255.0
  • Switch0 交换机:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Switch>enable
Switch#configure terminal
Switch(config)#interface fastEthernet 0/1
Switch(config-if)#switchport mode trunk
Switch(config-if)#exit
Switch(config)#vlan 2
Switch(config-vlan)#exit
Switch(config)#vlan 3
Switch(config-vlan)#exit
Switch(config)#interface fastEthernet 0/2
Switch(config-if)#switchport access vlan 2
Switch(config-if)#exit
Switch(config)#interface fastEthernet 0/3
Switch(config-if)#switchport access vlan 2
Switch(config-if)#exit
Switch(config)#interface range fastEthernet 0/4-5
Switch(config-if-range)#switchport access vlan 3

方案测试

测试结果如图:

项目扩展

  1. 单臂路由使用思科路由虚拟端口技术,实现单一端口不同网段;

  2. 单臂路由的作用是解决思科路由设备端口不够用的问题;

  3. 设置单臂路由需要配合交换机 VLAN 技术;

  4. 交换与路由相连的端口需要开 Trunk。

如何通过命令修改 Windows 的网络地址

用 Windows 命令行来进行网络维护或远程维护是网络管理员经常用到的技巧,而对于网络配置信息修改维护就离不开 netsh 命令;它是一个 Windows 系统本身提供的功能强大的网络配置命令行工具,下面我们就看看如何用它来修改本地 IP 地址及 DNS 等网络参数。

进入方式

WIN+X选择 Windows PowerShell 管理员模式,效果如图:

修改命令

1
2
netsh interface ip set address "以太网" static 192.168.213.140 255.255.255.0 192.168.213.2
netsh interface ip set dns "以太网" static 106.12.217.238

注意:static 后分别为 IP、子网掩码、网关,第二行的为 DNS 地址,请根据实际情况来修改。

修改效果

上面命令执行效果:

命令扩展

1
2
netsh interface ip set address "以太网" dhcp
netsh interface ip set dns "以太网" dhcp

注意:通过上面命令可以将地址的获取形式改为自动获取。

TCP 的三次握手

所谓 “三次握手” 即对每次发送的数据量是怎样跟踪进行协商使数据段发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕何时撤消联系,并建立虚连接。

握手流程

TCP 三次握手的流程如图:

流程详解

  1. TCP 第一次握手:在建立连接时,客户端发送请求包到服务器,并进入 SYN_SENT 状态,等待服务器的确认;

  2. TCP 第二次握手:服务器收到请求包,必须确认客户的 SYN,同时自己也发送一个请求包,即请求确认包,此时服务器进入 SYN_RECV 状态;

  3. TCP 第三次握手:客户端收到服务器的请求确认包,向服务器发送确认包 ACK,此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手;

  4. 完成三次握手,客户端与服务器则开始传送数据。

白话解读

我们的网络是全双工的模式,首先解释一下什么叫全双工。全双工指代上传和下载可以同时进行,像我们打电话一样,任意一方可以同时接听、说话。还有一个叫半双工,像对讲机,双方无法同时说话,一方占用线路后另一方只能接听、等待。

因为这个原因,在进行网络通信时,不仅客户端要发送请求数据,还要接收服务端的确认信息,才是一次成功通信,所以需要三次握手才能进行数据通信。

第一次握手时,客户端询问服务端是否可以连接,这是请求信息。此时双方无法进行数据通信。

第二次握手时,服务端向客户端发送确认和请求信息,确认允许客户端的连接,这时允许客户端向服务端发数据。但服务端不可以向客户端发数据,因为服务端的请求信息还未得到确认。

第三次握手时,客户端向服务端发确认信息,这时允许服务端向客户端发数据,连接正式建立。

经过三次握手,双方都可以向对端发送数据,即可开始进行数据传输。如未完成握手,则只有一端可发送数据,这样是无法成功通信的。

名词解释

  1. SYN 表连接请求,在请求连接对方时,会在数据包打上该标记,代表我请求连接你;

  2. ACK 表请求确认,在收到对方请求信息后,如果同意对方连接,则会在返回的数据包打上该标记,代表同意你的连接;

  3. seq 表数据包序列号,为了保证数据的完整性,会在数据包上标注序列;

  4. ack 数据包确认,收到数据包后,接收端需回复确认,会在原数据包序列号上加一,代表该数据收到了。

地址解析协议

地址解析协议,即 ARP,是根据 IP 地址获取物理地址的一个 TCP/IP 协议。主机发送信息时将包含目标 IP 地址的 ARP 请求广播到局域网络上的所有主机,并接收返回的消息,以此确定目标物理地址;收到返回消息后将该 IP 地址和物理地址存入本机 ARP 缓存中并保留一定时间,下次请求时直接查询 ARP 缓存以达到节约资源的目的。

网络拓扑

如图,我们让 PC0 去 Ping 通 PC1。我们发现,当数据包路过交换机时,数据包变成了两个,同时发送给 PC1 和 PC2。这是什么原因:

原因分析

我们分析一下,图中的交换机属于二层设备,也就是说,它支持 MAC 地址,但不能识别 IP 地址。而发送的 Ping 包,仅包含 IP 地址,下图为 PC0 去 Ping 通 PC3 时数据包内容:

查询效果

当数据包到交换机上时,交换机不能识别数据包中 IP 地址,那这个数据发给谁?事实上这个数据包就是 ARP 请求包,交换机会把这个数据包,分别转给连接交换机的其它设备,当数据包被接收后,终端设备会判断自身的 IP 是否和请求包中数据相符。如果相同,则会回复;如果不同,则会丢弃。PC0 在接收到返回的请求包后,会在包里提取出 PC1 的 MAC 地址,并在本地做 ARP 映射,下次再发送数据时,直接附上 MAC 地址而不需要 IP 地址:

流程扩展

发送端在给接收端发送数据包时,会先查看本地的 ARP 列表。

如果列表中有接收端的 MAC 地址则直接调用。

如果列表中没有接收端的 MAC 地址,则会优先发送一个 ARP 请求包,询问接收端 MAC 地址。

请求包经交换设备转发,因为交换机为二层设备「OSI 第二层」所以无法识别包含在 ARP 请求包中的 IP 地址,而 ARP 请求包中的目标 MAC 地址无效,故会将此请求包分发给除发送端外的所有设备。

其它设备收到该请求包之后,会判断该请求包是否是发给自身。

如果不是,则会直接丢弃。

如果是发给自身的,则将本身的 MAC 地址写入该请求包,并返回发送端。

发送端收到包含接收端 MAC 地址的请求包后,会将该 MAC 地址保存到 ARP 列表,以备下次通信使用。

TCP 的快速恢复

之前我们提到,当网络发生拥塞时,发送方重新进入慢启动,而慢启动的报文数是从一开始的,虽然是指数的增长,但是从一还是感觉会慢,有什么方法快速恢复吗?

技术图解

快速恢复图解:

看图说话

上图为快速恢复的算法:当发送方连续收到三个重复确认,会把慢启动门限 ssthresh 减半,然后在新 ssthresh 上使用拥塞避免算法。

上图中在 24 处出现拥塞,ssthresh 调整为一半为 12,快速恢复会直接发送 12 报文,之后使用拥塞避免算法,线性增长。相比慢速启动由 1 开始,快速恢复更快一些!

TCP 的快速重传

之前的文章我们有讲解 TCP 拥塞避免的方式,这些都是通过发送端来实现,那么接受方有什么方式解决拥塞问题?

技术图解

接收方的拥塞避免方式,叫做快速重传。快速重传如何操作?我们以下图为例简单说一下:

看图说话

接收方收到了 M1 和 M2 后都分别发出了确认。现在假定接收方没有收到 M3 但接收到了 M4。接收方不能确认 M4,因为 M4 是收到的失序报文段。根据可靠传输原理,接收方可以什么都不做。但按照快重传算法规定,接收方应及时发送对 M2 重复确认,这样做可以让发送方及早知道报文段 M3 没有到达接收方。

发送方在收到三次重复确认之后,会立即重新发送 M3。并且判定网络可能出现拥塞,然后把 ssthresh 设置为 cwnd 一半,最后重新进入拥塞避免阶段。

TCP 的拥塞避免

拥塞避免算法基本思想:一旦进入拥塞避免状态,拥塞窗口的值置 1,慢开始门限设为上次的值的一半。此时每个往返时延只将拥塞窗口的值增加一个最大报文长度。一种通用的方法是对于 TCP 发送方无论何时到达一个新的确认,就将拥塞窗口增加一个最大报文长度。

技术介绍

大家都听过国王与象棋的故事吧,国王想要奖励象棋的发明者,发明家说我要填满象棋棋盘,第一个格放一粒米,第二个格放 2 粒米,第三个放 4 粒,以此类推。开始还好,最后国库都放空了。可以看出,指数增长很恐怖的。

而慢启动就是使用指数增长,所以终会有一个点,超过网络负载能力,这时会发生什么呢?

技术扩展

为防止拥塞窗口 cwnd 增长过大引起网络拥塞,还需要设置一个慢速开始门限 ssthresh 状态变量。

之前的文章已经介绍了,慢启动以指数增长,在收到接收端的确认后,下次传输两倍的数据量。

如果发送之后,并没有收到接收端确认,发送端会判断当前网络处于拥塞状态。

下图中拥塞阈值在 24 处,发送端发送 16 个报文时,可以收到接收端的确认,它会发送 32 个报文。但是当前网络只能承载 24 个,所以说会有 8 个报文收不到确认。

技术图解

通过下面图片,我们简单说下慢启动的算法:

看图说话

如果发送方设置超时计时器时限已到但还没有收到确认,那么很可能是网络出现拥塞,致使报文段在网络中某处被丢弃。这时,TCP 马上把拥塞窗口减小到 1,并执行慢开始算法,同时把慢开始门限值 ssthresh 减半。

当发送端判断网络拥塞之后,会将门限 ssthresh 减为之前的一半,之前是 32,新值就是 16 个。

然后重新开始慢速启动。第一次 1,第二次 2,第三次 4,第四次 8,第五次 16,第五次达到了新门限 ssthresh。

接下来还是执行拥塞避免的算法,第六次发送 17 个包,第七次 18,每次加一,线性增长。当达到 24 个时,实际上网络可以承载的,但加到 25 个时,会有一个包收不到确认,这时,最终数值为 24。

TCP 的慢速启动

慢速启动是传输控制协议使用的一种阻塞控制机制。慢速启动也叫做指数增长期。慢速启动是指每次 TCP 接收窗口收到确认时都会增长。增加的大小就是已确认段的数目。

技术介绍

大家都有过这个经历吧,在双 11 时网购,需要好久才能收到,为什么呢?在考虑卖家的发货能力,以及买家的收货能力后,我们还需要考虑快递的传输能力。

同理,当主机开始发送数据时,我们需要考虑网络承载能力,如果立即所大量数据字节注入到网络,那么就有可能引起网络拥塞。如何防止这个问题的发生呢?我们今天来讲一下 TCP 慢启动。

技术图解

慢速启动:

看图说话

通常在刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段的数值。而在每收到一个对新报文段的确认后,把拥塞窗口增加至多一个 MSS 数值。

也就是说,第一次时发送 1 个报文,在收到接收端确认之后,第二次时发送 2 个报文,同样都确认后,第三次时发送 4 个报文,2 倍指数增长。

它的名字虽然叫慢启动,但实际上一点不慢,因为指数增长是很快的,所以它需要一个上限值,默认为 64K。

慢启动的作用就是最大限度使用网络资源。

技术扩展

最大报文段长度选项 MSS,MSS 选项用于在 TCP 连接建立时,收发双发协商通信时每一个报文段所能承载的最大数据长度。MSS 选项只能在初始化连接请求的报文段中使用。在报文段中发送 MSS 选项的终端利用该选项来对端 TCP 实体通告本端点在一个报文段中所能够接受的最大数据长度。若没有指定这个选项意味本终端能够接受任何长度的报文段。

一个 TCP 连接上允许各种长度报文段的传输,因此连接的两端利用 MSS 选项来协商报文段中最大数据长度是很必要的。例如在一个小型系统中由于空间限制,TCP 仅能提供较小接受缓冲区。则它与其它系统通信时,就必须互相协商一个较合适的 MSS,使对端发出报文段中的数据能够存入其接受缓冲器。由于 TCP 连接的两个端点可能存在差异,在一个 TCP 连接的两个数据流方向上常常可能采用不同的 MSS 值。

进行 MSS 协商的另一个好处是能够提高网络带宽的利用率。在一个局域网中进行通信的两个节点可以选择一个较大的 MSS,使得报文段封装成 IP 分组时能够充分利用网络带宽。但实际上在一般的 Intenet 环境中,为连接选择一个合适的 MSS 是很困难的。这是因为 MSS 的取值过大或过小都会影响网络和 TCP 的性能。如报文段太小,将会大大降低网络的利用率。但如果报文段太大也可能影响网性能。这是由于长 IP 分组在网络中传输时往往需要被分片传输。分片和重组的过程自然将带来一定的网络处理开销。而且 IP 分组被分片后会独立传输,任何一个分片出现错误或丢失都将导致整个分组被丢弃,这也意味着整个报文段丢失,TCP 只能对整个 IP 分组进行确认和重传。由于在 IP 通信子网中分组丢失的概率总是存在,因此 MSS 的增加所导致的分片将会使报文段成功达到目的端的概率下降,从而影响 TCP 性能和降低网络的吞吐率。

从理论讲,理想的 MSS 应该能尽可能多地承载用户数据,在传输上又需避免分片。但实际中确定这样一个最佳的 MSS 是困难的。一种通路 MTU 发现技术可以帮助 TCP 来确定最佳的 MSS 值。但是,仍然有许多 TCP 的实现并不能提供这样的值。同时,由于 Internet 中采用的是动态路由选址,TCP 报文段的传输通路可能不断地发生改变,这使动态地计算最佳 MSS 更加困难。

TCP 的滑动窗口

滑动窗口概念不仅存在于数据链路层,也存在于传输层中,两者有不同的协议,但基本原理上是相近的。其中一个重要的区别是,一个是针对于帧的传送,另外一个是字节数据的传送。

技术介绍

突然有天,你的土豪朋友要给你邮个床,一个超级大豪华床,别问我为什么,任性!

你特别的感动,然后很高兴拒绝了,原因是你在北京住着一个不到五平米的小隔断,床放不下!

通过一个悲催的小例子,我们知道在邮寄东西时,需要考虑接收方的接收能力,不然东西发过去后,收方无法处理。

数据传输也是这个道理,当发送端在发送数据时,如果不考虑网络的情况,直接发送数据,可能数据包的大小超过接收端的接收能力,这个包会被接收端丢掉,变成弃包。

技术图解

而这个接收的能力,就是我们今天要学习的滑动窗口。我们先放一张图片:

看图说话

设 A 向 B 发送数据。在连接建立时,B 告诉 A:我的接收窗口是 rwnd=400。因此,发送方发送窗口不能超过接收方给出的接收窗口的数值。注意,TCP 窗口单位是字节,非报文段。再设每一个报文段为 100 字节,而数据报文段序号的初始值设为 1。大写 ACK 表示首部中的确认位,小写 ack 表示确认字段的值 ack。

图中可以看出,B 进行了三次流量控制。第一次把窗口减少到 300,第二次又减到了 100,最后是 0,即不允许发送方再发送数据。这种使发送方暂停发送的状态将持续到主机 B 重新发出一个新窗口值为止。

只要 TCP 连接的一方收到对方的零窗口通知,就启动持续计时器。

什么是持续计时器?

技术扩展

为了对付零窗口大小的通知,TCP 需要另外一个计时器。假定接收 TCP 宣布了窗口大小为零。发送 TCP 就会停止传送报文段,直到接收 TCP 发送确认并且宣布一个非零的窗口大小。但这个确认可能会丢失。我们知道 TCP 中,对确认是不需要发送确认的。若确认丢失了,接收的 TCP 并不知道,而是会认为它已经完成任务,并等待着发送 TCP 接着会发送更多的报文段。但发送 TCP 由于没有收到确认,就会等待对方发送确认来通知窗口的大小。双方的 TCP 都在永远地等待着对方。

为了打破这种死锁,TCP 为每一个连接使用一个持续计时器。当发送 TCP 收到一个窗口大小为零的确认时,就启动持续计时器。当持续计时器期限到时,发送 TCP 就发送一个特殊的报文段,叫探测报文段。这个报文段只有一个字节数据。它有一个序号,但它的序号永远不需要确认;甚至在计算对其他部分的数据的确认时该序号也被忽略。探测报文段是提醒对端:确认已经丢失,必须重传。

持续计时器的值设置为重传时间数值。但是,若是没有收到从接收端来的响应,则需发送另一个探测报文段,并将持续计时器的值加倍和复位。发送端继续发送探测报文段,将持续计时器设定值加倍和复位,直到这个值增大到门限值止。在这以后,发送端每 60 秒就发送一个探测报文段,直到窗口重新打开。

这个概念就到这里,有问题的可以在文章下提问。另外以上为个人的理解,欢迎更正指导!

OSI 七层模型非专业简介

OSI 是 Open System Interconnection 的缩写,中文为开放式系统互联。国际标准化组织制定 OSI 模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。

模型简介

想要更好掌握思科的知识点,我们首先需要学习的就是 OSI 七层模型,它是互联网通信的参考模型,那我们先谈论一下,为什么需要 OSI 七层模型?

互联网发展到今天,已经是全球性。全球有很多的国家,每一个国家都有自己的语言,我们使用不同语言如何沟通?计算机也是一样的,现在手机、平板、电脑都能上网,这些不同设备,也在使用不同信号,那这些信号之间如何通信呢?这就需要一个统一标准,OSI 七层模型就是这样出现的。

模型图示

OSI 七层模型从下到上分别是:

分层解释

  1. 第一层物理层:最简单的理解,我们所看到的网线,就是物理层的。物理层是传输媒介,所以无线网络也算是物理层,在线路中起到的作用是将 0/1 转换成电信号或光信号;

  2. 第二层数据链路层:我们接触的 MAC 物理地址,就是数据链路层的。在线路中起到的作用是相邻的两个设备之间的互相通信;

  3. 第三层网络层:IP 就是网络层,作用就是寻址,让数据包找到最终地址;

  4. 第四层传输层:TCP/UDP 都是传输层,用于建立以及断开连接;

  5. 第五层会话层:它是传输层的领导,管理传输层什么时候建立连接或什么时候断开;

  6. 第六层表示层:将上一层「即应用层」协议,翻译成电脑可识别语言,如 UTF-8;

  7. 第七层应用层:每个网络应用,都对应不同的协议,这些协议就属于应用层。

模型扩展

数据在发送时,由上至下封装,即第七层至第一层,目标在收到数据包之后,由下至上解包,即第一层至第七层。

每一层的分工不同,通过这种明确、简洁分工,在通信过程中如果出现问题,就很方便发现问题的所在层,针对那一层处理即可使网络连通。

基于端口的 NAT

通过网络地址转换,我们可以实现终端访问外网,但是我们发现,同一时间只有一个终端可以上网,如何实现多台终端同时上网?我们学习一下基于端口的 NAT。

项目拓扑

项目拓扑如图:

需求分析

左侧两个 PC 可同时连通右侧的 PC。

NAT 只能转换一个内网 IP 为一个外网 IP,所以无法实现多台内网设备同时连通外网。

项目方案

网络中的通信除了依赖 IP 地址外,还需要使用端口来进行通信,所以借助端口,我们可以实现多对一的转换形式。

通过基于端口的 NAT,即 PNAT,也称为 PAT,可以将多个内网 IP,同时映射到一个网络接口上,通过一个外网地址,不同端口实现地址转换。

方案步骤

  • R1 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#ip route 0.0.0.0 0.0.0.0 fastEthernet 1/0
Router(config)#access-list 1 permit any
Router(config)#ip nat inside source list 1 interface fastEthernet 1/0 overload
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#ip nat inside
Router(config-if)#exit
Router(config)#interface fastEthernet 1/0
Router(config-if)#ip address 1.1.1.2 255.0.0.0
Router(config-if)#no shutdown
Router(config-if)#ip nat outside
  • R2 路由器:
1
2
3
4
5
6
7
8
9
10
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 2.2.2.1 255.0.0.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 1/0
Router(config-if)#ip address 1.1.1.1 255.0.0.0
Router(config-if)#no shutdown

方案测试

下图为第一台 PC 进行连通性测试:

下图为第二台 PC 进行连通性测试:

在特权模式下,使用 show ip nat translations 查询 NAT 转换列表:

项目扩展

  1. 绝大多数路由设备,都会使用 PAT 来进行网络地址转换;

  2. PAT 需配合 ACL 来实现内网地址列表。

访问控制列表

ACL 访问控制列表是一种基于包过滤的访问控制技术,它可以根据设定的条件对接口上的数据包进行过滤,允许其通过或丢弃。访问控制列表被广泛地应用于路由器和三层交换机。借助访问控制列表,可有效地控制用户对网络的访问,从而最大程度保障网络安全。

项目拓扑

项目拓扑如图:

需求分析

PC0 可与 PC1 及 Server0 连通,PC1 不可以与 Server0 连通。

因 PC0 与 PC1 处于相同网段,所以无需配置即可连通。借助路由设备,PC0 与 PC1 也可以与 Server0 连通。

项目方案

阻止 PC1 通过路由器,即可实现项目需求。

清空 PC1 的网关地址可以实现项目需求,但效果不可控,我们通过 ACL 访问控制列表来实现。

方案步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#access-list 1 deny host 192.168.1.3
Router(config)#access-list 1 permit any
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#ip access-group 1 in
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shutdown

注意:因为只需阻止 PC1 通过路由器即可实现项目需求,所以只需配置路由设备即可。

方案测试

下图中左侧为 PC0 的连通测试,右侧为 PC1:

项目扩展

  1. ACL 分为标准型访问控制列表,与扩展型访问控制列表。区别是标准型只能限制来源地址,扩展型可限制来源地址、来源端口、目的地址、目的端口等等;

  2. ACL 默认会在规则最后添加一条 deny any,如设置的规则为 deny,最后需要添加一条 permit any 才可以;

  3. 端口调用 ACL 时一定要判断数据的方向,根据方向决定进口、出口。

思科网络地址转换

当在专用网内部的一些主机本来已经分配到了本地的 IP 地址,但现在又想和因特网上的主机通信时,可使用 NAT 方法。这种方法需要在专用网连接到因特网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT 路由,它至少有一个有效的外部全球 IP 地址。这样,所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和因特网连接。

项目拓扑

项目拓扑如图:

需求分析

PC0 可以 Ping 通 PC1。

私网地址只能在内网中使用,外网不允许出现私网 IP。

项目方案

要将内网的源地址转换为外网的地址,数据包才可以在网络中流通。

这里可以使用网络地址转换实现。NAT 会将内网的地址转换为外网的地址,数据包返回后,目标地址指向边际路由,路由会将外网地址转换成内网的地址,再发现内网的目标终端。

方案步骤

  • Router0 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#ip route 0.0.0.0 0.0.0.0 fastEthernet 0/1
Router(config)#ip nat inside source static 192.168.1.2 1.1.1.2
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#ip nat inside
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 1.1.1.2 255.0.0.0
Router(config-if)#no shutdown
Router(config-if)#ip nat outside
  • Router1 路由器:
1
2
3
4
5
6
7
8
9
10
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 2.2.2.1 255.0.0.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 1.1.1.1 255.0.0.0
Router(config-if)#no shutdown

方案测试

测试结果如图:

项目扩展

  1. 网络地址转换有很多种,如果按照地址分类,可分为源地址转换、目标地址转换;

  2. 如果按照功能分类,可分为一对一的 NAT,多对多 DNAT 动态网络地址转换,一对多 PAT,也称为 PNAT,是基于端口的网络地址转换。

思科 DHCP 中继路由器

在生产环境中,我们需要使用多个网段,如果在连接这些网段的路由中配置 DHCP 服务,会增加我们的维护成本,这时我们可以使用 DHCP 的中继功能,来实现跨网段 IP 分配。

项目拓扑

项目拓扑如图:

需求分析

PC0 可以获取 IP。

配置路由设备可以使其具备 DHCP 的功能,但图中的 DHCP 服务端与客户端之间存在另外一台路由设备,而该设备没有配置 DHCP 的功能。

项目方案

通过 DHCP 中继路由器实现。

客户端在向最近的路由器请求 IP,而最近的路由器并非 DHCP 的服务端,但是它知道要找谁要 IP,根据指向地址,中继将获取到的地址发给客户端。

方案步骤

  • Router0 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#ip dhcp pool cjk
Router(dhcp-config)#network 192.168.2.0 255.255.255.0
Router(dhcp-config)#default-router 192.168.2.1
Router(dhcp-config)#dns-server 8.8.8.8
Router(dhcp-config)#exit
Router(config)#ip route 192.168.2.0 255.255.255.0 fastEthernet 0/0
  • Router1 路由器:
1
2
3
4
5
6
7
8
9
10
11
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.1.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#ip helper-address 192.168.1.1
Router(config-if)#no shutdown

方案测试

测试结果如图:

注意事项

  1. 在配置 IP 地址池时,所设置的网关是否是目标网段的网关;

  2. DHCP 中继端需要直接指向 DHCP 服务端,不可指向其它中继。

简单聊 EIGRP

我们发现思科动态路由协议也有其局限性,一个网络中只能存在 16 台路由器。那如何破解这个局限性?我们今天学习一种新的路由协议,叫 EIGRP,它的跳数超过 16 跳,不过缺点是它属于思科私有协议,其它厂家网络设备并不支持。

项目拓扑

项目拓扑如图:

需求分析

PC0 可以 Ping 通 PC1。

Router0 只知道两个网段,分别是 192.168.1.0/192.168.2.0。Router1 只知道两个网段,分别是 192.168.2.0/192.168.3.0。Router2 只知道两个网段,分别是 192.168.3.0/192.168.4.0。所以如果想要 PC0 可以 Ping 通 PC1,必须告诉 0 路由器 192.168.3.0/192.168.4.0 的走向,并且因为需要回包,所以 2 路由器需要知道 192.168.1.0/192.168.2.0 的走向。同时需要 1 路由器知道 192.168.1.0/192.168.4.0 的走向。

项目方案

通过动态路由实现。

我们只是通过少量设备演示,如果大家有时间和精力,可以大量添加路由设备。

方案步骤

  • Router0 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router eigrp 1
Router(config-router)#network 192.168.1.0
Router(config-router)#network 192.168.2.0
  • Router1 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.2.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.3.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router eigrp 1
Router(config-router)#network 192.168.2.0
Router(config-router)#network 192.168.3.0
  • Router2 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.4.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.3.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router eigrp 1
Router(config-router)#network 192.168.3.0
Router(config-router)#network 192.168.4.0

方案测试

测试结果如图:

接着我们查看下路由表:

技术特点

  1. 快速收敛;

  2. 部分更新;

  3. 支持多种网络层的协议;

  4. 使用多播、单播;

  5. 支持变长子网掩码;

  6. 无缝连接数据链路层协议和拓扑结构;

  7. 配置简单。

思科动态路由

之前讲了如何配置静态路由。现在我们又遇到了一个问题,如图我们增加一个路由。如果我们还像之前那样通过静态路由配置,想想看是不是麻烦很多。所以今天我们学习一下动态路由。

项目拓扑

项目拓扑如图:

需求分析

PC0 可以 Ping 通 PC1。

Router0 只知道两个网段,分别是 192.168.1.0/192.168.2.0。Router1 只知道两个网段,分别是 192.168.2.0/192.168.3.0。Router2 只知道两个网段,分别是 192.168.3.0/192.168.4.0。所以如果想要 PC0 可以 Ping 通 PC1,必须告诉 0 路由器 192.168.3.0/192.168.4.0 的走向,并且因为需要回包,所以 2 路由器需要知道 192.168.1.0/192.168.2.0 的走向。同时需要 1 路由器知道 192.168.1.0/192.168.4.0 的走向。

项目方案

通过动态路由实现。

项目可以通过静态路由实现,不过实现起来工程量比较大,因为需要规划所有网段走向。这里同样可用动态路由实现。动态路由会把路由器已知的网段宣告出去,其它路由通过学习即可自动判断走向。

方案步骤

  • Router0 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router rip
Router(config-router)#network 192.168.1.0
Router(config-router)#network 192.168.2.0
  • Router1 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.2.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.3.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router rip
Router(config-router)#network 192.168.2.0
Router(config-router)#network 192.168.3.0
  • Router2 路由器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.4.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.3.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#router rip
Router(config-router)#network 192.168.3.0
Router(config-router)#network 192.168.4.0

方案测试

测试结果如图:

项目扩展

  1. 动态路由会持续产生数据包占用网络;

  2. 动态路由如不宣告则不学习,故无法与静态路由结合使用;

  3. 动态路由有跳数的限制,允许 15 跳,故路由设备不可以超过 16 台。

思科静态路由

静态路由是一种路由的方式,路由项由手动配置,而非动态决定。静态路由是固定的,不会改变,即使网络状况已经改变或者是重新被组态。一般来说,静态路由是由网络管理员逐项加入路由表。

项目拓扑

项目拓扑如图:

需求分析

PC2 可以 Ping 通 PC1。

Router0 只知道两个网段,分别是 192.168.1.0/192.168.2.0。Router1 只知道两个网段,分别是 192.168.2.0/192.168.3.0。所以如果想要 PC2 可以 Ping 通 PC1,必须告诉 0 路由器 192.168.3.0 的走向,并且因为需要回包,所以 1 路由器需要知道 192.168.1.0 的走向。

项目方案

通过静态路由实现。

分别配置好 PC1/PC2 的 IP。

方案步骤

  • RouterA 路由器:
1
2
3
4
5
6
7
8
9
10
11
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#ip route 192.168.3.0 255.255.255.0 fastEthernet 0/1
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.2.1 255.255.255.0
Router(config-if)#no shutdown
  • RouterB 路由器:
1
2
3
4
5
6
7
8
9
10
11
Continue with configuration dialog? [yes/no]: no
Router>enable
Router#configure terminal
Router(config)#ip route 192.168.1.0 255.255.255.0 fastEthernet 0/0
Router(config)#interface fastEthernet 0/0
Router(config-if)#ip address 192.168.2.2 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface fastEthernet 0/1
Router(config-if)#ip address 192.168.3.1 255.255.255.0
Router(config-if)#no shutdown

方案测试

测试结果如图:

项目扩展

1
show ip route

注意:查询 IP 路由表,在特权模式下执行上面命令。

通过 VTP 在多台交换机间同步 VLAN 数据

公司又扩大了,部门人数逐渐增多,一台交换机已经无法满足公司的需求,我们采购了多台交换机,现在需要在这些交换机上配置多个 VLAN,是不是感觉工作量特大,有什么好的办法吗?

项目拓扑

项目拓扑如图:

需求分析

通过最简单的方法,在 3 台交换上增加相同的 VLAN。

如果交换之间可以互相学习,就能减少很大的工作量。

项目方案

VTP 英文全称 VLAN Trunk Protocol,中文名 VLAN 中继协议。用于在多台交换机间同步 VLAN 数据。

VTP 有三种模式:

  1. 服务模式「可以管理 VLAN 数据库,并向外发送 VLAN 数据」
  2. 透明模式「只负责传输 VLAN 数据,并不学习」
  3. 客户模式「学习服务端 VLAN 数据,但不可以添加」

注意:数据通过开启透明模式的交换设备时,需该设备具备对应的 VLAN。

方案步骤

  • Switch0 交换机:
1
2
3
4
5
6
7
8
Switch>enable
Switch#configure terminal
Switch(config)#interface fastEthernet 0/1
Switch(config-if)#switchport mode trunk
Switch(config-if)#exit
Switch(config)#vtp domain cjk
Switch(config)#vtp mode server
Switch(config)#vtp password cjk
  • Switch1 交换机:
1
2
3
4
5
6
7
8
Switch>enable
Switch#configure terminal
Switch(config)#interface fastEthernet 0/2
Switch(config-if)#switchport mode trunk
Switch(config-if)#exit
Switch(config)#vtp domain cjk
Switch(config)#vtp mode transparent
Switch(config)#vtp password cjk
  • Switch2 交换机:
1
2
3
4
5
Switch>enable
Switch#configure terminal
Switch(config)#vtp domain cjk
Switch(config)#vtp mode client
Switch(config)#vtp password cjk

方案测试

注意:上图为服务端,在上面添加 VLAN。

注意:上图为中继端,只传输不学习。

注意:上图为客户端,学习服务端 VLAN 数据。

项目扩展

1
show vlan

注意:查询 VLAN 的数据,在特权模式下执行上面命令。

通过 Trunk 实现多台交换间 VLAN 内通信

因为公司规模逐渐扩大,出现相同部门不同办公室的情况,老板提出新的要求:相同部门可以通信,不同部门不能通信。

项目拓扑

项目拓扑如图:

需求分析

PC0 和 PC2 能通信,PC1 和 PC3 能通信,其余不能通信。

可以通过 VLAN 来实现,但是在两台交换设备的连接端口如何设置?让标签通过连接端口不去掉就可以了。

项目方案

使用 Trunk 封装实现多交换之间 VLAN 内通信。

交换设备的端口有两种模式:

  1. Access 的模式:进入带上标签、出去前会判断标签、出去后会摘掉标签;
  2. Trunk 的模式:终端不会直连,出去前不判断标签、出去后不摘掉标签。

注意:Trunk 常用于网络设备连接,不会直接连接终端,所以不考虑进入时贴不贴标签的问题。

方案步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Switch>enable
Switch#configure terminal
Switch(config)#vlan 2
Switch(config-vlan)#exit
Switch(config)#vlan 3
Switch(config-vlan)#exit
Switch(config)#interface fastEthernet 0/1
Switch(config-if)#switchport access vlan 2
Switch(config-if)#exit
Switch(config)#interface fastEthernet 0/2
Switch(config-if)#switchport access vlan 3
Switch(config-if)#exit
Switch(config)#interface fastEthernet 0/3
Switch(config-if)#switchport mode trunk

注意:两台交换设备命令相同。最后一行命令,只需在其中一台交换机执行即可,不需两台同时执行。在执行后,会同步到另一台交换机自动执行。

方案测试

测试效果如图:

方案原理

标签为 2 的数据包在经过交换机 Trunk 端口时,标签并没去掉,而是进入另一个交换机,然后再通过 2 端口发出。数据包经过第一台交换机 2 端口,打上 2 的标签,然后通过 Trunk 口发出,发出后 2 标签还在,进入第二台交换机,最后通过 2 口发出,标签去掉:

VLAN 虚拟局域网

在一家小型企业中,所有员工都使用一台交换机,老板为了避免员工私下通信,将他们分配了不同网段,但偶尔还是会发现,有些员工会自行修改网段和别人通信。如果你是这家企业的网络工程师,你该如何处理?

项目拓扑

项目拓扑如图:

需求分析

PC0 和 PC1 即使处于同网段也不可以 Ping 通!

在不同网段时,PC0 和 PC1 不处于同一个广播域,所以不能通信,也就是说,隔离两者的广播域,可以让其不能通信。

项目方案

使用 VLAN 虚拟局域网隔离两者的广播域。

相同的 VLAN 可以通信,不同的 VLAN 不可通信。

方案步骤

1
2
3
4
5
6
7
8
9
10
11
Switch>enable
Switch#configure terminal
Switch(config)#vlan 2
Switch(config-vlan)#exit
Switch(config)#vlan 3
Switch(config-vlan)#exit
Switch(config)#interface fastEthernet 0/1
Switch(config-if)#switchport access vlan 2
Switch(config-if)#exit
Switch(config)#interface fastEthernet 0/2
Switch(config-if)#switchport access vlan 3

注意:以上命令在交换设备上执行。

方案测试

测试效果如图:

方案原理

PC0 在发送数据包时,需要经过交换机 Fa0/1 端口,而这个端口被封装为 VLAN2,也就是说,这个数据包被打上了 VLAN2 标签,它只能从另一个 VLAN2 端口出去。通过这种限制,使两台 PC 即便处于统一网段,也不可以通信:

❌