计算机网络和因特网

相对于 CSAPP,这本书的开头就让我感受到压力倍增,它在 30 面的篇幅里面抛出了更多对我来说全新的专业名词,并且对其的解释经常发生耦合和互相解释的情况。
不过正如这本书说的,“如果你想在家庭聚会上一鸣惊人,看完第一章就应当由足够的知识来给家人和朋友留下一些深刻印象了”
总之,这些知识只是纯粹给你留下一些初步的印象,前面的区域以后再来探索吧

1.1 什么是因特网

1.1.1 具体构成描述

因特网就是一个连接了全世界数十亿计算设备的网络。
这些计算设备有传统的电脑,也有手机之类的移动设备,还有家用电器之类的非传统设备。
这些各种各样的计算设备被统称为主机端系统,它们之间通过通信链路分组交换机相互连接。
对于链路,它肯定是有传输速率的,以 bps(比特每秒)度量。而在端系统发送数据时,通常会将数据分段 ,再加上首部字节(一些类似于上下文的标记),形成的数据包就叫做分组
而分组交换机就是接受通信链路传来的分组再把它通过另外一条通信链路发出去的设备,比如路由器和链路层交换机
就像从一个工厂到另外一个工厂(端系统),中间货物(数据)被分装到不同的卡车(分组),经过高速公路(通信链路)和交叉口(分组交换机),最终到达目的地一样,分组通过的通信链路和分组交换机被叫做路径
端系统通过因特网服务提供商(ISP)接入互联网,简单来说就是移动联通电信这些的运营商,你得向他们交钱来拿到互联网服务。
然后呢,我们知道,数据的传输需要一些通用的规矩,这些规矩被叫做
协议
,比如我们的 TCP/IP 协议,就是协议。
因为协议必须像一些共识一样才能发挥互联的作用(就像两个人必须有共通的语言才能交流一样),因特网标准产生了,一个叫 IETF 的组织研发了它,它们给出了一堆叫请求评论的官方文档,里面定义了各种协议。

1.1.2 服务描述

讲了这么多,似乎和我们的日常生活没有什么强而有力的关联,那么我们从分布式应用的角度来讲(就是我们平时电脑手机里面的各种联网 app,它们一般涉及了各个端系统之间的交互)。
为了实现分布式应用的各种联网功能,端系统提供了套接字接口,规定了不同端系统的程序之间交接数据的方式。借用书里的类比,你像别人写信,但不能只写信,你害得写一些信要给谁,送到哪里,邮政编码之类的信息,才能让信送到。同理,数据也是一样的。

1.1.3 什么是协议

你知道的的,详细的语言描述有时候不如来点比喻,用人类的比喻来说,很多人在找别人说事情前喜欢先发一句“在吗?”,再通过对面的反应来继续下文,要是对面没回或者发动了自动回复,那肯定就不能说事情了 这种对于接受和回答的报文的采取的约定俗成的行为模式,就是协议
网络协议就像是人类的协议一样,不同的设备按照协议的规矩进行交流进行互联网上的通信。
专业来说,协议定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文的发送或接受以及其他事件所采取的操作。

1.2 网络边缘

接下来,我们将从外到内粗略地遍历因特网这张巨大的网,在互联网边缘的肯定是我们的端系统了,我们通常听到的客户端和服务器,就是端系统的两种角色。
客户端就是我们常用的电脑手机之类的,各种应用程序运行在上面,而服务器通常是一些更加强大的设备,里面存储了许多的信息,并承担了这些信息发布的工作,这些信息包括我们联网得到的视频,图片,文章之类的。

1.2.1 接入网

家庭接入

从边缘向内,接入网就是将端系统物理连接到边缘路由器(就是端系统到另一个端系统路径上的第一台路由器)的网络。
现在最流行的接入网有两种,数字用户线(DSL)电缆
以下内容开始包含不负责任的大胆猜想和各种不知名网页内容
简单来说就是给传统的有线座机的电话线加上了联网的功能,我们在家里加上DSL 调制解调器,把数字信号变成高频音,发送到电话公司的数字用户线接入复用器(DSLAM),变回数字形式。这种额外功能是通过将电话信号分成 3 种频段

  • 高速下行信道 (50kHZ~1MHz)
  • 中速上行信道 (4kHz~50kHz)
  • 普通的双向电话信道(0~4kHz) 这种把分割不同频率的信号并变成不同信息的操作让一条电话线兼具了电话和联网的功能,于是家里就连上网了。这种操作只能说省钱又省事。
    电缆因特网接入则是利用了有线电视基础设施的电缆,那么进行类比,它的电缆调制解调器就相当于 DSL 调制解调器,**电缆调制解调器端接系统(CMTS)**就相当于 DSLAM
    当然,还有一些其他宽带接入技术,比如
  • 光纤到户(FTTH) 从本地中心局(类似于 CMTS 和 DSLAM 放在的地方)连一条光纤到一个地区,然后通过光纤分配器把一条光纤变成多条,分配给多个家庭。同样也有一个类似调制解调器的东西即光纤线路端接器把光信号和电信号进行转换
  • 5G 固定式无线采用无线方式从供应商的基站发送数据,通过家里的调制解调器接收,再连到 WiFi 无限路由器上。
企业(和家庭)接入

而在学校和家庭环境里,局域网(LAN)明显更加常见,最常见的(感觉是写书时最常见的)是以太网。就是我们学校机房里面那种有线的连接,把设备统一链接到以太网交换机,然后再接到路由器。
而基于 IEEE802.11 技术的无线 LAN 接入,说人话就是WiFi,才是真正无所不在。
现在毫无疑问,WiFi 已经走入家家户户了,现在的家庭网络通常由

  • 无线接入点(与无线设备通信的基站)
  • 无线路由器(无线接入点和其他无线设备与因特网相连的设备)
  • 无线设备(手机,电脑,路由器,打印机等)
  • 有线 PC(就是那种接网线的台式机)
广域无线接入

简单理解就是俗称的移动数据(流量)东西,通过和蜂窝移动电话一样的基础设施,实现了随时随地联网的能力,现在我们已经有 3G、4G、5G 无线技术了。

1.2.2 物理媒介

我们的数据在穿来穿去的过程中肯定需要一些媒介对吧,毕竟我们的电磁波或者光脉冲或者什么东西不能凭空传送对吧。
它们跨越的物理媒介被分为

  • 导引型媒介 (固体媒介,比如双绞铜线,光缆等)
  • 非导引型媒介(空气或外层空间)

书里主要介绍了五种

  • 双绞铜线 最便宜,最常见,最古老,电话线基本是双绞铜线
  • 同轴电缆 电视系统中最常见
  • 光纤 又快又稳定,被认为是因特网的主干,就是太贵了
  • 陆地无线电信道 不需要物理线路,可以穿墙,移动连接,
  • 卫星无线电信道 还在开发说是

1.3 网络核心

你以为之前的已经够干了,实则后面还有更干的
我们继续深入计算机网络,现在我们的信息已经进入第一个路由器,我们来到更多分组交换机和通信链路组成的网络核心,一个网状网络。

1.3.1 分组交换

在网络应用中,端系统彼此交换报文,它可以是控制用,也可以是数据,我们的分组就是被切块的报文。此事在上文已有记载

存储转发传输

简单来说对于一个分组的传输,我们要先在路由器里面拿到它的所有比特(存储),再向下一条通信链路发送(转发)。
比如给目的地发一个分组,中间经过两条通信链路和一个路由器,假设我们忽略传播时延(在通信链路上传播的时间),只考虑传输时延(路由器发货信息需要的时间)并设置为 t,那么我们需要等 2t 时间而不是 t 时间,因为中间的路由器要求等到 t 秒时分组完全到达时再进行转发,接下来还要 t 时间发货,所以总共 2t 时间。

排队时延和分组丢失

基于这种存储转发传输,我们可以注意到,分组交换机一定有一个输出缓存(输出队列),因为传输时延的存在,其他的分组肯定要在输出缓存里面排队,等着被转发。这个等待的时延被叫做排队时延
由于输出缓存肯定是有上限,那么溢出的分组很明显会分组丢失(丢包)

转发表和路由选择协议

有没有想过,这么多分组,分组交换机怎么知道该把它们送到哪里呢?
在因特网中,每个端系统拥有一个 IP 地址,而每个路由器有个转发表,里面记录了不同的目的地址要转发到哪条通信链路并到达哪个下一个路由器。
参考没有导航时期的问路,你在路上拉一个人,问某个人的家怎么去,路人可能先告诉你走哪条路到对应的大街,然后到那个街上再问,得到走哪个小巷,到小巷里再问,得到在哪个房间。就是这样的过程

1.3.2 电路交换

上面说完分组交换了,现在来讲电路交换
电路交换里面,端系统之间的资源是预留的,比如传统的电话网络,两台设备之间是真的有一条电路的,也就是说网络链路上面已经预留好了带宽,可以以恒定速率传送数据。
那么回到电路交换网络,在不同的端系统间,网络会创建端到端连接,提前给了一条恒定速率的带宽,而不是像分组交换那样,需要在传输时延的存在下,让分组排队等待。

等量交换网络的复用

电路交换网络肯定不是一条线就只能两条主机对吧,太低效了,我们有两种策略

  • 频分复用(FDM) 为每个连接指定一个频段,就像电台的不同频段可以有不同的节目一样
  • 时分复用(TDM) 每个连接指定一个时隙,在时隙里面传输指定的数据,比如每秒的 1/4 秒发不同端系统之间的信息这种
分组交换和电路交换的比较
  • 分组交换不适合实时服务,因为它可能因为排队时延产生我们常说的时延,而电路交换没有这种缺点
  • 而电路交换浪费了资源,因为它需要预留资源,在空闲时期,这些资源不能用于其他的连接 ,而分组交换可以调动所有的带宽去进行连接

总体来看,分组交换占据上风

  • 假设用户活跃的概率是随机的,无论怎么样电路交换都只能提供为一定数量的端系统提供一定数量连接,而分组交换可以给更多端系统通过连接 (假设电路交换系统和分组交换系统都只能同时提供 10 个连接,假设特定用户活跃的概率是 10%,对于 35 个用户,同时有 11 个及以上用户进行连接的概率也只是 0.0004 左右,大部分情况下不会卡顿,而电路交换系统依旧只能 10 个用户)
  • 假设有一个用户突然产生了大量分组,而其他用户不活跃,分组连接可以调用所有带宽,而电路交换系统只能提供预留的带宽,这就造成了资源的浪费

1.3.3 网络的网络

我们前面看到端系统通过接入 ISP 和因特网连接,但是毫无疑问,我们通常知道的移动,电信,联通,以及外国的 ISP 之间肯定存在连接,不然因特网的用户怎么在不同 ISP 提供服务的端系统之间互联呢?
按照发展进程我们逐渐完善现在的因特网网络结构

  1. 单一的全球传输 ISP 连接所有小的 ISP,并且也把它们当成客户,收费来提供网络服务
  2. 既然有利可图,那么全球的 ISP 肯定也不止有一个了,所以我们有了好几个伪全球 ISP,它们在最高层相互连接,形成一个全球 ISP
  3. 既然向上已经满了,我们也可以在全球 ISP 和小的 ISP 之间插手,建立区域 ISP,给全球 ISP 钱,同时向下级的 ISP 提供收费服务
  4. 在这样的多级节后上,我们再加入
  • 存在点(PoP) 提供客户 ISP 和提供商 ISP 的连接
  • 多宿 一个 ISP 上面可以有几个提供商 ISP
  • 对等 同级别的 ISP 之间进行免费的连接,保证了互联网的互联
  • 因特网交换点(IXP) 对等实现的地方
  1. 当然也有像谷歌这样的大手子,作为内容提供商网络,一方面尽可能和底层的 ISP 对等,绕过高层 ISP,另一方面也在必要情况下遵守全球 ISP 的管制,向它们交钱,获得网络服务

1.4 分组交换网的时延、丢包和吞吐量

1.4.1 分组交换网中的时延

前面描述过一个分组从一个主机出发,经过路由器到另外一台主机的过程,那么在一个分组经历这个过程的途中,究竟遇到了哪些时延呢?

  • 处理时延 检查分组首部和决定该分组去哪里想要的时间是处理时延的一部分,还有其他像检查比特级别差错之类的时间也包括在内
  • 排队时延 分组在路由器的输出缓存里面等待画的时间
  • 传输时延 路由器对一个分组进行传输消耗的时间(或者说发射)
  • 传播时延 分组被传输后到下一个路由器的时间(运货的时间)

整体来看这四个时延加起来,就是我们的节点时延,表示了一个分组从进入一个路由器到到达下一个路由器的总时长

1.4.2 排队时延和丢包

对于排队时延,这里主要讲了一种衡量排队时延的统计量->流量强度
假设分组到达队列的平均速率是 a 个分组每秒,传输速率是 R 比特每秒,分组平均大小是 L 比特,那么我们的流量强度就是 La/R
我们可以注意到,当流量强度大于 1 时,排队的队伍会越来越长,直到无穷大,所以对于设计系统时流量强度不能大于 1
而实际上,假设有一个设计不那么好的系统,及时它的排队队伍有时候会一直变长,也不会趋于无穷大,这是因为输出缓存的大小是有限的,没有地方储存的分组会被路由器丢弃,这时就发生了分组丢包

1.4.3 端到端时延

现在我们知道了节点时延,也就是单台路由器的时延了,那么对于一个端到端时延,它就是把所有的节点时延叠加起来 为了理解端到端时延,我们有了 traceroute 程序,它可以抓取经过每个路由器的时延并且返回对应的信息,虽然我并没有进行一个尝试
并且这一节还指出在后面的章节还有一些其他的时延说是

1.4.4 计算机网络的吞吐量

除了时延和丢包之外,衡量计算机网络的另外一个参数就是吞吐量
实际上,这个吞吐量就是两个端系统间传输文件的速率
这里我们主要讨论吞吐量的重要影响因素————瓶颈链路,简单来说就是(短板效应),吞吐量取决于所有通信链路里面最速率最小的一条。
另外一方面,如果,链路被多个端到端连接使用,情况还需要重新讨论

1.5 协议层次及其服务模型

显然,如果直接这样不断堆叠因特网的结构,计算机网络将变得难以组织,因此,这里也采用了一种叫做分层的方式来组织网络协议 这里将继续插入大量个人理解: 简单来说,分层的组织方式就是将系统的功能分到不同的层次,每个层次都可以使用下层的服务,同时向上层提供服务,将这样各层的协议叠加到一起,就是形成了协议栈
因特网的协议栈由五个层次构成:

  • 应用层
    • 网络应用程序和它们的应用层协议存在的地方,包括 HTTP SMTP FTP
    • 位于应用层的信息分组被叫做报文
  • 运输层
    • 在应用程序之间传送应用层报文,包括 TCP UDP
    • 运输层的报文被叫做报文段
  • 网络层
    • 将网络层分组从一台主机移动到另外一台主机,包括 IP
    • 网络层分组叫做数据报
  • 链路层
    • 为了实现网络层的分组移动,需要链路层提供服务,包括 DOCSIS
    • 链路层分组被叫做帧
  • 物理层
    • 物理层负责实现实际传输媒介中比特的运输

1.5.2 封装

简单来说,数据在网络里面运输的过程就是不断在协议栈里面上上下下的过程
按我的理解就是每个节点得到数据后不断向上拆开,得到需要的信息后,再向下封装,最后实现运输
何意味呢?就是每一层的分组实际上具有两个部分首部字段(每个层给得到分组加上的信息)和有效载荷字段(上层送来的分组)

封装其实就是加上首部字段的过程

1.6 面对攻击的网络

刚开始的网络是一个乌托邦,大家抱着伟大的愿景看待网络,然而,现在网络,出现了所谓安全性的问题,因为出现了破坏网络安全的个体 这里主要介绍了所谓黑客可以对网络干什么

  1. 恶意软件通过因特网放入个人计算机
  2. 攻击服务器和网络基础设施,比如DoS 攻击
  3. 可以嗅探分组,比如通过分组嗅探器得到因特网上传递的分组
  4. 可以伪装成其他用户,比如IP 哄骗

1.7 计算机网络和因特网的历史

纯纯装逼用,以后再看,方便我丢出一大堆人名和名词来提高逼格

1.8 小结

这里想表达的意思就是放轻松,看不懂是很正常的

写于 2025 年 1 月 18 日 15:46:30