网络层
IP 协议
特指为实现在一个相互连接的网络系统上从源地址到目的地传输数据包(互联网数据包)所提供必要功能的协议
特点:
- 不可靠: 它 不能 保证 IP 数据包能成功地到达它的目的地,仅提供尽力而为的传输服务
- 无连接: IP 并不维护任何关于后续数据包的状态信息。每个数据包的处理是相互独立的。IP 数据报可以不按发送顺序接收
IP 数据包中含有发送它主机的 IP 地址 (源地址) 和接收它主机的 IP 地址 (目的地址)
IP 数据报首部中的相关数据长度单位 :
- 总长度单位 : 1 字节 ;
- 片偏移单位 : 8 字节 ;
- 首部长度单位 : 4 字节 ;
速记 : 一种 ( 总长度 ) 八片 ( 片偏移 ) 的首 ( 首部长度 ) 饰 ( 四 )
IP 首部
- 版本: 长度 4 位,表示 IP 协议的版本 IPV 4 或者 IPV 6。通信双方使用过的 IP 协议的版本必须一致。
- 首部长度: 长度 4 位,以 4 字节为单位,仅表示首部长度,不包含数据部分。
- 服务类型: 长度 8 位,表示数据报的优先级,一般不使用,取值为 0。前 3 位: 优先级,第 4-7 位: 延时,吞吐量,可靠性,花费。第 8 位保留
- 总长度: 长度 16 位,指首部加上数据的总长度,单位为字节。
- 标识符:长度 16 位,用来标识主机发送的每一份数据报。同一个数据报不同分片的标识符也是相同。分片使用**片偏移**来区分顺序。
- 标志 (flag): 目前只有两位有意义。
- 标志字段中的最低位记为 MF。MF=1 即表示后面“还有分片”。MF=0 表示这已是该数据包的最后一个分片了。
- 标志字段中间的一位记为 DF,意思是“不能分片”,只有当 DF=0 时才允许分片,主要是指传输过程中的分片[[网络层#IP 分片]]
- 片偏移: 分片在数据报中的位置,以 8 字节位单位
- 生存时间: TTL,表明是数据报在网络中的寿命,即为“跳数限制”,由发出数据报的源点设置这个段。路由器在转发数据之前就把 TTL 值减一,当 TTL 值减为零时,就丢弃这个数据报。通常设置为 364、128.
- 协议: 指出此数据报携带的数据时使用何种协议,以便使目的主机的网络层知道应将数据部分上交哪个处理过程,常用的
ICMP (1), IGMP (2), TCP (6), UDP (17), IPv 6 (41)
- 首部校验和:只校验数据报的首部,不包括数据部分。
- 源地址: 发送方 IP 地址
- 目的地址: 接收方 IP 地址
- 选项:用来定义一些任选项,如记录路径、时间戳等。这些选项很少被使用,同时并不是所有主机和路由器都支持这些选项。一般忽略不计。
IP 分片
主要根据首部的标识符,标志符,和片偏移进行相应的处理。为什么要分片?点击-> [[数据链路层#MTU 概念]]
缺点:因为 IP 传输没有保障机制,如果一个分片丢失,那么整个数据报都不能用了。
所以在使用 TCP 传输时,如果使用 IP 分片,那么就要对整个数据报进行重传,非常浪费网络资源,因此就有了 [[传输层#TCP 分段|TCP分段]],但是没有 UDP 分片,因为 UDP 不需要可靠传输。
- 标识确定分片属于哪个数据报
- 标志确定是否是数据报的最后一个分片,以及是否可以再分片,因为 MTU 不是固定值,链路上不同的设备有不同的 MTU [[数据链路层#MTU 概念]]
- 片偏移确定分片的顺序
总结
- 数据在 TCP 分段,在 IP 层就不需要分片,同时发生重传的时候只重传分段后的小份数据
- TCP 分段时使用 MSS,IP 分片时使用 MTU
- MSS 是通过 MTU 计算得到,在三次握手和发送消息时都有可能产生变化。
- IP 分片是 不得已 的行为,尽量不在 IP 层分片,尤其是链路上中间设备的 IP 分片。因此,在 IPv 6 中已经禁止中间节点设备对 IP 报文进行分片 ,分片只能在链路的最开头和最末尾两端进行。
- PMTU 整条传输链路上最小的 MTU
- 建立连接后,路径上节点的 MTU 值改变时,可以通过 PMTU 发现更新发送端 MTU 的值。这种情况下,PMTU 发现通过浪费 N 次发送机会来换取的 PMTU,TCP 因为有重传可以保证可靠性,在 UDP 就相当于消息直接丢了。
IP 选路
IP 选路确实是根据 路由选择的最长匹配原则。这个原则指的是,当路由器收到一个 IP 数据包时,会将数据包的目的 IP 地址与路由表中的各个表项逐位比较,选择匹配度最长的条目这样可以确保数据包能够通过最精确的路径到达目的地,提高网络性能和稳定性
最长匹配原则
目的 IP 和 s0,s1
的前缀都匹配,但是 s0
的匹配长度更长所以选 s0
.
路由表
#路由表
什么是路由表
路由表(Routing Table)是存储在路由器或联网计算机中的一种电子表格或类数据库。它记录了指向特定网络地址的路径信息,有时还包括路径的路由度量值路由表的主要作用是帮助路由器或计算机决定数据包的转发路径,从而实现网络通信的高效和准确
什么是动态路由协议
动态路由协议是一种网络协议,允许路由器自动建立和维护路由表,而无需手动配置。这些协议通过在路由器之间交换路由信息,了解网络拓扑结构的变化,并根据实际情况动态调整路由表。
常见的动态路由协议包括:
- RIP(Routing Information Protocol):基于距离向量的协议,适用于小型网络。
- OSPF(Open Shortest Path First):基于链路状态的协议,适用于大型网络。
- EIGRP(Enhanced Interior Gateway Routing Protocol):思科专有的高级距离向量协议,结合了距离向量和链路状态的优点。
动态路由协议的主要优点是能够自动适应网络拓扑的变化,减少了手动配置的工作量,并提高了网络的可靠性和灵活性
为什么路由表中没有我访问网站的路径
由你发送:
我使用 ping 通了哔哩哔哩(IP:47.103.24.173)但是查看我电脑的路由表并没有对应的路径,这是为什么?
Copilot 回答:
这是一个很有趣的问题!当你使用 ping
命令时,实际上是通过网络层协议(如 ICMP)发送数据包到目标 IP 地址。即使你的路由表中没有明确的路径,操作系统和网络设备会根据默认路由或动态路由协议来决定数据包的转发路径。
以下是几个可能的原因:
- 默认路由:如果你的路由表中有一个默认路由(通常是指向网关的 0.0.0.0/0),那么所有没有明确路径的流量都会通过这个默认路由发送。
- 动态路由协议:一些网络使用动态路由协议(如 OSPF、BGP)来自动更新路由表,这些协议可能会在后台处理路由信息。
- 缓存:操作系统和路由器可能会缓存最近使用的路径信息,即使这些信息没有立即反映在路由表中。
你可以使用 tracert
(Windows)或 traceroute
(Linux/Mac)命令来查看数据包到达目标 IP 的具体路径,这样可以更清楚地了解数据包的转发过程。
Tracert 命令
查看到达目标 IP 的具体路径 其中 10.10.211.254
是我的网关,其他的 IP 只能说链路上的事儿少打听。
ICMP 协议
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是 IP 协议并不提供可靠传输。如果丢包了,IP 协议并不能通知传输层是否丢包以及丢包的原因。所以我们就需要一种协议来完成这样的功能–ICMP 协议。例如 ping
功能就是通过 ICMP 协议实现的。
ICMP 首部
- 类型:用来表示 ICMP 类型,一般可以分为两类:差错报文和查询报文
- 代码:报文代码和类型一起确定报文类型
- 校验和:包括首部和数据部分
两种查询报文
- 回送请求和回答报文 : 主机 / 路由器询问特定主机 , 目的主机收到该报文后 , 必须给源主机发送 ICMP 回答报文 ; 目的是测试该目的主机是否可达 ;
- 时间戳请求和回答报文 : 请求主机 / 路由器当前的日期和时间 ; 用于进行时钟同步和时间测量
五种差错报文
终点不可达报文 : 路由器 / 主机不能交付数据报时 , 就会向源点发送终点不可达报文 ;
源点抑制报文 : 路由器 / 主机拥塞 , 丢弃 IP 数据报 , 向源点发送源点抑制报文 , 让源点降低发送速率 ;
时间超过报文 :
- 生存周期为 0: 路由器生存周期 TTL = 0 00 时 , 丢弃该报文 , 同时向源点发送时间超过报文 ;
- 分组丢失 : 终点在预定时间内没有收到数据报的全部数据分组时 , 就会将已收到的数据分组全部丢弃 , 向源点发送时间超过报文 ;
参数问题报文 : 路由器 / 主机收到的数据报首部字段由错误值 , 丢弃该数据报 , 向源点发送参数问题报文 ;
改变路由报文 : 路由器将改变路由报文发送给主机 , 让主机下次将数据报发送给另外的路由器 ; 又称为 “重定向报文” ;