哈工大计算机网络学习打卡
1. 什么是计算机网络?
概念:通信技术与计算机技术紧密结合的产物,计算机网络就是一种特殊的通信网络。只不过计算机网络发送出来的信息是数据化信息。
定义:计算机网络就是互连的,自治的计算机集合
- 互连指的互连互通,通过通信链路进行连接
- 自治指的是无主从关系
1.1 当通信链路过长,主机与主机之间往往通过交换网络来进行互连
交换网络由许多个交换节点,也就是路由器或交换机组成
1.2 什么是Internet?
Internet由数以百万计的互连的计算设备集合而成。从服务角度来说,Internet是为网络应用提供通信服务的通信基础设施。同时Internet为网络应用提供应用编程接口(API)
- 主机(host)又叫做端系统
- 运行各种网络应用
这些设备通过通信链路进行连接,进行数据的传输
- 光纤、同轴电缆、无线电卫星等
当设备距离过长,通过交换网络进行互连
- 这些交换网络之间通过分组交换的形式,转发分组(数据包)。
- 在交换网络中最重要的组成就是路由器和交换机
1.3 什么是网络协议?
概念:协议是计算机网络有序运行的重要保证,任何通信或信息交换过程都需要规则。
定义:为了进行网络中的数据交换而简历的规则、标准或约定
1.3.1 网络协议规定了通信实体之间所交换的消息的格式、意义、顺序以及针对收到信息或发生的事件所采取的“动作”。
- 协议三要素:
- 语法:数据与控制信息的结构或格式,信号电平高低。如协议的版本和协议的类型。
- 语义:需要发出什么样的控制信息、如进行差错控制、需要完成怎么样的动作和响应。
- 时序:需要规定事件的顺序、匹配的速度。也就是数据吞吐量与传输速率的平衡。
- Internet协议标准
- RFC文档
1.4 计算机网络结构
计算机网络由网络边缘、接入网络、网络核心(互连的路由器)构成
1.4.1网络边缘
- 主机(端系统)
- 客户/服务器(client/server)应用模型
- P2P对等服务器应用模型
1.4.2 接入网络
- 居民接入网络(家庭网络)
- 学校网络(机构网络)
- 移动接入网络
1.4.3 网络核心
- 网络核心的关键功能:路由和转发
- 网络核心解决的核心问题:数据交换
- 动态转接:由一个端口发送到另一个端口
- 动态分配传输资源
当前三大交换模式
-
电路交换。独占资源,不能被第三方共享。
- 电路交换三个阶段
- 建立连接
- 通信
- 释放连接
- 电路交换三个阶段
-
报文交换
-
分组交换
-
报文拆分出来的一系列相对较小的数据包。
- 当报文数据块加上头部信息才叫做分组,收到分组之后需要对分组头进行拆分和解析
-
适用于突发性数据传输网络
-
如果同时多于N个用户进行操作,那么可能会出现网络拥塞的现象。
- 当出现网络拥塞现象时,就需要一些协议进行处理,可靠数据传输和拥塞控制机制了。
-
结点处理延迟包括
-
差错检测,判断数据是否完整。
-
确定输出链路,判断数据下个发送点,走哪一条链路发送。
-
等等
-
-
排队延迟包括
- 等待输出链路可用
- 取决于路由器的拥塞程度
-
传输时延
-
传播延迟
-
报文交换与分组交换相比,数据传输速率要慢很多于分组交换。原因在于报文交换是整个报文进行传输,浪费了大量的传输空间。但分组交换是多分组进行传输。几乎每时每刻都在传输信息。
当前多路复用技术,分为四种
- 频分多路复用
- 时分多路复用
- 波分多路复用
- 码分多路复用
2. 计算机网络的体系结构
定义:计算机网络体系结构是计算机网络的各层及其协议的集合。每层遵循某个/些特定的网络协议完成本层功能
2.1 采用分层结构的优势
- 结构清晰,有利于识别复杂系统的组成及其关系
- 模块化的分层易于系统维护和更新
- 任何一层对于其他层都是透明的,抽象的
- 有利于标准化
2.2 分层网络体系结构的基本概念
- 实体表示任何可以进行发送或接收信息的硬件或软件进程。
- 协议是控制两个对等实体进行通信的规则的集合,协议是水平、对等的。
- 任何一层实体需要使用到下层提供的服务,遵循本层协议,实现本层功能。从而继续向上层提供服务。服务都是垂直的。
- 下层协议的实现对上层的服务用户是透明的
- 同系统的相邻实体间通过接口进行交互,通过服务访问点,交换信息,指定请求特定的服务。
2.3 OSI七层参考模型
- 协议在各层进行数据封装的作用
- 增加控制信息,比如构造协议数据单元(PDU)
- 控制信息主要包括有以下几点:
- 地址(Address):标识发送端/接收端
- 差错检测编码(Error-detecting code):用于差错检测或纠正(如TCP协议),但是有些协议不用加该控制信息。(比如UDP协议)
- 协议控制(protocol control):实现协议功能的附加信息,如:优先级、服务质量、安全控制等。
- 物理层功能,解决了单一比特传输的问题。
- 规定接口特性,如机械特性、功能特性等
- 比特编码。跟通信技术和介质有关。
- 数据率。跟通信技术和介质有关。
- 比特同步。
- 传输模式。单工、半双工、全双工。
- 数据链路层功能,主要解决了物理链路上直接相连的两个结点之间的传输。
- 组帧,将数据进行组合
- 物理寻址
- 在帧头中增加发送端/接收端的物理地址,标识着数据帧的发送端和接收端地址
- 流量控制
- 避免发送端和接收端数据不匹配从而造成的数据丢失(丢包)的情况大量发生。
- 差错控制
- 检测并重新发送损坏的或者丢失的帧,并避免重复帧
- 访问控制
- 在给定时刻决定哪个设备拥有链路(物理介质)的使用权。也就是为数据发送选择一个发送路径进行发送。
- 网络层功能,负责源主机到目的主机数据分组的交付。
- 逻辑寻址
- 由于传输过程中可能经过多个网络,所以不能仅仅依靠于数据链路层的物理寻址功能。
- 全局唯一的逻辑地址,确保数据分组被送目的主机。如 IP地址
- 路由功能(根据路由算法)
- 路径选择、分组至最终目的主机
- 分组转发
- 逻辑寻址
- 传输层功能,负责源主机到目的主机(进程到进程)完整报文的传输。端到端对等
- 将S-PDU进行分段处理并进行封装后通过接口交给网络层
- SAP寻址
- 确保将完整报文提交给正确进程,如端口号
- 逻辑连接的连接控制
- 流量控制
- 差错控制
- 会话层功能
- 对话控制
- 管理两个端到端之间的通信的建立和维护
- 同步
- 如果连接过程中突然断开,再次连接时会接着上一次的连接继续进行。
- 在数据流中插入“同步点 ”
- 对话控制
- 表示层功能,处理两个系统间语法与语义的问题
- 数据表示转化
- 转换为主机独立的编码,避免出现编码不同的差错问题
- 加密/解密
- 压缩/解压缩
- 数据表示转化
- 应用层
- 支持用户通过用户代理(浏览器)或者网络接口(Socket)来使用网络服务
- 典型的应用层服务
- 文件传输 FTP
- Web HTTP
- 电子邮件 SMTP
- …
2.4 TCP/IP参考模型
前情提要:为什么说Everything over IP
作为底层网络,只要能封装IP分组。从一端到另一个端,从一个路由到另一个路由即可作为互联网的一部分。
3. 网络应用
3.1 网络应用体系结构
3.1.1 客户端服务端结构(Client/Server)
- 服务器
- 拥有永久性访问地址/域名
- 利用大量服务器实现可扩展性
- 每时每刻都在提供服务
- 客户端
- 与服务端进行通信,使用服务器提供的服务
- 间歇性接入网络
- 可能使用动态IP地址。如DHCP动态分配协议
- 不会与其他客户机直接通信
3.1.2 P2P结构
- 没有永远在线的服务器
- 任意端系统、节点之间都可以进行通讯
- 节点间歇接入网络
- 节点可能改变IP地址
对比于客户端服务端结构,P2P的区别在于:
- 有点是可扩展性高
- 缺点是难于管理
3.1.3 混合结构处理样式
- 用户查找文件通过客户端服务端结构。
- 用户获取文件通过P2P结构直接获取。
3.1.4 网络应用基础
- 进程间通信
- 进程:主机上运行的程序
- 相同主机上运行的进程之间如何通信?
- 进程间通信机制
- 操作系统提供
- 不同主机上运行的进程之间如何通信?
- 消息交换
3.1.5 套接字:Socket
- Socket实际上是一个接口,由调用方进行实现。
- 进程之间通信利用socket发送/接收消息。
- 实现了Socket的服务就相当于开启了通道门。
- 传输基础设施向进程提供API
- 传输协议的选择
- 参数的设置
- 网络应用的开发实际上也叫做Socket编程
3.1.6 如何进行寻址进程?
- 不同主机上的进程间通信,那么每个进程必须拥有标识符。
- 通过唯一标识符IP地址进行寻址,但不代表只拥有IP地址就可以完成寻址进程操作
- 端口号/Port
- 主机为需要通信的进程分配一个端口号
- 如 HTTP 服务的默认端口号就是80
- Mail Server默认端口号 25
- 进程的标识符
- IP地址+端口号
3.1.7 应用层协议
- 网络应用需要遵循应用层协议
- 这些公开协议由RFC定义,每个网络都要遵守
- 也有部分私有协议用于商业目的
- 网络协议的内容
- 消息类型(Type)
- 请求消息
- 响应消息
- 消息的语法/格式
- 消息中有哪些字段。如消息中请求方式
- 每个字段应该如何去描述。如HTTP的协议版本号
- 字段的语义
- 字段中消息的含义。如请求体
- 规则
- 进程什么时候发送/响应消息
- 进程应该怎么样发送/响应消息
- 消息类型(Type)
3.2网络应用的服务要求
3.2.1 网络应用的需求与传输层服务
- 数据丢失/可靠性
- 能够容忍一定的数据丢失的网络应用:网络电话
- 无法忍受数据丢失的网络应用:文件传输
- 时间/延迟
- 有些应用只有在延迟足够低的时候才能够完整运行
- 网络电话/网络游戏
- 带宽
- 某些应用只有在带宽达到最低要求时才能”有效”:网络视频
- 某些应用能够使用任何带宽:弹性应用,如email
3.3Internet传输服务模型
3.3.1 TCP服务
- 面向连接:客户端和服务端之间,通过进程建立一个全双工的通道进行连接。
- 可靠的传输
- 流量控制:发送发不会发送速度过快,避免出现对方无法接收造成丢包现象的情况发生。
- 拥塞控制:当网络负载过重时,限制发送方的发送速度
- 不提供时间/延迟保障
- 不提供最小带宽的保障
3.3.2 UDP服务
- 无连接:不需要进行连接,随时都能使用
- 不可靠数据传输:可能会丢包,损失数据等
- 不提供:可靠保障、流量控制、拥塞控制、延迟保障、带宽保障
3.4 Web与HTTP
3.4.1 HTTP(超文本传输协议)
-
采用C/S结构
-
HTTP是一个无状态协议,服务器不维护任何有关客户端发送的请求信息。
- 使用TCP传输服务,服务器在默认端口80等待浏览器发送的消息
- 浏览器发起到服务器的TCP连接(创建套接字接口Socket)
- 服务器接收来自浏览器的TCP连接,与服务器交换HTTP消息
- 关闭TCP连接
-
HTTP连接的两种类型
- 非持久性连接
- 每个TCP连接最多允许传输一个对象
- HTTP1.0版本使用非持久性连接
非持久性连接问题:
- 每个对象需要2个RTT
- 操作系统需要为每个TCP连接开销资源
- 浏览器会打开多个并且TCP连接获取所需对象,给服务端造成更大的压力
- 持久性连接
- 每个TCP连接允许传输多个对象
- HTTP1.1版本默认使用持久性连接
持久性连接如何解决非持久性连接的问题
- 发送响应后,服务器保持TCP连接的打开
- 后续的HTTP消息可以通过这个连接继续发送
带有流水机制的持久性连接可以做到什么?
- 客户端只要遇到一个请求对象就会向服务器进行发送
- 理想情况下只需要一个RTT就能够接收到所有引用对象
- 非持久性连接
-
HTTP请求消息
- HTTP协议有两种消息
- 请求消息(Request)
- 响应消息(Response)
- 请求消息
- ASCII:人直接可读
- HTTP协议有两种消息
-
Cookie技术
-
Web缓存/代理服务器技术
- 在不访问服务器的前提下满足客户端的HTTP请求
- 这种技术有什么好处?
- 大大缩短了用户请求的响应时间
- 减少机构/组织的流量
- 在大范围内实现有效的内容分发
-
Email应用概述
- Email应用的构成组件
- 邮件客户端(user agent 用户代理)
- 邮件服务器
- SMTP协议(端口25)
- TCP传输
- 命令响应模式
- Email应用的构成组件
-
DNS(域名系统)
- Internet上主机/路由器的识别问题
- IP地址
- 域名:www.baidu.com
- 域名解析系统DNS
- 将域名翻译为IP地址
- 多层命名服务器构成的分布式数据库
- 应用层协议之一:完成域名的解析
- Internet上主机/路由器的识别问题
3.5 P2P架构
- 没有服务器
- 任意端系统之间采用直接通信的方式
- 节点阶段性接入Internet。随时都可能接入
- 节点可能更换IP地址。在传输过程中突然更换IP地址
- 不容易进行管理
3.5.1 P2P 搜索信息
- P2P系统的索引:信息到节点位置(IP地址+端口号)的映射
- 文件共享(电驴)
- 利用索引动态跟踪节点所共享的文件的位置
- 节点需要告诉素银它拥有哪些文件
- 节点搜索索引,从而获知能够得到哪些文件
- 即使消息(QQ)
- 索引负责将用户名映射到位置
- 当用户开启IM应用时,需要通知索引它的位置
- 节点检索索引,确定用户的IP地址
3.6 Socket 套接字编程
-
套接字接口实际上是应用层向传输层传报文的一个应用编程接口(API)
-
网络应用编程接口API就是控制权转移的过程:由应用进程控制,发送给操作系统控制,然后再返回给应用进程的一个过程。
-
Socket API函数
- 创建Socket套接字
- 操作系统返回套接字描述符
- 第一个参数(协议族): protofamily = PF_INET(TCP/IP)
- 第二个参数(套接字类型): type = SOCK_STREAM (TCP/IP)…
- 第三个参数(协议号): 0为默认
-
TCP客户端软件流程
- 确定服务端IP地址与端口号
- 创建套接字
- 分配本地客户端IP地址与端口号(操作系统会帮你调用而无需你手动配置)
- 连接客户端(套接字编程接口)
- 遵循应用层协议进行通信。谁先发送消息,发送什么类型的消息
- 关闭/释放连接
-
UDP客户端软件流程
- 确定服务端IP地址与端口号
- 创建套接字
- 分配本地客户端IP地址与端口号(操作系统会帮你调用而无需你手动配置)
- 指定服务器端点地址,构造UDP数据报
- 遵循应用层协议进行通信
- 关闭/释放连接
-
4类型的基本服务器
- 循环无连接服务器
- 创建套接字
- 绑定端点地址
- 反复接收来自客户端的请求
- 遵循应用层协议,构造响应报文,发送给客户
- 循环面向连接服务器
- 创建(主)套接字,并绑定熟知端口号
- 设置(主)套接字为被动监听模式,准备用于服务器
- 调用accept函数接收下一个连接请求(通过主套接字),创建新套接字用于与该用户建立连接
- 遵循应用层协议,反复接收客户请求,构造并发送响应(通过新套接字)
- 完成为特定客户服务后,关闭与该客户之间的连接,返回步骤3
- 并发无连接服务器
- 主线程1:创建套接字,并绑定熟知端口号
- 主线程2:反复调用接收函数,接收下一个客户请求,并创建新线程处理该用户响应
- 子线程1:接收一个特定请求
- 子线程2:依据应用层协议构造响应报文,并调用send函数发送
- 子线程3:退出(一个子线程处理一个请求后进行终止)
- 并发面向连接服务器
- 主线程1:创建(主)套接字,并绑定熟知端口号
- 主线程2:设置(主)套接字为被动监听模式,准备用于服务器
- 主线程3:反复调用accept函数接收下一个连接请求,并称见一个新的子线程处理该客户响应
- 子线程1:接收一个客户的服务请求(通过新创建套接字)
- 子线程2:遵循应用层协议与特定客户进行交互
- 子线程3:关闭/释放连接并退出(线程终止)
- 循环无连接服务器
4. 传输层
4.1 理解传输层服务的基本理论和基本机制
1. 多路复用/分用
1. 接收端进行多路分用,传输层依据头部信息将收到的Segment交给正确的Socket,即不同的进程。
2. 发送端进行多路复用,从多个Socket接收数据,为每块数据封装上头部信息,生成Segment,交给网络层。
2. 可靠数据传输机制
3. 流量控制机制
4. 拥塞控制机制
4.2 掌握Internet的传输层协议
-
UDP:无连接传输服务
- 基于Internet IP协议,增加了复用/分用的机制。以及简单的错误校验机制
- 为什么还需要加错误校验机制?
- UDP拥有的是端到端的错误校验机制。因为在传输过程中,需要经过多个路由或多个交换机。有的设备可能不具备错误校验机制。并且在路由器存储转发的过程中也可能出错。也需要进行错误校验机制
- UDP发送方和接收方之间不需要进行握手
- 每个UDP报文段的处理独立于其他段,互不干扰
- UDP的优势有哪些?
- 不需要发送请求建立连接通道,即用即连(减少延迟)
- 实现简单,无需维护连接状态(断了就直接自动重连)
- 头部开销少,不需要发送请求等报文
- 没有拥塞控制机制(虽然会丢包和损失,但可以更好的控制发送时间和速率)
-
TCP:面向连接的传输服务
-
TCP特点:
- 点对点的发送:一个发送方,一个接收方
- 可靠的、按序的字节流
- 流水线机制:TCP拥塞控制和流量控制机制设置滑动窗口尺寸
- 发送方/接收方可以进行缓存
- 全双工:同一连接中能够传输双向数据流
- 面向连接:通信双方在发送数据之前必须建立连接
- 连接状态只在连接的两端中维护,在沿途节点中并不维护状态(端到端)
- TCP连接包括:两台主机上的缓存、连接状态变量、socket等(双方都要维护)
- 流量控制机制(引用博客链接,点击跳转)
-
序列号和ACKs
- 序列号是指segment中第一个字节的编号,而不是segment编号
- 建立TCP连接时,双方随机选择序列号
- acks表示希望接收到的下一个字节的序列号
- 累计确认:该序列号之前的所有字节均已被正确收到
-
TCP的可靠数据传输
- TCP在IP层提供的不可靠服务基础上实现可靠数据传输服务
- 流水线机制
- 累计确认机制:当接收方接收到因为超时重传的帧后,会传输当前累加后的(最大的)ACK序号。
- TCP使用单一重传定时器(也就是SR定时器,只判断ACK的那个帧进行定时处理)
- 触发重传的事件:超时、收到重复ACK
- 渐进式:暂不考虑重复ACK、暂不考虑流量控制、暂不考虑拥塞控制
-
TCP的快速重传机制
- 如果发生超时情况,而超时时间间隔过长,则需要等待很长时间。
- 当发送方接收到3个重复的ACK,就触发快速重传机制,直接重新发送这个帧数据
-
TCP连接的三次握手(引用博客说明,点击链接跳转)
- 客户端希望与服务端建立TCP连接时,需要先发送一个SYN请求报文段给服务端,并告诉服务端自己的初始报文段序列号是多少。
- 服务端接收到这个报文后进行随机选择初始的报文段序列号,分配滑动窗口缓存空间大小。接着返回一个SYNACK响应报文段并且把服务端初始报文段序列号和滑动窗口缓存空间大小给客户端表明我已经接到你的请求了。
- 客户端接收到SYNACK报文段后会答复一个ACK报文段表明我已经收到,可以建立连接了。同时会根据接收到的服务端的滑动窗口缓存空间大小,分配一个同样大小的滑动窗口缓存空间用于发送。
-
TCP连接的四次挥手(引用博客说明,点击链接跳转)
- 客户端进程发出连接释放的报文
FIN=1
以及一个客户端的序列号(该序列号等于最后一个传进来的数据的序列号+1)给服务端,并进入FIN_WAIT_1
的终止等待状态。TCP规定FIN报文段即使不携带数据,也要消耗一个序号 - 服务端收到客户端发来的请求报文和序列号后,响应给客户端ACK=1确认报文段,服务端的报文序列号,以及ack=u+1。此时服务端进入close_wait状态(关闭等待状态)。此时TCP通知上层应用进程,客户端已经准备关闭了,这时候处于版关闭状态。这时如果向客户端发送数据,客户端仍然需要接收。这个状态需要维持一段时间,如果期间有数据需要发送就进行发送。等待整个CLOSE_WAIT状态持续时间结束。
- 客户端收到服务端发来的ACK=1确认报文后,进入FIN_WAIT_2的终止等待状态,等待服务端是否还有数据需要进行发送。
- 服务端发送完最后的数据之后,就向客户端发送连接释放报文,FIN=1,ack=u+1。由于在半关闭状态,服务器可能还会发送一些数据,所以这时的序列号也会随之改变。服务端发送完的报文序列号之后就进入LAST_ACK最后确认状态,等待客户端进行确认
- 客户端收到服务端发送的连接释放报文后必须发送确认ACK=1报文,以及自己的序列号给服务端表示已经接收并进入TIME-WAIT(时间等待状态)注意此时客户端并未关闭,而是经过2*MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB之后才进入CLOSED状态
- 服务端只要接收到客户端的确认连接释放报文,就立即进入CLOSED关闭状态,同样撤销掉了TCB之后就结束了这次的TCP连接。因此可以看出,(除非特殊情况)服务端关闭是要早于客户端的。
- 客户端进程发出连接释放的报文
-
TCP为什么要三次握手而不是两次握手?(引用博客说明,点击链接跳转)
- 原因又一(计算机网络中所阐述):
- 只有采用三次握手可以减少服务端的资源浪费。解释如下:
例如,客户端向服务端发送请求同步报文A,因为网络阻塞等原因,服务端没有收到同步报文A,所以没有发送同步确认报文。过了一段时间,客户端没有收到服务端的确认报文,重新向服务端发送请求同步报文B,服务端接收到报文B后,向客户端发送同步确认报文,客户端接收到确认报文后,向服务端发送确认报文,建立连接。数据传输完毕后,连接断开。客户端进入close状态,此时服务端收到之前的报文A,向客户端返回同步确认报文。如果使用两次握手,服务端回应后不确认客户端的状态,连接建立成功。服务端会长时间等待客户端发送数据,连接长期保持,会造成资源浪费。当多个客户端产生这种情况,服务器就会等待多个客户端的响应,连接数量过多,之后的客户端请求,服务器无法响应。造成服务器处于瘫痪状态。
只有使用三次握手,当服务端收到确认报文后,保证当前时刻,客户端可以发送数据时,才能建立有意义的连接。当客户端一段时间不发送数据时,服务器应自动断开连接,来节省自身连接的客户端数量,减少资源的浪费。
-
TCP拥塞控制
-
4.3 可靠数据传输原理
-
什么是可靠数据传输?
- 可靠数据传输要求:数据不出错、数据不丢包、数据不乱序
-
可靠数据传输协议对于应用层、传输层、链路层都很重要
-
信道的不可靠特性决定了可靠数据传输协议(rdt)的复杂性
-
Rdt 2.0 可能产生位错误的信道,但不会丢包
Rdt2.0中引入的新机制
- 差错检测
- 接收方反馈控制信息:ACK/NAK
- 重传
- 利用校验和检测位错误
- 如何从错误中恢复?
- 确认机制(ACK):接收方显式地告知发送方分组已正确接收
- NAK:接收方显式地告知发送方分组有错误
- 发送方接收到NAK后进行分组重传
- 基于这种重传机制地rdt协议被称为ARQ(Automatic Repeat reQuest) 协议
-
Rdt 2.1 针对Rdt2.0可能会出现ACK/NAK消息的损坏做出解决方案
- 如果ACK/NAK消息损坏,那么就进行分组重传
- 所以传输的分组需要加上序列号来判断是否为重复分组
- 接收方如果接收到序列号重复的分组就丢掉,避免重复
-
Rdt3.0 针对其他版本中出现信道错误,分组发送错误等情况
- 添加定时器
- 如果发送方等待合理的时间后没有接收到接收方返回的ACK/NAK,那么就进行重传
- 添加定时器
-
GBN 滑动窗口练习题
因为发送方如果没有收到1号帧,先收到了2号帧,那么就会将一号帧以后的所有帧丢弃。而不会返回一号帧以后的ACK消息。所以由此可见一号帧一定是收到了,但返回的ACK丢失,但这并不影响,因为1号帧已经到达。
-
SR 双向滑动窗口
- 发送方和接收方同时拥有一个滑动窗口。当发送方发送1、2、3帧后,接收方只收到了1、3。接收方不会像GBN一样丢掉3,而是滑动窗口到2的位置。这时发送方的2号帧计时器超时就会重新发送2号帧。这样避免了浪费资源的现象。
- 缺陷:由于序列号位数有限制,所以滑动窗口的大小需要与序列号位数进行取舍。限制了滑动窗口的大小。
4.4 拥塞控制机制
- 太多发送主机发送太多的数据或者发送速度太快而造成网络无法处理的问题
- 主要表现为分组丢失(路由器缓存溢出)
- 分组延迟过大(在路由器缓存中排队)
- 端到端拥塞控制
- 网络层不需要显式的提供支持
- 端系统通过观察loss、delay等网络行为判断是否发生拥塞
- TCP采取这种方法
- 网络辅助的拥塞控制
- 路由器向发送方显式地反馈网络拥塞信息
- 简单地拥塞指示(1bt):SNA、DECbit、TCP/IP ENC、ATM
- 指示发送方应该采取何种速率
5. 网络层
5.1 网络层核心功能-转发与路由
- 转发:将分组从路由器的输入端口转移到和合适的输出端口
- 路由:确定分组从源到目的经过的路径
- 路由算法
5.2 网络层服务模型
- 无连接服务
- 不事先为系列分组的传输确定传输路径
- 每个分组独立确定一条传输路径
- 不同分组可能传输路径不同
- 数据报网络(datagram network)
- 连接服务
- 首先为系列分组的传输确定从源到目的经过的路径(建立一条逻辑连接)
- 然后沿着该连接传输系列分组
- 系列分组的传输路径相同
- 传输结束之后拆除该逻辑连接
- 虚电路网络(virtual-circuit network)
- 网络层的连接服务是主机到主机的,与传输层的端到端不同
5.3 数据报网络
- 路由转发原则遵循:最长前缀匹配优先原则。也就是说在检索转发表时,优先选择与分组目的地址匹配前缀最多的入口进行路由分组转发。
- 为什么Internet选择了数据报网络而不选择虚电路网络?
- Internet网络的计算机之间进行数据交换没有弹性服务,没有特别严格的时间要求。
- 链路类型众多,每个链路的特点、性能都不同。统一服务比较困难。
- 端到端系统,可以自适应、性能控制、差错恢复。
- 但虚电路网络一般用于电话机、传真机,需要一直进行数据连接,对时间要求非常严格,对于数据传输的顺序也非常严格,并且对于可靠性要求很高。
- 虚电路网络不是智能网络,他只能实现一条链路通信,你无法要求它做一些其他的智能化处理。
5.4 IP编址
-
IP地址:32比特(ipv4)编号标识主机、路由器的接口
- 组成:网络号(NetID高比特位)+主机号(HostID低比特位)
-
IP子网:
- IP地址具有相同网络号的设备接口
- 不跨越路由器(第三级别以上层的网络设备)可以彼此物理联通的接口
-
子网掩码
- 由三十二位比特组成
- 采用点分十进制的形式
- 如何取值:网络号(NetID) + 子网号(SubID) 全部为1、主机号(HostID)全部为0
- 子网地址+子网掩码准确确定了子网的大小
-
DHCP协议(应用层协议,传输层使用UDP,端口号为67)
- 获取IP地址
- 硬编码:进行静态配置
- 动态主机配置协议-DHCP:动态的从服务器获取IP地址、子网掩码、默认网关地址、DNS服务器名称与IP地址
- 支持地址重用,如果这个地址使用者关闭了使用、那么这个地址能够被别的主机分配
- 支持在用地址续租
- 支持移动用户加入网络
- 获取IP地址
-
网络地址转换NAT
- 一个网络只能/只需要从ISP申请一个IP地址
- 本地网络IP地址变更,无需通告外界网络
- 变更ISP时,无需修改内部网络设备IP地址
- 内部网络设备对外界网络不可见,即不可直接进行网络寻址(安全性)
5.5 路由
- 层次路由
- 由于网络过于庞大,路由无法支持全部进行互连互通。因此路由分为多层路由,一级路由可以管理多个二级路由器。区域内的路由称作一级路由。域内独立的区域之间的路由称作二级路由。
- 假如要从一个源路由转发到另一个目的路由,并且这两个路由在不同的区域内。区域一级路由会进行选择,根据路由表,提前已经得知从哪个路由走能够到达目的区域的一级路由,然后再转发到二级路由。
- 假设同时有多个路由接口可以转出路由到达目的路由。这时有一个热土豆算法用来计算网关路由之间的最小代价。选择最小代价的网络路由来进行发送。
- AS(autonomous system)系统指的是处于一个管理机构控制之下的路由器和网络群组。它可以是一个路由器直接连接到一个LAN上,同时也连到Internet上;它可以是一个由企业骨干网互连的多个局域网。在一个自治系统中的所有路由器必须相互连接,运行相同的路由协议,同时分配同一个自治系统编号。一个AS只能运行一种路由协议。
- 自治系统:autonomous system。在互联网中,一个自治系统(AS)是一个有权自主地决定在本系统中应采用何种路由协议的小型单位。这个网络单位可以是一个简单的网络也可以是一个由一个或多个普通的网络管理员来控制的网络群体,它是一个单独的可管理的网络单元(例如一所大学,一个企业或者一个公司个体)。一个自治系统有时也被称为是一个路由选择域(routing domain)。一个自治系统将会分配一个全局的唯一的号码,有时我们把这个号码叫做自治系统号(ASN)。
- RIP协议
- 当经过180秒后没有收到邻居的通告,说明该邻居/链路已经失效
- 邻居/链路一旦失效就进行自身的路由更新、并且向外告知其他的路由这个消息并进行更新。
- 当链路发生无穷计数问题时,会采取毒性逆转的方式去预防该问题。
- 如果路由跳数大于一个临界值就不再进行消息传播。
6. 数据链路层
6.1 概述
- 组帧
- 封装数据报构成数据帧、加首部和尾部
- 保证帧同步
- 链路接入
- 如果是共享介质,需要解决信道接入的问题
- 帧首部中的
MAC
地址,用于标识帧的源和目的
- 相邻结点之间的可靠交付
- 在低误码率的有线链路上很少采用(如光纤,某些双绞线等)
- 无线链路:误码率高,需要可靠交付
- 流量控制
- 协调相邻的发送结点和接收
- 差错检测
- 信号减弱和噪声会引起差错
- 接收端检测到差错:通知发送端重传或者丢弃帧
- 差错纠正
- 接收端直接纠正比特差错
6.2 MAC多路访问控制协议
-
广播链路(共享介质)
- 单一共享广播信道
- 两个或者两个以上结点同时传输(会发生干扰)
- 造成冲突的时候,结点同时会接收到两个或者多个信号,最终导致接收失败
-
MAC协议三大类
- 信道划分MAC协议
- 多路复用技术
- 随机访问MAC协议
- 信道不划分,允许冲突
- 采用冲突恢复机制
- CSMA/CD协议。边发边听、不发不听
- 轮转MAC协议
- 结点轮流使用信道
- 信道划分MAC协议
6.3 ARP协议
- IP地址:
- 32位,接口的网络层地址
- 用于标识网络层(第三层)分组,支持分组转发
- 邮政地址,层级地址。不可以随意移动,移动后跟随子网改变而改变
- MAC地址(LAN地址、物理地址、以太网地址)
- 作用:用于局域网内标识一帧从哪个接口发出,到达哪个物理相连的其他接口
- 48位MAC地址(用于大部分LANs),固化在网卡的ROM中,有时也可以软件设置
- 身份证号,拥有唯一性。可以从一个LAN移动到另一个LAN
ARP协议在互联网中构建起了IP地址和MAC地址的映射关系。
6.4 路由器和交换机
- 相同之处:
- 两者均为存储转发设备
- 两者均使用转发表
- 不同之处:
- 路由器是网络层设备,通过处理数据报的头部来获取IP地址来进行存储和转发。
- 交换机是数据链路层设备,通过处理数据帧的头部来获取MAC地址来进行存储和转发
- 路由器依赖于路由算法(路由协议)计算,依据IP地址
- 交换机依赖于自学习(收到路径接口后将其进行记录)、泛洪构建转发表(如果需要发送的数据MAC地址还未进行记录,则向所有的MAC接口全部进行发送一个该数据帧),依据MAC地址
- PPP协议(点对点协议)
- 信息字段的长度是可变的,不超过1500字节,它包含着要传送的数据。
- PPP帧的首部和尾部分别为四个字段和两个字段 ;首部:标志字段F、地址字段A、控制字段C、协议字段 尾部:帧校验序列 FCS、标志字段 F;
- 首部中的地址字段A规定为0xFF(即11111111)。
首部中的控制字段C规定为0x03(即00000011)。
首部中的2字节的协议字段:
(1)当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。
(2)当协议字段为0xC021时,PPP帧的信息字段就是PPP链路控制协议LCP的数据。
(3)当协议字段为0x8021时,PPP帧的信息字段就是网络层的控制数据。
注:文章所使用所有图片均来自B站哈工大计算机网络视频
文章引用所有文章皆在侧边有所标识,点击即可跳转!