计算机网络笔记

计算机网络

  • 1.计算机网络概述
    • 计算机网络概述
    • 通信系统模型:
    • 什么是计算机网络?
    • 距离远、数量大如何保证互连?
    • 什么是Internet?——从组成角度来看
    • 什么是Internet?——从服务角度来看
    • 仅仅有硬件(主机、链路、路由器。。)连接,Internet能否舒畅运行?能保证应用数据有序交付吗?
    • 什么是网络协议?
    • 协议的三要素
    • Internet协议标准
    • 计算机网络结构
      • 网络边缘
      • 接入网络、物理介质
      • 网络核心(核心网络)
    • Internet结构
      • 目前全球的Internet结构
    • 数据交换
      • 交换是什么?
        • 动态转接
        • 动态分配传输资源
    • 数据交换的类型
      • 电路交换
        • 电路交换三个阶段
        • 独占资源
        • 电路交换网络的链路共享?即电路交换网路如何共享中继线?
        • 什么是多路复用?
        • 典型多路复用方法
      • 报文交换
      • 分组交换
      • 报文交换和分组交换的时间比较
      • 例题
      • 电路交换和分组交换的比较
      • 分组交换一定优于电路交换?
  • 2.计算机网络性能
    • 速率
    • 带宽
    • 延迟/时延
      • 四种分组时延
    • 时延带宽积
    • 分组丢包
    • 吞吐量
      • 瓶颈链路
      • 将吞吐量放大到整个Internet场景会是什么样子的呢?
  • 3.计算机网络体系结构
    • 简介
    • 为什么采用分层结构?
    • 分层网络体系结构基本概念
    • OSI参考模型
    • OSI参考模型解释的通信过程
    • OSI参考模型数据封装与通信过程
    • 为什么需要数据封装?
    • OSI模型的七个层次
      • 物理层:在具体的物理介质上,实现比特的传输!
      • 数据链路层:负责结点-结点 数据传输
      • 网络层
      • 传输层:负责源-目的(端-端)(进程间)完整报文传输,把来自会话层的信息分为数据段交给网络层
      • 会话层
      • 表示层:处理两个系统间交换信息的语法与语义问题
      • 应用层
        • 典型的应用层服务:
    • TCP/IP参考模型
    • 5层参考模型:综合了OSI和TCP/IP的优点
      • 5层模型的数据封装
  • 4. 计算机网络应用的体系结构
    • 网络应用的体系结构
      • 客户机/服务器结构(C/S)
      • 点对点结构(P2P)
      • 混合结构
    • 网络应用进程通信
      • 进程
      • 同一主机上运行的进程之间如何通信?
      • 如何寻址进程?不同主机上运行的进程间如何通信?
      • 应用层协议
      • 应用层协议的内容
    • 网络应用的需求与传输层服务
      • 数据丢失/可靠性(Data loss)
      • 时间/延迟(Time Sensitive)
      • 带宽(Bandwidth)
    • Internet提供的传输服务
    • 典型网络应用所使用的传输层服务
    • web与HTTP
      • http应用层的传输层协议:tcp
    • HTTP连接
      • 非持久性连接
      • 持久性连接
    • HTTTP消息格式
      • HTTP的请求消息
      • HTTP的响应消息
    • Cookie技术
    • Web缓存/代理服务器技术
      • 解决缓存不是最新的问题
    • Email应用
    • SMTP协议与HTTP的对比
    • Email消息格式
    • DNS概述(Domain Name System)
    • 为什么DNS采用分布式层次式数据库
      • DNS根域名服务器(第一层)
      • 顶级域名服务器(TLD,即第二层)和权威域名解析服务器(第三层)
      • 本地域名解析服务器
      • DNS查询的两种方式
      • DNS记录缓存和更新
    • DNS记录和消息格式
      • 如何注册域名?
    • P2P应用:原理与文件分发
      • 文件分发
    • P2P应用:索引技术
      • 集中式索引:
      • 洪泛式查询
      • 层次式覆盖网络
    • Socket编程-应用编程接口(API)
      • 网络程序设计接口
      • 应用接口编程API
      • 几种典型的应用编程接口
    • Socket API
      • 地址结构
    • Socket API 的函数
      • WSAStartup
      • WSACleanup
      • Socket函数
      • Socket面向TCP/IP的服务类型
      • bind函数
      • listen函数
      • connect函数
      • accept函数
      • send,sendto函数
      • recv,recvfrom
      • setsockopt,getsockopt
      • Socket API函数小结
    • 网络字节顺序
    • 网络应用的Socket API(TCP)调用基本流程
    • 解析服务器IP地址
    • 解析服务器(熟知)端口号
    • 解析协议号
    • TCP客户端软件流程
    • UDP客户端软件流程
    • 4种类型服务器
      • 循环无连接服务器基本流程【UDP】
      • 循环面向连接服务器基本流程【TCP】
      • 并发无连接服务器基本流程
      • 并发面向连接服务器基本流程
  • 计算机网络核心机制和协议
    • 传输层服务和协议
    • 传输层 vs 网络层
    • Internet传输层协议
    • 多路复用和多路分用
      • 多路分用如何工作?
      • 无连接多路分用(面向UDP)
      • 面向连接的多路分用【一个客户机进程对应一个服务器进程】
    • UDP协议【尽力而为的服务模型】
      • UDP存在意义
      • UDP用途
      • 在UDP上实现可靠数据传输?
      • UDP校验和checksum
    • 可靠数据传输原理
      • 什么是可靠?
      • 可靠数据传输协议(RDT)【不错、不丢、不乱】
    • 可靠数据传输协议【RDT】
      • rdt1.0 可靠信道上的可靠数据传输
      • rdt 2.0 假设是只会产生位错误的信道
      • rdt2.0 中引入的新机制
      • rdt2.0 有什么缺陷?
      • rdt2.1 发送方,应对ACK/NAK破坏
      • rdt2.2 无NAK消息协议
      • rdt3.0
      • rdt3.0 性能分析
      • 流水线机制与滑动窗口协议
      • 滑动窗口协议
      • GBN协议
      • SR协议
    • 可靠数据传输原理与协议回顾
    • TCP协议
      • TCP段结构:序列号和ACK
      • TCP可靠数据传输
      • TCP快速重传机制
      • TCP流量控制
      • TCP连接管理【三次握手】
      • TCP关闭连接【四次挥手】
    • 拥塞控制原理
    • TCP拥塞控制
    • TCP拥塞控制算法
    • TCP性能分析
      • TCP的吞吐率
      • TCP的公平性
    • 传输层总结
    • 网络层服务
    • 网络层核心功能——转发与路由
    • 网络层核心功能——连接建立
      • 网络层连接与传输层连接的对比:
    • 网络层服务模型
    • 数据报网络和虚电路网络是典型两类分组交换网络
    • 虚电路网络:一条从源主机到目的主机,类似于电路的路径(逻辑连接)
      • 通信过程
      • 虚电路信令协议
    • 数据报网路
      • 数据报转发表
    • 数据报网络 vs 虚电路网络(VC)
    • Internet网络层
      • IP数据报(分组)格式
      • IP数据报分片
      • IP分片过程
      • IP编址(addressing)
      • IP地址:32比特,编号标识主机、路由器的接口
      • 怎么样为接口分配IP地址呢?
      • 有类IP地址
        • A类地址
        • B类地址
        • C类地址
        • D类地址
        • E类地址
      • 特殊IP地址
    • IP子网划分与子网掩码
      • 子网划分
      • 如何确定是否划分了子网?利用多少位划分子网?
    • CIDR与路由聚合
    • DHCP协议
    • 网络地址转换(NAT)
    • 互联网控制报文协议(ICMP)
    • 典型的ICMP报文
      • 例外情况(不发送ICMP报文)
    • IPv6
      • IPv6地址表示形式
      • IPv6基本地址类型
      • IPv4向IPv6过渡
    • 路由算法
      • 路由与转发
      • 网络抽象为图
      • 路由算法的分类
      • 链路状态路由算法
      • 距离向量路由算法
      • 距离向量DV:链路费用变化
    • 层次路由
      • 做法:聚合路由器为一个区域,作为一个自治系统AS
      • 网关路由器
      • 自治系统间路由任务
    • AS内部路由
      • 最常见的AS内部路由协议
      • RIP协议
      • OSPF协议:开放最短路径优先协议
      • OSPF分层:跟上面的分层原理很相似
      • BGP协议:Internet AS间路由协议:事实上的标准域间路由协议
        • BGP基础
      • BGP路由选择
      • BGP路由选择策略
      • 为什么采用不同的AS内与AS间路由协议?
    • 数据链路层服务
      • 链路层的具体实现?
      • 网卡间通信
      • 差错编码
      • 差错编码的检错能力
    • 多路访问控制(MAC)协议
      • 理想MAC协议
      • MAC协议分类
        • 时隙ALOHA协议
        • ALOHA协议
        • CSMA协议【载波监听多路访问协议】
        • CSMA/CD协议【“边发边听,不发不听”】
      • 轮转访问MAC协议
      • MAC协议总结
    • MAC地址(LAN地址、物理地址、以太网地址)
      • ARP协议(1):地址解析协议
    • 以太网
      • 以太网:物理拓扑
      • 以太网提供不可靠、无连接服务
      • 以太网帧的结构
    • 以太网交换机
    • 交换机
      • 交换机互联
      • 组织机构网络
      • 路由器 vs 交换机
    • 局域虚拟网(VLAN)
      • 跨越多交换机的VLAN
    • 点对点链路控制
      • 常见的点对点数据链路控制协议
      • PPP协议
      • PPP无需支持的功能
    • 无线局域网(WIFI)
      • 信道与AP关联
      • 被动扫描与主动扫描
      • 802.11无线局域网
      • 冲突避免的过程
  • 计算机网络之危机四伏
    • 什么是一个安全的网络?
      • 网络安全的基本属性
      • 网络安全的基本特征
    • 网络安全威胁
    • Internet安全威胁
      • 拒绝服务DOS
      • 反射式DDoS攻击
      • SYN cookie攻击
    • 密码学基础
      • 加密类型
      • 破解加密方法
      • 传统加密方法
      • 现代加密技术
      • 数据加密标准:DES
      • DES算法结构
      • 公钥密码学
      • 公钥加密算法
      • 身份认证
      • 报文完整性
        • 密码散列函数
        • 报文摘要
        • 报文认证
        • 报文认证码MAC
      • 数字签名
      • 密钥分发中心(KDC)
      • 认证中心(CA)
    • 安全电子邮件
      • 电子邮件安全威胁
      • 电子邮件安全需求
      • 安全电子邮件基本原理
      • 安全电子邮件标准
    • Web安全威胁
      • 基于应用层实现Web安全
      • 基于传输层实现Web安全
      • 基于网络层实现Web安全
      • 安全套接字层(SSL)
      • 简化的SSL:一个简单的安全信道
      • SSL协议栈
      • SSL握手过程
    • 虚拟专用网(VPN)
      • VPN的功能
      • VPN关键技术
    • IP安全(IPSec)网络层提供的安全服务
      • IPSec体系结构
      • IPSec服务
        • 传输模式【感知模式】
        • 隧道模式
      • 两个IPSec协议
      • 安全关联(SA)
        • 安全关联数据库(SAD)
        • 安全策略数据库(SPD)
      • IPSec数据报
      • IPSec数据报处理过程
      • IPSec解封数据报处理过程
      • IPSec序列号
      • SA的建立和密钥管理
      • Internet密钥交换(IKE)
      • IPSec总结
    • 无线局域网
    • 防火墙
      • 无状态分组过滤
      • 有状态分组过滤
      • 应用网关
      • 应用网关、防火墙的局限性

1.计算机网络概述

计算机网络概述

计算机网络=通信技术+计算机技术,计算机网络是通信技术与计算机技术紧密结合的产物

通信系统模型:

计算机网络笔记_第1张图片
信源:发送和产生信息的地方
信宿:信息要到达的地方
信道:传输信息的通道,在信息传输过程中,有可能受到噪声源的干扰
计算机网络就是一种通信网络,特殊之处就是信源和信宿都是计算机,发射的信息都是数字信息!

什么是计算机网络?

计算机网络就是互连的,自治的计算机集合
自治:无主从关系
互连:互联互通

距离远、数量大如何保证互连?

通过交换网络互连主机

计算机网络笔记_第2张图片

什么是Internet?——从组成角度来看

Internet是全球最大的互联网络,ISP(Internet Service Provice)网络互连的“网络之网络”
计算机网络笔记_第3张图片
数百万计互连的计算设备集合:
主机端系统:运行各种网络应用
通信链路:光纤、铜缆、无线电、卫星
分组交换:转发分组(数据包)【路由器 和 交换机】

什么是Internet?——从服务角度来看

为网络应用提供通信服务的通信基础设施
为网络应用提供应用编程接口(API)

仅仅有硬件(主机、链路、路由器。。)连接,Internet能否舒畅运行?能保证应用数据有序交付吗?

不能,还需要协议.

什么是网络协议?

硬件是计算机网络的基础,协议是计算机网网络有序运行的重要保证,是计算机网路中数据交换必须遵守事先约定好的规则【事实上,任何通信或信息交换都需要规则】
网络协议是网络进行数据交换过程中而建立的规则标准或约定。

协议规定了通信实体之间所交换的信息的格式、意义、顺序以及针对信息或发生的事件所采取的“动作”。

协议的三要素

语法(Syntax):数据与控制信息的结构或者格式【底层信息还是信号电平】
语义(Semantics):需要发出何种控制信息,完成何种动作以及做出何种响应。差错控制
时序(Timing):事件顺序、速度匹配
协议规范了网络中所有信息发送和接收过程,TCP,IP,HTTP、Skype

Internet协议标准

一般都是以RFC文档为标准的。

计算机网络结构

网络边缘

主机(端系统):位于“网络边缘”,运行网络应用程序
客户/服务器应用模型:客户端发送请求,接收服务器响应
对等应用模型:无(或不仅依赖)专用服务器、通信在对等实体之间直接进行

接入网络、物理介质

数字用户线路(DSL):即利用家里的电话线连接中心局
FDM:

50kHz-1MHz用于下行
4kHz-50KHz 用于上行
0kHz-4kHz 用于传统电话

电缆网路:利用频分多路复用技术【即在不同频带(载波)上传输不同频道】,数据、电视信号在共享线缆分布式网络上利用不同频率传输

HFC:混合光纤同轴电缆
非对称:下行高达30Mbps传输速度、上行为2Mbos传输速率【即上传和下载的速率不同】

无线接入网络:通过共享的无线接入网络连接端系统与路由器

网络核心(核心网络)

互联的路由器(或者分组转发设备)
关键功能:路由+转发

路由:利用路由算法确定分组从源到目的的传输路径
转发:将分组从路由器的输入端口交换至正确的输出端口

Internet结构

端系统通过接入ISP连接到Internet
可选方案一:每个ISP直接相连?
直接互连不适用于大规模网络 【O(n^2)连接问题】
可选方案二:将每个ISP连接到一个国家或者全球的ISP中?
因为经济或者政治的原因,国家之间有利益博弈,这样也是不可行的。

目前全球的Internet结构

计算机网络笔记_第4张图片

数据交换

每个主机直接相连所需要的解决的问题就是N^2链路问题:N(N-1)/2,从经济上与技术上都是不可行的。

现代网络就引入交换设备,如下图
计算机网络笔记_第5张图片
为了维护交换设备的连通性与网络规模,我们把交换设备连接在一起形成交换网络。
计算机网络笔记_第6张图片

交换是什么?

动态转接

交换设备可以在所有交换设备端口之间动态的在物理上或者逻辑上,建立端口之间的连接,将一个端口的数据转移到另外一个端口,并且这种连接可以在多个设备之间并行进行。
计算机网络笔记_第7张图片

动态分配传输资源

即实现数据从源主机穿越交换网络送到正确的目的主机的过程
计算机网络笔记_第8张图片

数据交换的类型

电路交换

最具有代表性的电路交换网络:电话网络
计算机网络笔记_第9张图片

电路交换三个阶段

建立连接(呼叫/电路建立)
通信
释放连接(拆除电路)

独占资源

电路在整个交换过程中,建立起电路所占有的通信资源,是不能够被第三方所共享的。

电路交换网络的链路共享?即电路交换网路如何共享中继线?

即图中那些圆圈的地方,因为电路交换需要独占资源,那么我们就需要这样的一个线路,能够被多路通信同时占用,即多路复用技术
计算机网络笔记_第10张图片

什么是多路复用?

多路复用技术,简称复用,是通信技术中的基本概念。

在物理上,一路光纤或者其他介质的传输能力,远远大于建立一路通信所需要消耗的资源,所以,多路复用成为了必然。
计算机网络笔记_第11张图片
基本原理:把链路/网络资源(如带宽)划分为“资源片”,并且将“资源片”分配给各路“呼叫”,每路呼叫独占分配到的资源片进行通信,资源片可能“闲置”【无共享】

典型多路复用方法

频分多路复用(FDM):在频率上进行划分为多个频带,让每路信号去使用其中一个频带。

各个用户占用不同的带宽资源,用户在分配到一定的频带后,在通信过程中自始至终都占用这个资源。
计算机网络笔记_第12张图片
时分多路复用(TDM):将时间划分为一段段等长的时分复用帧,将每个用户在每个TDM帧中所占用固定序号的时隙

一个用户只会在它所对应的时隙里面传输数据

每用户所占用的时隙是周期性出现(其周期就是TDM帧的长度)

计算机网络笔记_第13张图片
时分复用的所有用户是在不同的时间占用相同的频带宽度
计算机网络笔记_第14张图片

波分多路复用(WDM):就是光的频分复用
每一个用户使用不同频率的光来进行数据传输
计算机网络笔记_第15张图片
可以在同一个光纤上进行传输,只要频率不同,到了目的地再分开即可。
计算机网络笔记_第16张图片
码分多路复用(CDM):广泛应用于无线链路共享(如蜂窝网、卫星通信等)

每个用户分配唯一的 m bit 码片序列,其中,“0”用“-1”表示,“1”用“+1”表示

各用户使用相同频率载波,利用各自的码片序列编码数据
编码信号 =(原始数据)x (码片序列)
比如发送比特 1 (+1),则发送自己的 m bit 码片序列
比如发送比特 0 (-1),则发送该码片序列的 m bit 码片序列的反码

各用户的码片序列相互 正交,这样只能和自己的码片序列才会结果为1,保证互不干扰。
计算机网络笔记_第17张图片
码分多路复用的原理:P是用户的码片序列,然后,把叠加向量Si的1/m相乘,如果结果为1或者-1,那么就是信号里面有我们要的码片序列所对应用户的信号。
计算机网络笔记_第18张图片
一个用户利用信道传输数据:
计算机网络笔记_第19张图片
多个用户利用信道传输数据:
计算机网络笔记_第20张图片
PS:这个地方,看不懂的建议看看通信原理。

报文交换

报文:源(应用)发送信息整体

比如:一个文件,最早的应用就是电报
计算机网络笔记_第21张图片

分组交换

分组:报文分拆出来的一些列相对较小的数据包
通常我们还会在拆分出来的分组里面加多一些头部信息,例如控制信息什么的。
在这里插入图片描述
分组交换需要报文的拆分重组
产生额外开销
计算机网络笔记_第22张图片
当第一个分组到达中间路由器时,中间路由器向目的地转发第一个分组的时候,源也会向中间路由器转发第二个分组。当所有分组到达目的地之后,根据分组的头里面的控制信息,比如分组的序号什么的,将这些分组组合在一起,形成完整的信息。
分组交换在通信过程中,并不需要像电路交换那样,需要把中间共享链路的一些资源【带宽等】占用下来,然后我们再使用。

当多个数据需要传送时,分组后直接进行数据传输即可,按需共享链路。
计算机网络笔记_第23张图片
分组交换也叫做统计多路复用,
把分组交换这样一个数据交换过程称为 存储-转发过程。分组的数据先在中间路由器存储后再进行转发。

报文交换和分组交换的时间比较

报文交换分组交换均采用 存储-转发过程.
区别:
报文交换是以 完整报文进行 “存储-转发”;
分组交换是以较小的 分组 进行 “存储-转发”;

分组交换:
会产生时间延迟,接收报文信息(消息),拆分为较小长度L bits 的分组。在传输速率为 R 的链路上传输分组,从第一个bit 发送开始 到 最后一个bit发送结束,这段时间就叫 传输时延

例题

在这里插入图片描述
报文交换:假设带宽为R,报文为M bits,每次传输时间需要 M/R 秒;
分组交换:报文被拆分为多个分组,分组长度为L,每个分组传输时延为 L/R 秒

假设 M=7.5M bits,L=1500bits ,M=5000L[报文拆分为5000个小分组],R=1.5Mbps。

如果采用报文交换,从信源到第一个路由器,需要5s时间,到达目的地需要15s

如果采用分组交换,第一个分组长度为L,即1500bits,传输一个分组需要的时间 1ms,再经过1ms,第一个分组到达了第二个路由器,第二个分组到达了第一个路由器,到了第3ms,第一个到达了信宿。当到了5002ms时,所有数据到达了目的主机。

时间:报文用了15s,分组交换用了5.002s,所以,分组交换远远优于报文交换。而且,采用报文交换,路由器的缓存至少要 7.5M【需要临时存储一个报文】,采用分组交换,路由器的缓存就至少需要1500bits,即1.5k,时间少,速度快,所需缓存少,这就是分组交换优于报文交换的点。
计算机网络笔记_第24张图片

电路交换和分组交换的比较

电路交换一旦建立链路后,需要独占资源直至交换结束。

例如:有一个1M/s的链路,每个用户:活动时需要 100kb/s,平均活动时间为10%
对于电路交换:只能支撑10用户
对于分组交换:对于35个用户而言,大于10个用户同时活动的概率 <0.0004

结论:分组交换允许更多用户同时使用网络!网络资源能够得到充分共享

分组交换一定优于电路交换?

分组交换适用于突发数据传输网络,现在的网络传输就大量使用分组交换

资源充分共享
简单、无需呼叫建立

可能产生拥塞:分组延迟和丢失,需要协议处理可靠数据传输和拥塞控制

2.计算机网络性能

速率

速率即数据率或者称数据传输速率或比特率。

单位时间(秒)传输信息(比特)量
计算机网络中最重要的一个性能指标
单位: b/s(或者 bps) 、kb/s、Mb/s、Gb/s
k=10^3 M=10^8

带宽

原本指信号具有的频带宽度,即最高频率与最低频率只差,单位是赫兹

网络中的带宽,通常是数字信道所能传送的"最高数据率",单位:b/s(bps)

常用带宽单位
kb/s (10^3 b/s)
Mb/s (10^6 b/s)
Gb/s (10^9 b/s)
Tb/s (10^12 b/s)

延迟/时延

分组交换为什么会发生丢包和时延?
A:分组在路由器缓存中排队,分组到达速率超出输出链路容量时,分组排队,等待输出链路可用
计算机网络笔记_第25张图片

四种分组时延

结点处理延迟:差错检测,确定输出链路
就是当前路由器要对分组进行差错检测,并且确定它后续往哪个路由器传输,甚至这个结点要对分组做一些处理等等,这个时间一般是小于ms级别的。

排队延迟:等待输出链路可用,取决于路由器的拥塞程度。
就是可以传输了,然后等待传输链路可以使用

传输延迟:取决于分组长度和链路带宽
当一个分组发送以后,在链路中传输的时间

传播延迟:取决于物理链路长度和信号传播速度
信号在物理介质上传播所消耗的时间。
传输延迟和传播延迟是完全不一样的!要注意区分!类比车队,车队通过收费站时间是传输延迟,每台车从第一个收费站跑到第二个收费站用时就是传播延迟!

时延带宽积

时延带宽积=传播时延 x 带宽
计算机网络笔记_第26张图片
相当于按照这个带宽,当我们第一个比特到达目的地的时候,一共发出了多少个比特。
链路的时延带宽积又称为以比特为单位的链路长度

分组丢包

什么情况下会丢包?

队列的缓存容量有限
分组到达已满队列将被丢弃(即丢包)
丢弃分组可能由前序节点或源重发(也可能不重发)
计算机网络笔记_第27张图片

一般情况下,我们利用丢包率来衡量链路丢包

吞吐量

吞吐量:表示在发送端与接收端之间传输数据速率(b/s)
即时吞吐量 :给定时刻的速率
平均吞吐量: 一段时间内的平均速率
计算机网络笔记_第28张图片
最终的吞吐量取决于传输两端的小的那个吞吐量!!

瓶颈链路

端到端路径上,限制端到端吞吐量的链路!!!【即吞吐量小的链路】

将吞吐量放大到整个Internet场景会是什么样子的呢?

假设总共有十条链路,理论上是,第一点,即三个数值中的最小值,一般在实际生活中,就是传输端或者接收端的通常就是瓶颈链路!
计算机网络笔记_第29张图片

3.计算机网络体系结构

简介

计算机网络是一个非常复杂的系统,涉及许多组成部分:主机、路由器、各种链路、应用、协议、硬件、软件…

网络体系结构是从功能上描述计算机网络结构

计算机网络体系结构简称网络体系结构,是分层结构

每层遵循某个/些网络协议 完成本层的功能

计算机网络体系结构是计算机网络的各层及其协议的集合

体系结构是一个计算机网络的功能层次及其关系的定义

体系结构是抽象的

为什么采用分层结构?

结构清晰,有利于识别复杂系统的部件及其关系
模块化的分层易于系统更新、维护
有利于标准化

分层网络体系结构基本概念

计算机网络笔记_第30张图片
实体表示任何可发送或者接受信息的硬件或者软件进程。

协议是控制两个对等实体进行通信的规则的集合,协议是"水平的"

任一层实体需要下层服务,遵循本层协议,实现本层功能,向上层提供服务,服务是"垂直的"

下层协议的实现对上层的服务用户透明的,

同系统的相邻层实体通过接口进行交互,通过服务访问点SAP交换原语,指定请求的特定服务!

OSI参考模型

目的:为了支持 异构网络系统 的互联互通
异构网络系统互连的国际标准
划分为七个层次:分别是 物理层,数据链路层,网络层,传输层,会话层,表示层,应用层

OSI参考模型解释的通信过程

计算机网络笔记_第31张图片
相邻层之间利用接口来通信,上面四层的传输称为端到端层的传输!

OSI参考模型数据封装与通信过程

计算机网络笔记_第32张图片

在主机A,先把传输数据交给应用层,应用层根据网络应用的不同,可能会加上一些网络信息,应用层头(AH),这样就构成了这个协议的数据包,我们在OSI参考协议里面,把应用层的数据包称为协议数据单元【A-PDU】

然后交给表示层,并且加上表示层的协议所构成的表示信息,然后交给会话层,以此类推。。。在数据链路层会加头加尾到了物理层,会转化为一系列的比特流。

为什么需要数据封装?

增加控制信息,构造协议数据单元(PDU)

控制信息主要包括:

地址:标识发送端/接收端
差错检测编码:用于差错检测或纠正
协议控制:实现协议功能的附加信息,如,优先级,服务质量,和安全控制等。。。

OSI模型的七个层次

物理层:在具体的物理介质上,实现比特的传输!

接口特性:
机械特性【接口是什么样的几何形状,插头的形状】、电气特性【使用多大的电平,电压】、功能特性【定义这个接口的引脚的功能】、规程特性【定义这个接口工作工程中应遵循的标准】。

比特编码:用信号的什么特征来表示0和1

数据率:定义数据传输的速率

比特同步:发送端发送的比特,接收端刚刚好能接收到该比特,不会提前接收或者延后接收。【时钟同步】

传输模式:
单工模式【只能A给B发信号,比如电视】
半双工模式【交替双向,可以双向通信,但是,只能交替进行,当A给B发数据时,B是不能够给A发数据的,例如,对讲机】
全双工模式:双向可以同时进行,一般来讲,全双工都会采用独立的两个信道

数据链路层:负责结点-结点 数据传输

计算机网络笔记_第33张图片

结点可能是主机或者其他的网络设备,解决物理链路直接相连的两个相邻结点的数据传输,以帧作为数据传输单位!

组帧:组成一个数据帧,通常就是加头加尾,目的是让接收一端从物理层收到一系列的比特流的时候,能够成功切分出来正确的数据帧。

物理寻址:在帧头中增加发送端和/或接收端的物理地址标识数据帧的发送端和/或接收端
计算机网络笔记_第34张图片
流量控制:匹配发送端和接收端的发送速度和接收速度,避免接收端的速度太慢,发送端发送太快而淹没接收端。

差错控制:采用一种特殊的编码,对传输的数据进行编码,使得接收端可以正确接收数据,也可以检测并重传损坏或者丢失帧,并避免重复帧

访问(接入)控制:在任一给定时刻决定哪个设备拥有链路(物理介质)的控制使用权

网络层

计算机网络笔记_第35张图片
负责源主机到目的主机数据分组交付

逻辑寻址:
信息可能穿越多个网络,这个时候,链路层使用的物理地址可能会失效。使用全局唯一逻辑地址,确保数据分组被送达目的主机,例如我们在因特网中使用的是IP地址。

路由:
路由器(或网关)互连网络,并路由分组至最终目的的主机,即路径选择

分组转发
下图,数据链路层里面,记录的是发送端和接收端的物理地址,即下面信息中的S和D,这个就是物理地址,而网络层实现的就是在多个网络中的传输,例如从02传到46,再从46那里,通过23传到09,再从09那里,通过29传到79…
计算机网络笔记_第36张图片

传输层:负责源-目的(端-端)(进程间)完整报文传输,把来自会话层的信息分为数据段交给网络层

计算机网络笔记_第37张图片
分段与重组

SAP寻址:确保将完整报文交给正确进程,如端口号
计算机网络笔记_第38张图片
连接控制:进行一种逻辑连接

流量控制:匹配数据发送和接收速度的问题

差错控制:引入差错编码和差错纠正机制来防止传输数据出错

会话层

计算机网络笔记_第39张图片
对话控制:对话的建立和维护

对话同步:在数据流中插入“同步点”,比如下次如果出错了,就直接从同步点开始就好了,而不用从头到尾再传输一次数据

表示层:处理两个系统间交换信息的语法与语义问题

计算机网络笔记_第40张图片
数据表示转化:转化为主机独立的编码,但是在传输过程中,就要用统一的编码,这样才不会导致数据传输而出错。

加密/解密

压缩/解压缩

应用层

计算机网络笔记_第41张图片
支持用户通过用户代理【如浏览器】或者网络接口使用网络(服务)

典型的应用层服务:

文件传输(FTP)
电子邮件(SMTP)
Web(HTTP)

TCP/IP参考模型

计算机网络笔记_第42张图片
我们一般会将网络接口层打开,所以就变为五层,即5层参考模型

5层参考模型:综合了OSI和TCP/IP的优点

计算机网络笔记_第43张图片
应用层:支持各种网络应用,如HTTP、SMTP、FTP

传输层:进程-进程的数据传输,TCP、UDP

网络层:源主机到目的主机的数据分组路由与转发

链路层:相邻网络元素(主机、交换机、路由器等)的数据传输

物理层:比特传输

5层模型的数据封装

计算机网络笔记_第44张图片

4. 计算机网络应用的体系结构

网络应用的体系结构

客户机/服务器结构(C/S)

计算机网络笔记_第45张图片

点对点结构(P2P)

计算机网络笔记_第46张图片
优点:高度可伸缩
缺点:难于管理

混合结构

将上面两种结构混合在一起使用!
计算机网络笔记_第47张图片

网络应用进程通信

进程

进程:主机上运行的程序
客户机进程:发起通信的进程
服务器进程:等待通信请求的进程

同一主机上运行的进程之间如何通信?

进程间通信机制
操作系统提供
进程间通信利用套接字(Socket)发送/接收消息实现【类似于寄信】

如何寻址进程?不同主机上运行的进程间如何通信?

不同主机上的进程进行通信,那么每个进程就必须拥有标识符

如何寻找主机?——IP地址
主机拥有了Ip地址后,不足以定位进程【因为一台主机上可能有多个进程】

端口号(Post number)
为主机上每个需要通信的进程分配一个端口号

进程的标识符:IP地址+端口号

应用层协议

网络应用需要遵循应用层协议
公开协议:由RFC定义,如HTTP、SMTP。。。
私有协议:多数P2P文件共享应用

应用层协议的内容

消息的类型:请求消息和响应消息

消息的语法格式:消息中有哪些字段、每个字段如何描述

规则:进程何时发送/响应消息、进程如何发送/响应消息

网络应用的需求与传输层服务

数据丢失/可靠性(Data loss)

某些网络应用能够容忍一定的数据丢失:网络电话
某些网络应用要求100%可靠的数据传输

时间/延迟(Time Sensitive)

有些应用只有在延迟足够低时才“有效”
网络电话、游戏

带宽(Bandwidth)

某些应用只有在带宽达到最低要求时才“有效”:网络视频
某些应用可以使用任何带宽——弹性应用:email
计算机网络笔记_第48张图片

Internet提供的传输服务

计算机网络笔记_第49张图片

典型网络应用所使用的传输层服务

计算机网络笔记_第50张图片

web与HTTP

网页包含多个对象:html文件,jpeg图片,视频文件,动态脚本等

对象的寻址:依靠URL(统一资源定位器)来寻找,唯一的标志符

HTTP协议:超文本传输协议

http应用层的传输层协议:tcp

计算机网络笔记_第51张图片
http是一个无状态的协议,服务器不维护任何有关客户端过去所发请求的信息。

HTTP连接

非持久性连接

每个TCP连接最多允许传输一个对象
HTTP 1.0版本使用非持久性连接

非持久性连接的过程:假设用户在浏览器中输入URLwww.someSchool.edu/someDepartment/home.index
计算机网络笔记_第52张图片
计算机网络笔记_第53张图片
非持久性连接,一个TCP连接一次只能传输一个对象。
计算机网络笔记_第54张图片
非持久性连接的问题:
每个对象需要两个RTT
操作系统需要为每个TCP连接开销资源
浏览器需要打开多个并行的TCP以获取网页所需对象【给服务器端造成了巨大的压力和资源浪费】


持久性连接

每个TCP连接允许传输多个对象
HTTP 1.1版本默认使用持久性连接

持久性连接:发送响应后,服务器保持TCP连接的打开,后续的HTTP消息可以通过这个连接发送

两种类型的持久性连接
无流水持久性连接:
客户端只有收到一个相应后才发送新的请求,每个被引用的对象耗时1个RTT

带有流水机制的持久性连接:
客户端只要遇到一个引用对象就尽快地发出请求,理想情况下,收到所有的引用对象耗时约1RTT【HTTP1.1的默认选项】

HTTTP消息格式

HTTP协议有两类消息:请求消息、响应消息

请求消息:ASCII码写的,人直接可读

HTTP的请求消息

HTTP请求消息的通用格式:
计算机网络笔记_第55张图片
方法的类型:
计算机网络笔记_第56张图片

HTTP的响应消息

也是用ASCII码编写的
计算机网络笔记_第57张图片

Cookie技术

http协议是一种无状态协议,但是很多应用是需要掌握客户端状态的。

Cookie技术:某些网站为了辨别用户身份、进行session跟踪而存储在用户本地终端的数据(通常经过加密)

Cookie的组件:
HTTP响应消息的cookie头部行
HTTP请求消息的cookie头部行
保存在客户端主机上的cookie文件,由浏览器管理

Cookie技术的原理:
首先客户端使用常规的请求访问服务器,服务器一看,这是个新的用户,于是创建一个id,在访问的时候,利用setcookie方法把这个行放到响应消息了,然后客户端会把这一句给解析出来,在下次访问的时候,客户端会把这个id给加上,于是就可以让服务器认出你是谁,从而达到识别对象的作用!

Cookie的作用:
身份认证、购物车、推荐。。。。。

Web缓存/代理服务器技术

功能:能够在不访问服务器的前提下满足客户端的HTTP请求。【跟redis数据库的作用有点相似】

作用:
缩短客户端请求的响应时间
减少机构/组织的流量
在大范围实现有效的内容分发
计算机网络笔记_第58张图片

解决缓存不是最新的问题

目标:如果缓存有最新的版本,则不需要发送请求对象

缓存:在HTTP请求消息中声明所持有版本的日期

服务器:如果缓存的版本是最新的,则响应消息中不包含对象

计算机网络笔记_第59张图片

Email应用

Email应用的构成组件:
邮件客户端

读、写Email消息
与服务器交互,收、发Email消息
Web客户端

邮件服务器

邮箱:存储发给该用户的Email
消息队列:存储等待发送的Email

SMTP协议

邮件服务器之间传递消息所使用的协议
客户端:发送消息的服务器
服务器:接收消息的服务器

SMTP协议:
采用TCP协议进行email消息的可靠传输
端口号是25

传输过程的三个阶段:
握手
消息的传输
关闭

命令/响应交互模式
命令:ASCII文本
响应:状态代码和语句

Email消息只能包含7位ASCII码

SMTP协议与HTTP的对比

计算机网络笔记_第60张图片

Email消息格式

SMTP:email消息的传输/交换协议
计算机网络笔记_第61张图片
email只能传输ASCII字符,但是为了传输视频等数据,我们需要进行多媒体扩展
MIME:多媒体邮件扩展(通过在邮件头部增加额外的行以声明MIME的内容类型)
计算机网络笔记_第62张图片
这样就可以传输非文本的数据了【视频,音频等。。】

邮件访问协议:从服务器获取邮件
POP:认证/授权(客户端<—>)和下载
计算机网络笔记_第63张图片
计算机网络笔记_第64张图片
IMAP:更多功能、更加复杂、能够操纵服务器上储存的信息
计算机网络笔记_第65张图片

DNS概述(Domain Name System)

Internet上主机/路由器的识别问题
IP地址
域名:www.baidu.com

真正底层工作的时候使用的是IP地址,而我们人使用的是域名,问题就来了,两者之间应该如何映射?
域名解析系统DNS

域名解析系统DNS是多层命名服务器构成的分布式数据库,也是应用层协议,可以完成名字的解析

DNS服务
域名向IP地址的翻译
主机别名
邮件服务器别名
负载均衡:Web服务器

为什么不使用集中式的DNS?
单点失败问题【防止一个点坏了而造成全局都不可以用】
流量问题【互联网上的域名和IP地址都需要翻译,所以这个流量非常巨大】
距离问题【如果放在中国,那么美国的用户解析域名需要很跨域很大的距离】
维护性问题【维护难度大】

为什么DNS采用分布式层次式数据库

计算机网络笔记_第66张图片
第一层:根服务器
第二层:顶级域名服务器
第三层:各自的服务器

客户要查询一个IP,需要由多个服务器共同完成
计算机网络笔记_第67张图片

DNS根域名服务器(第一层)

本地域名解析服务器无法解析域名时,访问根域名服务器

根域名服务器
如果不知道映射,访问权威域名服务器
获得映射
向本地域名服务器返回映射

顶级域名服务器(TLD,即第二层)和权威域名解析服务器(第三层)

顶级域名服务器(TLD):负责 com,org,net,edu等顶级域名和国家顶级域名,例如cn,uk,fr等

权威域名服务器:组织的域名解析服务器,提供组织内部服务器的解析服务(组织可以是公司、大学等等。。)

本地域名解析服务器

不严格属于层级体系,每个ISP有一个本地域名服务器(默认域名解析服务器)

当主机进行DNS查询时,查询被发送到本地的域名服务器
本地域名服务器作为代理,将查询转发给(层级式)域名解析服务器系统

DNS查询的两种方式

递归查询
迭代查询

DNS记录缓存和更新

只要域名解析服务器获得域名——IP映射,即缓存这一映射.

一段时间过后,缓存条目会失效(被删除了)
本地域名服务器一般会缓存顶级域名服务器的映射,因此根域名服务器不经常被访问

DNS记录和消息格式

资源记录:(name,value,type,ttl)
计算机网络笔记_第68张图片

DNS协议:查询和恢复消息,消息格式相同
消息头部:16位的查询编码,回复使用相同的编号

DNS通常使用UDP协议,进行区域传输(Zone transfer)的时候使用TCP协议,因为UDP规定,UDP报文的最大长度是512字节,当DNS查询超过512字节时,协议的TC字段出现删除标志,这时则使用TCP发送。一般DNS查询的请求和应答报文都低于512字节。

如何注册域名?

在域名管理机构注册域名,向域名管理机构提供你的权威域名解析服务器的名字和IP地址,域名管理机构想com顶级域名服务器中插入两条记录
计算机网络笔记_第69张图片

P2P应用:原理与文件分发

特点:
没有服务器
任意端系统之间直接通信
节点阶段性接入Internet
节点可能更换IP地址

计算机网络笔记_第70张图片
当节点数目增大时,时间趋于一定值。

文件分发

计算机网络笔记_第71张图片
计算机网络笔记_第72张图片
整个过程中,节点都是动态的加入或者离开的!
计算机网络笔记_第73张图片

P2P应用:索引技术

P2P系统的索引:信息到节点位置(IP地址+端口号)的映射
文件共享(电驴):
利用索引动态跟踪节点所共享的文件的位置
节点需要告诉索引它拥有哪些文件
节点搜索索引,从而货值能够得到哪些文件

集中式索引:

计算机网络笔记_第74张图片

缺点:内容和文件传输时分布式的,但是内容和定位是高度集中式的
单点失效问题
性能瓶颈
版权问题

洪泛式查询

完全分布式架构
每个节点对他共享的文件进行索引,且只对它共享的文件进行索引

查询消息通过已有的TCP连接发送,节点转发查询消息,如果查询命中,则利用反向路径发回查询节点

缺点:
转发消息过多,且有新节点加入时比较麻烦

层次式覆盖网络

介于集中式索引和洪泛式查询之间的方法
每个节点或者说一个超级节点,或者被分配一个超级节点【节点和超级节点间维持TCP连接,某些超级节点对之间维持TCP连接】

超级节点负责跟踪子节点的内容

Socket编程-应用编程接口(API)

网络程序设计接口

计算机网络笔记_第75张图片

应用接口编程API

计算机网络笔记_第76张图片
两个不同的层,需要通过接口来进行数据传输。

应用编程接口API:就是应用进程的控制权和操作系统的控制权进行转换的一个系统调用接口。

几种典型的应用编程接口

socket:套接字接口,在unix操作系统上定义的
winsock:微软公司在其操作系统上采用了套接字接口API并且进行扩展

Socket API

最初设计:
面向BSD UNIX-Berkley
面向TCP/IP 协议栈接口

目前:
事实上的工业标准
绝大多数操作系统都支持

Internet网络应用最典型的API接口,通信模型,客户/服务器模型

在进行通信的时候,服务器创建套接字,客户端也创建套接字。这样子,他们两个的通信,就相当于利用这个接口来进行通信,即套接字是应用进程间通信的抽象机制。
计算机网络笔记_第77张图片
计算机网络笔记_第78张图片
标识通信端点(对外):IP地址+端口号

操作系统/进程如何管理套接字(对内)? 套接字描述符(小整数),使用一种抽象的描述机制,把套接字抽象为文件,当应用进程创建套接字时,操作系统分配一个数据结构存储该套接字相关信息,并且操作系统在创建套接字时,还会返回套接字的描述。
计算机网络笔记_第79张图片
每个套接字有一个指针,该指针指向描述该套接字结构的地址!当我们使用套接字进行通信时,我们就需要来指定本地的地址和远程的端点地址。

地址结构

计算机网络笔记_第80张图片

Socket API 的函数

一开始要调用WSAStartup,进行初始化,是window是要连接操作系统的动态连接库。

最后要调用WSACleanup,释放所使用的动态连接库。

WSAStartup

在windows操作系统环境下,必须要调用的函数,有两个参数

第一个参数指明程序请求使用的WinSock版本,其中高字节指明副版本、低位字节指明主版本。

第二个参数返回实际的WinSock的版本信息。
计算机网络笔记_第81张图片

WSACleanup

应用程序在完成对请求的Socket库的使用,最后要调用的函数。

解除与Socket库的绑定
释放Socket库所占用的系统资源

Socket函数

sd=socket(protofamily,type,proto)

创建套接字
操作系统返回套接字描述符
第一个参数(协议族):protofamily=PF_INET(TCP/IP)【利用这个协议族,用来说明创建的这个套接字是面向哪个协议的】
第二个参数(套接字类型):说明创建的套接字是哪种类型
第三个参数(协议号):0为默认,通过这个,表明我们要访问的是哪种类型的协议。

Socket面向TCP/IP的服务类型

计算机网络笔记_第82张图片
TCP:可靠、面向连接、字节流传输、点对点
UDP:不可靠、无连接、数据报传输

int closesocket(SOCKET sd);

关闭一个描述符为sd的套接字
如果多个进程共享一个套接字,调用closesocket讲套接字引用计数减1,减到0才关闭

一个进程中的多线程对一个套接字的使用无计数【如果进程中的一个线程调用closesocket将一个套接字关闭,那么该进程中的其他线程也将不能访问该套接字】

返回值:
0:成功
SOCKET_ERROR :失败

bind函数

int bind(sd,localaddr,addrlen)

绑定套接字的本地端点地址:IP地址+端口号
参数:
套接字描述符(sd)
端点地址(localaddr)
客户端一般不必调用bind函数,服务器端一般就需要

服务器端怎么绑定IP地址和端口号呢?
计算机网络笔记_第83张图片
解决方法:
地址通配符:服务器端在利用bind绑定地址的时候,你制定端口号就好,IP地址给他赋值为地址通配符就好。【只要在本台主机上运行的IP就可以是有效的】

listen函数

int listen(sd,queuesize);

置服务器端的流套接字处于监听状态【一开始创建的流式套接字在客户端和服务器端是没有区别的,为了把他当做服务端身份来进行通信,需要将这个套接字置为一种被动的监听状态】

仅服务器端调用
仅用于面向连接的流套接字

设置连接请求队列大小,当有很多请求到达时,将请求放到该队列中。

connect函数

connect(sd,sadder,saddrlen);

客户端调用connect函数来使客户套接字(sd)与特定计算机的特定端口(sadder)的套接字(服务)进行连接

仅用于客户端
可用于TCP客户端也可以用于UDP客户端
TCP客户端:建立TCP连接
UDP客户端:制定服务器端点地址【UDP是无连接协议】

accept函数

newsock=accept(sd,caddr,caddrlen);

服务程序调用accept函数从处于监听状态的流套接字sd的客户连接请求队列中取出排在最前面的一个客户请求,并且创建一个新的套接字来与客户套接字创建连接通道

仅用于TCP套接字
仅用于服务器

利用新创建的套接字(newsock)与客户通信【TCP是面向连接的协议,是点对点的,意味着一个TCP连接只能连接客户端和服务器端两个套接字,假如服务器直接使用主套接字来与客户端进行连接,意味着TCP的服务器在某一个时刻永远只能为某一个客户提供,就不能并发的提供TCP连接,这是我们不希望看到的!】
为了采取并发的连接,我们就利用新创建的套接字与客户进行通信来建立。

send,sendto函数

计算机网络笔记_第84张图片

recv,recvfrom

计算机网络笔记_第85张图片

setsockopt,getsockopt

计算机网络笔记_第86张图片

Socket API函数小结

计算机网络笔记_第87张图片
计算机网络笔记_第88张图片

网络字节顺序

TCP/IP定义了标准的用于协议头中的二进制整数表示:网络字节顺序
某些Socket API函数的餐叙需要存储为网络字节顺序(如IP地址、端口号等)
可以实现本地字节顺序与网络字节顺序间转换的函数
计算机网络笔记_第89张图片

网络应用的Socket API(TCP)调用基本流程

p35
计算机网络笔记_第90张图片
服务器调用WSAStartup,接着调用socket(),创建服务器端的套接字,接着调用bind函数,为套接字s绑定端点地址【IP地址是绑定IP地址通配符】,接着作为TCP端的服务器端套接字,调用listen函数【把套接字置为监听模式并指定请求队列大小】,再调用accept函数,表示可以接受客户端请求。

客户端,先调用WSAStartup,调用socket(),创建套接字,接着调用connect函数,表示与服务器端建立连接。

这个时候,客户端发送请求,服务器端创建新的套接字【TCP连接是点对点的】,并且利用新的套接字与客户端进行连接。

接下来,进行通信。

假如客户端这次通信到此结束,就调用closesocket(s),释放客户端的套接字s,然后调用WSACleanup【清除winsock连接库的使用给清除】

服务器端会调用closesocket函数关闭ns套接字【新建的套接字,不是主套接字】,然后客户端回去调用accept函数继续接收请求。。。

假设服务器端接受完请求后要关闭服务器了,它也要调用WSACleanup函数清除windsock连接库的使用。

解析服务器IP地址

客户端可能使用域名或者IP地址标识服务器
IP协议需要使用32位二进制IP地址
需要将域名或IP地址转换为32位IP地址

函数inet_addr() 实现点分十进制IP地址到32位IP地址转换
函数 gethostbyname() 实现域名到32位IP地址转换【返回一个指向hostent的指针】

解析服务器(熟知)端口号

客户端还可能使用服务名(如HTTP)标识服务器端口号
需要将服务名转换为熟知端口号

函数 getservbyname()

解析协议号

客户端可能使用协议名指定协议
需要将协议名转换为协议号(HTTP:6)
函数 getprotobyname() 实现协议名到协议号的转换

TCP客户端软件流程

1.确定服务器IP地址与端口号
2.创建套接字
3.分配本地端点地址(IP地址+端口号)【系统会自动完成】
4.连接服务器(套接字)
5.遵循应用层协议进行通信
6.关闭/释放连接

UDP客户端软件流程

1.确定服务器IP地址与端口号
2.创建套接字
3.分配本地端点地址(IP地址+端口号)
4.指定服务器端点地址,构造UDP数据报
5.遵循应用层协议进行通信
6.关闭/释放套接字

4种类型服务器

循环无连接
循环面向连接
并发无连接
并发面向连接

循环无连接服务器基本流程【UDP】

一次只处理一个客户的服务请求,顺序处理,非并发

创建套接字
绑定端点地址(INADDR_ANY+端口号)
反复接收来自客户端的请求
遵循应用层协议,构造响应报文,发送给客户

数据发送
服务器端不能使用connet()函数
无连接服务器使用sendto() 函数发送数据报

获取客户端点地址
调用recvfrom()函数接收数据时,自动提取客户端点地址,以备服务器端给客户端发送数据的时候,可以使用

循环面向连接服务器基本流程【TCP】

创建(主)套接字,并绑定熟知端口号
设置(主)套接字为被动监听模式,准备用于服务器
调用accept() 函数 接收下一个连接请求(通过主套接字),创建新套接字用于与该客户建立连接
遵循应用层协议,反复接收客户请求,构造并发送响应(通过新的套接字)
完成为特定客户服务后,关闭与该客户之间的连接,并返回步骤3.

并发无连接服务器基本流程

主线程第一步:创建套接字,并绑定熟知端口号
主线程第二步:反复调用recvfrom()函数,接收下一个客户请求,并创建新线程处理该客户响应
子线程第一步:接收一个特定请求;
子线程第二步:依据应用层协议构造响应报文,并调用sendto()发送;
子线程第三步:退出(一个子线程处理一个请求后即终止。)

并发面向连接服务器基本流程

主线程1:创建(主)套接字,并绑定熟知端口号
主线程2:设置(主)套接字为被动监听模式,准备用于服务器
主线程3:反复调用accept() 函数接收下一个连接请求(通过主套接字),并创建一个新的子线程处理该客户响应
子线程1:接收一个客户的服务请求(通过新创建的套接字)
子线程2:遵循应用层协议与特定客户进行交互;
子线程3:关闭/释放连接并退出(线程终止)

计算机网络核心机制和协议

传输层服务和协议

传输层协议为运行在不同Host上的进程提供了一种逻辑通信机制
计算机网络笔记_第91张图片
端系统运行传输层协议
发送方:将应用递交的消息分成一个或者多个segment,并向下传给网络层
接收方:将接收到的segment组装成消息,并向上交给应用层。

传输层可以为应用提供多种协议
Internet上的TCP
Internet上的UDP

传输层 vs 网络层

网络层:提供主机之间的逻辑通信机制
传输层:提供应用进程之间的逻辑通信机制

位于网络层之上
依赖于网络层服务
对网络层服务进行(可能的)增强

Internet传输层协议

可靠、按序的交付服务(TCP)

拥塞控制
流量控制
连接建立

不可靠的交付服务(UDP)

没有做可靠性方面的扩展

两种服务均不保证:延迟和带宽

多路复用和多路分用

如果某层的一个协议对应直接上层的多个协议/实体,则需要复用/分用。
计算机网络笔记_第92张图片
接收端进行多路分用,发送端进行多路复用。

多路分用如何工作?

主机接收到IP数据报

每个数据报携带源IP地址、目的IP地址
每个数据报携带一个传输层的段(Segment)

主机接收到segment之后,传输层协议提取IP地址和端口号信息,将segment导向响应的socket。

无连接多路分用(面向UDP)

计算机网络笔记_第93张图片

面向连接的多路分用【一个客户机进程对应一个服务器进程】

计算机网络笔记_第94张图片

UDP协议【尽力而为的服务模型】

基于Internet IP协议

复用/分用
简单的错误校验机制

UDP段可能丢失、非按序到达。

UDP是一个无连接协议,UDP发送方和接收方之间不需要握手,每个UDP段的处理独立于其他段

UDP存在意义

无需建立连接【减少延迟】
实现简单、无需维护连接状态
头部开销小
没有拥塞控制,应用可更好地控制发送时间和速率

UDP用途

常用于流媒体应用:容忍丢失、速率敏感
UDP还用于:DNS,SNMP

在UDP上实现可靠数据传输?

在应用层增加可靠性机制
应用特定的错误恢复机制

UDP校验和checksum

目的:检测UDP段在传输过程中是否发生错误(0变为1或1变为0)
计算机网络笔记_第95张图片
检验和计算实例
上面两个数,计算完之后,发现还有进位,我们把进位拿到最后边,加进去,得到的最终结果就是checksum.
计算机网络笔记_第96张图片

可靠数据传输原理

什么是可靠?

不错、不丢、不乱

可靠数据传输协议(RDT)【不错、不丢、不乱】

可靠数据传输对应用层、传输层、链路层都很重要
网络Top-10 问题【说明可靠传输很重要】
信道的不可靠特性决定了可靠数据传输协议(rdt)的负责性

可靠数据传输的基本结构:接口

可靠数据传输协议【RDT】

渐进地设计可靠数据传输协议的发送方和接收方
只考虑单项数据传输【但控制信息双向流动】

rdt1.0 可靠信道上的可靠数据传输

底层信道完全可靠

不会发生错误
不会丢弃分组

发送方和接收方的FSM独立

rdt 2.0 假设是只会产生位错误的信道

底层信道可能翻转分组中的位(bit)【只有这一种不可靠机制】

利用校验和检测位错误

如何从错误中恢复?
确认机制(ACK):接收方显式地告知发送方分组已正确接收
NAK:接收方显式地告诉发送方分组有错误
发送发收到NAK后,重传分组

基于这种重传机制的rdt协议陈伟ARQ协议

rdt2.0 中引入的新机制

差错检测
接收方反馈控制消息:ACK/NAK
重传

rdt2.0 有什么缺陷?

如果ACK/NAK消息发生错误/被破坏会怎么样?

为ACK/NAK增加检验和,检错并纠错
发送方收到被破坏的ACK/NAK时不知道接收方接收了什么,添加了额外的控制消息【即再次询问发送方你发送了什么】
如果ACK/NAK坏掉,发送方重传
不能简单的重传:会产生重复分组

如何解决重复分组的问题?
序列号:发送方给每个分组增加序列号
接收方丢弃掉重复分组

rdt2.1 发送方,应对ACK/NAK破坏

发送方

为每个分组增加了序列号

接收方

需判断分组是否重复

rdt2.2 无NAK消息协议

与rdt2.1功能相同,但是只使用ACK

如何实现?

接收方通过ACK告知最后一个被正确接收的分组
在ACK消息中显式加入被确认分组的序列号

发送方收到重复ACK之后,采取与收到NAK消息相同的动作【重复当前分组】

rdt3.0

信道既可能发生错误,也可能丢失分组,怎么办?
“校验和 + 序列号 + ACK +重传 ”够用吗?

方法:发送方等待“合理”时间【即超过时间没有收到ACK,就应该采取动作——重传】

如果没有收到ACK,重传
如果分组或者ACK只是延迟而不是丢了
重传会产生重复,序列号机制能够处理
接收方须在ACK中显式告知所确认的的分组

需要定时器

rdt3.0 性能分析

rdt3.0能够正确工作,但性能很差,停等操作限制了传输速率
计算机网络笔记_第97张图片

流水线机制与滑动窗口协议

打破rdt3.0的停等机制,由于停等操作而导致利用率很差

流水线协议:允许发送方在收到ACK之前连续发送多个分组

更大的序列号范围
发送方和/或接收方需要更大的存储空间以缓存分组

滑动窗口协议

窗口

允许使用的序列号范围
窗口尺寸为N,也就是最多有N个等待确认的消息

滑动窗口

随着协议的运行,窗口在序列号空间内向前滑动

滑动窗口协议:CGN,SR

GBN协议

分组头部包含k-bit序列号

窗口尺寸为N,最多允许N个分组为确认
计算机网络笔记_第98张图片
潜在的可能会造成资源的浪费
计算机网络笔记_第99张图片
维持当前期望收到的最高序列号,如果当前收到了我期望的最高序列号,那么就会把窗口往前推进。

乱序到达的分组:
直接丢弃【不缓存】,接收方没有缓存
重新确认序列号最大的、按序到达的分组

GBN是累计确认

SR协议

GCN的缺陷?
会有重传的分组,影响资源的利用,我们不适用累计确认机制,而且也不丢弃那些乱序的分组,并把他们缓存起来。

接收方对每个分组单独进行确认

设置缓存机制,缓存乱序到达的分组

发送方只重传那些没收到ACK的分组

为每个分组设置定时器

发送方窗口

N个连续的序列号
限制以发送且未确认的分组
计算机网络笔记_第100张图片

可靠数据传输原理与协议回顾

计算机网络笔记_第101张图片

TCP协议

计算机网络笔记_第102张图片
同一个连接中可以实现双向传输

TCP段结构:序列号和ACK

序列号:指的是segment中第一个字节的编号,而不是segment的编号,建立TCP连接时,双方随机选择序列号

ACKs:希望接收到的下一个字节的序列号

使用累计确认机制,该序列号之前的所有字节均已被正确接收到

接收方如何接收乱序到达的segment?
TCP规范中没有规定,由TCP的实现者做出决策。
计算机网络笔记_第103张图片

TCP可靠数据传输

TCP在IP层提供的不可靠服务基础上实现可靠数据传输服务
流水线机制
累积确认
TCP使用单一的重传定时器

如何设置定时器的超时时间?
大于RTT【但RTT是变化的】
过短:不必要的重传
过长:对段丢失时间反应慢

TCP快速重传机制

TCP的实现中,如果发生超时,超时时间间隔将重新设置,即将超时时间间隔加倍,导致其很大

重发丢失的分组之前要等待很长时间

通过重复ACK检测分组丢失

Sender会背靠背地发送多个分组
如果某个分组丢失,可能会引发多个重复的ACK

如果sender收到对同一数据的3个ACK,则嘉定该数据之后的段已经丢失

快速重传:在定时器超时之前即进行重传

TCP流量控制

接收方为TCP连接分配buffer
层应用可能处理buffer中数据的速度较慢

控制发送方不会传输太多、太快以至于淹没接收方(buffer溢出)

即使接收方的buffer=0了,我们还是要允许发送方发送一个很小很小的段,以至于在回来的过程中,捎带回来关于接收方buffer的信息【避免直接不允许发送方发送数据而形成死锁,导致后来的接收方即使有空闲的buffer了也不能继续处理数据】

TCP连接管理【三次握手】

TCP的发送方和接收方在传输数据之前需要建立连接

第一阶段:客户主机向服务器发送一个SYN报文段,不携带任何数据,把SYN置为1,表示想要建立连接,和客户主机所选择的初始序列号【一般都是随机选择】。 第二阶段:服务器收到SYN报文段,如果服务器同意建立这个连接,服务器会答复一个SYNACK报文段,在这个过程中,服务器会为这个连接的建立分配缓存,分配必要的资源,同时也会选择自己的初始序列号,告知客户端,发送ACK,确认客户机的连接请求收到了 第三阶段:客户机收到了来自服务器的SYNACK的报文段之后呢,客户机会再答复一个ACK报文段,确认客户机收到了服务器同意客户机建立连接的报文段。这个报文段可以包含数据的。
 第一次握手A发送SYN传输失败,A,B都不会申请资源,连接失败。如果一段时间内发出多个SYN连接请求,那么A只会接受它最后发送的那个SYN的SYN+ACK回应,忽略其他回应全部回应,B中多申请的资源也会释放
 第二次握手B发送SYN+ACK传输失败,A不会申请资源,B申请了资源,但收不到A的ACK,过一段时间释放资源。如果是收到了多个A的SYN请求,B都会回复SYN+ACK,但A只会承认其中它最早发送的那个SYN的回应,并回复最后一次握手的ACK
 第三次握手ACK传输失败,B没有收到ACK,释放资源,对于后序的A的传输数据返回RST。实际上B会因为没有收到A的ACK会多次发送SYN+ACK,次数是可以设置的,如果最后还是没有收到A的ACK,则释放资源,对A的数据传输返回RST

TCP关闭连接【四次挥手】

客户机和服务器都可以发起,一般是客户机发起的。

第一阶段:客户机向服务器发送一个 FIN控制报文段(这个报文段用来关闭连接的)

第二阶段:服务器收到FIN,回复一个ACK,关闭连接,发送一个FIN

第三阶段:客户机收到FIN,回复ACK,进入“等待”,如果收到FIN,则会重新发送ACK

第四阶段:服务器如果收到ACK,则连接关闭。

拥塞控制原理

非正式定义:发送主机发送了太多数据或者发送速度太快以至于网络无法处理。

表现:分组丢失(路由器缓存溢出),分组延迟过大(在路由器缓存中排队)

拥塞控制 vs 流量控制
这两个是不一样的,流量控制是控制发送方不要发送得太快以至于接收方无法处理

计算机网络笔记_第104张图片
案例:ATM ABR拥塞控制
计算机网络笔记_第105张图片
计算机网络笔记_第106张图片

TCP拥塞控制

如何控制发送速率?
设置一个变量,动态调整以改变发送速率,反映所感知到的网络拥塞。

如何感知网络拥塞?
Loss事件=timeout 或 3个 重复ACK
发生loss时间后,发送方降低速率

如何合理调整发送速率?
(1)加性增——乘性减:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss
方法:线性增加发送速率,一旦拥堵了,减少的话就直接把速率减半。

刚刚增长的时候,可能可用带宽远远高于初始速率,造成资源浪费,希望能够快速增长。
(2)TCP慢启动:当连接开始时,指数性增长。

指数性增长
每个RTT将CongWin翻倍
收到每个ACK进行操作

初始速率很慢,但是快速攀升很快

何时应该由指数性增长切换成线性增长?
设置Threshold变量,当CongWin达到Loss事件前值的1/2时
计算机网络笔记_第107张图片
Loss事件的处理:
计算机网络笔记_第108张图片

TCP拥塞控制算法

CongWin:拥塞窗口的意思
计算机网络笔记_第109张图片

TCP性能分析

计算机网络笔记_第110张图片

TCP的吞吐率

TCP是公平的吗?
对带宽的使用,落在斜率为1的直线上。
计算机网络笔记_第111张图片
假设有两个速率,一开始不落在y=x的直线上,那么就表明这两个使用者他们所使用的带宽会不均等,会通过加减的方式,使他们最终达到使用速率相等的境地。
计算机网络笔记_第112张图片

TCP的公平性

计算机网络笔记_第113张图片

传输层总结

传输层服务的基本原理

复用/解复用
可靠数据传输
流量控制
拥塞控制

Internet的传输层

UDP
TCP

网络层服务

从发送主机向接收主机传送数据段
发送主机:将数据段封装到数据报正
接收主机:向传输层交付数据段
每个主机和路由器都运行网路层协议
路由器检验所有穿越它的IP数据报的头部域【决策如何处理IP数据报】

网络层核心功能——转发与路由

转发:将分组从路由器的输入端口转移到合适的输出端口

每个路由器都会维护一个转发表,转发表确定在本路由器如何转发分组

路由:确定分组从源到目的经过的路径

路由算法:路由算法(协议)确定通过网络的端到端路径

网络层核心功能——连接建立

数据分组传输之前两端主机需要建立虚拟/逻辑连接

网络设备(如路由器)参与连接的建立

网络层连接与传输层连接的对比:

网络层连接:两个主机之间(路径上的路由器等网络设备参与其中)
传输层连接:两个应用进程之间(对中间网络设备透明)

网络层服务模型

无连接服务:不事先为系列分组的传输确定传输路径,每个分组独立确定传输路径,不同分组可能传输路径不同【数据报网络】

连接服务:首先为系列分组的传输确定从源到目的经过的路径(建立连接),然后沿该路径(连接)传输系列分组,系列分组的传输路径相同,传输结束之后拆除连接【虚电路网络】

数据报网络和虚电路网络是典型两类分组交换网络

数据报网络提供网络层无连接服务
虚电路网路提供网络层连接服务

类似于传输层的无连接服务(UDP)和面向服务(TCP),但是网络层服务是从主机到主机的,网络核心实现。

虚电路网络:一条从源主机到目的主机,类似于电路的路径(逻辑连接)

分组交换
每个分组的传输利用链路的全部带宽
源到目的路径经过的网络层设备共同完成虚电路功能

通信过程

呼叫建立——数据传输——拆除呼叫

每个分组携带虚电路标识(VCID),而不是目的主机地址,然后,分组就会沿着标识为VCID的虚电路进行传输直到把分组送至目的主机

虚电路经过的每个网络设备(如路由器),维护每条经过它的虚电路连接状态

链路、网络设备资源(如带宽、缓存等)可以面向VC进行预分配

预分配资源=可预期服务性能
如ATM的电路仿真

VC的具体实现
1、每条虚电路包括: 从源主机到目的主机的一条路径
2、虚电路号(VCID),沿路每段链路一个编号
3、沿路每个网络层设备(如路由器),利用转发表记录经过的每条虚电路

沿某条虚电路传输的分组,携带对应虚电路的VCID,而不是目的地址

同一条VC,在每段链路上的VCID通常不同【VC路径上每个路由器都需要维护VC连接的状态信息】

路由器转发分组时依据转发表改写/替换虚电路号【重点】

虚电路信令协议

目的:用于VC的建立、维护与拆除
计算机网络笔记_第114张图片

目前的Internet不采用这种虚电路传输

数据报网路

网络层无连接,每个分组携带目的地址,路由器根据分组的目的地址转发分组

基于路由协议/算法构建转发表
检索转发表
每个分组独立选路
每个分组的路径可能不一致
计算机网络笔记_第115张图片

数据报转发表

计算机网络笔记_第116张图片

路由算法(协议)确定通过网络的端到端路径
转发表确定在本路器如何转发分组

列表地址范围(聚合转发表入口):即转发表位置不到具体位置,只到范围的位置计算机网络笔记_第117张图片
最长前缀匹配优先:尽量匹配地址前缀匹配比特数越多的地址【在检索转发表时,优先选择与分组目的匹配前缀最长的入口】

数据报网络 vs 虚电路网络(VC)

计算机网络笔记_第118张图片

Internet网络层

主机、路由器网络层主要功能:
计算机网络笔记_第119张图片
路由协议计算的信息存入到转发表中,供给IP协议在转发时使用。

ICMP协议:互联网控制报文协议,提供差错报告,在主机和路由器,主机和主机之间提供一些“信令”进行传输,也可以看成IP协议的伴生协议。

IP数据报(分组)格式

计算机网络笔记_第120张图片
首部细分:
固定部分在所有的IP数据报里面都是固定大小的,一定是20个字节。
可变部分,长度不确定的,可以0个字节,可以多个字节
计算机网络笔记_第121张图片
版本号字段占4位:IP协议的版本号
如果是IPv4,即这个版本号就是4,如果是IPv6,那么这个版本号就是6.

首部长度:占用4个bit,IP分组首部长度,4个bit,能给出的最大数字就是15,但是我们要求表示首部长度,大于15的,以4字节为单位,我们需要把他乘上4,才是真正的首部长度。
计算机网络笔记_第122张图片
服务类型(TOS):占用8个bit,指示期望获得哪种类型的服务

1998年这个字段改名为区分服务
只有在网络提供区分服务时使用(如果网络没有提供,就不会使用)【在大部分情况下,这个字段是不会被使用的】

总长度字段:占16位,IP分组的总字节数
计算机网络笔记_第123张图片
生存时间(TTL):字段占8位,IP分组在网络中可以通过的路由器数目(或跳步数)

路由器转发一次分组,TTL减1
如果TTL=0.路由器则丢弃该IP分组【通常会向源主机发出一个信号】

协议:占8位,指示IP分组封装的是哪个协议的数据包

实现复用/分解
6就是TCP段,表示封装的是TCP段,17就是UDP段,表示封装的是UDP数据报

首部校验和:占16位,实现对IP分组首部的差错检测

计算校验和时,该字段全置为0
采用反码算术运算求和,和的反码作为首部校验和字段
逐跳校验、逐跳计算

源IP地址、目的IP地址字段:各占32位,分别标识发送分组的源主机/路由器(网络接口)和接收分组的目的主机/路由器(网络接口)的IP地址。

选项字段:长度可变,数据范围在1-40B之间:携带安全、源选路径、时间戳和路由记录等内容

实际上很少被使用

填充:字段占的长度可变,范围在0-32B之间:目的是补齐整个首部,符合32位对齐,即保证首部长度是4字节的倍数

IP数据报分片

最大传输单元(MTU)

网络链路存在MTU(最大传输单元)——链路层数据帧可封装数据的上限
链路层数据帧可封装数据的上限是不同的。

大IP分组向较小MTU链路转发时,可以被“分片”,但并不是一定会被分片。

1 个IP分组分为多片IP分组(分片)
IP 分片到达目的主机后进行“重组”

IP首部的相关字段用于标识分片以及确定分片的相对顺序

总长度、标识、标志位和片偏移

IP分组格式
标识(ID)

标志位字段占3位:
DF:DF=1(禁止分片),DF=0(允许分片)
MF:MF=1(非最后一片),MF=0最后一片(或未分片)

片偏移:字段占13位,一个IP分组分片封装原IP分组数据的相对偏移量。

片偏移字段为8字节为单位

IP分片过程

假设原IP分组总长度为L,带转发链路的MTU为M,
若L>M,且DF=0.则可以/需要分片。【如果L>M,且DF=1,则这个分组会被丢弃】
分片时每个分片的标识复制原IP分组的标识
通常分片时,除最后一个分片,其他分片均分为MTU允许的最大分片

一个最大分片可封装的数据应该是8的倍数,因此,一个最大分片可封装的数据为:
在这里插入图片描述
计算机网络笔记_第124张图片
计算机网络笔记_第125张图片

IP编址(addressing)

IP分组:
源地址(SA):从哪里来
目的地址(DA):到哪里去

接口:主机/路由器与物理链路的连接

实现网络层功能
主机通常只有一个或者两个接口

IP地址:32比特,编号标识主机、路由器的接口

通过这些IP地址来唯一标识网络中的接口
IP地址与每个接口关联

怎么样为接口分配IP地址呢?

IP地址分为两部分:
网络号——高位比特
主机号——低位比特
计算机网络笔记_第126张图片
IP子网:利用相同的网络号来描述这个区域的网络

IP地址具有相同网络号的设备接口
不跨越路由器(第三及以上层网络设备),可以彼此物理联通的接口
计算机网络笔记_第127张图片

有类IP地址

A类地址

把32位IP地址进行二分法,把最高比特位为0的那部分地址称为A类地址,同时定义它的网络号占用8个比特。因为最高比特位一定是0,所以实际上,A类地址的第一部分编址只有7个位,可以表示的范围是0-127.
计算机网络笔记_第128张图片

B类地址

A类地址是最高比特位位0,其他类地址是最高比特位位1,在其他类地址里面,次高比特位为0.
**定义它的网络号为前16个比特。**所以,B类地址可以区分的网络数的2的14次方。
计算机网络笔记_第129张图片

C类地址

前面三位比特是110,这八分之一的地址空间,前24个比特是网络号,后八位是主机号。
由于前面三个固定是110,所以能区分的就是2的21次方。
在这里插入图片描述

D类地址

高比特固定为1110的是D类地址,不再区分网络号和主机号

E类地址

前4位比特都是1,即前四位是1111,称为E类地址。

计算机网络笔记_第130张图片
A类网络号少,但是每一个A类网络可区分的主机数比较多,网络规模非常庞大;
C类网络号多,但是每一个C类网络可区分的主机数目较少,网络规模比较小。

特殊IP地址

计算机网络笔记_第131张图片
NetID是网络号,HostID是主机号。

IP子网划分与子网掩码

IP地址

网络号——高位比特
主机号——低位比特

IP子网

IP地址具有相同网络号的设备接口
不跨越路由器(第三及以上层网络设备)可以彼此物理联通的接口

子网划分

IP地址:
网络号(NetID)——高位比特
子网号(SubID)——原网络主机号部分比特
主机号(HostID)——低位比特

子网划分后,为了区分出不同的子网,他们就不会收到不属于他们的范围的文件。

如何确定是否划分了子网?利用多少位划分子网?

利用子网掩码【形如IP地址,32位,点分十进制形式】

取值:NetID、SubID位全取1,HostID全取0

例子
A网的默认子网掩码为 255.0.0.0
B网的默认子网掩码为:255.255.0.0
C网的默认子网掩码为:255.255.255.0
借用3比特划分子网的B网的子网掩码为:255.255.224.0

计算机网络笔记_第132张图片
路由器如何确定应该将IP分组转发到哪个子网?
将IP分组的目的IP地址与子网掩码按位与运算,提取子网地址

计算机网络笔记_第133张图片
可分配地址范围为什么小于实际地址范围?
因为要除去全部都是1的和全部都是0的地址是不可以被使用的,所以可分配地址范围只有510个。

CIDR与路由聚合

无类域间路由(CIDR):消除传统的A类,B类,C类地址界限

NetID+SubID—>Network Prefix(网络前缀可以任意长度)

融合子网地址与子网掩码,方便子网划分

无类地址格式:a.b.c.d/x 其中x为前缀长度
计算机网络笔记_第134张图片
后面的23是前缀的长度。

作用:
提高IPv4地址空间分配效率
提高路由效率
【将多个子网聚合为一个较大的子网,构造超网】

层级编址使得路由信息通告更加高效
使用最长公共前缀匹配原则,避免了路由黑洞现象【路由黑洞:假设不匹配最长公共前缀,那么就可能出现这种最终的地址无法在后续的过程中找到正确的地址的问题】

DHCP协议

一个主机如何获得IP地址?
“硬编码”【静态配置】
DHCP 协议【动态获取】

动态主机配置协议—DHCP协议

从服务器动态获取 IP地址、子网掩码、默认网关地址、DNS服务器名称与IP地址

意义:
允许地址重用
允许在用地址续租
支持移动用户加入网络

新到主机(DHCP客户)需要本网IP地址
DHCP服务器利用 DHCP offer 【提供报文】 进行响应
主机请求IP地址:DHCP request (请求报文)
DHCP服务器分配IP地址 DHCP ack(确认报文)

网络地址转换(NAT)

由于公共的IPv4地址接近枯竭,所以有很多人在网络上使用的都是私有的IP地址,即这个IP地址不能够在网络上被公共互联网所识别,这个时候,就是需要有这种IP地址转换技术,将这些私有IP地址转化为公共的IP地址,然后才可以到网络上进行通信,这个就是NAT技术

计算机网络笔记_第135张图片
在同一个网络内使用是没有问题的,但是一旦要跟互联网进行交互,就必须转换。
计算机网络笔记_第136张图片
动机
主机只需/能从ISP申请一个IP地址
IPv4地址即将耗尽
本地网络设备IP地址的变更、无需通告外界网络
变更ISP时,无需修改内部网络设备IP地址
内部网络设备对外界网络不可见,即不可直接寻址

实现
替换:利用(NAT IP地址,新端口号)替换每个外出IP数据报的(源IP地址,源端口号)
记录:将每对(NAT IP地址,新端口号)与(源IP地址,源端口号)的替换信息存储到NAT转换表中
替换:根据NAT替换表,利用(源IP地址,源端口号)替换每个进入内网IP数据报的(目的IP地址,目的端口号),即(NAT IP地址,新端口号)

网络地址转换(NAT)
16-bit 端口号字段:可以同时支持60000 多并行连接!

NAT主要争议:
路由器应该只处理第三层功能
违背端到端通信原则【应用开发者必须要考虑到NAT的存在】
地址短缺问题应该由IPv6来解决

互联网控制报文协议(ICMP)

互联网控制报文协议ICMP支持主机或者路由器

差错(或异常)报告
网络探询

两类ICMP报文:

差错报告报文(5种)

目的不可达:当IP数据报在传输过程中,无法成功交付给所要传达的目的网络主机端口,这个IP数据报会被丢弃,同时可以通过ICMP协议告诉源主机

源抑制:在ICMP的运行中,网络层中进行拥塞控制,利用这个协议,路由器发现缓存已满,就可以利用这个协议,告诉源主机,降低网络数据报的发送速率。

超时/超期:当转发数据报时,会将TTL减1,这个数据报会被丢弃(如果TTL为0),这个时候就会利用ICMP协议向源主机发送超时的报文

参数问题:如果路由器在转发IP数据报时,认为该数据报的头部某些参数有问题就可以丢弃,并且利用ICMP协议发送出错数据报给源主机

重定向:当一个路由器收到一个IP数据报,当这个路由器认为当前这个IP数据报不应该由它来进行转发到目的主机时,便会将该数据报丢弃,并利用ICMP协议发送重定向报文

网络探询报文(2种)

回声请求与应答报文:向外发送请求报文,探测目的网路是否可达

时间戳请求与应答报文:通过发送时间戳请求来获取时间戳

典型的ICMP报文

通过类型取值和编码取值组合来对应特定的报文,特定的报文就代表了特定的含义。
计算机网络笔记_第137张图片

例外情况(不发送ICMP报文)

计算机网络笔记_第138张图片

IPv6

最初动机:32位IPv4地址空间已经分配殆尽
其他动机:改进首部格式

快速处理/转发数据
支持QoS

IPv6数据报格式:
固定长度的40字节基本首部
不允许分片(只能源主机分片,目的主机组装,传输过程不允许分片)

优先级:标识数据报的优先级
流标签:标识同一“流”中的数据报
下一个首部:标识下一个选项首部或者上层协议首部(如TCP首部)
跳步限制:与IPv4中的TTL相似。
计算机网络笔记_第139张图片
其他改变
校验和:彻底移除,以减少没跳处理时间
选项:允许,但是从基本首部移出,定义多个选项首部,通过“下一个首部”字段提示
ICMPv6:新版ICMP

附加报文类型【因为IPv6网络层传输是不会允许分片的,如果一旦传输的数据大于所限制的大小,这个数据报会被直接扔掉,并告诉源主机这个分组太大了,由源主机自己决定如何分片】
多播组管理功能

IPv6地址表示形式

一般形式:按十六进制的方式,把每16个比特分为一组,并表示为16进制的形式,中间用冒号隔开。

计算机网络笔记_第140张图片
用两个连续的冒号来表示中间省略的0.

IPv6基本地址类型

单播:一对一通信【用于一对一通信,既可以出现在源地址中,也可以出现在目的地址中】
多播:一对多通信【一个多播地址,多播地址只能出现在IPv6数据报中的目的地址中,一个多播地址实际上标识网络中的接口】
任意播:一对一组之一(最近一个)通信【当我们向一组任意播接口发送一个数据报时,这个数据报会被送到一组接口中其中一个接口上去,通常是最近的那一个】

IPv4向IPv6过渡

长时间内,两种一定是要同时存在的

解决:利用隧道技术【IPv6数据报作为IPv4数据报的载荷进行封装,穿越IPv4网络】
计算机网络笔记_第141张图片

路由算法

路由与转发

计算机网络笔记_第142张图片

网络抽象为图

关键问题:源到目的的最小费用路径?
路由算法:寻找最小费用路径的算法

路由算法的分类

静态路由 vs 动态路由

静态路由

手工配置
路由更新慢
优先级高

动态路由

路由更新快(根据算法进而更新转发表等)

定期更新
及时响应链路费用或网络拓扑变化

全局信息 vs 分散信息
全局信息:所有路由器掌握完整的网络拓扑和链路费用信息【链路状态(LS)路由算法】
分散信息:路由器只掌握物理相连的邻居及链路费用,与邻居间进行信息交换。运算的迭代过程【距离向量(DV)路由算法】

链路状态路由算法

迪杰斯特拉算法【最短路径】:所有结点(路由器)掌握网络拓扑和链路费用
通过“链路状态广播”,将于当前路由器所连接的结点的路由器的IP地址与花费费用(边的权值)扩散出给所有的邻居,这样就可以使得每个路由器都能拥有整个网络的信息,计算从一个结点到达所有其他结点的最短路径
计算机网络笔记_第143张图片

距离向量路由算法

基于动态规划

每个结点不定时地将其自身的DV估计发送给其邻居
计算机网络笔记_第144张图片
异步迭代:

引发每次局部迭代的因素

局部链路费用改变
来自邻居的DV更新

分布式算法
每个结点只当DV变化时才通过给邻居

每个结点:
等待(本地局部链路费用变化或者收到邻居的DV更新)—>重新计算DV估计—>如果DV中到达任一目的距离发生改变,通过所有邻居【不断循环】

距离向量DV:链路费用变化

链路费用变化:

结点检测本地链路费用变化
更新路由信息,重新计算距离向量
如果DV改变,通过所有邻居

好消息传播快,坏消息传播满【可能会出现无穷计数的问题】

如何消除无穷计数问题?【毒性逆转】
当一个结点到达某目的结点的最小费用路径是通过某个邻居,则通过给该邻居结点到达目的的距离为无穷大。

定义最大度量:定义一个最大的有效费用值,如15跳步,16跳步则表示无穷大【不可达】

层次路由

将任意规模抽象为一个图计算路由过于理想化【规模太大,算法复杂度是n的平方,是不可行的】网络规模过大

路由表无法存储
路由表计算过程的大量信息(链路状态分组、DV)交换量巨大,会淹没链路

管理自治:每个网络的管理都期望自主控制其网内的的路由
互联网==网络的网络

做法:聚合路由器为一个区域,作为一个自治系统AS

同一个AS内的路由器运行相同的路由协议(算法),称为自治系统内部路由协议

不同的自治系统内的路由器可以运行不同的AS内部路由协议

网关路由器

位于AS边缘
通过链路连接其他AS的网关路由器

网关路由器的转发表由AS内部路由算法和AS间路由算法共同配置

AS内部路由算法设置
AS内部目的网路路由入口
AS内部路由算法与AS间路由算法共同设置AS外部目的网络路由入口

自治系统间路由任务

假设该路由器接收到一个信息,那么有两种做法:
一种是把这个消息传给本身AS内部路由器
一种是继续传给下一个路由系统

热土豆路由:将分组发送给最近的网关路由器

AS内部路由

Internet采用层次路由
自制系统(AS)内部路由协议也称为内部网络协议IGP

最常见的AS内部路由协议

路由信息协议:RIP
开放最短路径优先协议:OSPF
内部网关路由协议:IGRP

RIP协议

利用距离向量路由算法来计算在这个自治系统内,到达某个节点的最小路由。

距离向量路由算法
距离度量:跳步数【最大跳步数为15,16即无穷大,无法到达】
每隔30秒:邻居之间交换一次DV,称为通告
每次通告:最多25个目的子网(IP地址形式)

RIP链路失效、恢复
如果180秒没有收到通告—>邻居/链路失效----->经过该邻居的路由不可用(重新计算路由)----->向邻居发送新的通告----->邻居再依次向外发送通告

链路失效信息能否快速传播到全网?
可能发生无穷计数问题。

毒性逆转技术用于预防乒乓环路(另外 ,无穷大距离 = 16 hops)

RIP路由表的处理
RIP路由表是利用一个称作route-d的应用层进行管理【应用进程实现】

通告报文周期性地通告UDP数据报发送

OSPF协议:开放最短路径优先协议

开放:公众可用的

采用链路状态路由算法

LS分组扩散(通告)
每个路由器构造完整的网络(AS)拓扑图
利用迪杰斯特拉算法计算路由

OSPF通告中每个入口对应一个邻居
OSPF通告在整个AS范围内泛洪【OSPF报文直接封装到IP数据报中】
与OSPF极其相似的一个路由协议:IS-IS路由协议

OSPF协议的优点
安全:所有OSPF报文都可以被认证(预防恶意入侵)
允许使用多条相同费用的路径(RIP只能选一条)

比如,从A到B,有多条相同费用的路径,如果是RIP协议,只能选择其中一条路径,如果是OSPF协议,那么可以同时使用多条路径。假设要从A到B传输的数据量非常巨大,那么,OSPF这个时候可以在这多个路径上同时传输数据,而RIP只有一条路径,这样子,对比的速率就已经非常明显了。【实现负载流量的均衡】

对于每条链路,可以针对不同的数据报(TOS)设置多个不同的费用度量【可以针对“尽力”TOS设置“低”费用,针对实时TOS设置“高”费用】

集成单播路由与多播路由:多播OSPF协议(MOSPF)与OSPF利用相同的网络拓扑数据

OSPF支持对大规模自治系统(AS)分层

OSPF分层:跟上面的分层原理很相似

计算机网络笔记_第145张图片
各个层级路由器的作用
区边界路由器:“汇总”到达所在区网络的距离,通告给其他的区边界路由器
主干路由器:在主干区内运行OSPF路由算法。
AS边界路由器:连接其他AS

BGP协议:Internet AS间路由协议:事实上的标准域间路由协议

上面的都是AS内部路由协议,这个是AS间路由协议,将Internet粘合为一个整体的关键

BGP为每个AS都提供了一种手段
eBGP:从邻居AS获取子网可达性信息
iBGP:向所有AS内部路由器传播子网可达性信息
基于可达性信息与策略,确定到达其他网络的“好”路径

BGP基础

BGP会话:两个BGP路由器(Peers)交换BGP报文

通告去往不同目的的前缀的路径(“路径向量”协议)
报文交换基于半永久的TCP连接

BGP报文种类
OPEN:与peer建立TCP连接,并认证发送方
UPDATE:通过新路径(或撤销原路径)
KEEPALIVE:在无UPDATE时,保持连接,也用于对OPEN请求的确认
NOTIFICATION:报告先前报文的差错,也用于关闭连接

BGP基础:分发路径信息
当路由器获得新的前缀时,即在其转发表中增加关于该前缀的入口(路由项)。

路径属性与BGP路由
通告的前缀信息包括BGP属性
前缀 + 属性 = “路由”

两个重要属性:
AS-PATH(AS路径):包含前缀通过所经过的AS序列
NEXT-HOP(下一跳):开始一个AS-PATH的路由器接口,指向下一跳AS。

BGP路由选择

网关路由器收到路由通告后,利用其输入策略决策接受/拒绝该路由【基于策略路由】

路由器可能获知到达某目的的AS的多条路由,基于以下准则选择:

1.本地偏好值属性:策略决策
2.最短AS-PATH
3.最近的下一个路由器:热土豆路由策略
4.附加准则

BGP路由选择策略

计算机网络笔记_第146张图片

为什么采用不同的AS内与AS间路由协议?

计算机网络笔记_第147张图片

数据链路层服务

结点:主机和路由器
链路:连接相邻结点的通信信道

有线链路
无线链路
局域网

链路层(第2层)数据分组:帧,封装网络层数据报

数据链路层负责通过一个链路从一个节点向另一个物理链路直接相连的相邻结点传送数据报。

提供的服务
组帧:封装数据报构成数据帧,加首部和尾部,并且实现帧同步【加上一个帧界定符,或者比特串】来区分帧,

链路接入:如果是共享介质,需要解决信道接入,帧首部中的“MAC”地址,用于标识帧的源和目的【不同于IP地址】

相邻结点间可靠交付:在低误码率的有线链路上很少采用【光纤,某些双绞线等】,无线链路的误码率高,就需要可靠支付。

流量控制:协调相邻的发送结点和接收结点的速率

差错检测:信号衰减和噪声会引起差错,接收端检测到差错【通知发送端重传或者直接丢弃帧】

差错纠正:接收方直接纠正比特差错

全双工和半双工通信控制

全双工:链路两端结点同时双向传输
半双工:链路两端结点交替双向传输

链路层的具体实现?

计算机网络笔记_第148张图片

网卡间通信

计算机网络笔记_第149张图片

差错编码

差错编码基本原理:D–>DR,其中R为差错检测与纠正比特(冗余比特)

差错编码不能保证100%可靠!

差错编码的检错能力

差错编码可分为检错码纠错码

对于检错码,如果编码集的汉明距离d=r+1。则该差错编码可以检错r位的差错

对于纠错码,如果编码集的汉明距离d=2r+1,则该差错编码可纠正r为的差错。

奇偶校验码:检测奇数位差错
二维奇偶校验:检查奇数位差错、部分偶数位差错【纠正同一行/列的奇数位错】
校验和

循环冗余校验码(CRC):检错能力更强大的差错编码

多路访问控制(MAC)协议

两类“链路”:点对点链路、广播链路(共享通信的介质)【使用广播链路可能会冲突,所以需要多路访问控制协议来解决这个问题】

单一共享广播信道
两个或者两个以上节点同时传输:干扰
冲突:结点同时收到两个或者多个信号—>接收失败!

多路访问控制协议:采用分布式算法决定结点如何共享信道,即决策点何时可以传输数据,这个协议必须基于信道本身,通信信道共享协调信息【无带外信道用于协调】

理想MAC协议

给定:速率为R bps的广播信道

期望:
1.当只有一个结点希望传输数据时,它可以以速率R发送
2.当有M个结点期望发送数据时,每个结点平均发送数据的平均速率是R/M
3.完全分散控制:无需特定结点协调,无需时钟、时隙同步
4.简单

MAC协议分类

三大类
信道划分MAC协议

多路复用技术
TDMA、FDMA、CDMA等

随机访问MAC协议

信道不划分,允许冲突
采用冲突“恢复”机制

轮转MAC协议

结点轮流使用信道【综合前面两类,轮流使用信道,保证使用过程中不冲突】

随机访问MAC协议
当结点要发送分组时:利用信道全部数据速率R发送分组,没有事先的结点间协调
两个或者多个结点同时传输:冲突

随机访问MAC协议需要定义:
如何检测冲突
如何从冲突中恢复(通过延迟重传)

典型的随机访问MAC协议
时隙ALOHA
ALOHA
CSMA、CSMA/CD、CSMA/CA

时隙ALOHA协议

计算机网络笔记_第150张图片
如果发生了冲突,那么在下一次时隙开始,会以概率p重传该帧。假设说p为0.5,那么在下一个帧开始的时候,就有50%的几率重新发送这个帧,直到这个帧被重新发送成功为止。

优点:
单个结点活动时,可以连续以信道全部速率传输数据;
高度分散化:只需要同步时隙
简单

缺点:
容易造成冲突,浪费时隙
容易出现空闲时隙
结点也许能以远小于分组传输时间检测到冲突
各个结点必须要时钟同步

效率:长期运行时,成功发送帧的时隙所占比例
计算机网络笔记_第151张图片

ALOHA协议

非时隙(纯):更加简单,无需同步

当有新的帧生成时,会立即发送

冲突可能性增大:在t0时刻发送帧,会在[t0-1,t0+1]期间其他结点发送的帧冲突
计算机网络笔记_第152张图片

CSMA协议【载波监听多路访问协议】

载波监听多路访问协议:发送帧之前,监听信道(载波)

信道空闲:发送完整帧
信道忙:推迟发送
1-坚持CSMA
非坚持CSMA
p-坚持CSMA

冲突可能仍然发生:信号传播延迟

继续发送冲突帧:浪费信道资源

CSMA/CD协议【“边发边听,不发不听”】

CSMA/CD:短时间内可以检测到冲突,冲突后传输中止,减少信道浪费

冲突检测:有线局域网易于实现,测量信号强度,比较发送信号与接收信号强度;无线局域网很难实现,接收信号强度淹没在本地发射信号强度下

效率:
计算机网络笔记_第153张图片

轮转访问MAC协议

信道划分MAC协议:网路负载重时,共享信道效率高,且公平;网络负载轻时,共享信道效率低!【将信道划分为多个部分,每个等待传输的资源只占据属于自己的那部分】

随机访问MAC协议:网络负载轻时,共享信道效率高,单个结点可以利用信道的全部带宽;网络负载重时,产生冲突开销

轮转访问MAC协议:综合两者的优点!

轮询:主结点轮流“邀请”从属结点发送数据

问题:轮询开销、等待延迟、单点故障
计算机网络笔记_第154张图片
令牌传递:控制令牌依次从一个结点传递到下一个结点。

令牌:特殊帧

问题

令牌开销
等待延迟
单点故障

MAC协议总结

计算机网络笔记_第155张图片

MAC地址(LAN地址、物理地址、以太网地址)

作用:用于局域网内标识一个帧从哪个接口发出,到达哪个物理相连的其他接口

48位MAC地址(用于大部分LANs),固化在网卡的ROM中,有时也可以软件设置

MAC地址由IEEE统一管理与分配
网卡生产厂商购买MAC地址空间(前24比特,后面的就是给厂家自行决定)

类比:
MAC地址:身份证号
IP地址:邮政地址

MAC地址是“平面”地址—>可“携带”【可以从一个LAN移到另一个LAN】
IP地址是层次地址:不可“携带”【IP地址依赖于结点连接到哪个子网】

ARP协议(1):地址解析协议

在同一个LAN内,如何在已知目的接口的IP地址前提下确定其MAC地址?

ARP表:LAN中的每个IP结点(主机、路由器)维护一个表

储存某些LAN结点的IP/MAC 地址映射关系:
TTL:经过这个时间以后,该映射关系会被遗弃。

计算机网络笔记_第156张图片
如何建立一张ARP表?
计算机网络笔记_第157张图片
就是结点A先回自己给同个局域网内的B发送数据报,询问B的MAC地址【假设B的MAC地址不在A的ARP表中】,A就进行广播,B接收到A的广播,匹配成功了,就把自己的MAC地址信息发送给A,A在其RAP表中,缓存到超时。超时后,再次刷新或者丢弃。

以太网

具有统治地位的有线LAN技术,造价低廉,应用最广泛的LAN技术,比令牌局域网和ATM等,简单便宜,能够满足网络速率需求。

以太网:物理拓扑

总线:所有结点在同一冲突域(处在同一冲突域里面的所有结点可能要同时利用该总线来传输数据,可能会发生冲突)
广播以太网

星型:目前主流网络拓扑
中心交换机
每个结点单独一个冲突域(结点之间彼此是不冲突的)
计算机网络笔记_第158张图片

以太网提供不可靠、无连接服务

无连接:发送帧的网卡与接收帧的网卡没有“握手”过程
不可靠:接收网卡不向发送网卡进行确认

差错帧直接丢弃,丢弃帧中的数据恢复依靠高层协议,否则,发生数据丢失【依靠其他的高层传输协议来进行数据的恢复,不依靠自己的协议,如果高层协议没有发挥作用,那么则发生数据丢失】

以太网的MAC协议:采用二进制指数退避算法的CSMA/CD,当我们传输的时候发生冲突,我们就会利用这个二进制指数避退算法计算出一个时间,等待这个时间之后再进行传输。

以太网的CSMA/CD算法
计算机网络笔记_第159张图片

以太网帧的结构

发送端网卡将IP数据报(或者其他网络层协议分组)封装到以太网帧中:
计算机网络笔记_第160张图片
前导码preamble:前面7个字节是10101010,第八个字节是10101011,用于发送端与接收端的时钟同步,有点类似于那种喊1,2,1…【一般不将前导码的长度算进去以太网帧之中】

目的MAC地址、源MAC地址(各6B)
类型type(2B)
数据Data(46-150B):指上层协议载荷
CRC(4B):循环冗余校验码【如果经过校验,这个数据帧是发生错误的,那么这个数据帧会被直接丢弃掉】

以太网交换机

计算机网络笔记_第161张图片
交换机可以自己通过学习,就可以自主配置网络,不需要人为去配置。

交换机:多端口间同时传输
主机利用独享链路直接连接交换机,交换机缓存帧,交换机在每段连路上利用CSMA/CD收发帧,但无冲突,且可以全双工。【每段链路上一个独立的冲突域】
计算机网络笔记_第162张图片
交换机转发表:交换表
计算机网络笔记_第163张图片
交换机:自学习
计算机网络笔记_第164张图片
交换机:帧过滤/转发
计算机网络笔记_第165张图片

交换机

自学习与转发过程
计算机网络笔记_第166张图片

交换机互联

S4称为骨干交换机
计算机网络笔记_第167张图片

组织机构网络

计算机网络笔记_第168张图片
这里面已经没有路由器了,所以叫广播域。

路由器 vs 交换机

两者均为存储-转发设备:
路由器:网络层设备(检测网络层分组首部)
交换机:链路层设备(检测链路层帧的首部)

二者均使用转发表:
路由器:利用路由算法(路由协议)计算(设置),依据IP地址
交换机:利用自学习、范红构建转发表,依据MAC地址来构建转发表
计算机网络笔记_第169张图片

局域虚拟网(VLAN)

支持VLAN划分的交换机,可以在一个物理LAN架构上配置、定义多个VLAN。

基于端口的VLAN:分组交换端口(通过交换机管理软件),于是,单一的物理交换机便可以实现这种看起来有多个虚拟交换机一样!
计算机网络笔记_第170张图片
流量隔离:去往/来自端口1-8的帧只到达端口1-8【也可以基于MAC地址定义VLAN,而不是交换端口】

动态成员:端口可以动态分配给不同VLAN

在VLAN间转发:通过路由(就像在独立的交换机之间)

跨越多交换机的VLAN

多线缆连接:每个线缆连接一个VLAN

中继端口:在跨越多个物理交换机定义的VLAN承载帧【必须记录VLAN的ID,这样在转发的时候才不会出错】
计算机网络笔记_第171张图片

点对点链路控制

点对点数据链路控制:一个发送端,一个接收端,一条链路;比广播链路容易

无需介质访问控制
无需明确的MAC地址

常见的点对点数据链路控制协议

HDLC
PPP

PPP协议

组帧:将网络层数据报封装到数据链路层帧中

可以同时承载任何网络层协议分组(不仅IP数据报)
可以向上层实现分用(多路分解)

比特透明传输:数据域必须支持承载任何比特模式

差错检测:没有纠正功能

连接活性检测:检测、并向网络层通知链路失效

网络层地址协商:端结点可以学习/配置彼此网络地址

PPP无需支持的功能

无需差错纠正/恢复
无需流量控制
不存在乱序交付
无需支持多点链路

差错恢复、流量控制等由高层协议处理!
计算机网络笔记_第172张图片
计算机网络笔记_第173张图片

无线局域网(WIFI)

不同类型的局域网
计算机网络笔记_第174张图片
计算机网络笔记_第175张图片
无线主机与基站通信:基站=访问点

信道与AP关联

802.11b:准备是使用2.4GHz-2.485GHz频谱划分为11个不同频率的信道【11个不同频率的信道之间会有重叠,可能会互相干扰】

每个AP选择一个频率(信道)
存在干扰可能:相邻的AP可能选择相同的信道!

主机:必须与某个AP关联

扫描信道,监听包含AP名称(服务集标识符-SSID)和MAC地址的信标帧
选择一个AP进行关联
可能需要进行身份认证

被动扫描与主动扫描

计算机网络笔记_第176张图片

802.11无线局域网

多路访问控制:避免冲突
计算机网络笔记_第177张图片
计算机网络笔记_第178张图片

冲突避免的过程

计算机网络笔记_第179张图片

计算机网络之危机四伏

什么是一个安全的网络?

计算机网络笔记_第180张图片

网络安全的基本属性

机密性:只有发送方和预定接收方能够理解报文内容

发送方加密报文
接收方解密报文

身份认证:发送方和接收方希望确认彼此的真实身份

信息完整性:发送方与接收方希望确保信息未被篡改(传输途中或者后期),发生篡改一定会被检测到

可访问性与可用性:网络服务必须对授权用户可访问与可用

网络安全的基本特征

相对性:只有相对的安全,没有绝对的安全
时效性:新的漏洞与攻击方法不断发现
相关性:新配置、新系统组件可能会引入新的安全问题
不确定性:攻击时间、攻击者、攻击目标和攻击发起的地点都具有不确定性
复杂性:网络安全是一项系统工程,需要技术的和非技术的手段
重要性:网络安全关乎国家、政府、企业、个人的安全

网络安全威胁

窃听:窃听信息
插入:主动在连接中插入信息
假冒:可以通过伪造分组中的源地址(或者分组的任意其他字段)
劫持:通过移除/取代发送方或者接收方“接管”连接
拒绝服务:阻止服务器为其他用户提供服务

Internet安全威胁

端口扫描
分组“嗅探”
IP欺骗

拒绝服务DOS

向接收方恶意泛洪分组,淹没接收方【耗尽带宽,资源耗尽】

攻击过程
1.选择目标
2.入侵网络中主机(构建僵尸网络)
3.控制僵尸主机向目标发送分组

反射式DDoS攻击

1.选择目标
2.入侵网络中主机(构建僵尸网络)
3.选择反射服务器【把他们的服务响应反射到被攻击目标,造成目标瘫痪】
4.借助反射服务器向目标发起攻击【欺骗反射服务器,让反射服务器误以为大量的请求来自于等待被攻击的服务器,这些服务器做出响应的时候,会造成服务器瘫痪】

DOS对策

在到达主机前过滤掉泛洪分组【可能好坏一起扔】
追溯攻击源

SYN cookie攻击

网络中现在许多连接都是依靠TCP连接,我们知道,建立一个连接需要三次握手。客户端进行第一次握手后,服务器会进行第二次握手,并且为该半连接分配资源【缓存、接收窗口等等】,SYN攻击就是利用这一特点,如果短期内大量假的请求到达了,那么服务器资源会被耗尽。

对策:服务器在进行第二次握手的时候,不分配资源,如果对方发来第三次握手,那么该资源是正常访问,服务器就可以为它分配资源,否则不分配。这样子,就可以过滤掉SYN cookie攻击。

密码学基础

加密类型

对称密钥加密
非对称密钥加密

破解加密方法

唯密文攻击:入侵者只截获到密文,基于对密文的分析进行破解

暴力破解:尝试所有可能的密钥
统计分析

已知明文攻击:入侵者已知部分明文以及与之匹配的密文
选择明文攻击:入侵者可以获取针对选择的明文的密文【弄一段明文去加密,得到对应的密文】

传统加密方法

替代密码:利用一种东西替代另外一种东西
凯撒密码:一个字母替代另一个字母【将一个字母利用字母表中将该字母后面的第K个字母替代】

单码(字母)替代密码:一个字母替代另外一个字母【不是那种按着顺序来的,而是随机打乱对应,增加解密难度】【达到了26!的级别,暴力破解的难度极大】

多码(字母)替代加密:使用多个单码替代密码,明文中不同位置的字母使用不同的单码替代密码【例如使用两个凯撒密码的多码替代加密】

换位密码:重新排列明文中的字母

置换法:将明文划分为固定长度(d)的组,每个组内的字母按照置换规则(f)变换位置

换位密码:重新排列明文中的字母
列置换加密:将明文按行组成一个矩阵,然后按给定顺序输出得到密文【列置换加密的密钥包括列数和输出顺序,可以用一个单词来表示,单词长度表示列数,单词中的字母顺序表示输出顺序】

现代加密技术

现代加密技术的基本操作包括经典的替代和置换【不再针对一个个字母,而是针对二进制位操作】

现代加密技术主要分为:
对称密钥加密
非对密钥加密(公开密钥加密)

对称密钥加密:
流密码
分组密码【块密码】

数据加密标准:DES

DES是16轮的Feistel结构密码,是一个包含16个阶段的“替代—置换”的分组加密算法

DES算法结构

计算机网络笔记_第181张图片
一轮加密:原始的明文的右半部分被原封不动的取下来,当做这一轮加密结果的左半部分,然后每一轮有一个Ki【子密钥】,利用这个子密钥与原来的右半部分产生一个序列然后与原本的左半部分进行一个异或运算后当做加密后的右半部分,重复16次。

公钥密码学

对称密钥加密:需要发送方与接收方知道共享的秘密密钥
计算机网络笔记_第182张图片

公钥加密算法

计算机网络笔记_第183张图片

身份认证

目的:避免回放攻击【即使加密的口令被记录了,也不会被攻破】

一次性随机数:一个生命周期内只用一次的数R

为了证明是“真是的”发送方,接收方向发送方发送一个随机数R,发送方必须返回R,并利用共享密钥进行加密
计算机网络笔记_第184张图片
缺点:必须要求接收方与发送方已经有存在共享的密钥

ap5.0:利用一次性随机数以及公钥加密技术
计算机网络笔记_第185张图片
漏洞:中间人攻击

报文完整性

报文/消息完整性:称为报文/消息认证(或报文鉴别)

目标

证明报文确实来自声称的发送方,
验证报文在传输过程中没有被篡改
预防报文的时间、顺序被篡改
预防报文持有期被修改
预防抵赖【发送方否认、接收方否认】

密码散列函数

散列算法公开
散列函数能够快速计算
对任意长度报文进行多对一映射,均产生定长输出
对于任意报文无法预知器散列值
不同报文不能产生相同的散列值

特性

单向性:无法根据散列值推出报文
抗弱碰撞性:对于给定能够报文x,不可能找到y且x!=y,使得H(x)=H(y)
抗强碰撞性:不可能找到两个任意的不同报文x和y,使得H(x)=H(y)

报文摘要

对于报文m应用散列函数H,得到一个胡定长度的散列码,称为报文摘要。记为H(m),可以用作报文m的数字指纹。

报文认证

简单方案:报文+报文摘要---->扩展报文(m,H(m))
计算机网络笔记_第186张图片

报文认证码MAC

报文认证码:报文m+认证密钥s+密码散列函数H------->扩展报文(m,H(m+s))
计算机网络笔记_第187张图片
因为认证密钥是共同拥有的,所以可以确定对方的身份。

数字签名

计算机网络笔记_第188张图片
数字签名:数字签名技术是实现安全电子交易的核心技术之一!

可验证性
不可伪造性
不可抵赖性

密钥分发中心(KDC)

KDC:一个服务器
每个注册用户(很多用户)共享其余KDC的秘密密钥

认证中心(CA)

实现特定实体E与其公钥的绑定,每个E(如人、路由器)在CA上注册其公钥【E需要向CA提供“身份证明”,CA创建绑定E极其公钥的证书,证书包含由CA签名的E公钥-CA声明:“这是E的公钥”】

安全电子邮件

电子邮件安全威胁

垃圾邮件:增加网络负荷,占用服务器空间
诈骗邮件
邮件炸弹:短时间内向同一邮箱发送大量电子邮件,占用掉存储空间。
通过电子邮件/附件传播网络蠕虫/病毒
电子邮件欺骗、钓鱼式攻击

电子邮件安全需求

机密性:只有真正的接收方才能阅读邮件
安全性:电子邮件在传输过程中不被修改
身份认证性:电子邮件的发送者不被假冒
抗抵赖性:发信人无法否认发过电子邮件

安全电子邮件基本原理

邮件具有单向性非实时性
计算机网络笔记_第189张图片
计算机网络笔记_第190张图片

安全电子邮件标准

PEM标准
PGP标准:事实上的标准

PGP特点

对邮件内容进行数字签名,保证信件内容不被篡改
使用公钥和对称加密保证邮件内容机密且不可否认
公钥的权威性由收发双方或者所信任的第三方签名认证
实现不需要任何保密信道来传递对称的会话密钥

Web安全威胁

攻击类型:
主动攻击:篡改c/s之间信息或篡改Web站点信息(难防易检)
被动攻击:监听数据流获取信息或进行信息量分析(难检难防)

机密性:网络监听、窃取数据
完整性:修改用户数据、修改传输的信息
拒绝服务:伪造请求淹没服务器
身份认证:冒充合法用户、伪造数据

Web服务器的安全威胁
Web服务越强大,包含安全漏洞概率就越高
HTTP可在不同权限下运行
Web浏览器的安全威胁
活动web页可能隐藏恶意程序

基于应用层实现Web安全

为特定应用指定安全服务,将安全服务直接嵌入在应用程序中。
计算机网络笔记_第191张图片

基于传输层实现Web安全

SSL或TLS可作为基础协议栈的组成部分,对应用透明【也可直接嵌入到浏览器中使用】

使用SSL或TLS后,传送的应用层数据会被加密【保证通信的安全】
计算机网络笔记_第192张图片

基于网络层实现Web安全

IPSec提供端到端(主机到主机)的安全机制

通用解决方案

各种应用程序均可利用IPSec提供的安全机制

减少了安全漏洞的产生
计算机网络笔记_第193张图片

安全套接字层(SSL)

广泛部署的安全协议【几乎所有的浏览器和Web服务器都支持】

作用

机密性
完整性
认证

SSL和TCP/IP的关系
计算机网络笔记_第194张图片
SSL为网络应用提供应用编程接口(API)

简化的SSL:一个简单的安全信道

握手:发送方和接收方利用他们的证书、私钥认证(鉴别)彼此,以及交换共享密钥

密钥派生:发送方和接收方利用共享密钥派生出一组密钥

数据传输:待传输数据分割成一系列记录

连接关闭:通过发送特殊消息,安全关闭连接

密钥派生
不同加密操作使用不同密钥会更加安全

报文认证码(MAC)密钥和数据加密密钥

计算机网络笔记_第195张图片

SSL协议栈

介于HTTP和TCP之间的一个可选层,绝大多数应用层协议直接建立在SSL之上

SSL不是一个单独的协议,而是两层协议
计算机网络笔记_第196张图片
SSL密码组
公开密钥算法
对称加密算法
MAC算法

SSL支持多个密码组,需要客户与服务器商定密码组【客户提供选项,服务器挑选其一】

SSL更改密码规格协议
更新当前连接的密钥组,标志着加密策略的改变【位于SSL记录协议之上ContentType=20表示更改过】

SSL警告协议
当握手过程或数据加密等出错或发生异常时,为对等实体传递SSL警告或终止当前连接【位于SSL记录协议之上,ContentType=21,协议包含两个字节,警告级别和警告代码】

SSL握手协议
协商结果是SSL记录协议的基础,ContentType=22

SSL记录协议
描述SSL信息交换过程中的记录格式,所有数据(含SSL握手信息)都被封装在记录中,一个记录由两部分组成:记录头和数据

目的
服务器认证/鉴别
协商:商定加密算法
建立密钥
客户认证/鉴别(可选)

SSL握手过程

1、客户发送其支持的算法列表,以及客户一次随机数【发送一次性随机数是为了避免回放攻击】
2、服务器从算法列表中选择算法,并发回给客户:选择+证书+服务器一次随机数
3、客户验证证书,提取服务器公钥,生成预主密钥,并利用服务器的公钥加密预主密钥,发送给服务器
4、客户与服务器基于预主密钥和一次随机数分别独立计算加密密钥和MAC密钥
5、客户发送一个针对所有握手消息的MAC
6、服务器发送一个针对所有握手消息的MAC
【最后两步的意义:保护握手过程中免遭篡改】
计算机网络笔记_第197张图片

虚拟专用网(VPN)

动机:安全
专用网络PN:基于专属的网络设备、链路或协议等建设的专门服务于特定机构的网络。
虚拟专用网路VPN:通过建立在公共网络上的安全通道、实现远程用户、分支机构、业务伙伴等于机构总部网络的安全连接,从而构建针对特定组织机构的专用网络

VPN的功能

数据机密性保护
数据完整性认证
数据源身份认证
防重放攻击
访问控制

VPN关键技术

隧道技术
数据加密
身份认证
密钥管理
访问控制
网络管理


隧道技术
计算机网络笔记_第198张图片
隧道协议
计算机网络笔记_第199张图片


IP安全(IPSec)网络层提供的安全服务

IPSec体系结构

计算机网络笔记_第200张图片

IPSec服务

机密性
数据完整性
源认证/鉴别
重放攻击预防

提供不同服务模型的两个协议:AH、ESP

传输模式【感知模式】

IPSec数据报的发送与接收均由端系统完成【传输模式,也叫感知模式】
主机是IPSec感知的

隧道模式

边缘路由器是IPSec感知的

两个IPSec协议

计算机网络笔记_第201张图片
计算机网络笔记_第202张图片

安全关联(SA)

发送数据前,从发送实体到接收实体之间需要建立安全关联SA【单工】
发送实体与接收实体均需维护SA的状态信息
【IP是无连接的,IPSec是面向连接的!】

安全关联主要参数:

安全参数索引(SPI),32位SA唯一标识(ID)
加密密钥、认证密钥
密码算法标识
序列号(32位):抗重放攻击
抗重播窗口:接收方使用滑动窗口检测恶意主机重放数据报
生存周期:规定SA的有效使用周期
运行模式:传输模式或者是隧道模式
IPSec隧道源、目的地址

安全关联数据库(SAD)

IPSec端点将SA状态保存在安全关联数据库SAD中,在处理IPSec数据报时,定位这些信息。

安全策略数据库(SPD)

安全策略(SP):定义了对什么样的数据流实施什么样的安全处理【应该IPSec、绕过、丢弃】
安全策略组成了SPD,每个记录就是一条SP

IPSec数据报

计算机网络笔记_第203张图片
计算机网络笔记_第204张图片
计算机网络笔记_第205张图片
计算机网络笔记_第206张图片
隧道模式的ESP是应用最广泛的。

计算机网络笔记_第207张图片
计算机网络笔记_第208张图片

IPSec数据报处理过程

检索SPD(安全策略数据库),确定处理策略
检索SAD(安全处理数据库),确定SA【确定SA的相关参数】
在原IP数据报(包括原IP首部域!)后面附加“ESP尾部”
利用SA定义的算法与密钥,加密上述结果
在加密加过前面附加“ESP头”,创建“enchilada”
针对整个enchilada,利用SA定义的算法与密钥,创建报文认证码MAC;
在enchilada后面附加MAC,构成载荷(新IP数据报载荷)
构造全新的IP头,包含所有经典的IPv4首部字段
将新IP头附加在载荷的前面

IPSec解封数据报处理过程

从原始IP数据报中提取选择符,并搜索SPD,确定处理策略【丢弃或者转入系统IP协议栈进行后继处理】
判断是否为IPSec数据报
从头部提取,并检索SAD

若找不到SA,则触发IKE或丢包
若找到,则根据SA解封数据报,得到原始IP数据报

IPSec序列号

计算机网络笔记_第209张图片

SA的建立和密钥管理

计算机网络笔记_第210张图片

Internet密钥交换(IKE)

对于规模非常大的VPN,手工设置是不可行的,使用IKE来解决问题。
IKE协议可自动管理SA的建议、协商、修改、和删除,是IPSec唯一的密钥管理协议

IKE为IPSec提供服务

密钥的交换与管理
身份认证:通信对等体的认证

IPSec总结

计算机网络笔记_第211张图片

无线局域网

WEP:有线等效保密
对称密钥加密

机密性
主机认证
数据完整性

自同步:对每个分组单独加密
高效:可以由硬件或软件实现

防火墙

阻隔组织内部网络与公共互联网,允许某些分组通过,而阻止其他分组进入/离开内部网络的软件/硬件设施。

作用

预防拒绝服务攻击(DoS)
预防非法修改/内部数据访问
只允许对内部网络的授权访问

三种类型的防火墙

无状态分组过滤器
有状态分组过滤器
应用网关

无状态分组过滤

内部网络通过路由器防火墙与Internet连接

路由器逐个分组过滤,决策是否转发/丢弃分组,依据如下

源IP地址、目的IP地址
TCP/UDP源、目的端口号
ICMP报文类型
TCP SYN和ACK标志位
计算机网络笔记_第212张图片

访问控制列表:规则表,自顶向下应用于到达的分组

有状态分组过滤

无状态分组过滤器:笨拙【不加以区分放行满足条件的所有分组】
有状态分组过滤器:跟踪每个TCP连接

跟踪连接建立、拆除、根据状态确定是否放行进入或者外出的分组
超时的非活动连接:不再允许分组通过

应用网关

计算机网络笔记_第213张图片

应用网关、防火墙的局限性

计算机网络笔记_第214张图片

你可能感兴趣的:(计算机网络)