计算机网络
计算机网络
湖科大教书匠(新):https://www.bilibili.com/video/BV1NT411g7n6?t=911.9&p=87
湖科大教书匠(旧):https://www.bilibili.com/video/BV1c4411d7jb?t=4.7
王道考研:https://www.bilibili.com/video/BV19E411D78Q?t=0.0
慕课:https://www.icourse163.org/spoc/learn/UESTC-1450310478?tid=1470113607#/learn/announce
子网划分(强推):https://www.bilibili.com/video/BV1Le4y1x77n?t=536.9
迪杰斯特拉:https://www.bilibili.com/video/BV1zz4y1m7Nq?t=218.6
链路状态:https://www.bilibili.com/video/BV1rg411P7EB?t=38.9
web缓存:https://www.bilibili.com/video/BV1Md4y1H7ck?t=56.4
作业说明:https://docs.qq.com/doc/DRkZNTWxnT2FHcU1E
单进程:https://uestc.feishu.cn/wiki/wikcnMH2NgjBeuoEticvwqFLgie
多进程:https://uestc.feishu.cn/wiki/MG9QwHAIki5VbvkMj14csf0knve
实验原理:https://uestc.feishu.cn/wiki/wikcnSWl7WeTNsPXokZOH4kEmLf
零、期末考试
易混点:
对于检验:UDP和TCP都是检验首部+数据,IP只检验首部 对于长度: UDP:总长度 TCP:首部长度; IP:首部长度;总长度;
MSS最大报文段长度(数据) MTU最大传输单元(数据) 协议数据单元
概述重点题
为什么分层
- 将一个大而复杂系统划分为若干个明确、特定的部分,分别讨论研究。
- 易于维护、系统的更新:某层功能变化,不会影响系统其余部分。
分层的缺点
- 有些功能可能在不同层重复出现:如基于链路和基于端到端传输的差错恢复;
- 某层的功能可能需要仅存在其他某层的信息。
CS架构的特点
服务器:
- 保持开机状态
- 固定的IP地址
- 可以采用可拓展的数据中心
客户端
- 主动与服务器进行通信
- 可以间断性连接
- 可采用动态ip
- 客户端相互进程之间不通信
P2P架构的特点
- 服务器不需要总是保持开机状态
- 任意的终端系统之间可以直接通信
- 对等节点从其它对等节点获取服务,同时也可以未其它对等节点服务
- 自我可拓展性,带来了新的服务能力,增加了新的需求
- 对等节点之间可以间歇性互联和改变ip地址
- 管理非常复杂
tcp可以提供的服务:可靠传输,流量控制,拥塞控制
tcp不能提供的服务:安全性保障,最小吞吐量保证,时间控制
udp可以提供的服务:不可靠传输
udp不能提供的服务:可靠传输,流量控制,拥塞控制,安全性,最小吞吐量,时间保证
cookie的应用场景
- 会话保持
- 购物车
- 推荐系统
- 身份认证
dns提供的服务
- 主机名到ip地址转换
- 主机别名
- 邮件服务器的别名
- 负载均衡
为什么不使用两次握手
- 三次握手已经达到可靠传输的目的,更多次的握手就是多次重复确认,从效率上说没必要
为什么要引入sdn
- 更易于进行网络管理,流量控制更加灵活
- 基于表的转发允许对路由器编程
- 在传统路由中很难实现流量工程
sdn的特征
- 基于流的转发 分组的转发可以基于数据链路层,网络层,运输层的协议数据单元
- 数据平面和控制平面分离
- 可编程的网络
- 位于数据层面分组交换机之外的网络控制功能
openflow的作用
- openflow是sdn中控制层面和数据层面的通信接口
- openflow使得控制层面的控制器可以对数据层面的物理设备进行直接访问
vlan的功能
- 流量隔离
- 动态关系:动态分配端口
链路层的功能
- 封装成帧
- 透明传输
- 差错检测
- 错误纠正
- 流量控制
- 在相邻节点提供可靠传输数据帧
- 全双工和半双工
多路访问协议类型:
- 信道划分协议
- 随机访问协议
- 轮流协议
使用web缓存的好处
- 降低客户端的响应时间
- 大大减少内部网络与因特网接入链路上的流量
- 较弱的icp也能有效提供内容
一、计算机网络
sdn
https://www.bilibili.com/video/BV15L411E7eE?t=1437.0
1.1 互联网在信息时代的作用
大众熟悉的三大类网络:
- 电信网络:电话,传真
- 有线电视网络:电视节目
- 计算机网络
现在电信网络和有线电视网络正在融合进计算机网络
:star:互联网的2个重要基本特点:
- 连通性
- 资源共享
1.2 概述
:star:什么是计算机网络
- 两台以上具有独立操作系统的计算机通过某些介质连接成的相互共享软硬件资源的集合体。
:star:什么是协议
- 定义了两个或多个通信实体间所交换报文的
格式
和次序
,以及在报文发送和接收或者其他事件方面所采取的行动
(响应)
:star:协议的三个要素
- 语法
- 语义
- 同步
计算机历史的发展:
1969-1990 从单个网络ARPAnet向互联网发展;1983年,TCP/IP成为ARPAnet的标准协议,这一年也称为互联网的诞生时间
1985-1993 建立了三级结构的互联网:主干网,地区网,校园网、企业网
1993-现在 全球范围内的多层次ISP结构的互联网
互联网交换点:
- 允许两个网络直接相连并快速交换分组
1.3 互联网的组成
从工作方式上看,可以分为两大块:
边缘部分
由所有连接在互联网上的主机组成
核心部分
由大量网络和连接这些网络的路由器组成
端系统的两种通信方式:
- B/S: 进程之间服务和被服务的关系
- P2P: 不区分服务请求方和服务提供方
电路交换分为三个部分:
- 建立连接
- 通话
- 释放连接
电路交换特点:
- 通话的两个用户始终占据着端到端的通信资源
分组交换的优点:
- 高效 动态分配传输带宽,对通信链路是逐段占用
- 灵活 为每一个分组独立选择最合适的转发路由
- 迅速 以分组为单位,可以不先建立连接就能向其它主机发送分组
- 可靠 保证可靠性的网络协议
分组交换的缺点:
- 排队延迟 分组在路由器分组转发时需要排队
- 不保证带宽 动态分配
- 增加开销 各分组必须携带控制信息,路由器要暂存分组,维护转发表
1.4 计算机网络的类别
按照网络的作用范围分类:
- 广域网WAL
- 城域网MAN
- 局域网LAN
- 个人区域网PAN
按照网络的使用者进行分类:
- 公用网 按规定缴纳费用的都可以使用
- 专用网 为特殊业务工作的需要而建立的网络
- 接入网 用来把用户接入互联网
1.5 计算机网络的性能指标
速率:
指的是在理想状态下,一定时间内网络信道能通过的最大数据量(并不是实际速率)
1Gbit=1024Mbit=1024*1024Kbit=1024*1024*1024bit
1Gbit/s=1000Mbit/s=1000*1000Kbit=1000*1000*1000bit
带宽:
- 在单位时间里网络中的某
信道
所能通过的最高数据率,单位也是bit/s
吞吐量:
- 单位时间内通过某个网络(或信道、接口)的
实际
数据量
时延:
- 指数据从网络的一端传送到另一端所需的时间
- 组成
- 发送时延
- 传播时延
- 处理时延 处理分组,比如分析首部,提取数据,差错检验,寻找路由
- 排队时延 在路由器输入输出队列等待处理和转发
- 发送时延
往返时间RTT:
- 表示从发送方发送完数据到发送方接收到来自接收方的确认总共经历的时间
- 有效数据率:
:star:流量强度:
(王道) - 比特到达队列的速率和比特从队列推出的速率之比(课本)
1.6 计算机网络体系结构
协议:
- 组成要素
- 语法 规定传输数据的格式
- 语义 规定要完成的功能
- 同步 规定各种操作的顺序
OSI:
应用层
所有能和用户交互产生流量的程序
典型应用层服务:FTP,HTTP,SMTP
表示层
用于处理两个通信系统中交换信息的表示方式(语法和语义)
功能:数据格式变换,数据加解密,数据压缩及恢复
会话层
向表示层实体/用户进程提供建立连接并在连接上有序的传输数据
功能:建立、管理、终止对话,数据同步
传输层:面向连接
负责主机中两个进程的通信,即端到端的通信(端口到端口,一个进程是占用一个端口)
功能:
- 可靠传输,不可靠传输
- 差错控制
- 流量控制
- 复用分用
主要协议:TCP,UDP
网络层:无连接+面向连接
主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。
网络层传输单位是数据报
主要功能:
- 路由选择
- 流量控制
- 差错控制
- 拥塞控制
主要协议:IP、IPX,ICMP,IGMP,ARP,RARP,OSPF
数据链路层
把网络层传下来的数据报组装成帧
数据链路层传输的单位是帧
主要功能:
- 成帧(定义帧的开始和结束)
- 差错控制:帧错+位错
- 流量控制
- 访问控制
主要协议:SDLC,HDLC,PPP,STP
物理层
传输单位是比特
功能:
- 定义接口特性
- 定义传输模式
- 定义传输速率
- 比特同步
- 比特编码
TCP/IP:
- 应用层
- 传输层:无连接+面向连接
- 网际层:无连接
- 网络接口层
五层参考模型:
- 应用层
- 传输层
- 网络层
- 数据链路层
- 物理层
SDU服务数据单元:为完成用户要求的功能而应传送的数据
PCI协议控制信息:控制协议操作的信息
PDU协议数据单元:对等层次之间传送的数据单位,也就是SDU+PCI
每一层都以为在靠本层的协议与对等层直接通信
1.4 分层结构
计算机网络体系结构是计算机网络的各层及其协议的集合
仅仅在相邻层间存在接口
二、应用层
2.1 应用层协议原理
CS模式
可拓展性比较差,用户数量过多时,性能呈断崖式下降
可靠性比较差
UDP上的socket是传递三个东西:SDU,二元组(源ip,源port),目的ip与端口
在发送数据报的时候
TCP上的socket是传递两个东西:SDU,四元组
TCP和UDP都没有进行加密,都是明文传输
SSL在应用层
2.2 Web和HTTP
HTTP是无状态的
HTTP1.0和1.1有何区别?
HTTP1.0是非持久的
HTTP1.0支持POST GET HEAD
HTTP1.1 添加了PUT DELETE
URL格式:
1
协议://用户:口令@主机名/路径名/端口
HTTP的连接方式:
- 持久连接keep-alive
- 流水线
- 非流水线
- 非持久连接close
HTTP请求报文
- 请求行
- 首部行
- 请求体
HTTP响应报文
- 状态行
- 首部行
- 实体行
FTP(建立在TCP之上)
端口21传送控制指令
端口20传送文件
21端口是全程打开的
是否使用端口20是与传输模式有关的
主动模式和被动模式是站在服务器的角度来说的
- 主动模式:客户端通过21端口告诉服务器一个端口port,然后服务端用自己的20端口主动连接客户端的port
- 被动模式:客户端通过21端口告诉服务器一个端口port,然后服务端开放自己的port,等待客户端连接
FTP有两种传输模式:
- 文本模式:ASCII模式
- 二进制模式
2.3 电子邮件
SMTP协议(建立在TCP之上,端口号25):
规定了在两个相互通信的SMTP进程之间应如何交换信息
SMTP规定了14条命令和21种应答信息
缺点:
- 不能传输可执行文件或者其他二进制对象
- 只能传送7位的ASCII码,不能传送其他非英语国家的文字
- 会拒绝超过一定长度的邮件
如何解决?
使用通用因特网邮件补充MIME,使电子邮件支持声音,图像,视频
传输的三个阶段:
- 握手
- 传输报文
- 关闭
POP3(建立在TCP之上,端口号110)
工作方式有两种:
- 下载并保留
- 下载并删除
分为两个阶段:
- 用户确认阶段
- 事务处理阶段
IMAP网际报文存取协议(143端口)
比POP协议更加复杂,允许用户像对待本地邮箱那样操纵远程邮箱的邮件
2.4 DNS
顶级域名分为三类:
- 国家顶级域名
- 通用顶级域名
- 基础结构域名/反向域名:arpa
域名服务器可分为哪几种?
- 根服务器:存储着所有顶级域名服务器的地址
- 顶级域名服务器:存储着该顶级域名服务器所有注册的二级域名
- 权限域名服务器:负责一个区的域名服务器
- 本地域名服务器
域名解析过程可分为两种:
递归查询(比较少用)
迭代查询
由于递归查询对被查询的DNS服务器负担太大,因此通常是从请求主机到本地域名服务器的查询是递归查询,其余的是迭代查询。
区域名字服务器维护资源记录:
(name,value,type,ttl)
DNS报文:
DNS 重定向攻击:
又称DNS污染,是指用户向递归服务器发动DNS查询请求时,攻击者发送伪造的响应报文,从而让用户访问错误的IP。
DNS反弹式拒绝服务攻击:
指的是攻击者搜集大量的开放式递归DNS服务器,然后攻击者构造伪造的DNS请求,源IP为受害者IP查询的域名通常比较大,响应报文也比较大,从而达到攻击的目的。
2.5 P2P文件分发
p2p如何进行管理?
- 非结构化p2p
- 集中化目录
- 完全分布式(Gnutella)
- 混合体(KaZaA):组间是完全分布式,组内是集中化目录
- DHT(结构化)p2p
采用cs模式将一个文件分发给n个客户端的时间:
采用p2p模式将一个文件分发给n个客户端的时间:
2.6 视频流和内容分发网
2.7 套接字编程
2.8 SDN
核心思想:把网络的控制层面和数据层面进行分离,而让控制层面利用软件来控制数据层面的许多设备
openflow协议可被看作sdn体系中控制层面和数据层面之间的通信接口
在sdn中取代传统转发表的是流表
三、传输层
3.1 传输层概述
传输层功能:
提供进程与进程之间的逻辑通信
复用和分用
复用:应用层的所有进程都可以通过传输层再到网络层
分用:传输层从网络层收到数据后交付指明的应用进程
对收到的报文进行差错检测
TCP/IP体系的运输层使用端口号区分不同的进程
- 熟知端口号:0-1023端口号被分配给最重要的一些应用协议,telnet端口号是23
- 登记端口号:1024-49151端口号为没有熟知端口号的应用程序使用,使用这类端口必须在IANA按照规定的手续登记,防止重复,比如RDP
- 短暂端口号:49152-65535端口号留给用户应用进程暂时使用
常见端口
应用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP 熟知端口号 21 23 25 53 69 80 161 套接字Socket=(主机IP地址,端口号),唯一标识网络中一个主机上的进程
5.2 UDP协议
UDP只在IP数据报之上增加了很少的功能:
- 复用分用(端口)
- 差错检测
UDP对应用层下来的报文,既不合并,也不拆分,而是保留这些报文的边界,有多长就发多长
UDP的主要特点:
- 无连接
- 不保证可靠交付
- 面向报文的,适合一次性传输少量数据的网络应用
- 无拥塞控制,适合很多实时应用
- 首部开销小,只有8字节(TCP有20字节)
UDP协议字段
- 长度字段单位为1字节,是首部+数据部分的长度
- 检验和检验的是首部+数据部分
UDP如何校验?
- 添加伪首部
- 全0填充检验和字段
- 全0填充数据部分(成为4字节的整数倍)
- 伪首部+首部+数据部分采用二进制反码求和
- 把和求反码填入检验和字段
- 去掉伪首部,发送
接收端如何校验?
- 填上伪首部
- 伪首部+首部+数据采用二进制反码求和
- 结果全为1则无差错,否则丢弃该数据报
5.3 TCP协议特点和TCP报文段格式
TCP协议的特点:
- 面向连接
- TCP连接只能是点对点
- TCP提供可靠传输
- TCP提供全双工通信
- TCP面向字节流
TCP是全双工协议
MSS(Maximum Transmission Size):最大报文长度,只考虑了数据部分,不考虑头部
MTU(Maximum Segment Size):一般指特定通信线路上所能传输的最大数据包大小
流量控制:就是让发送方的发送速率不要太快,要让接收方来得及接收,利用滑动窗口机制可以很方便的实现流量控制
- 序号:所发送的数据的第一个字节序号
- 确认号:
期望
收到对方下一个报文段第一个数据字节的序号- 数据偏移:4位,存放首部长度,一个数值是4B字节
- 控制位
- 紧急位URG:URG为1时,优先级最高,配合紧急指针使用
- 确认位ACK:ACK为1时,确认号才有效
- 推送为PSH:接收方尽快交付应用进程,不再等到缓存填满再向上交付
- 复位RST:RST为1时,代表连接出现严重差错,必须释放连接,重新建立传输连接
- 同步位SYN:SYN=1时,代表是一个连接请求/连接接受报文
- 终止位FIN:FIN=1代表数据传输完毕,要求释放连接
- 窗口字段:2字节,指的是现在允许对方发送的数据量
- 检验和:检验首部+数据,类似UDP,要加上12字节的伪首部,第4个字段为6
- 紧急指针:URG=1才有效,指出本报文段中紧急数据的字节数
5.4 TCP连接管理
TCP连接传输的3个阶段
- 连接建立
- 数据传送
- 连接释放
三次握手:
sequenceDiagram Client->>Server: SYN=1,seq=x Server->>Client: ACK=1,ack=x+1,SYN=1,seq=y Client->>Server: ACK=1,ack=y+1,seq=x+1
四次挥手:
- 在最后一步,客户端等待2MSL(最长报文段寿命)后,连接彻底关闭
sequenceDiagram Client->>Server: FIN=1,seq=u Server->>Client: ACK=1,ack=u+1,seq=v Server->>Client: FIN=1,seq=w,ACK=1,ack=u+1 Client->>Server: ACK=1,ack=w+1,seq=u+1 Client->>Client: 2MSL
为什么三次握手:
三次握手的实质是检测客户端和服务端各自的发送和接收数据的能力是否都正常
为了防止非可靠信道上滞留的SYN包产生的错误连接问题
可以同步序号
次数过多效率很低
为什么客户端要等待一段超时时间:
- 因为在不可靠信道上,客户端发送的最后ACK包可能丢失,此时服务端未关闭连接,会再次发送FIN包
5.5 TCP可靠传输
可靠数据传输原理rdt(reliable data transfer protocol)
rdt在应用层,传输层和数据链路层都很重要
rdt1.0 完全可靠信道上的可靠数据传输
- 在完美可靠的信道上:没有bit错误,没有分组丢失
rdt2.0 具有bit错误的信道
- 新机制:差错检测和接收方反馈(ACK和NAK)和重传机制
- rdt2.0 是一个停-等协议,也就是发送后等待响应
- 在大量重传情况下,接收方不能区分新旧分组,只需要给分组加上01两个代表新旧的序号就行
rdt2.1 给分组加上01两个代表新旧的序号
rdt2.2 一个不要NAK的协议
rdt3.0 具有出错和丢失的信道
解决方法:发送者等待一个合理的确认时间,若超过一定时间就重发
已经是最终版本,但是效率比较低,需要使用流水线技术
流水线协议主要有两种:
回退N重传协议GBN(go-back-n),又称滑动窗口协议
在分组的头部增加一个k位的序号
选择重传协议SR(selective-repeat)
只重发出问题的报文
SR协议中,发送者和接受者的窗口并不总是一致的
==窗口应该小于或等于序号空间大小的一半==
参考资料:https://blog.csdn.net/hjl_heart/article/details/88218012
TCP往返时延的估计和超时
如何设置TCP超时值?
比RTT长,但是RTT一直在变化,因此需要估计RTT
如何估计RTT?
指数加权移动平均法:
安全余量:
TCP可靠传输
TCP实现可靠传输的4种机制:
校验
与UDP校验一样
序号
确认
重传
TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)
快速重传(冗余ACK):
- 每当比期望序号大的失序报文段到达时,发送一个冗余ACK。若发送方连续收到3个冗余的ACK,则认为该报文段丢失,进行重传
触发重发:超时事件和重复确认
重传方式:
- 超时重传
- 快速重传
5.6 TCP流量控制
TCP利用滑动窗口机制实现流量控制
在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的窗口大小,发送方的发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值
TCP为每一个连接设有一个持续计时器,只要TCP的一方接收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个
零窗口探测报文段
,接收方会给出现在的窗口值。若窗口仍是0,则重新设置计时器
5.7 TCP拥塞控制
拥塞窗口cwnd:与rwnd不同的是,cwnd是
发送方
根据自己估算的网络拥塞程度而设置的窗口值,放映网络当前容量拥塞控制四种算法:
- 慢开始
- 拥塞避免
- 快重传
- 快恢复
发送方如何感知拥塞?
- 丢失事件 = 超时 或者 3个重复的ACKs
几个窗口:
接收窗口:接收方根据接收缓存设置的值,反应接收方容量
拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值,反应网络当前容量
发送窗口 = Min{接收窗口rwnd,拥塞窗口cwnd}
什么是快重传?
- 对于发送方,若收到3个重复的ACK就立即重传丢失的数据包,不用等待重传计时器
- 对于接收方,若收到一个失序的数据包立即发送ACK告知发送方,不用等待发送数据时才捎带确认,可以让发送方更早的知道发生丢失
什么是快恢复?
- 发送方收到3个重复ACK时,ssthresh设置为一半
参考资料:https://kongkongk.github.io/2020/06/30/fast-retransmission-and-fast-recovery/
维护一个慢开始门限ssthresh的状态变量
- 当cwnd<ssthresh:使用慢开始
- 当cwnd>ssthresh:使用拥塞控制
- 当swnd=ssthresh:既可使用慢开始,也可使用拥塞控制
三个机制:
慢启动(指的是一开始向网络中注入的报文段少,而不是说其速度)
初始时设置一个最大报文段长度MSS,cwnd = 1
指数增长
拥塞避免
ssthresh的值为发生拥塞时的一半
对拥塞事件的反应
早期Tahoe版:
- ssthresh设置为发生拥塞时的一半
- cwnd设置为1
现在的Reno版:
接收方不要等待自己发送数据时才捎带确认,而是
立即发送确认
当发生超时的时候:
同Tahoe版
当发生重复确认的时候:
执行快重传和快恢复
ssthresh更新为原来的一半
cwnd设置为ssthresh+3(或者ssthresh)
参考资料:https://www.bilibili.com/video/BV1L4411a7RN?t=1308.8
AIMD(Additive-increase,multiplicative-decrease)
乘性递减:发生丢包事件后将cwnd减半
加性递增:每个RTT内若没有丢包事件产生,cwnd+1
附:TCP与UDP的比较
UDP(用户数据报协议)和TCP(传输控制协议)的对比:
UDP是无连接的,TCP是面向连接的
UDP支持单播,多播,广播,也就是支持一对一,一对多,一对全,TCP仅支持单播
UDP是面向应用报文的,TCP是面向字节流的
UDP无拥塞控制,适合很多实时应用
UDP首部比较小,只有8字节,TCP有20字节
四、网络层
4.1 网络层概述
网络层的功能:
路由选择与分组转发
异构网络互联
拥塞控制
解决方法:开环控制和闭环控制
数据报经过分割成为若干分组
4.2 IP数据报格式及分片
IP数据报格式:
协议:
协议名 ICMP IGMP TCP EGP IGP UDP IPv6 ESP OSPF 字段值 1 2 6 8 9 17 41 50 89
4.3 IP数据报分片
最大传送单元MTU:链路层数据帧可封装数据的上限
以太网的MTU是1500字节
标识:同一数据包的分片使用同一标识
标志:只有2位有意义:x__,中间位DF=1为禁止分片,DF=0为允许分片,最低位MF=1代表后面还有分片,为0代表最后一片分片
片偏移:某片在原分片中的位置,
8字节
为1单位
4.4 IPv4地址
分类的IP地址
两个路由器之间也存在一个网络,比较特殊,称为无名网络
特殊IP地址
网络号 主机号 作为IP分组源地址 作为IP分组目的地址 用途 全0 全0 可以 不可以 本网范围内表示主机,路由表中用于表示默认路由 全1 全1 不可以 可以 广播地址 全0 特定值 可以 不可以 表示本网内某个特定主机 特定值 全0 不可以 不可以 网络地址,表示一个网络 特定值 全1 不可以 可以 直接广播地址,对特定网络上的所有主机进行广播 127 任何数(非全0/1) 可以 可以 环回地址 私有IP地址
地址类别 地址范围 网段个数 A类 10.0.0.0~10.255.255.255 1 B类 172.16.0.0~172.31.255.255 16 C类 192.168.0.0~192.168.255.255 256
4.5 网络地址转换NAT
路由器对目的地址时私有IP地址的数据报一律不转发
安装了NAT软件的路由器叫NAT路由器,至少有一个有效的外部全球IP地址
NAT转换需要使用到NAT转换表
WAN端 LAN端 172.38.1.5:40001 192.168.1.2:30000 172.38.1.5:40002 192.168.1.3:30001
4.6 子网划分与子网掩码
子网号能否全0全1要看情况(CIDR广泛应用)
至少要留两个比特作为主机号
背诵:
二进制 十进制 1000 0000 128 1100 0000 192 1110 0000 224 1111 0000 240 1111 1000 248 1111 1100 252 1111 1110 254 1111 1111 255 IP地址+子网掩码-->网络地址
路由表的内容:
- 目的网络地址
- 目的网络的子网掩码
- 下一跳地址
使用子网时分组如何转发?
flowchart LR A(分组)-->B(提取目的IP地址) B-->C{是否直接交付?} C-->|是|D(交付) C-->|否|E{是否有特定主机路由?} E-->|是|F(交付) E-->|否|G{检测路由表中有无路径?} G-->|是|H(交付) G-->|否|I{是否有默认路由?} I-->|是|J(交付) I-->|否|K("丢弃,报告转发分组出错")
4.7 无分类编制CIDR
CIDR(Classless Inter-Domain Routing)无分类域间路由选择就是把网络号和子网号合并在一起成为网络前缀
优势:
- 消除了传统的ABC类地址以及划分子网的概念
- 融合子网地址与子网掩码,方便子网划分(子网掩码变为地址掩码)
构成超网(路由聚合):将多个子网聚合成一个较大的子网,与划分子网相反,是一个由多变少的过程
- 方法:所有网络地址取交集
最长前缀匹配:若路由查表转发分组时发现由多条路由可选,则选择网络前缀最长的那条
4.8 ARP协议
目的MAC地址设置为全1,然后进行广播。(当MAC全1,交换机会在所有接口发送出该帧)
若目标IP不在当前网段内,则广播求得默认网关的MAC地址。
ARP协议:完成主机或者路由器IP地址到MAC地址的映射
ARP缓存一般存在在主机或者路由中,10-20min更新一次
4.9 DHCP协议
主机如何获得IP地址?
静态配置
IP地址
子网掩码
默认网关
动态配置
DHCP是应用层的协议,使用C/S架构,客户端和服务端通过
广播
的方式进行交互,基于UDP
工作流程:
- 主机广播DHCP发现报文
- DHCP服务器广播DHCP提供报文
- 主机广播DHCP请求报文
- DHCP服务器广播DHCP确认报文
4.10 ICMP协议
ICMP协议支持主机或者路由器:
差错报告
终点不可达
:目的网络不可达,目的端口不可达等等源点抑制
:路由器或主机因为拥塞而丢弃数据报时,发送源点抑制报文时间超过
:有两种情况:路由器发送或者目标主机发送- 参数问题:路由器或者目的主机收到的数据报的首部中有的字段的值不正确
- 改变路由(重定向):可通过更好的路由
不发送ICMP差错报文的情况:
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
- 对具有组播地址的数据报都不发送ICMP差错报告报文(组播是发给部分节点)
- 对具有特殊地址(如127.0.0.1或0.0.0.0)的数据报不发送ICMP差错报告报文
ICMP询问报文
- 回送请求和回答报文:ping
- 时间戳请求和回答报文:请某个主机或者路由器回答当前的日期和时间,主要用来时钟同步和测量时间
报文格式:
4.11 IPv6
QoS(Quality of Service,服务质量):指的是一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络安全的一种机制,时用来解决网络延迟和堵塞的一种技术。
IPv6数据报格式:
和IPv4的区别:
- IPv6为128位
- IPv6将检验和字段彻底移除,减少每一跳的处理时间
- IPv6将可选字段移出首部,变成扩展首部,路由器通常不对拓展首部进行检查,大大提高了路由器的处理效率
- IPv6支持即插即用,不需要DHCP协议
- IPv6首部长度必须时8B的整数倍,IPv4的首部长度是4B的整数倍
- ICMPv6:附加报文类型“分组过大”
- IPv6支持资源的预分配,支持实时视像等要求,保证一定的带宽和时延的要求
- IPv6取消了协议字段,改成下一个首部字段
- IPv6取消了总长度字段,改用有效载荷长度字段
- IPv6取消了服务类型字段
地址表示形式:
- 一般形式:2001:0db8:85a3:0000:0000:8a2e:0370:7334
- 压缩形式:2001:db8:85a3:0:0:8a2e:370:7334(去掉开头的0)
- 零压缩:2001:db8:85a3::8a2e:370:7334(一连串连续的0可以被一对冒号取代,双冒号表示法在一个地址中仅可出现一次)
IPv6基本地址类型:
- 单播:一对一
- 多播:一对多
- 任播:一对多中的一个通信,表现为一对多,实际是一对一,通常取最近的一个
IPv4向IPv6过度的策略:
双栈协议
一台设备上同时启用IPV4协议栈和IPv6协议栈
隧道技术
指的是把IPv6协议的数据包重新封装,伪装成IPv4,在两个IPv4路由之间的数据报传递就类似于隧道
4.12 路由算法与路由协议概述
路由选择算法的分类:
- 静态路由算法(非自适应路由算法):管理员手动配置路由信息。简便可靠,在负荷稳定,拓扑变化不大的网络中运行效果好,广泛用于高度安全性的军事网络和较小的商业网络。但是路由更新慢,不适用大型网络。
- 动态路由算法(自适应路由算法):路由器间彼此交换信息,按照路由算法优化出路由表项。路由更新快,适用大型网络,及时响应链路费用或网络拓扑变化。但是算法复杂,增加网络负担。
- 全局性:链路状态路由算法LS(Link State) OSPF协议:所有路由器掌握完整的网络拓扑和链路费用信息
- 分散性:距离向量路由算法DV(Distance Vector) RIP协议:路由器只掌握物理相连的邻居及链路费用
路由表/转发表:
目的网络IP地址 | 子网掩码 | 下一跳IP地址 | 接口 |
---|---|---|---|
... | ... | ... | ... |
自治系统AS:在单一的技术管理下的一组路由器,这些路由器使用一种AS内部的路由选择协议和共同的度量以确定AS内的路由,内部使用的协议外部是不知道的
分层次的路由选择协议:
- 内部网关协议IGP,也就是一个AS内使用的,比如RIP,OSPF
- 外部网关协议EGP,也就是AS之间使用的,比如BGP
4.13 RIP协议与距离向量算法
RIP协议(Routing Information
Protocol,路由信息协议)是一种分布式的基于距离向量
的路由选择协议,最大的优点是简单
RIP协议(应用层协议)要求一个路由器都维护自己到其它每一个目的网络的唯一最佳距离记录
RIP协议的路由表:
目的网络 | 距离 | 下一跳路由器 |
---|---|---|
Net2 | 1 | 直接交付 |
Net1 | 2 | R1 |
Net4 | 2 | R3 |
RIP允许一条路由最多只能包含15个路由器,因此距离为16表示网络不可达
-->可以看出RIP只适合小规模的互联网
RIP和谁交换,何时交换,交换什么?
- 仅和
相邻路由器
交换信息 交换的信息是自己的路由表
- 每
30s
交换一次路由信息,若超过180s还没收到,就认为邻居没了,在路由表把有关邻居的路由表项距离设置为16
距离向量算法:
- 修改邻居x发来的RIP报文的所有表项:距离+1,下一跳改为邻居x
- 若路由表中没有目标NET,直接填入路由表
- 若路由表中有目标NET:
- 若下一跳为x,直接替换
- 若下一跳不是x,根据距离判断是否更新
- 若180s还未收到邻居x的更新路由表,则把x记为不可达,即把距离设置为16
- 返回
flowchart LR
A(X发来的RIP报文)-->B("距离+1,下一跳改为X")
B-->C{路由表中是否有该网络?}
C-->|no|D(添加该项)
C-->|yes|E{下一跳是否为X}
E-->|yes|F(更新该项)
E-->|no|G(根据距离判断是否更新)
RIP报文格式(不用记忆):
RIP协议的特点:
- 当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器,即”慢收敛“
如何解决慢收敛?
- 毒性逆转(不能完全解决计数到无穷的问题,如果三个以上节点的环路,不能被检测到)
- 定义最大度量
- 抑制计时器
- 水平分割
- 路由毒化
- 触发更新
4.14 OSPF协议与链路状态算法
OSPF:开放最短路径优先协议,”开放“表示OSPF不是受某一家厂商控制,而是公开发表的;”最短路径优先“是因为使用了Dijkstra的最短路径算法SPF
OSPF最主要的特征就是使用了分布式的链路状态协议
和谁交换,交换什么,多久交换?
- 使用洪泛法向自治系统内发送信息
- 发送的信息是与本路由器
相邻的所有路由器的链路状态
- 只有当
链路状态发生变化
的时候,路由器才向所有路由器洪泛发送此信息
最后,所有路由器都能建立一个链路状态数据库
,也就是全网拓扑图
链路状态:本路由器和哪些路由器相邻
,以及相应链路的“代价”(这里的代价是指费用,距离,时延,带宽等等)
邻居 | 代价 |
---|---|
R2 | 64 |
使用OSPF的每个路由器都会产生链路状态通告LSA
,包含以下内容
直连网络的链路状态信息
邻居路由器的链路状态信息
LSA被封装在
链路状态更新分组LSU
中,采用洪泛法发送每个路由器都有一个
链路状态数据库LSDB
,用于存储LSA通过各路由器洪泛发送的封装有自己LSA的LSU分组,各个路由器的LSDB最终达到一致
使用OSPF的各个路由器基于LSDB进行最短路径优先计算,构建出各自到达其他各个路由器的最短路径,也就是构建自己的路由表
OSPF中的五种分组:
Hello分组
封装在IP数据报中,发往组播地址224.0.0.5,用来建立邻居关系
发送周期为10s,若40s未收到Hello分组则认为邻居不可达
每个路由器维护下面这一张表:
邻居ID 接口 TTL R2 1 36 数据库描述分组DD
向邻居路由器给出自己的LSDB中的所有LSA的摘要信息
链路状态请求分组LSR
向邻居路由器请求发送某些LSA的详细信息
链路状态更新分组LSU
路由器使用这种分组将其链路状态进行洪泛发送,对全网进行更新
链路状态确认分组LSAck
对LSU的确认分组
链路状态路由算法:
- 每个路由器通过hello分组发现它的邻居节点,并了解邻居节点的网络地址
- 设置它的每个邻居的成本度量metric
- 构造
数据库描述分组
,向邻站给出自己的链路状态数据库中所有链路状态项目的摘要信息 - 若DD分组中的摘要都有,则不做处理;若有没有的或者没更新的,则发送LSR分组
- 收到邻站的LSR分组后,发送LSU分组
- 更新完毕后,发送LSAck分组
- 只要有一个路由器的链路状态发生变化,洪泛发送LSU分组对全网进行更新
- 使用Dijkstra根据自己的LSDB构造到其他节点的最短路径
OSPF的区域:
- OSPF将一个自治系统再划分为若干个更小的范围,叫做
区域
- 每个区域都有一个32位的区域标识符(用点分十进制表示)
- 主干区域标识符为
0.0.0.0
- 区域内路由器IR(Internal Router):路由器的所有接口都在同一个区域内
- 区域边界路由器ABR(Area Border Router):路由器的一个接口用于连接自身区域,另一个接口用于连接主干路由器
- 主干路由器:主干区域内的路由器BBR(Backbone Router)
- 自治系统边界路由器ASBR(AS Border Router):主干区域内专门和本自治系统外的其他自治系统交换路由信息
OSPF协议字段
OSPF其他特点:
- 每隔30min就要刷新一次LSDB中的状态
- 更加适合规模比较大的网络
- 不存在坏消息传的慢的问题
LS算法与DV算法的比较(去年考过):
- 消息复杂度:
- LS算法:知道网络每条链路的费用,需要发送O(nE)个报文,当一条链路的费用发生变化的时候,必须通知所有节点
- DV算法:仅在两个直接相连的邻居之间交换报文
- 收敛速度:
- LS算法:可能会震荡
- DV算法:收敛较慢,可能发生选路回环或计数到无穷的问题
- 健壮性:
- LS算法:路由计算基本独立,(仅计算自己的转发表)有一定的健壮性
- DV算法:一个不正确的计算值会扩散到整个网络
4.15 BGP协议
层次选路思路
网关路由器:
- 定义:和其他自治系统内的路由器直接相连的路由器
- 运行域间路由协议,与其他网关路由器交互,但同时也可向自治系统(AS,autonomous system)内的所有其他路由器一样也运行域内路由协议
域内路由选择:
- 使用域内路由协议,也被称为内部网关协议IGP
- 标准的域内路由协议
- RIP:
- 使用距离向量算法,最大跳数=最大路由个数=15
- 每隔30s,通过响应报文在邻居间交换距离向量,每个RIP通告包含了多达25个AS内的目的子网的列表
- 转发表:
目的子网 下一跳路由器 到目的地的跳数
- 若180s后没有收到通告,则认为邻居死机或链路中断
- OSPF
- 使用链路状态LS算法
- 每个router都广播OSPF通告,OSPF为每个邻居路由器设一个表项
- 优点:
- 安全:所有OSPF消息需要认证
- 允许有多个相同开销的路径
- 单播和多播综合支持
- 在大的区域中使用层次ODPF
- 层次OSPF
- 两级层次:本地区域和主干区域
- 路由分类:主干路由器,边界路由器,区域边界路由器
- IGRP
交换什么,和谁交换,何时交换:
- 与其它AS的邻站BGP发言人交换信息
- 交换网络的可达性信息,也就是
到达某个网络所要经过的一系列AS
- 发生变化的时候才会更新有变化的部分
BGP报文格式:
BGP协议特点:
- BGP支持CIDR,因此BGP路由表包括目的网络前缀,下一跳路由器以及到达目的网络要经过的AS序列
- BGP刚运行时,BGP的邻站是交换整个BGP路由表,但是以后只需要在
发生变化时更新有变化的部分
BGP-4的四种报文:
- OPEN报文:用来与相邻的另一个BGP发言人建立关系,并认证发送方
- UPDATE报文:通告新路径或者撤销原路径
- KEEPALIVE报文:在无UPDATE时,周期性证实邻站的连通性;也作为OPEN的确认
- NOTIFICATION报文:报告先前报文的差错;也被用于关闭连接
三种路由协议的比较:
协议 RIP OSPF BGP 类型 内部 内部 外部 路由算法 距离-向量 链路状态 路径-向量 传递协议 UDP IP TCP 路径选择 跳数最少 代价最低 较好,非最佳 交换结点 和本结点相邻的路由器 网络中的所有路由器 和本结点相邻的路由器 交换内容 当前路由器知道的全部信息,也就是路由表 与本路由器相邻的所有路由器的链路状态 首次是整个路由表;非首次是有变化的部分
4.16 IP组播
IP数据报的三种传输方式:
- 单播
- 广播
- 组播(多播)
IP组播地址:
- IP组播地址让源设备能够将分组发给一组设备。属于多播组的设备将被分配一个组播组IP地址
- 组播地址范围是224.0.0.0~239.255.255.255(D类地址),一个D类地址表示一个组播组,只能作为目标地址
注意点:
- 组播数据报基于UDP,不提供可靠交付
- 对组播数据报不产生ICMP差错报文
- 并非所有的D类地址都可以作为组播地址
IP多播可以分为以下两种:
- 只在本局域网进行的硬件多播
- 在因特网上进行的多播
硬件组播:
IGMP协议:
中文名为网际组管理协议,让路由器知道本局域网上是否有主机的进程参加或者退出了某个组播组
注意,IGMP仅在本网络有效,使用IGMP并不能知道多播组包含的成员数量,也不知道多播组的成员都分布在哪些网络中
IGMP报文被封装在IP数据报传送
TTL为1,避免封装IGMP报文的IP数据报被路由器转发到其他网络
IGMP的三种报文类型
成员报告报文
表示希望加入某个多播地址
IGMP报告报文的内容为希望加入的多播地址
IP数据报的目的地址也为希望加入的多播地址
以太网的多播帧的目的地址也是希望加入的多播地址映射而来的
成员查询报文
IGMP查询报文的内容为查询的IP多播地址(也可以为0.0.0.0表示所有)
IP多播数据报的目的地址为224.0.0.1(所有参加多播的主机和路由的网络层都会接收该数据报)
以太网的多播帧的目的地址为01-00-5E-00-00-01
采用了一种延迟响应的策略,在1~10s内随机响应,期间若收到了其他成员的成员报告报文则取消
离开组报文
当一个成员离开时发送离开组报文,多播路由器监听到后立即发送成员查询报文探测该多播组是否还有成员
同一网络中的多播路由器可能不止一个,没有必要让每个多播路由器都周期性的发送IGMP成员查询报文,可以只选择一个;每个多播路由器若监听到源IP地址比自己IP地址小的IGMP成员查询报文则退出选举
多播路由选择协议:
- 目的是找出以源主机为根结点的
多播转发树
- 为了覆盖多播组的所有成员,多播转发树可能要经过一些没有多播组的路由器
- 常见算法:
- 基于链路状态的路由选择
- 基于距离-向量的路由选择
- 协议无关的组播(稀疏/密集)
4.17 移动IP
移动IP技术就是虽然设备在移动,跨越了不同网段,但是IP仍不变
相关概念:
- 归属网络:每个移动主机
初始
申请接入的网络- 归属地址:在归属网络的中的IP地址
- 归属代理:在归属网络中代表移动主机进行移动管理功能的实体,通常是归属网络中的路由器
- 外地网络:当前漫游的网络
- 外地代理:在外地网络中帮助移动主机执行移动管理功能的实体
- 转交地址:外地代理会为移动主机提供一个临时的转交地址
移动IP通信过程:
- A刚进入外部网络:
- 获得外部代理的转交地址(外部代理广播报文)
- 被动获得:广播一个ICMP的报文
- 主动获得:对方主动发送一个广播报文
- 移动节点通过外部代理发送注册报文给归属代理(包含永久地址&转交地址)
- 归属代理接收请求,并将移动节点的永久地址和转交地址绑定(以后到达该归属代理的数据报且要发往移动节点的数据报将被封装并以隧道方式发给转交地址),并返回一注册响应报文
- 外部代理接收注册响应,并转发给移动节点
- A移动到了下一个网络:
- 在新外部代理登记注册一个转交地址
- 新外部代理给本地代理发送新的转交地址(覆盖旧的)
- 通信
- A回到了归属网络:
- A向本地代理注销转交地址
- 按原始方式通信
4.18 网络层设备
路由器分为两部分:
路由选择部分(又叫控制部分)
根据所选定的路由选择协议构造路由表并且更新和维护
分组转发部分
交换结构:根据转发表(基于路由表)对分组进行转发
若收到RIP/OSPF分组等,就把分组送往
路由选择处理机
若收到数据分组,则查找
转发表
并输出输入端口对线路上收到的分组进行处理:
从线路接收分组->物理层处理->数据链路层处理->网络层处理->交换结构
三层设备的区别:
- 路由器:可以互联两个不同网络层协议的网段
- 网桥:可以互联两个物理层和链路层都不同的网段
- 集线器:不能互联两个物理层不同的网段
能够隔离冲突域 能够隔离广播域 物理层设备(中继器,集线器) × √ 链路层设备(网桥,交换机) √ × 网络层设备(路由器) √ √ 路由表与路由转发:
路由表是根据路由选择算法得出的,总用软件实现
目的网络地址 子网掩码 下一跳IP地址 接口
默认路由:目的网络地址和子网掩码为0.0.0.0
转发表由路由表得来,可以用软件或者硬件实现
五、链路层
5.1 链路层简述
基本概念:
- 节点:主机,路由器
- 链路:网络中两个节点间的
物理通道
- 数据链路:网络中两个节点的
逻辑通道
- 帧:链路层的协议数据单元PDU
- 作用:负责通过一条链路从一个节点向物理链路直接相连的相邻节点传送帧
5.2 封装成帧和透明传输
封装成帧:在一段数据的前后分别添加首部和尾部,用来帧定界
透明传输:指的是无论发送什么样的比特组合的数据,这些数据都能在链路上传送
成帧的方式 1. 字节(符)填充法:首尾分别称为SOH,EOT,若在数据部分遇到SOH,EOH的序列,进行转义 2. 零比特填充法:在发送时,若遇到5个1,就立即在后面填入一个0;在接收时,发现连续5个1时,就把后面的0删除
最大传送单元MTU:帧的数据部分上限
以太网v2的MAC帧
5.3 差错控制(检错码)
差错的分类
- 位错
- 帧错 帧丢失、帧重复、帧失序
差错控制:
检错码 主要用在高可靠、误码率比较低的信道上,直接丢掉错误的包,比如光纤电路
奇偶校验码 检错能力50%
循环冗余码CRC
在数据后面添加上的冗余码称为
帧检验序列FCS
我们能以非常接近于1的概率认为帧在传输过程中没有差错,默认情况下认为确实无差错
注意:
仅用CRC差错检测技术不能做到可靠传输(没有对丢弃的帧进行处理)
纠错码 主要用在错误比较频繁的信道上,比如无线电路
5.4 差错控制(纠错码)
海明距离:两个合法编码的对应比特取值不同的比特数
若要检测d位的错误,则需要d+1的海明距离
若要纠正d位的错误,则需要2d+1的海明距离
海明码的工作流程
确认校验码位数r
设信息有m位
确认校验码和数据的位置
校验码放在序号为
的位置,数据按序填上 求出校验码的值
采用通配符的思想进行分组,然后分别进行偶校验
检错和纠错
方法一:画圈圈,找到不满足偶校验的组取交集,然后与符合校验的分组取差集
方法二:采用矩阵的形式,根据偶校验重新计算校验码,然后转置
5.5 流量控制和可靠传输机制
数据链路层的流量控制
- 数据链路层的流量控制是点对点的,传输层则是端到端
- 数据链路层的流量控制手段是:接收方收不下就不回复确认;传输层则是给发送端发送一个窗口公告
5.6 停止等待协议
详见:https://www.bilibili.com/video/BV1NT411g7n6?t=2.5&p=22
信道利用率: 发送方在一个发送周期内,
信道吞吐率:信道利用率*发送方的发送速率
优点:简单
缺点:信道利用率太低
5.7 后退N帧协议(GBN)
滑动窗口:
- 发送方有n个
- 接收方只有一个
滑动窗口大小
- 若采用n个比特对帧进行编号,那么发送窗口的尺寸应满足
,因为若发送窗口过大,就会使得接收方无法区分新帧和旧帧
确认方式:累计确认
5.8 选择重传协议(SR)
确认方式:逐一确认
窗口的大小
发送窗口最好等于接收窗口
,n为用多少比特编码帧的序号
5.9 信道划分介质访问控制
传输数据使用的两种链路
点对点链路 常用于广域网
广播式链路 所有主机共享通信介质,常用于局域网
典型拓扑结构:总线型,星型(逻辑总线型)
介质访问控制:采取一定的措施,使得两对节点之间的通信不会互相干扰的情况
静态划分信道(信道划分介质访问控制)
频分多路复用FDM
充分利用传输介质带宽,效率较高,实现比较容易
时分多路复用TDM
类似操作系统的并发
改善的TDM-->统计时分复用STDM:按需动态分配时序
波分多路复用WDM
就是光的频分多路复用,通过合波器和分波器将不同波长的光信号合并和分解
码分多路复用CDM
由于多用于多址接入,常称为CDMA
CDMA中的每个站点都被指派了唯一的一个m比特码片序列
- 若发送比特1,则发送自己的m比特码片序列
- 若发送比特0,则发送自己的m比特码片序列的反码
码片向量:0比特记为-1,1比特记为+1
每个站点的m比特码片序列必须不同,且必须相互正交,也就是规格化内积为0
规格化内积:
发送端对信息进行叠加,然后不同的接收端分别用自己的码片向量和叠加后的码片向量做规格化内积,得到传递给自己的信息
动态分配信道
- 轮询访问介质访问控制
- 随机访问介质访问控制
- ALOHA协议
- CSMA协议
- CSMA/CD协议
- CSMA/CA协议
信道划分介质访问控制:将使用介质的每个设备与来自同一信道上的其它设备的通信隔离开,把时域和频域资源合理地分配给网络上的设备
6.10 ALOHA协议
纯ALOHA协议:
- 不监听信道,不按时间槽发送,随机重发
- 冲突如何检测:若接收方不发送ACK就会判断冲突
- 冲突如何解决:超时后等一个随机时间重传
时隙ALOHA协议:在纯ALOHA协议的基础上加了一个时间片,必须等到时间片才能发送
6.11 CSMA协议
全称:载波监听多路访问协议CSMA
CS:载波监听,在发送数据前检测下总线上是否有其它计算机在发送数据
1-坚持CSMA:若信道空闲则直接传输,不等待;若信道忙则一直监听,直到空闲马上传输;若有冲突,等待一个随机长的时间再监听,重复上述过程
非坚持CSMA:若信道空闲则直接传输,不等待;若信道忙则等一个随机时间后再监听
p-坚持CSMA:若信道空闲则以概率p直接传输,不必等待;概率1-p等待到下一个时间槽再传输;若信道忙则一直监听,直到空闲再以概率p发送;若有冲突,等待一个下一个时间槽再开始监听,重复上述过程
注意,上面三种算法在发生冲突后还是要坚持把数据帧发送完,造成了浪费
6.12 CSMA/CD协议
全称:载波监听多点接入/碰撞检测协议(先听后说,边说边听)
设
如何确定碰撞后的重传时机-->截断二进制指数规避算法
二进制指数回退算法
- 确定基本退避时间为争用期
- 定义参数k,它等于重传次数,但k=min{重传次数,10}
- 从离散的整数集合{0,1,2,...,
}中随机选取整数r,重传所需的退避时间为r倍的基本退避时间
,即 - 当重传16次仍不能成功,说明网络太拥挤,认为此帧永远无法正确发出,抛弃此帧并向高层报告出错
最小帧长问题:帧的传输时延至少要两倍于信号在总线中的传播时延,即最小帧长=总线传播时延*数据传输速率*2
同时帧也不能太长,这样某主机会长期占用总线,同时接收端的缓冲区也可能溢出
6.13 CSMA/CA协议
全称:载波监听多点接入/碰撞避免协议
为什么要有CSMA/CA?-->常应用在无线局域网,CSMA/CD常用应在有线局域网中
无线局域网的特点
- 无法做到360度全面检测碰撞
- 隐蔽站 当A和C都检测不到信号,同时向B发送数据,就会导致冲突,此时对A来说,C就是隐蔽站
由于不可能避免所有的碰撞,并且无线误码率比较高,802.11标准还在数据链路层使用了停等协议保证数据本正确接收
CSMA/CA协议工作原理
- 发送数据前,先检测信道是否空闲
- 空闲则发出RTS(Requests to Send),包括发送端的地址,接收端的地址,下一份数据将持续发送的时间;忙则等待
- 接收端接收到RTS后,发送CTS(Clear to Send)来响应
- 发送端接收到CTS后,开始发送数据帧(同时预约信道:告知其它站点自己要传多久数据)
- 接收端接收到数据帧后,将用CRC检验数据是否正确,正确则响应ACK帧
- 发送方接收到ACK后就可以开始下一个数据帧的发送,若没有则采用二进制指数规避算法来重传
6.14 轮询访问介质访问控制
轮询访问MAC协议
轮询协议 主节点轮流邀请从属节点发送数据
令牌传递协议
令牌:一个特殊格式的MAC控制帧,不含任何信息,用来控制信道的使用,确保同一时刻只有一个节点独占信道
每个节点都可以在一定时间内获得发送数据的权利,并不是无限制的持有令牌
问题:
- 令牌开销
- 等待延迟
- 单点故障
常用于负载较重,通信量较大的网络中
6.15 局域网基本概念和体系结构
局域网:简称LAN,是指在某一区域内由多台计算机互联成的计算机组,使用广播信道
特点
- 覆盖的地理范围比较小
- 使用专门铺设的传输介质(比如双绞线,同轴电缆)进行联网,数据传输率高
- 通信延迟时间短,误码率低,可靠性较高
- 各站为平等关系,共享传输信道
- 多采用分布式控制和广播式通信,能进行广播和组播
局域网拓扑结构
- 星型拓扑
- 环型拓扑
- 总线型拓扑
- 树型拓扑
局域网介质访问控制方法
- CSMA/CD 常用于总线型局域网,也用于树型网络
- 令牌总线 常用于总线型局域网,也用于树型网络
- 令牌环 常用于环型局域网,物理上为星型,但逻辑上为环型
局域网的分类(实际是按照介质访问控制方法划分)
以太网
使用CSMA/CD,逻辑拓扑为总线型,物理拓扑为星型或拓展星型
采用IEEE 802.3标准
令牌环网
物理上是星型,逻辑上是环型,已是“明日黄花”
采用IEEE 802.5标准
FDDI网
采用光纤作为传输介质
采用IEEE 802.8标准
ATM网
无线局域网WLAN
采用IEEE 802.11标准
MAC子层和LLC子层
- IEEE 802标准将数据链路层拆分为MAC子层和LLC子层两部分
- LLC子层 负责识别网络层的协议,为网络层提供服务
- MAC子层 负责对数据帧的封装和卸装,帧的寻址和识别,帧的接收和发送
严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识
6.16 以太网
以太网是当今现有局域网采用的最通用的通信协议标准,采用CSMA/CD技术
优点:
- 造价低廉
- 是应用最广泛的局域网技术
以太网提供无连接,不可靠的服务
- 无连接:发送方和接收方无握手过程
- 不可靠:不对发送方的数据帧编号,接收方不向发送方发送确认,差错帧直接丢弃
以太网拓扑:逻辑上是总线型(因为集线器的存在),物理上是星型
10BASE-T以太网
- 物理上是星型,逻辑上总线型
- 采用曼彻斯特编码
- 采用CMSA/CD介质访问控制
适配器:
- 也就是网卡,实现计算机与外界局域网的连接
- 适配器上有处理器和存储器(ROM和RAM)
- ROM上有MAC地址(前24位代表厂家,后24位由厂家自己决定)
以太网MAC帧
- 最常用的是以太网v2的格式
- 与IEEE802.3的区别
- 第3个字段是长度/类型
- 当长度/类型字段小于0x0600时,数据字段必须装入LLC子层
高速以太网
100BAST-T
在双绞线上传送100Mb/s基带信号的星型拓扑以太网,仍使用CSMA/CD协议
支持全双工和半双工(中心节点从集线器变成交换机)
吉比特以太网
在光纤或双绞线上传送1Gbit/s信号
支持全双工或半双工
10吉比特
在光纤上传送10Gbit/s的信号
只支持全双工
6.17 无线局域网
IEEE802.11的MAC帧头格式
地址1:接收端(基站)
地址2:发送端(基站)
地址3:目的MAC地址
地址4:源MAC地址
无线局域网的分类:
- 有固定基础设施无线局域网
- 无固定基础设施无线局域网的自组织网络
6.18 PPP协议和HDLC协议
PPP帧属于广域网范畴,MAC帧是局域网范畴。ppp只支持点到点,因此不需要寻址,mac支持多点对多点
广域网的通信子网通常采用分组交换的技术,可以利用分组交换网,卫星通信网和无线分组交换网
PPP帧的格式:
标志字段:PPP帧的定界符,取值0x7E
地址字段:取值为0xFF,预留
控制字段:取值0x03,预留
协议字段:指明协议的数据部分应该交给哪个协议处理
0x0021代表IP数据报
0xc021代表LCP分组
0x8021代表NCP分组
FCS:CRC计算的校验位
PPP协议如何实现透明传输:
- 若是面向字节的异步电路:采用字节填充法
- 若是面向比特的同步电路:采用零比特填充法
PPP协议如何处理可靠传输:
- 不提供可靠传输,若CRC检验错误就丢弃
6.19 链路层设备
网桥:根据目的MAC地址对帧进行转发和过滤
网段:一般指一个计算机网络中使用同一层物理设备能够直接通信的那一部分
网桥优点:
- 过滤通信量,增加吞吐量
交换机可以隔离冲突域,但是不隔离广播域
6.20 VLAN
IEEE 802.1Q帧对以太网的MAC帧格式进行了拓展,插入了4字节的vlan标记,叫做pvid,(1~4094)
802.1Q帧是由交换机处理的,不是由用户主机处理的
当交换机接收到普通的mac帧时,会插入4字节变为802.1Q帧
交换机转发802.1Q帧时,可能
会删除该4字节
交换机的端口类型有3种
Access
一般用于连接用户计算机,该端口只能属于一个vlan
一般只接受普通mac帧,然后插入4字节的vid(值与端口的pvid相同)
若帧中的vid与端口的pvid相同,则去标签并转发
接收处理方法:
- 只接受未打标签的帧,加上自己的pvid
发送处理方法:
- vid=pvid,去标签,转发,否则不转发
Trunk
一般用于交换机之间或者交换机与路由器之间
Trunk端口可以属于多个vlan
发送处理方法:
- vid=pvid,去标签,转发
- vid!=pvid,转发
接收处理方法:
- 未打标签,加上自己的pvid
- 打标签,接收
Hybrid
类似Trunk
六、物理层
6.1 物理层基本概念
功能: 如何在连接各种计算机的传输媒体上传输数据比特流
主要任务:确认与传输媒体接口有关的一些特性,如下
- 机械特性:接口所用接线器的形状和尺寸,引线数目和排列,固定和锁定装置
- 电气特性:比如电压范围,阻抗,传输速率等
- 功能特性:指明某条线上出现的某一电平的电压的意义,定义接线器每一引脚的作用
- 过程特性:指明对于不同功能的各种可能事件的出现顺序
6.2 数据通信的基础知识(1)
数据通信系统的模型:
- 源系统
- 信源
- 发送器(比如调制解调器,将数字信号变成模拟信号)
- 传输系统
- 目的系统
- 接收器(调制解调器,将模拟信号变成数字信号)
- 信宿
相关概念:
- 数据:是运送信息的实体
- 信号:是数据在传输过程中的存在形式,分为数字信号和模拟信号
- 信道:信号传输的通道
信道分类:
- 单工通信
- 半双工通信
- 全双工通信
6.3 数据通信的基础知识(2)
数据传输方式:
- 串行传输
- 并行传输
码元:是指用一个固定时长的信号波形,代表不同离散数值的基本波形,是数字通信中数字信号的计量单位。当码元的离散状态有m个时,称为m进制码元
码元传输速率:单位时间内数字通信系统所传输的码元个数,单位为波特Baud
信息传输速率:单位时间内数字通信系统传输的比特数
带宽:
- 在模拟信号系统中,最高频率和最低频率的差值就代表了系统的带宽,单位为Hz
- 在数字信号系统中,表示单位时间内从网络中的一点到另一点所能通过的最高数据率,单位为比特/秒
6.4 奈氏准则和香农定理
影响失真的因素
- 码元传输速率
- 信号传输距离
- 噪声干扰
- 传输媒体质量
码间串扰:接收端收到的信号波形失去了码元之间清晰界限的现象
奈氏准则:在理想低通(带宽受限)条件下,为了避免码间串扰,极限码元传输速率为
2W
Baud,W为信道带宽,单位为Hz
信噪比:信号的平均功率/噪声的平均功率,常记为S/N,并以分贝dB为度量单位
6.5 编码和调制(1)
信道:信号的传输媒介
按照传输信号的种类可分为模拟信道和数字信道
按照传输介质可分为无线信道和有线信道
基带信号:将1和0用不同的电压表示,再运到数字信道上去传输,来自信源,可以说是最原始的信号。一般用于传输距离较近的情况
宽带信号:将基带信号进行调制(把频率范围提高到较高的频段)后的频分复用模拟信号,再送到模拟信道上去传输。一般用于传输距离较远的情况
stateDiagram-v2
direction LR
数据-->数字信号:编码
数据-->模拟信号:调制
6.6 编码和调制(2)
数字数据-->数字信号
- 非归零编码:高1低0,实现很简单,但是没有检错功能,且无法判断一个码元的开始和结束,收发双方难以保持同步
- 归零编码:信号电平在一个码元之内都要恢复成0
- 反向不归零编码:信号电平翻转表示0,信号电平不变表示1
- 曼彻斯特编码
- 差分曼彻斯特编码:同1异0
- 4B/5B编码:编码效率为80%
数字数据-->模拟信号
调幅
调频
调相
调幅+调相(QAM)
模拟数据-->数字信号(音频数字化)
PCM脉码调制三个步骤:
- 抽样:对模拟信号周期性扫描,把时间上连续的信号变成时间上离散的信号,且
采 样 频 率 信 号 最 高 频 率 - 量化:把抽样取得的电平幅值按照一定的分级标度转化为对应的数字值,并取整数
- 编码:把量化的结果转换为与之对应的二进制编码
模拟数据-->模拟信号
可以将频率调高
6.7 数据交换方式
三种数据交换方式
电路交换
:star:每次会话预留沿其线路所需的独占资源
在数据传输期间,源节点与目的节点之间有一条由中间节点构成的专用物理线路,在数据传输结束之前,这条线路一直保持
三个阶段:
- 建立连接
- 通信
- 释放连接
特点:独占资源,用户始终占用端到端的固定传输带宽,适用于对实时性要求比较高的大量数据传输情况
优点:
- 传输时延小
- 数据顺序传送,无失序问题
- 实时性强,双方一旦建立物理链路,便可以实时通信,适用于交互式对话通信
- 全双工通信,没有冲突,通信双方会建立不同的信道,不会争用物理信道
- 适用于模拟信号和数字信号
- 控制简单,电路的交换设备和控制较简单
缺点:
- 建立连接的时间长
- 线路独占,信道使用率低
- 灵活性差,连接通路中任何一个节点出了故障,必须重新连接
- 无数据存储能力
- 电路交换时,数据直达,不同类型不同规格不同速率的终端很难相互通信
- 无法发现和纠正差错,难以进行差错控制
报文交换
传送过程采用存储转发的方式
分组交换
:star:数据以离散的数据块通过网络来发送
分组交换会限制所传输的数据单位的长度,一般为128B
数据报方式
为网络层提供无连接服务(就是不事先为分组的传输确定传输路径)
可能发生乱序、重复、丢失
虚电路方式
借鉴了电路交换的思想,首先发送呼叫请求,建立一个通路。此后发送的分组数据不需要有目的地址,但是需要有虚电路号
:star:分组交换优点
- 适合大量突发数据传输
- 简单,可以不事先建立连接
:star:分组交换缺点
- 过度竞争导致分组延迟或丢失
- 需要可靠数据传输和拥塞控制协议
数据交换方式的选择
- 传送数据量大,且传送时间远大于呼叫时,选择电路交换
- 从信道利用率上看,报文交换和分组交换优于电路交换
6.8 物理层传输介质
:star:导引型传输媒体
定义:信号在固态介质中有向传播
双绞线(网线):
最古老但又最常用的传输媒体
分类(是否屏蔽)
无屏蔽双绞线UTP
屏蔽双绞线STP:带屏蔽层,对信号的保密性比较好
分类(几类线)
绞合线类别 带宽 线缆特点 典型应用 3 16MHz 2对4芯双绞线 模拟电话,10Mbit/s 5 100MHz 与3类线相比增加了绞合度 100Mbit/s,100m 5E(超5类线) 125MHz 与5类线相比衰减更小 1Gbit/s,100m 6 250MHz 改善了串扰等性能,可使用屏蔽双绞线 10Gbit/s,35~55m 6A 500MHz 改善了串扰等性能,可使用屏蔽双绞线 10Gbit/s,100m 7 600MHz 必须使用屏蔽双绞线 超过10Gbit/s,100m
同轴电缆:
- 具有很好的抗干扰特性,被广泛用于传输较高速率的数据
光纤:
- 传输光信号
:star:非导引型传输媒体
定义:
- 信号在大气空间或外太空空间自由传播
分类:
- 无线电波
- 微波
- 红外线,激光
6.9 物理层设备
中继器:
- 功能:对数字信号进行再生和还原,对衰减的信号进行放大,以增加信号传输的距离
- 中继器的两端:
- 可以连相同媒体,也可以连接不同媒体
- 适用于完全相同的两类网络的互连,且两个网段的速率要相同
集线器(多口中继器):
- 功能:同中继器
七、一些拓展
旁路由
可以把旁路由比作一个设备,通过一个LAN口与主路由连接。分为两种:
- 软件模拟:比如在软路由中通过虚拟化的形式安装两套路由系统
- 使用两个实体路由器
为什么要使用软路由?
拓展功能:在对当前网络架构影响最小
的情况下拓展新的功能
主路由和旁路由不可以同时开启DHCP,因为DHCP使用UDP,无连接,可能两个路由都会应答终端的申请。
旁路由的一般架构:
一些常见旁路由组网方式:
不管哪种组网方式都要设置旁路由的网关地址为主路由,且子网掩码也要相同,IP地址也要在统一网段。
主路由开DHCP+旁路由关DHCP(非全局)
主路由不做任何改动。
旁路由设置网关为主路由,(若开启DNS加速功能,则需要把DNS设置为127.0.0.1)
主路由开DHCP+旁路由关DHCP(全局)
主路由设置DHCP时的网关为旁路由,DNS也设置为旁路由
相关资料:
- 展示一种软路由组网方式:https://www.bilibili.com/video/BV1Fo4y1Z78B?t=5.9
- 关于旁路由的原理的好文:https://easonyang.com/posts/transparent-proxy-in-router-gateway/
虚拟机相关拓扑
桥接
实验环境:
物理主机+2台Kali
观察上面的网络拓扑可以看到,桥接模式下,虚拟交换机Vmnet0通过虚拟网桥连接到网卡与物理主机之间。虚拟网桥可以比作真实网桥,可以隔离冲突域,工作在数据链路层和物理层。当虚拟主机访问Internet,使用的是局域网下的真实IP,可以比作真正的物理主机。
当Kali2向物理主机发送ICMP的Echo Request请求询问报文,在物理网卡是可以抓取到流量的。但是如果Kali2向Kali2发送ICMP Echo Request请求询问报文,则物理网卡是抓不到流量的,因为虚拟网桥会隔离冲突域。
NAT
NAT模式下的网络拓扑如上,虚拟网卡NIC2只是为了实现物理主机和虚拟主机的通信。而虚拟机的上网功能则是通过虚拟NAT设备实现的,本质是利用物理主机实现代理。
仅主机
仅主机模式下,虚拟主机只能和物理主机通信,不能连接外网。
相关资料:
https://www.cnblogs.com/linjiaxin/p/6476480.html
https://zhuanlan.zhihu.com/p/552133782
https://www.cnblogs.com/sddai/p/9280119.html
https://docs.vmware.com/cn/VMware-Workstation-Pro/17/com.vmware.ws.using.doc/GUID-D9B0A52D-38A2-45D7-A9EB-987ACE77F93C.html
https://zhuanlan.zhihu.com/p/532535216
四次挥手<->三次挥手
实验环境:
Kali1:192.168.126.170,使用nc监听8889端口
Kali2:192.168.126.144,使用telnet连接8888端口
Kali2发送hello
,nihao
后,Kali2断开连接
在Kali2上进行抓包
Linux支持延时ACK机制,也就是将第二次和第三次挥手合并在一起。
相关资料:
https://blog.csdn.net/weixin_40803011/article/details/121794141
https://zorrozou.github.io/docs/tcp/wavehand/TCP_Wavehand.html
TLS抓包分析
Kali:curl https://www.baidu.com
上面为TLS的流程:
三次握手后
Client
发送Random1
与支持的加密套件,然后服务端发送Random2
与一种加密套件。然后
Server
发送Cert
与PK
。为什么需要证书?因为客户端要保证公钥确实来自目的站点,要不然攻击者会伪造公钥。
然后
Client
验证Cert
,从而验证Server
身份。然后生成随机数Pre master secret
,并用PK
加密,发送给服务端。Change Cipher Spec
表示编码改变,随后的信息都用协商的密钥加密Encrypted Handshake Message
表示Client
握手结束,发送前面所有会话的Hash值供Server校验
。然后
Server
用SK
解密得到Pre master secret
,此时Client
与Server
都拥有三个随机数,用相同的算法计算出密钥K
。然后Server
返回Change Cipher Spec
与Encrypted Handshake Message
信息,Server
握手结束。加密传输信息...
为什么要引入三个随机数?
因为TLS无法保证客户端的随机数是否真随机,增加随机数可以保证协商的秘钥的动态性。
注意:
上述的信息可能会拆分成不同的数据包发送,也可能合并在同一数据包中。
相关资料:
https://www.youtube.com/watch?v=W9r3n2DFD64
https://zhuanlan.zhihu.com/p/43789231
https://zhuanlan.zhihu.com/p/360782536
https://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
https://www.bilibili.com/video/BV1KY411x7Jp?t=3.7
各种代理协议
HTTP代理
特点:
- 可以代理任意基于TCP的流量,也就是HTTPS也可以代理
- 不能代理UDP
- 不能加密内容
Socks代理
能代理基于TCP与UDP的流量,但是很多Socks5并没有实现可以基于UDP,可以使用如下命令检测是否支持UDP
1 |
|
UDP代理
检测UDP是否实现代理/泄露真实IP:https://browserleaks.com/webrtc
原理:此网站使用stun
协议,此协议一般使用UDP
进行传输。
如果代理是
HTTP
:HTTP代理不支持代理UDP数据,因此直连导致IP泄露如果代理是
socks5
:虽然socks5
支持代理udp,但是==浏览器不支持将UDP流量交给socks代理==,因此在浏览器上只能使用插件禁用webrtc如果使用
软路由
或者TUN模式
:可以进行UDP代理
注意:socks5要想实现代理UDP,需要在节点服务器和本地都开启支持UDP代理
UDP代理的两种方式
- 原生UDP:将UDP包交给代理服务器,比如
socks
以及ss
,但是xray等内核帮助ss实现了UoT。这种方式容易被运营商疯狂QoS,将UDP丢弃 - UoT:UDP Over TCP,
将UDP包封装为TCP,比如
vmess
,vless
,trojan
参考:https://youtu.be/GQg5JIQIjgk?list=UULFbCCUH8S3yhlm7__rhxR2QQ&t=9
DDOS类型
HTTP Flood
TCP SYN Flood
UDP Flood
ICMP Flood
Socks5代理
握手阶段
协商
客户端-->服务端
VER NMETHODS METHODS 1 1 1-255 协议版本 支持认证的方法数量 对应NMETHODS,NMETHODS的值为多少,METHODS就有多少个字节 服务端-->客户端
VER METHOD 1 1 协议版本 选中的METHOD 若客户端收到
0x00
,则跳过认证阶段,直接进入请求阶段;当收到0xff
,直接断开连接;其余进入认证阶段
子协商(认证阶段):略