计算机网络(九)网络层详解
网络层的功能
1.路由选择与分组转发(选择最佳路径)
2.异构网络互联(不同类型的网络:4G、WIFI等)
3.拥塞控制(所有结点都处于高负荷不得不大量丢弃分组,采取手段缓解)
开环控制(静态)
闭环控制(动态)
数据交换方式
交换网络:由大量路由器组合的网络
电路交换
例:电话网络
步骤:建立连接(呼号/电路连接)->通信->释放连接(拆除电路)
特点:独占资源
优点:1.通信时延小、2.有序传输、3.没有冲突、4.实时性强
缺点:1.建立连接时间长、2.线路独占,效率低、3.灵活性差、4.无差错控制
报文交换
优点:1.无需建立连接、2.存储转发,动态分配线路、3.线路可靠性较高、4.线路利用率较高、5.多目标服务
分组交换
分组:把大的数据报文切割为小的数据块(分组)
优点:1.有报文交换的全部优点、2.存储更易管理(相对于报文交换)
缺点:1.有存储转发时延、2.需要传输额外的信息量、3.乱序到达目的主机,需要进行重新排序 (总体时延小于报文交换)
Attion! 1 Byte(B-字节)=8 bit(b-比特) 、1 Mbps=10^3 kbps=10^6 bps
总结
1.报文交换和分组交换都采用了存储转发
2.传送数据量大,且传送时间远大于呼叫时间,选择电路交换。电路交换传输实时延最小(不需要存储转发)
3.从信道利用率来看,报文交换和分组交换优于电路交换,其中分组交换时延更小
数据报方式:无连接服务
每个分组都携带源地址和目的地址
根据路由协议/算法构建转发表;检索转发表;每个分组独立选路
虚电路方式:连接服务
一种逻辑上的连接,虚电路上的每个结点都维持一张虚电路表
路由算法和路由协议
路由算法
静态路由算法:管理员手工配置网络
动态路由算法(自适应)路由器之间彼此交换信息,按照路由算法优化出路由表项
全局性:OSPF(知道全局网络拓扑)
分散性:RIP(只掌握相邻的链路拓扑)
分层次的路由选择协议
自治AS
内部网关协议IGP
外部网关协议BGP
TCP/IP协议栈
IP数据报格式
固定部分的长度为固定的20字节
首部长度的单位是4Byte(例如首部长度为5,则其表示的为5X4B=20B,取值范围为5-15)
总长度:首部+数据(单位是1B,最大为65535B)
协议字段不同于版本字段,指的是数据部分使用的协议
首部检验和:只检验首部
可选字段的长度为0-40B,不4B对其的数由填充字段补齐
数据报的分片
标识位:同一数据报使用同一标识
标志位 中间位DF=1禁止分片、DF=0允许分片
最低位MF=1“还有分片”、MF=0没有分片
片偏移:分片后分组在原分组中的相对位置,以8B为单位
IPv4地址
分类的IP地址
A类:1~126
环回地址:127(用于软件环回测试)
B类:128~191
C类:192~223
私有IP地址与NAT转换
A类:10.0.0.0~10.255.255.255
B类:172.16.0.0~172.31.255.255
C类:192.168.0.0~192.168.255.255
路由器不会转发目的地址是私有IP地址的数据报
主机发送的数据报到达NAT后,首部中的源IP地址和端口号会依据NAT转换表替换成路由器IP地址和端口号
子网的划分
子网掩码
将子网掩码与IP地址逐位取与,得到子网网络号:145.13.3.0
解析:子网掩码255.255.252.0对应前16位都是1(网络号),用IP地址与子网掩码按位取与得到结果:180.80.76.0(其中76是由77->010011 01取前6位得到的)
又由于需要发送广播,故剩下的主机号应该全部为1(010011 11->79)
结果是180.80.79.255,选D
构成超网
如 128.14.32.0/20表示网络前缀长度为20--子网掩码前20位为0
构成超网:将网络前缀缩短,使得多个子网聚合成一个较大的子网
例如:206.1.0.0/17 + 206.1.128.0/17 = 206.1.0.0/16
最长网络前缀匹配:选择路由表中匹配结果中前缀最长的那一跳。(前缀长=包含的地址块小)
网络前缀为24位,可以得出其使用最后8位用于划分子网,同时由其掩码可知,其最后8位中前5位是子网号,后3位是主机号
最大子网个数=2^5=32个 最大可分配地址为:2^3-2=6
IPv6
IPv6数据报格式:基本首部+有效载荷(选项+数据部分,选项包括各种扩展首部)
IPv6首部格式(基本首部40B)
流标签:属于同一个流的数据报具有同样的流标签
下一个首部:标识下一个扩展首部或上层协议首部(报文段)(扩展首部中也有)
IPv6的区别
IPv6的地址位扩大到了128位(16B)
IPv6彻底移出了校验和,使得每一跳的处理时间减少
IPv6支持即插即用(自动配置),无需使用DHCP协议
IPv6首部长度为8B的整数倍,IPv4的首部为4B的整数倍
IPv6只能在主机处分片,而IPv4还可以在路由器分片(ICMPv6--“分组过大”--不允许路由器分片)
IPv6支持资源预分配
IPv6取消了总长度字段改为有效载荷字段(首部和数据报长度合二为一)
IPv6取消了服务类型字段
IPv6的地址
单播:一对一,可以作为源地址和目的地址
多播:一对多,仅可作为目的地址
任播:对一个多播组内的一个用户发送,仅能作为目的地址(一般是最近的地址)
IPv6和IPv4的过渡
双栈技术:同时启用两个协议栈、互相转换
隧道协议:重新封装
IPv6组播
发送者仅发送一次数据,利用组播路由协议为其建立组播分发树,数据传输到终点才会开始分发和赋值
组播组成员即可以在同一局域网内,也可以在不同局域网内,需要路由器支持组播协议
组播地址:属于多播组的设备将会被分配一个组播组IP地址(相同标识符)
范围:224.0.0.0~239.255.255.255(D类地址)
组播数据报是不可靠交付,应用于UDP
组播数据报不会产生ICMP差错报文
不是所有D类地址都能作为组播地址
硬件组播
组播MAC地址以01-00-5E开头
收到组播数据报的主机还需要在软件层进行过滤,不属于本机要接收的组播数据报要丢弃
实现组播需要:IGMP协议和组播路由选择协议
路由器
三层设备的区别
路由器:可以互联两个不同网络层协议的网段
网桥:可以互联两个物理层和链路层不同的网段
集线器:不能互联两个物理层的不同网段
路由表
路由表可以得出转发表:转发表每一列都包含输出端口和某些MAC地址功能的映射
READLEAF: 这个需要内存足够大的场合才适用。可以一条记录一条记录地写入吗?
ViperL1: 那你进到函数里做单步调试看看,我用的时候没这个问题
qq_45761457: 但是我打印训练集里面非零元素个数,他出来的不是5*种类
ViperL1: 因为是每类标签5个
qq_45761457: train_gt, test_gt = sample_gt(gt, SAMPLE_PERCENTAGE, mode=SAMPLING_MODE) # 划分训练集和测试集SAMPLE_PERCENTAGE控制台传入 train_nonzero_count = np.count_nonzero(train_gt) print("训练集中的非零元素数量(有效标签数量):", train_nonzero_count)为啥我选的每个样本为5,这个怎么输出5436这么大