计网实验复习

本文最后更新于:2 年前

Cisco命令汇总

基本

前缀标识

>					//指示当前为用户模式
#					//特权模式
(config)#		 	//配置模式
(config-if)# 		//接口配置
(config-subif)# 	//子接口配置
(config-if-range)#	//多接口配置
(config-vlan)#		//vlan配置

一般默认都在配置模式下进行,show相关命令一般在特权模式下进行。

enable 					//进入特权模式
configure terminal 		//进入配置模式
exit 					//退出一层
vlan [id]				//创建并进入vlan配置 (config-vlan)#
interface [id]			//进入接口配置  (config-if)#
interface range fa0/1-5	//进入多个接口的配置模式,可以对一组同时进行
no xxx					//删除xxx(xxx是任一种创建/添加命令)
交换机
mac-address-table static [mac] vlan [vlan_id] interface [fa_id]		//添加静态mac
clear mac-address-table dynamic					//清空动态Mac,后面可以跟一些筛选(vlan [id],interface [id], address [mac] 等)
show mac-address-table												//查看mac地址表
vlan [id]			 	 				//创建vlan
show vlan brief  		 				//查看vlan
show interface trunk					//查看trunk端口
//在接口配置模式下(config-if)
switchport mode access/trunk 			//切换端口为access模式
switchport access vlan [vlan-id]		//给端口分配vlan
switchport trunk native vlan [vlan-id]	//给trunk端口设置默认vlan
										//设置trunk端口允许的vlan
switchport trunk allowed vlan { all | [add| remove | except] vlan-list }
路由器
//在端口配置模式下
ip address [ip]	[mask]			//为端口配置IP
no shutdown						//打开端口,默认是关闭的,用到的端口都需要打开

interface gig0/0/0.1						//进入子端口配置模式
ip route [prefix] [mask] [ip] 				//设置静态路由
show ip route								//查看路由信息
//端口配置模式下
ip nat inside/outside			//设为内/外端口(nat)

ip nat inside source static [local-ip] [global-ip]									//配置静态nat地址转换
ip nat inside source static tcp [local-ip] [loacl-port] [global-ip] [global-port]	//配置静态nat地址带tcp端口转换
access-list [id] permit/deny any								//设置访问控制列表
ip nat pool [name] [start-ip] [end-ip] netmask [mask]			//设置地址池
ip nat inside source list [access-list-id] pool [pool-name]		//配置动态地址转换条目
ip nat inside source list [access-list-id] pool [pool-name] overload		//配置动态地址转换条目(超载)
ip nat inside source list [access-list-id] interface [inter-name] overload	//不使用地址池,使用外部接口IP的各个端口来分配。(只能是Outside接口)

show ip nat statistics
show ip nat translations
//单臂路由,在端口配置模式下
no ip address	//去掉端口IP,转化为干道模式(用子接口)。注意不需要跟ip和mask
no shutdown 	//父端口打开即可,子端口不需要额外no shutdown

//在子端口配置模式下
//配置本端口对应的vlan,封装802.1Q(单臂路由)
//子端口需要先执行这一句话,才能配置ip.
encapsulation dot1q [vlan-id]
三层交换机
vlan [vlan_id]				//创建vlan
interface vlan [vlan-id] 	//进入虚接口,虚接口同样需要配置ip address,但无需no shutdown
ip routing					//开启路由功能

八股

绞线

TCP/UDP

ARP/TCP报文格式

DHCP

应用层协议,工作在UDP协议之上。

服务端使用UPD:67作为端口,客户机使用UDP:68作为端口,约定俗成。

工作前,本机还没有IP:

  • 客户端发送DHCP DISCOVER,源0.0.0.0(空),目的255.255.255.255(广播)

    • DHCP包中加了自己的MAC
    • 所有DHCP服务器接受到这个消息都会尝试提供一个IP,但还不确定客户是否接收。
  • 因为客户端还没有IP,服务器也只能通过广播方式回应,发送DHCP OFFER,源为服务器IP,目的255.255.255.255,数据包中包含了提供的IP地址(your ip address)。

    • 数据包中还会包含客户端的MAC地址等信息,这确实是一个广播,但只有特定目标才会接收。
  • 客户端选择收到的首个DHCP OFFER,为了严谨期间还不能直接用上这个IP,发送DHCP REQUEST,源为0.0.0.0,目的255.255.255.255,告知所有服务器自己所选择的IP。

    • 这里虽然已经知道了服务器的IP信息,但需要让其他没被选的服务器也知道,故还是广播。
    • 包中也填写了选中的DHCP服务器,服务器若发现自己未被选择,则回收IP。
  • 服务器收到REQUEST,再次发送广播(因为客户还是没有定IP)DHCP ACK包来确认,客户接到ACK之后获得该IP。

    • 同样的,这个广播中包含了目的MAC信息。

总结:全是广播,在没有IP的时候通过广播 + MAC地址的方式确认对方,避免混淆。

DNS

域名解析系统

www.baidu.com 域名右侧等级最高,例如 com 是顶级域名服务器;baidu.com 是权威域名服务器,每个域名服务器都知道自己下面的所有服务器地址,如 baidu.com 直接知道 www.baidu.com 的地址。

根域名服务器知道所有顶级域名服务器的地址。用户查询时首先查询首选DNS服务器,它不知道则从根域名服务器开始递归或迭代查询(根域名服务器全球只有13个,地址大家都知道)

递归查询即询问时对方需要返回最终结果,迭代查询即对方返回下一个地址,用户机再去重新查。

Ping 域名

  • unknown host… 无法解析
  • request time out 可以解析,但ping不通

HTTP

应用层协议,基于TCP协议之上。

工作步骤:

  • 客户端解析URL
  • 客户端发送HTTP请求
  • 服务端响应HTTP页面

HTTP请求(Request)格式:

请求行:方法-URL-HTTP版本
请求报头:
	KeyValue
	KeyValue
	...
(空行)
正文

HTTP基于TCP,而TCP基于字节流,这个空行标志请求报头的结束。

请求方法很多,常用GET/POST用于获取和发送数据。

习惯上,GET请求通常没有正文,通过url提出请求,而POST通过正文将需要传的数据提交。

URL格式见下文

HTTP响应(Response)格式:

请求行:版本号-状态码-状态解释
请求报头:
	KeyValue
	KeyValue
	...
(空行)
正文

URL

(计网应该不考但我觉得非常有必要了解)

http://user:pass@www.baidu.com:80/dir/index.htm?uid=1&count=2#ch1

http 所用协议

user:pass@ 用户(登录信息),用户名@地址 是很常用的一种指示格式

www.baidu.com:80 域名/地址 + 端口号

/dir/index.htm 文件路径

?uid=1&count=2 查询字符串,把一串键值对写进URL

#ch1 文档片段,例如博客查看markdown常用这个定位

交换机

交换机是数据链路层设备,可以在同一网络下基于MAC地址通信。

交换机存储一张MAC地址表,记录每个MAC对应的端口,它可以静态配置也可以动态分配学习。

静态分配:由用户直接设置,是稳固的,不会随时间或链接变化而被删除的。

动态学习:

  • 当 A $\rightarrow$ B 发送一条消息,交换机首先更新A的MAC地址和端口的对应信息。

  • 若交换机MAC地址表中没有B的MAC信息,则向所有端口发送(泛洪)

    • 注意,交换机的泛洪和广播不一样,它并不期待B作出任何回应,只是简单地向所有端口发送。
    • 设备对MAC地址自然有所过滤,接到的消息不匹配时会丢弃。
    • 在B主动发送一条信息出来时,交换机才会更新B的信息。
  • 动态分配的信息具有时效,一段时间后会被删除。

MAC地址中,除了表示单个设备的MAC地址外还有组播和广播mac地址,它们表示多个设备。以太网中MAC最高字节的最低位设为1表示这是一个组播地址,其中ff.ff.ff.ff.ff.ff是广播地址。

MAC地址表中可以有多MAC映射到一个端口,即多个设备连在一个端口(可能通过另一个交换机)

以太网帧

最常用的Ethernet2帧,依次包含目的地址、源地址、类型、数据、FCS检测。

交换机帧转发方式:

  • 直通转发:收到帧头后找到MAC就转发。
  • 无碎片直通转发:交换机读取前64个字节后开始转发。
  • 存储转发:接收完整的帧,检验后丢弃错误的帧再转发。

vlan

普通的局域网即使用路由器链接多个子网,可能会很大,vlan就是将大型局域网划分成小型局域网的技术。

vlan:虚拟局域网,基于逻辑划分,地址无关,划分广播域以减少网络风暴。vlan是数据链路层的概念,一个vlan不能跨路由器。

vlan在交换机上配置,其中端口可以设为接入(Access)端口和干道(Trunk)端口

Access端口本身标记了vlan(基于端口划分),所以发送的帧不再带有vlan标签,故叫Untagged端口,一般用于连接计算机。

Trunk端口本身不限制vlan,允许多种vlan通过,故发送的帧需带有vlan标签。通常用于连接两个交换机。

Trunk端口也设有vlan缺省值,且连接两端的缺省值必须一致。

IEEE 802.1Q协议

概念,定义了基于端口的VLAN模型,规定如何标识带有VLAN成员信息的以太帧,以及格式。

IEEE 802.1Q帧是一条插入帧,插入到原有的以太网帧(源地址之后)中以表示vlan信息。

vlan间通信

vlan是二层概念,两个vlan已经是不同子网了,实现两个子网间的通信自然用到网络层。

路由器多端口

每个vlan使用一个路由器的端口,配置相应IP作为网关。相当于直接进行三层间的通行。

缺陷:vlan数量多而路由器端口数量少,另一个角度看,同一个路由器和交换机之间要连数条重边,显然是一种浪费。

单臂路由

也是使用路由器,只是可以将路由器的一个接口分成更多的子接口(逻辑接口),来对应不同的vlan。

具体命令见文顶。

缺陷:路由器转发慢(对于上一个也是),容易单点故障。

三层交换机

一种特殊的具备路由功能的交换机,对于大型局域网内的数据转发更快。

它可以在已有的vlan上建立虚接口,接口形式如下:

vlan [vlan_id]				//创建vlan
interface vlan [vlan-id] 	//进入虚接口

在这些接口间路由,就实现了vlan间通信。

细节:

  • 多端口方式中,连接路由器的端口也需要设置为access,配置相应vlan;另两种方式都设置为Trunk端口。
  • 三层交换机中实际连的端口随意,也不用配置。
  • Trunk端口设置后,若端口上没有连东西,show interface trunk 并不会显示端口,先连上后再查看就能正常显示。
  • no shutdown 对正经接口打开即可,虚接口和子接口都不需要打开(当然子接口的父接口需要打开)

路由器

路由器根据目的网络网络地址号来转发

存储有路由表,记录每个网络地址(子网号不需要,为0即可)对应的下一跳(next hop)

注意这个下一跳:是指下一个目的地的完整IP,而不是自身某个端口的IP。

默认:

0.0.0.0 255.255.255.0 x.x.x.x:使用x.x.x.x访问所有掩码为24位的地址。

0.0.0.0 0.0.0.0 x.x.x.x:使用x.x.x.x访问所有地址。

路由器的每个端口上配了IP,可以把路由器也看做一个主机,ping端口什么的都是可以通的。

主机上配的网关,实际意思是:如果目的在局域网外,我应该发给谁。

NAT

NAT的作用:

  1. 保护IP地址
  2. 缓解IP告急情况

NAT是如何工作的?(纯个人测试理解)

路由器的NAT表每条记录包含四个内容:Inside/Outside Local/Global

它的实际含义是:内部数据包的源/目的为 Inside Local,Outside Local 应与外部数据包的 Inside Global 和 Outside Global 一一对应,NAT从中进行转换。

也就是说发送出去的IP作为Inside Local会被转换到Inside Global,发进来的反向转换。

通常我们不会转化Outside IP(交由对方的路由器上进行转换),故通常配置转换条目时只需要inside。

使用静态net直接向NAT表中插入一条数据,指示Inside Local和Inside Global,而使用动态net和超载net则会在使用时向net表中添加。

为内部主机配置NAT之后,在外部仍然通过内网IP去ping可以ping通(显示由Inside Global返回),而Web服务不能通。(推测是由于发出的返回的IP不匹配导致)

ARP

已知目的IP,求目的MAC地址。

ARP协议工作在网络层,与数据链路层相接,在向远端IP发送消息时,每层都会做一次ARP请求,获得网关的MAC后将数据包发送给路由器。

路由器再使用ARP进行下一步MAC地址的获取,如此向前推进。

远距离初次连接时常常Timeout几次大多是因为还没有任何ARP缓存,需要进行很多操作。

注意:抓ARP包时不能用 ip. 来筛选,因为它也是网络层的协议,不是IP协议。

合理的方式是使用 数据链路层协议中的mac来查找 eth.addr

TCP

需要注意的:

  • 首部长度要保留到4个字节的整数倍(看ppt图),故首部长度字段指示的是4字节数,如该值为8,说明首部长32个字节。
  • 四次挥手中间两次都由服务端发出,开始关闭时发送第二次,关闭后发送第三次。
  • TCP三次握手和四次挥手的过程中,只有第一次不带有ACK标志,后续每次发送的ACK都指示上一次收到的SEQ+1,表示希望接到的下一个SEQ。
  • 握手和挥手之间,数据传输部分,也是每次一发一回应,由于TCP是基于字节流的通信,可以通过维护ACK和SEQ来保持字节流的可靠。
  • 为什么是三次握手?(个人理解)
    • 无论进行几次握手,都只有最后一次是冒险的(假设对方能收到我的消息并建立链接)
    • 那么一定不能让服务端进行最后一次握手,这样失败的代价较高。也就是说握手次数最好是奇数次。
    • 一次太少,五次太多,所以就三次。

另外用Wireshark查看Seq和Ack序号时,会有一个 (raw) 的和 (relative sequence number) 的,前一个表示原始的序号,后一个表示相对序号(从本次链接开始)

WireShark 筛选规则

基本格式 协议.字段

ip.addr 指示IP协议地址,eth.addr 指示数据链路层协议的MAC地址,tcp.port

通常 addr 指示任意一方的地址,srcdst 指示源和目的。

逻辑符 || && !

另外,启动时的筛选器和之后的筛选器似乎不一样?是一个前置的筛选,可以指示 host x.x.x.x 筛选主机


计网实验复习
http://www.lxtyin.ac.cn/2022/11/30/2022-11-30-计网实验复习/
作者
lx_tyin
发布于
2022年11月30日
许可协议