关于计算机网络中的基础知识以及一些容易理解错的点,归纳如下:
传统网络学习1
一、Traceroute命令
命令格式
traceroute [-qm] host q:给每一hop发送的ICMP包数目 -m:总共希望探测的路由数
原理
分析流程
主机30.0.1.9向目标主机8.102发起UDP请求,目的端口号从33434递增,同时TTL值也递赠
红色标记处为三条ICMP报错信息,第一条报错如下:
ICMP中包含UDP包,该UDP包对应着TTL=1的发送包,这意味着第一跳为30.0.1.1(网关)
同理,由第三条红色标记可知:路由第二跳为172.171.80.1
由第二条红色标记表明,数据包到达目标主机的3XXXX端口后,无法访问该端口,报错,所以最后目的地为80.102
参考链接 :Traceroute原理
二、route命令
- 命令格式:
1、 查看:route [-n]
-n 表示不解析域名,全部以IP地址来显示信息
2、 添加路由:
route add <-net x.x.x.x> <netmask x.x.x.x> <dev ethx> [gateway x.x.x.x]
3、 删除路由:
route del <-net x.x.x.x> <netmask x.x.x.x> <dev ethx> [gateway x.x.x.x]
4、 删除/添加默认网关(特殊的一条路由):
route add/del <default gw x.x.x.x>
- 命令图解
说明:
- 蓝色部分体现了参数-n的区别
- 红色部分显示添加路由效果
- 紫色部分:U代表路由是活动的;G代表该路由项包含网关,即跨网段;H表示目标网络是一台主机HOST
三、netstat命令
- 命令格式:netstat [-tunlap]
-t:tcp
-u:udp
-n:不你想解析域名,仅以IP显示信息
-l:listen,查看处于监听状态的连接
-a:all
-p:PID以及进程名称
-c:持续输出
-p参数的含义主要体现在一些本地应用的Unix套接字上,tcp/udp类型的连接使用该参数无效果。
四、tcpdump命令
- 格式:tcpdump [-irw] [regex]
-i:interface
-r:read读取抓包文件
-w:write将抓包结果写入文件
regex:过滤表达式,最好用双引号括起来
tcpdump的过滤表达式是一个正则表达式,tcpdump利用其作为过滤数据包的条件。如果一个数据包满足表达式的条件,则这个数据据包将会被捕获;如果不指定表达式,则在网络上任何两台主机间的所有数据包都将被截获。tcpdump的过滤表达式中一般有如下几种类型的关键字:
–类型关键字:包括host、net、port。
–方向关键字:包括dst、src、dst or src、dst and src。
–协议关键字:包括ether、fddi、tr、ip、ip6、arp、rarp、decnet、tcp和udp。
例如:
tcpdump -i eth1 ‘((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))’
上述命令表示:抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数据。
- 图解
注意:以上三种正则均可,但最好带括号,结构清晰
说明:以上为读写参数的说明
五、wireshark工具使用
- 捕获过滤器:同tcpdump的REGEX
默认捕获所有的数据包!!!然后用显示过滤器来过滤
- 显示过滤器:
1、 过滤协议:直接在过滤框输入协议名称
2、 过滤MAC:eth.dst/src==x:x:x:x:x:x
3、 过滤IP:ip.src/dst==x.x.x.x
4、 过滤端口:tcp.srcport/dstport==xx
5、 过滤协议具体字段(用的时候网上查即可)ip.len==xx等
6、 逻辑组合:and(&&)or(||)
六、MAC协议学习
- 协议格式(Ethernet II)
-协议类型汇总:
- 协议图解
关键字段只有三个:源MAC、目的MAC、上层数据包类型
七、IP协议学习
1、 IP地址划分
2、 网络数/主机数计算(以C类地址为例)
八、集线器(Hub)、网桥、交换机、路由器的区别
1、 集线器
早期电脑与电脑相连接使用同轴电缆,也就是多台电脑争用同一根线。集线器相当于多条同轴电缆的星型网络,本质上还是同一条总线,不同电脑通信会争抢同一条链路,每次通信。此外,集线器还负责信号的整形放大,又称为多接口放大器。
特征:
1. 同一冲突域
2. 同一广播域
3. 所有主机位于同一网络(网段)
4. 集线器位于物理层
2、 网桥
假如有5台主机,使用网桥来分隔两边2,3台,网桥上有存储,可以记住自己的两个接口各对应哪些mac地址,这样主机通信就不用老是广播了,注意在这里网桥直接连接的并不是主机而是直接连接是两个同轴电缆。
特征:
- 网桥连接的两个局域网位于同一网络(网络号肯定相同)
- 网桥隔离了冲突域
- 由于是同一网络,所以无法隔离广播域!
- 网桥位于数据链路层(二层)
- 网桥是二层交换机的雏形,可以看做两端口的简单版的二层交换机
3、 二层交换机
后来需要连接的同轴电缆多了,就在网桥上开了多个接口,这就是二层交换机,所以二层交换机是多口的网桥。刚开始交换机上依然还是接的同轴电缆,后来同轴电缆淘汰之后现在人们直接使用交换机来连接主机。
网桥的诞生减轻了大规模冲突的问题,交换机的诞生彻底解决了冲突问题,我们现在使用双绞线连接电脑和交换机,A与B通信的同时,B也可以给A通信
工作原理:当交换机从某个端口收到一个数据包,它先读取包头中的源MAC地址,这样它就知道源MAC地址的机器是连在哪个端口上的;再去读取包头中的目的MAC地址,并在地址表中查找相应的端口;如表中有与这目的MAC地址对应的端口,把数据包直接复制到这端口上;如表中找不到相应的端口则把数据包广播到所有端口上,当目的机器对源机器回应时,交换机又可以学习一目的MAC地址与哪个端口对应,在下次传送数据时就不再需要对所有端口进行广播了。
特征
- 二层交换机连接的多台主机位于同一网络
- 二层交换机彻底隔离了冲突域,每一个交换机物理端口就是一个冲突域(一台主机一个冲突域,即不存在冲突)
- 下挂主机属于同一网络,所有下挂主机处于同一广播域,自然无法隔离广播域
- 二层交换机位于数据链路层
- 二层交换机的端口不需要配IP,因为它工作在二层;因为二层交换机不具备路由功能,因此,同一交换机上的主机不能是不同网段,否则不同网段间无法通信。
- 二层交换机工作流程(如上图):
说明:主机1与主机2位于同一网段;主机3与主机4位于同一网段。实验结果表明主机1与主机2可互相ping通,主机3与主机4可互相ping通
以主机1 ping 主机2为例:
1. host1想知道10.0.1.3对应的MAC地址,便于交换机直接二层转发,如果本机内没有对应的ARP高速缓存,则进行ARP广播
2. ARP数据包位于三层,对于二层交换机不可见,二层交换机只做二层的MAC帧广播
3. Host2收到ARP包后,返回Ip MAC对应表给主机1,主机1知道目的MAC地址后,发送MAC帧给交换机。
4. 交换机依照端口号-MAC地址对应表,找到主机2对应端口,进行转发,双方建立通信 以主机1 ping 主机3为例: 1. host1想知道10.0.2.1对应的MAC地址,便于交换机直接二层转发,如果本机内没有对应的ARP高速缓存,则进行ARP广播 2. ARP数据包位于三层,对于二层交换机不可见,二层交换机只做二层的MAC帧广播 3. 同一网段内不存在主机的IP地址为10.0.2.1 4. 路由器对ARP广播进行响应,返回路由器Ip-MAC对应表 5. 主机1将数据包发往路由器 6. 路由器完成下一步转发
4、 路由器注意:在互联网中,局域网=同一网段
路由器诞生解决广播问题,任意广播都穿越不了路由器。网桥和交换机上记录的都是mac地址,路由器上记录并不是mac地址,而是ip地址段。路由器彻底解决了广播问题。
只有路由器能连接两个局域网(不同网段)
- 特征:
- 路由器连接的多个网络默认为不同网段,相同网段的网络用不着拿路由器连接,太浪费
- 路由器连接的网络间,不仅隔离了广播域,还隔离了冲突域,原因:某个局域网的广播包无法跨网段广播!!!如10.0.1.255/24的广播地址是播不到网络10.0.2.0/24的
- 工作在网络层
判断冲突域的方法:共享传播介质的主机的集合是一个冲突域;
判断广播域的方法:同一网段内的主机集合是一个广播域
九、二三层网络关系梳理
(一)二层网络–以太网
1、最早期以太网
特征:所有计算机通过同轴电缆连接起来,某一主机发送以太帧,其他主机都能侦听到!通信依据为MAC地址,不存在IP的概念。
以太网不存在自动获取MAC地址的协议,所以要想通信,必须通过某种物理方式获取通信主机的MAC地址(如:打电话)
通信过程:
host1发送某个以太帧
其他所有主机都接受到该帧,对比帧的目的MAC地址与适配器(网卡)的MAC地址,如果一致则接受;不一致则丢弃。
注意:早期以太网卡可能只有MAC地址,无IP信息。
2、 网桥出现后的以太网
特征:以太网可以连接不同的物理网段了,如将多条同轴电缆连接起来,组成大的一个网络;如将两条不同速率的同轴电缆(所谓的异构物理网络)连接起来,但到目前为止,IP的三层概念还未引入,当前还是小范围的以太网(局域网)
网桥会自学习:端口1上同轴电缆1所有MAC地址;端口2上同轴电缆2所有MAC地址,最终形成一张端口、MAC地址对应表,如:port1–[mac1,mac2,mac3…]。
通信过程
host1发送以太帧给host2,同一同轴电缆上的主机由于MAC地址不匹配自然无法应答
网桥由于记录了两端口所有MAC地址,所以可以对帧进行响应
网桥接受了以太网帧,查询MAC表,发现目的MAC对应端口2;于是修改源MAC地址,从端口2发出以太帧
同轴电缆2的主机均侦听到了该帧,但通过查看网卡MAC地址,只有主机2能正确接受帧,完成一次通信
可以看出,通信过程中不存在IP,只关注二层,所以网桥连接的网段可以是同一网络,也可以是不同网络,这些都与二层通信无关。
在IP诞生之后,也就是跨局域网(以太网)通信诞生之后,同一网桥连接的网段必须处于同一网络(网络号相同),否则需要借助三层路由功能。比如,如下图所示,主机1与主机2可ping;主机3与主机4可ping;如果跨网络通信则需借助三层的路由器,但交换机与路由器一般只有一条链路,对应路由器的一个接口(网卡),正常的路由器建立路由至少是两个接口之间建立,所以必须采用一些高级的三层技术,比如单臂路由(在一个接口上虚拟出两个网卡,配两个Ip等)
3、 二层交换机出现后的以太网
本质上与网桥是一样的
通信过程
主机1发送以太帧给主机2,首先发送给与主机1相连的交换机端口,交换机获取目的MAC,查看MAC表
根据MAC表,以太帧从对应端口发送出去,当然源MAC会改变。
二层交换机不存在IP的概念,故连接在交换机上的主机可以属于同一网络,也可以属于各自不同的网络,实验如下:
要想两个网络间实现通信,需要在路由器内进行高级配置,将路由器网卡0配置两个IP,具体配置指令为:
路由器配IP:
set interfaces ethernet eth0 address 10.0.1.1
set interfaces ethernet eth0 address 10.0.2.3
主机1配默认网关:
route del default gw 30.0.1.1
route add default gw 10.0.1.1
主机2配默认网关:
route del default gw 30.0.1.1
route add default gw 10.0.2.3
通过上述配置,可以查看路由器,
如上图,路由器已经成功感知到两个不同网络连接在路由器上,并且这两个网络由路由器直连,不需要手动配路由!!两个网络借助了三层路由器后,终于可以通信了!!!
(二)跨三层网络的通信过程
通信过程
- Host1想要发送IP数据包给Host2(建设Host1:10.0.0.2;Host2:10.0.1.2)。
- Host1首先查看主机的路由表(可以通过route命令手动查看)是否包含通往10.0.1.2的路由。如果存在路由:吓一跳为Router1的port1(网关),则主机1将数据包发往router1;如果不存在专有的路由项,则匹配默认路由,通常情况下默认路由也是router1的某个与该网络连接的网关(port1),此时数据包仍被发往router1
- 确定路由的吓一跳后,主机开始层层封装数据包:IP层的源Ip地址为Host1的IP,目的IP地址为Host2的IP;MAC层的源MAC是Host1的MAC地址,目的MAC是Route1的对应网关的MAC地址
- MAC帧被发往Switch1,交换机查看映射表,找到目的MAC(router1的网关port1)对应的交换机port2,把MAC帧转发出去,不做任何修改
- Router1接收到MAC帧,解封装拿到IP包,找到目的IP,查找路由表,确定吓一跳为Router2的与之连接的那个网关(port2);将IP包封装为MAC帧,源MAC为Router1的Port2对应的MAC地址,目的MAC为router2的Port2对应的MAC地址
Router2收到MAC帧,解封装,查看目的IP,在查看路由表,发现目的IP在Router2连接的某个子网中(即,路由器2端口Port2下连接的子网);将IP封装成MAC帧,源MAC设为Router2端口Port1的MAC地址,目的MAC设为Host2的MAC地址,将该MAC帧从Port1发送出去。
当然,此时如果router2的ARP高速缓存里没有Host2的MAC地址,则Router2从端口Port1广播ARP,也可以查找到HOst2(10.0.1.2)对应的MAC地址
交换机照常转发,略
- Host2顺利收到数据
可以得出结论
1、IP地址的定位作用是跨网段的!!!
2、MAC地址的定位作用仅限于一跳或者说一条链路!!
3、二层交换机以及网桥连接下的两条物理链路仍归为一跳,或者一条逻辑链路
4、IP地址在传递过程中始终不变;MAC地址在经过一跳时,目的MAC与源MAC均改变