计算机网络(自顶向下)笔记

本书是自顶向下进行的, 在第一章概述计算机网络的层次结构,从第二章开始从上到下一章介绍一层(大致), 最后是移动互联网/网络安全的内容

计算机网络中的每一层都具有一定的功能, 通过层间接口向上层提供服务, 通过调用下层接口实现一定的功能.

每一层的学习方式

  • 原理
    • 功能
    • 向上层服务
    • 向下层调用
  • 应用(常见协议)
    • 协议的时序: 确定通信双方"讲话的次序",定义了速度, 排序等。
    • 协议的语法: 确定通信双方"如何讲话",定义了数据格式,编码和信号电平等。
    • 协议的语义: 确定通信双方"讲什么",定义了用于协调同步和差错处理的控制信息。

概论

什么是互联网

互联网是很多的网络相互连接构成的网络的网络, 不同的网络处在互联网中不同的层次, 网络是边与点的集合

互联网的构成

  • 节点
    • 主机(端系统)及其上运行的应用程序
    • 路由器、交换机等网络交换设备
  • 边(通信链路)
    • 接入网链路:主机连接到互联网的链路
    • 主干链路:路由器间的链路
    • 传输速率就是带宽(bps)
  • 协议
    • 支持互联网工作的标准
    • 对等层网络在通信的时候应该遵守的标准, 包含语法, 语义, 时序
    • Internet网协议就是以TCP/IP协议为主的协议组

互联网的服务

  • 分布式的应用进程
  • 用于通信基础设施(通过Socket API提供服务有面向连接的与无连接的服务)

网络的结构

  • 网络的边缘: 包括主机与应用程序
  • 网络的核心: 互联的路由器与网络中的子网
  • 接入网: 网络边缘与网络核心连接的有线或者无线通信链路

网络的边缘

网络边缘有运行着分布式应用的主机, 提供CS/P2P两种通信模式

  • CS模式: 服务器客户端模式, 客户端主动发起请求, 服务端响应, 数据存储在服务端, 存在单点故障与可靠性的问题(请求强度增大, 性能断崖式下降)
  • P2P模式: 没有专门的服务器, 每个节点既是客户端也是服务器

连接方式

  • 面向连接: 在通信之前先打招呼, 服务端准备资源, 建立连接, 在通信两段保持连接
  • 有连接: 在面向连接的基础上让通信链路上的每个节点都维护通信的状态
  • 无连接: 不打招呼直接发送请求.

面向连接的服务: 以TCP连接为代表, 具有

  • 可靠的, 有序的: 支持确认与重传(不重复, 不遗漏, 不出错, 不失序)
  • 流量控制: 发送方发送的数据包不会淹没接收方
  • 拥塞控制: 网络拥塞的时候降低传输速度
  • 用于http/ftp/telnet/smtp应用

无连接的服务: UPD用户数据报协议

  • 不可靠
  • 速度快
  • 无流量控制拥塞控制
  • 用于音视频多媒体应用

网络的核心

网络的核心是路由器连接的网状网

网络核心的关键功能

  • 转发: 局部行为, 将分组从输入链路转移到输出链路
  • 路由: 规划分组从源到目标的路径

网络核心数据通信方式

  • 电路交换: 为每个连接预留一条道路, 当两者在通信的时候, 他们经过的链路不可被其他人使用, 注意: 不是说两者之间直接拉一根网线, 这与电话链接是类似的, 是通过建立一条虚电路在网络中找到一条可以使用的链路并独享
  • 分组交换:
    • 将要传输的数据分成一个个分组
    • 单个分组一次性从一个路由器转发到另一个路由器
    • 每个分组在一次转发的时候全速进行

电路交换

  • 数据被一口气从发送端连接到接收端, 一旦连接建立, 即使没有数据交换, 在没有结束通信之前链路资源仍然不会释放

  • 链路资源独享, 保证了连接的性能

  • 线路分片技术

    将一个线路分成多个小片, 实现在一条线路上跑同时跑多个数据

    • FDMA: 频分复用技术, 不同的数据包使用不同的频率叠加在一起发送, 到接收端再过滤
    • TDMA: 时分复用技术, 不同的数据包以不同相位同周期发送
    • WDMA: 波分复用技术(光通信)
  • 线路交换不适合计算机的通信

    • 连接建立需要较长的时间(在整个链路上建立一个虚电路进行通讯)
    • 计算机之间的通信具有突发性, 使用线路交换会浪费较多的资源
    • 可靠性不好

分组交换

  • 主机与主机的通信以分组为单位存储转发
  • 分组到达某一个节点之后, 分组转发设备要将数据存下, 再转发
  • 节点之间的通信链路不再使用分片技术, 分组全速通过链路
  • 实现了传输过程中只占用了一部分链路而不是整条链路, 实现了线路的共享性(一段连续时间给这个用, 一段连续时间给另一个人用, 看起来很像时分多路复用, 但是划分方式没有固定的模式, 我们称之为统计多路复用)
  • 由于需要进行存储, 所以存在存储的延迟和排队延迟

分组交换时延计算

  • 时延: 是数据(一个报文或分组,甚至比特)从网络或链路的一段传送到另一端所需要的时间

  • 传输延迟dtransd_{trans}dtrans 是从发送数据帧的第一个比特算起, 到该帧的最后一个比特发送完毕所需的时间, 网卡把数据包放在链路上的时间

    传输时延=分组长度L(b) /链路带宽R(bps)

  • 传播延迟dpropd_{prop}dprop: 电磁波在信道中需要传播一定的距离而花费的时间,
    传播时延=物理链路长度d(m)/电磁波在信道上的传播速率s(m/s)

  • 处理延迟dprocd_{proc}dproc:: 主机或路由器处理所收到的分组(查路由表, 检错)的时间

  • 排队延迟dqueued_{queue}dqueue: 分组在输入队列中排队等待处理,在输出队列中等待转发,就形成了排队时延。[随机的, 如果不巧队列满了, 数据包就会被丢弃]

  • 总延迟
    dnodal=dproc+dqueue+dtrans+dprop d_{nodal}=d_{proc}+d_{queue}+d_{trans}+d_{prop} dnodal=dproc+dqueue+dtrans+dprop

  • 发送时延是发送方将数据从网卡放在链路上的延迟

    接收时延接收方收到数据从链路装载在网卡的延迟

    两者是一边发送, 一边接收的, 不是发送发发完接收方才去接收的, 所以发送与接收时延只能计算一次

    进行这类计算的时候最好画一个时延图

两者比较: 对于同一带宽链路, 分组交换支持的用户数目更多, 例如

有一条1Mbps的通信链路, 假设活跃用户需要的带宽是100Kbps, 用户只有p=10%p=10\%p=10%的时间是活跃的(因为计算机通信具有很强的突发性)

  • 假设采用线路交换最多支持的用户数目为NNN
    KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ N&=\frac{1Mbps…

  • 假设采用分组交换支持的用户数目NNN

    NNN人中有小于等于nnn人活跃的概率是
    ∑i=0nC35ipi(1−p)N−i \sum_{i=0}^{n}C^{i}_{35}p^i(1-p)^{N-i} i=0nC35ipi(1p)Ni
    也就是说这NNN人中有大于nnn人活跃的概率是
    1−∑i=0nC35ipi(1−p)N−i 1-\sum_{i=0}^{n}C^{i}_{35}p^i(1-p)^{N-i} 1i=0nC35ipi(1p)Ni
    当有N=35N=35N=35个用户, n=9n=9n=9人以上活动的概率是0.0004, 这里选择9人是因为: 如果线路满载, 理论可以提供的用户数是10, 但是如果真的有10人在用, 由于分组交换存在分组延迟排队等原因, 队列会越排越长, 最后网络崩溃, 所以nnn只能为9

    相当于说有在分组交换时, 有0.04%的概率无法满足使用, 但是我们还有缓存队列来应付这0.04%的突发的情况

让分组交换像电路交换一样工作

有很多服务需要高实时性(例如音视频服务), 我们想让网络具有线路交换的特性. 有两种实现方式

  • 数据报网络(UDP): 在请求与响应传输的时候不需要握手, 直接传输(数据报包含了目标主机全部信息), 路由器只负责转发, 不维护主机之间的状态
  • 虚电路: 使用信令在途径的所有交换设备上建立一个虚电路表, 写明要吧数据数据包转发到哪里(而不是查询路由表)

接入网和物理媒体

网络边缘的端系统通过接入网将自己接入网络核心

使用modem接入

利用原有的电话网, 将上网的数据通过调制解调器(modem)调制为电话线上的4KHz的语音频段信号(同时还实现了多路复用), 局端将其中的数据解调出来.

但是网速只有56Kbps, 不能同时打电话与上网

DSL接入

与modem类似, 仍然使用电话网, 使用4KHz的音频信号以上的信号段, 将一部分频段专门用于上传, 一部分专门用于下载(虽然打电话只用到了4KHz, 但是电话线也不是不可以传输高于4KHz的信息)

线缆网络

对有限电视信号线进行双向改造, 采用频分复用技术, 共享带宽(在数据链路层会介绍)

电缆网络

利用电网进行数据传输

Ethernet

企业一般使用Ethernet接入互联网, Ethernet可以理解为是可能不遵守Internet协议的网络. 或者说Ethernet是一个类, Internet是一个实例. 企业内网直接连接到外网交换机上

通过移动互联的方式接入

可以通过无线局域网WLAN, 移动网络接入互联网, 卫星通信

常见的接入媒介

  • 导引型媒体:
    信号沿着固体媒介被导引:同轴电缆、光纤、 双绞线
  • 非导引型媒体:
    开放的空间传输电磁波或者光信号,在电磁或者光信号中承载数据

Internet结构与ISP

前面我们将互联网划分为主机与链路, 主机节点构成的子系统叫网络的边缘, 交换节点与链路构成了网络的核心, 通过接入网将两者连起来

还可以将关系比较密集的节点划分成一个网络, 例如可以把一个ISP(互联网服务提供商)的网络划分为一个子网, ISP的网络互相连接构成互联网

  • 端系统通过接入ISP(比如所在的大学, 所在的住宅楼)连接到互联网,
  • ISP之间相互通信实现互联
  • ICP(互联网内容提供商)也会构建自己的网络并将网络接入离数据中心机房很近的ISP的网络

分组延迟/丢失/吞吐量

网络核心有线路交换和分组交换的方式, 分组交换的共享性比较好, 但是存在更多的延迟与分组的丢弃

分组的丢失与延迟

当路由器上的分组要通过链路, 链路上有其他分组的时候, 分组需要进行排队等待, 这造成了分组排队延迟, 如果分组到达时队列已满, 分组会被丢弃. 队列不需要很大, 分组在经过过长时间的等待即使没有丢失也已经变得无意义了

四种延迟(复制前面)

  • 传输延迟dtransd_{trans}dtrans 是从发送数据帧的第一个比特算起, 到该帧的最后一个比特发送完毕所需的时间, 网卡把数据包放在链路上的时间

    传输时延=分组长度L(b) /链路带宽R(bps)

  • 传播延迟dpropd_{prop}dprop: 电磁波在信道中需要传播一定的距离而花费的时间,
    传播时延=物理链路长度d(m)/电磁波在信道上的传播速率s(m/s)

  • 处理延迟dprocd_{proc}dproc:: 主机或路由器处理所收到的分组(查路由表, 检错)的时间

  • 排队延迟dqueued_{queue}dqueue: 分组在输入队列中排队等待处理,在输出队列中等待转发,就形成了排队时延。[随机的, 如果不巧队列满了, 数据包就会被丢弃]

  • 总延迟
    dnodal=dproc+dqueue+dtrans+dprop d_{nodal}=d_{proc}+d_{queue}+d_{trans}+d_{prop} dnodal=dproc+dqueue+dtrans+dprop

排队延迟

排队延迟取决于流量强度III, 流量强度有I=LαRI=\frac{L\alpha}{R}I=RLα, RRR是链路传输速率, LLL是分组长度, α\alphaα是每秒需要放出的分组数, III的意义就是流量到达的速率是传输速率的几倍, 流量强度接近于1, 排队延迟接近无穷大

请添加图片描述

吞吐量

单位时间内源主机到目标主机传输的有效比特量, 有瞬间吞吐量和平均吞吐量

吞吐量取决于数据链路中速率最低的链路, 也叫瓶颈链路

在实际网络中, 瓶颈链路的速率可能并不低, 但是共享人数过多造成速率较低

协议层次与服务模型

网络是一个复杂的系统, 通过分层的方式实现, 一个层次可以通过层间接口调用他的下层的服务实现一个功能. 将网络复杂的功能分解成若干功能分明的层次

  • 一个层可以调用下层提供的服务
  • 对等层的模块之间通过协议交换控制信息
  • 一个层可以通过下层提供的信息, 结合对等层交换获得的信息实现自己的功能, 从而为上层服务
  • 一个层的一部分功能(服务)可以通过层间接口被上层调用

术语

  • 服务

    • 服务: 低层实体向上层实体提供他们通信能力(功能), 例如顺丰提供物流业务
    • 服务用户: 某层提供的服务被上层的服务用户使用, 也就是下层服务的调用者, 例如用户调用顺丰的服务
    • SAP服务访问点: 层之间的点, 用于区分不同的服务用户, 例如传输层的服务访问点是端口, 例如顺丰通过寄件地址上门取件
    • 原语: 上层使用下层用户的形式, 例如Socket API中的函数就是原语, 例如上层关闭链接, 我使用了顺丰服务的代收货款这一功能(原语), 更通俗的理解就是函数调用
  • 服务的类型

    • 面向连接的服务: 两个对等层在通信之前要先进行连接, 为通信做准备的服务
    • 无连接的服务: 两个对等层在通信之间不需要建立连接, 不需要预备资源的服务
  • 服务与协议的区别

    • 服务是垂直的层与层之间的关系, 在一个系统内部, 相邻的两个实体在SAP上, 上层使用原语调用下层的服务
    • 协议是对等层的实体在通讯时的规则
  • 数据单元DU

    请添加图片描述

    在这个图中, 我们假设我们在第n层, 上层是n+1层

    • SAP服务访问点: 存在于层间服务之间, 层间有多个SAP, 每个SAP具有唯一识别地址
    • SDU服务数据单元: 上层(n+1)交给我, 要求我进行传输的数据单元
    • ICI接口控制信息: 本层在SDU前面加入的控制信息(用于可以顺利通过与下层的SAP)
    • IDU接口数据单元: 本层中ICI与SDU的组合, 用于向下层传递SDU
    • PCI协议控制信息: 本层在SDU前面加入控制信息用于实现本层功能(也写成Header)
    • PDU协议数据单元: 本层的PCI与上层的SDU组合形成PDU, 用于对等层的通信
    • 注意: ICI只是上层用于通告SAP的, 与SDU组成产生IDU, ICI在通过后可能被丢弃, PIC是本层的控制信息头部, 用来与SDU结合产生PDU
    • SDU在传输的时候, 可能是一个SDU完整的传输, 如果SDU过大则会切片传输, 如果SDU过小则会组合传输
  • PDU的不同名称

    • 在应用层叫应用报文 Message
    • 在传输层叫报文段 Segment, TCP段/UDP数据报
    • 在网络层叫分组 Packet, 如果是无连接的也可以叫数据报 Datagram
    • 在链路层叫帧 Frame
    • 在物理层叫位 Bit

分层带来的特性

  • 概念化: 方便描述网络组件的关系
  • 结构化: 易于维护与升级
  • 低效化: 层之间的交互会降低效率

互联网协议栈(5层)

  • 物理层: 将上层交来的帧转化成物理信号
  • 链路层: 在相邻两点传输以帧为单位的数据**[点到点]**
  • 网络层: 在主机之间传输以分组为单位的端到端的数据**[主机到主机]**
  • 传输层: 实现主机与主机之间的(可靠的)数据传输**[进程到进程]**
  • 应用层: 实现应用报文与应用报文之间的交互**[应用到应用]**

ISO/OSI参考模型

比五层协议多两层

  • 表示层: 允许应用解释传输的数据, e.g., 加密,压缩,机器相关的表示转换
  • 会话层: 数据交换的同步,检查点,恢复

封装与解封装

源主机向目标主机发送请求, 在逻辑上是直接通信, 实际上需要进行多次的存储转发, 在转发时, 遇到交换机(二层交换机)要进行解封装到数据链路层进行转发与重封装, 遇到路由器(三层路由器)要进行解封装到网络层进行转发与重封装

应用层

应用层原理

网络应用的体系结构

  • C/S架构: 客户服务器模式, 服务器一直运行, 守护在特定端口, 客户端请求服务器响应, 资源在服务器, 可扩展性差
  • P2P模式: 节点既请求别人的服务, 自己也作为服务器, 参与的主机之间可以间歇性连接, 改变IP等
  • 混合模式

应用进程需要解决问题

  • 标识与寻址: 用于服务器找到用户
  • 下层提供的服务模型与使用形式
  • 如何使用下层服务完成报文交换

编址与寻址

  • 地址: 用户的主机IP, 使用的下层协议TCP/UDP, 进程运行在端口上(TCP与UDP可以使用相同的端口号, TCP与UDP可以同时使用相同的端口号, 但是TCP中一个端口号只能用一次)

  • 寻址, 穿过SAP需要的信息:

    • 要传输的内容: 应用层Message
    • 谁发的: 本机的IP+TCP/UDP端口
    • 发给谁: 对方的IP+TCP/UDP端口
  • Socket

    我们不能每次传输报文的时候都发送双方IP与端口号, 这样会消耗很多资源, 可以将这四个值映射为一个Socket值(一个整数), 第一次通信下层返回一个Socket值, 如果之后仍然是和原来的目标实体进行连接, 就直接向下层Socket值

    • TCP由于需要握手(面向连接), Socket是代表源IP, 目标IP, 源端口, 目标端口的一个双方的标识, 在传输数据的时候传输数据, Socket
    • UDP由于不需要握手(无连接), Socket只是代表源IP, 源端口的一个本地标识, 应用层在发送UDP请求的时候需要传输消息, Socket, 对方的IP与对方UDP端口

    Socket使得连接便于管理, 减少了与传输层连接的时传输的数据量

    可以这么理解, 我使用顺丰寄快递, 每次都要写寄件人收件人信息就很烦, 于是我们可以用一个数字代表收寄信息

    • 对于我经常联系(TCP)的朋友, 我可以把我的和对方的信息全部打包成一个数字, 以后写收寄人的时候直接写一个数字就可以了
    • 对于我偶尔联系(UDP)的朋友, 我可以把我的寄件地址打包成一个数字, 以后我的信息就可以用数字填写了, 收件人信息还要手动填写

应用层需要传输层提供的服务模型

  • 数据丢失率
  • 延迟
  • 吞吐量
  • 安全性

传输层提供的服务

  • TCP服务

    • 可靠的
    • 具有流量控制, 拥塞控制
    • 尽力而为的
    • 面向连接的
  • UDP服务

    • 不可靠数据传输
    • 不提供可靠流量控制、拥塞控制、时间、带宽保证、建立连接
  • UDP的优点

    • 能够区分不同的进程,而 IP服务不能

    • 在IP提供的主机到主机端到端功能的基础上,区分了主机的应用进程

    • 无需建立连接,省去了建立连接时间,适合事务性的应用

    • 不做可靠性的检查工作,例如检错重发,适合那些对实时性要求比较高而对正确性要求不高的应用

    • 节约了为了实现可靠性(准确性、保序等)付出的时间代价(检错重发)

    • 没有拥塞控制和流量控制,应用能够按照设定的速度发送数据

      而在TCP上面的应用,应用发送数据的速度和主机向网络发送的实际速度是不一致的,因为有流量控制和拥塞控制

  • 安全性

    • TCP与UDP都没有加密, 明文传输
    • SSL: 在TCP上面实现加密TCP连接, 保证了私密性, 数据完整性, 提供端到端的鉴别

Web应用与http协议

术语

  • Web的对象: Web页面是由一些对象构成的, 对象一般包括图像, 声音…

  • 基本HTML文件: Web页包含了一个基本的HTML文件, 这个文件中包含了对若干对象的引用

  • **URL(**统一资源定位符): 通过URL实现对每个对象的访问, 格式是

    Prot://user:[email protected]:port/it/is/path
    协议    [口令]    主机名          [端口] 路径
    http://          www.baidu.com      /picture
    
    • 网站大部分支持匿名访问, 这个时候口令就可以不写
    • 协议有默认端口号, 也可以不写
  • RRT(round-trip time): :一个小的分组从客户端到服务器,再回到客户端的时间(传输时间忽略)

http协议

  • Web的应用层协议

  • 采用C/S模式: 客户端请求, 接收, 展示Web对象, 服务端对请求进行响应

  • 采用TCP协议

    • 服务器启动http服务, 在tcp80端口上添加一个守护进程(waiting socket)
    • 客户发起一个默认为80端口的请求
    • 服务器接受客户请求, 新建一个Socket用于与客户机通信, 返回信息
    • 客户浏览器与服务器互相交换http报文
    • 无状态的, 不维护主机与主机之间的通信
  • 有持久与非持久的http

    http在建立连接的时候要进行多次请求, 例如连接建立的请求, 请求多个数据的请求

    • 非持久的http

      每次TCP连接最多可以发送一个对象, 下载多个对象需要多个TCP连接, http1.0默认使用

### 关于计算机网络自顶向下方法的学习资源 对于希望获取有关计算机网络采用自顶向下方法学习的相关笔记或教程,通常这类材料会覆盖从应用层至物理层各层次的内容。由于直接提供PDF文件不符合当前交流平台的规定,可以建议一些替代方案来帮助获得所需的信息。 #### 替代方案 1. **在线课程** 多个教育网站提供了基于《计算机网络:自底向上方法》这本书籍的教学视频和讲义下载链接。Coursera、edX等平台上由知名大学开设的相关课程往往附带详细的PPT课件和阅读指南[^1]。 2. **学术论坛与社区** 像Stack Overflow、Reddit上的r/computernetworks子板块或是专门的技术博客都是寻找他人整理好的高质量笔记的好地方。这些地方不仅能够找到一手的学习心得,还能参与讨论解决疑惑[^2]。 3. **图书馆及电子书服务** 如果所在学校或城市拥有良好的公共图书馆设施,则有很大概率能借阅到纸质版本教材;另外Google Books、Project Gutenberg等合法渠道也可能存在部分章节预览供初步了解[^3]。 4. **官方出版物配套资源** 出版社官网一般都会为购买正版书籍用户提供额外的支持文档和服务,包括但不限于练习题解答手册、实验指导书等辅助工具,有助于更深入理解书中概念[^4]。 ```python # 示例代码用于展示如何通过Python访问在线数据库查询相关文献 import requests def search_computer_network_resources(keyword): url = f"https://api.example.com/search?q={keyword}" response = requests.get(url) if response.status_code == 200: data = response.json() return data['results'] else: raise Exception("Failed to fetch resources") resources = search_computer_network_resources('computer network top-down approach') for resource in resources[:5]: print(resource['title'], resource['link']) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liukairui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值