网络层
IP协议提供了一种分层的、与硬件无关的寻址系统,它可以在复杂的路由式网络中传递数据所需的服务。
IP协议可以将多个交换网络连接起来,在源地址和目的地址之间传送数据包。同时,它还提供数据重新组装功能,以适应不同网络对数据包大小的要求。
在一个路由式网络中,源地址主机向目标地址主机发送数据时,IP协议是如何将数据成功发送到目标主机上的呢?
同网段
如果源地址主机和目标地址主机在同一网段,目标IP地址被ARP协议解析为MAC地址,然后根据MAC地址,源主机直接把数据包发给目标主机。
不同网段
网关(一般为路由器)的IP地址被ARP协议解析为MAC地址。根据该MAC地址,源主机将数据包发送到网关
网关根据数据包中的网段ID寻找目标网络。如果找到,将数据包发送到目标网段;如果没找到,重复 步骤1 将数据包发送到上一级网关
数据包经过网关被发送到正确的网段中。目标IP地址被ARP协议解析为MAC地址。根据该MAC地址,数据包被发送给目标地址的主机
IP
协议为上层应用提供无连接、无状态、不可靠的服务。
路由器:一个路由器具有两个或多个网络接口层(因为它连接了两个或多个网络)。任何具有多个接口的系统,英文都称作是多接口的。一个主机也可以有多个接口,但一般不称作路由器 , 除非它的功能只是单纯地把分组从一个接口传送到另一个接口。同样,路由器并不一定指那种在互联网中用来转发分组的特殊硬件盒。大多数的TCP/IP实现也允许一个多接口主机来担当路由器的功能,但是主机为此必须进行特殊的配置。在这种情况下,我们既可以称该系统为主机,也可以称之为路由器(当它把分组从一个网络转发到另一个网络时)。在不同的场合下使用不同的术语。
网桥和路由器都可以对网络进行互联,它们的区别是什么?
网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网络进行互连。网桥使得多个局域网(LAN)组合在一起,这样对上层来说就好像是一个局域网。TCP/IP倾向于使用路由器而不是网桥来连接网络。
路由器(Router)
: 实现分组交换(packet switching)
的关键构件,任务就是转发收到的分组(packet)
,路由器收到一个分组
先暂时存储下
检查其首部
查找转发表
按照首部中的目的地址,找到合适的接口转发出去,给下一个路由器,这样一步步转发,最终把分组交付到目的主机
基本数据单位为 IP 数据报
路径选择 路由 以及 逻辑寻址
无链接数据报传输 数据报路由选择 和 差错控制
负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能
协议: IP ICMP 因特网控制报文协议, ARP 地址解析协议, RARP 逆地址解析协议
设备: 路由器
ipV4地址分类
A 类地址: 0xxxxxxxx : 0.0.0.0 ~ 127.255.255.255, A 类私有地址: 10.0.0.0/8, 回环地址 127.0.0.1/8 表示本机地址
B 类地址: 10xxxxxxx : 128.0.0.0 ~ 191.255.255.255, B 类私有地址: 172.16.0.0/12 到 172.31.255.255/12
C 类地址: 110xxxxxx : 192.0.0.0 ~ 223.255.255.255, C 类私有地址: 192.168.0.0/16
D 类地址: 1110xxxxx : 224.0.0.0 ~ 239.255.255.255 作为组播地址(一对多的通信)`
E 类地址: 11110xxxx : 240.0.0.0 ~ 255.255.255.255 保留地址,供以后使用。
只有 A,B,C 有网络号和主机号之分,D 类地址和 E 类地址没有划分网络号和主机号。
任意网段,其主机号为全 1 的的地址,称为这个网段的 广播地址,向这个地址发包,所有该网段内的所有主机都会接收
任意网段,其主机号为全 0 的的地址,称为这个网段的 网络地址,代表着这个网段
InterNIC (Internet Network Information Center)机构分配 IP,但是只分配网络号,具体主机号留给系统管理员分配
单播地址: 目的端为单个主机
广播地址: 目的端为给定网络号上的所有主机
多播地址: 目的端为同一组内的所有主机
不可靠: 不保证 IP 数据报一定能到达目的地
无连接: IP 不维护任何关于后续数据报的状态信息,即每个数据报的处理是相互独立的
子网掩码 以及 网络划分
子网掩码是用来计算两个 IP 地址是否同属于一个子网的,也是 32 位二进制地址,其每一个为
1
代表该位是网络位,为0
代表主机位判定在同一个网段中: 两个 IP 地址在子网掩码的
&
的计算下所得结果相同,即表明它们共属于同一子网中168.195.0.0
划分成 27 个网段,其掩码是多少? 分析: 1.它是 B 类地址 2. 划分子网就是利用主机位充当网络位,27 = 11011(二进制),故需要 5 位. 答案:255.255.248.0
168.195.0.0
划分子网,每个子网有主机 700 台,求掩码? 700 = 1010111100, 其主机号需要 10 位来表示,所以掩码为:11111111.11111111.11111100.00000000
子网有 10 台主机,那么对于这个子网需要的 IP 地址是
10+1+1+1=13
个, 三个 1 分别是网关地址
,网络地址
和广播地址
, 13 = 1101, 所以主机号需要 4 位, 其掩码为255.255.255.224
IP 首部
版本 4 + 首部长度 4 + TOS 服务类型 8 + 总长度 16
标识 16 + 标志 3 + 偏移 13
生存时间 8 + 协议 8 + 首部检验和 16
源 IP 地址 32
目的 IP 地址 32
[选项]
TCP 数据
环路接口
为了在同一台主机上实现 TCP/IP 通信
127 网段就是为环路接口预留的
分片洪水攻击
当一个设备准备传输一个IP数据包时,它将首先获取这个数据包的大小,然后获取发送数据包所使用的网络接口的最大传输单元值(MTU)。如果数据包的大小大于MTU,则该数据包将被分片。将一个数据包分片包括下面几步:
设备将数据包分为若干个可成功进行传输的数据包
每个IP数据包的首部的总长度域会被设置为每个分片的片段长度
更多分片标志将会在数据流的所有数据包中设置为1,除了最后一个数据包
IP数据包头中分片部分的分片偏移将会被设置
数据包被发送出去
目标主机收到分片包后,会根据分片信息重组报文。如果发送大量的无效IP分片包,会造成洪水攻击。
$ netwox 74 -i 101.200.144.41 # 对目标IP地址发起分片洪水攻击
ICMP 协议
Ping
和 traceroute
都使用它,ip 辅助协议
IGMP 协议
用来把 UDP
数据多播到多个主机
ARP协议
根据目标 IP 地址获取其 Mac地址 的一个协议。
主机向自己所在的网络,广播一个ARP请求(内含目标机器的IP地址),此网络的机器收到这个请求后,和自身IP对比,只有目标机器才会返回一个ARP应答(包含自己的MAC地址)。
ARP协议是数据传输的必备协议。主机发送信息前,必须通过ARP协议获取目标IP地址对应的MAC地址,才能正确地发送数据包。
在网络访问层中,同一局域网中的一台主机要和另一台主机进行通信,需要通过MAC地址进行定位,然后才能进行数据包的发送。
而在网络层和传输层中,计算机之间是通过IP地址定位目标主机,对应的数据报文只包含目标主机的IP地址,而没有MAC地址。因此,在发送之前需要根据IP地址获取MAC地址,然后才能将数据包发送到正确的目标主机,而这个获取过程是通过ARP协议完成的。
工作原理
主机 A 的 IP 地址为192.168.1.1
,MAC 地址为0A-11-22-33-44-01
,主机 B 的 IP 地址为192.168.1.2
,MAC 地址为0A-11-22-33-44-02
当主机 A 要与主机 B 通信时,地址解析协议可以将主机 B 的 IP 地址解析成主机 B 的 MAC 地址,以下为工作流程:
首先, A 得知道 B 的 IP 地址为
192.168.1.2
, 要构造 IP 报文发现没有 B 的 MAC 地址, 于是 A 查询本地 ARP 缓存中检查: 是否有该 IP 对应的 MAC 地址啊? 如果有就直接用了。但是主机 A 在 ARP 缓存中没有找到映射,所以 A 将
ARP请求帧
广播到本地网络上的所有主机。ARP 请求数据包括了: A 的 IP 地址和 MAC 地址 + B 的 IP 地址。本地网络上的每台主机都接收到 ARP 请求并且检查是否与自己的 IP 地址匹配。如果主机发现请求的 IP 地址与自己的 IP 地址不匹配,它将丢弃 ARP 请求。
主机 B 确定 ARP 请求中的 IP 地址与自己的 IP 地址匹配,则将主机 A 的 IP 地址和 MAC 地址映射添加到本地 ARP 缓存中。
主机 B 将包含其 MAC 地址的
ARP回复消息
直接发送回主机 A当主机 A 收到从主机 B 发来的
ARP回复消息
时,会用主机 B 的 IP 和 MAC 地址映射更新 ARP 缓存。主机 B 的 MAC 地址确定了,主机 A 就能向主机 B 发送 IP 数据报了。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程
$ sudo arp -a # 查看arp缓存
_gateway (192.168.31.1) 位于 <incomplete> 在 kvmbr0
_gateway (192.168.31.1) 位于 8c:53:c3:80:18:ad [ether] 在 enp4s0
? (192.168.31.113) 位于 08:00:27:39:ad:98 [ether] 在 enp4s0
ARP 欺骗
ARP协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送 ARP 应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机 ARP 缓存;由此攻击者就可以向某一主机发送伪 ARP 应答报文,使其发送的信息无法到达预期的主机或到达错误的主机。
$ ifconfig # 查询本机的 ip
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.102 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::6aff:f269:1d00:8917 prefixlen 64 scopeid 0x20<link>
# 监听 这两个IP 地址之间所有 的 帧
$ sudo tcpdump -i enp2s0 -ent \
'(dst 192.168.0.102 and src 101.200.144.41) or (dst 101.200.144.41 and src 192.168.0.102)'
$ sudo tcpdump -i enp2s0 -ent
$ sudo arp # 查看 arp 缓存
RARP 协议
其将局域网中某个主机的物理地址转换为 IP 地址,比如局域网中有一台主机只知道自己的物理地址而不知道 IP 地址,那么可以通过 RARP 协议发出征求自身 IP 地址的广播请求,然后由 RARP 服务器负责回答;工作流程如下
给主机发送一个本地的 RARP 广播,在此广播包中,声明自己的 MAC 地址并且请求任何收到此请求的 RARP 服务器分配一个 IP 地址;
本地网段上的 RARP 服务器收到此请求后,检查其 RARP 列表,查找该 MAC 地址对应的 IP 地址;
如果存在,RARP 服务器就给源主机发送一个响应数据包并将此 IP 地址提供给对方主机使用;
如果不存在,RARP 服务器对此不做任何的响应;
源主机收到从 RARP 服务器的响应信息,就利用得到的 IP 地址进行通讯;如果一直没有收到 RARP 服务器的响应信息,表示初始化失败。
路由选择协议
RIP 协议 :底层是贝尔曼福特算法,它选择路由的度量标准(metric)是跳数,最大跳数是 15 跳,如果大于 15 跳,它就会丢弃数据包。
OSPF 协议 :Open Shortest Path First 开放式最短路径优先,底层是迪杰斯特拉算法,是链路状态路由选择协议,它选择路由的度量标准是带宽,延迟。