计算机网络:Internet基本原理(上)

847 阅读39分钟

缘起

有很多像我一样毕业后转行的程序员,在大学里可能没有系统地学习过计算机的专业课程。

短时间内看,这些东西在工作中也不会接触到。但是作为一个程序员,计算机网络是必备的知识,在排查复杂问题的时候也会用到。

借用耗子叔的话来说:

打个比方,就像《笑傲江湖》里提到的「气宗和剑宗」。

  • 剑宗功夫易于速成,见效极快。大家都练十年,定是剑宗占上风;各练二十年,那是各擅胜场,难分上下;要到二十年之后,练气宗功夫的才渐渐的越来越强;到得三十年时,练剑宗功夫的便再也不能望气宗之项背了。

剑宗功夫可以速成,但是后劲不足。如果从长远看,还是气宗更为厉害。

而在编程领域,平常学习的框架就是剑宗,见效很快,马上可以上手工作。而基础知识就是气宗,从长远来看很重要。

所以,现在我决定系统地学习计算机基础知识,用博客记录下来。

首先来看计算机网络,我们的教材是 《计算机网络-自顶向下方法(第7版)》,视频是 中科大郑烇、杨坚全套《计算机网络》 https://www.bilibili.com/video/BV1JV411t7ow?p=1

下面我将带你从0到1,快速过一遍计算机网络的基础知识。现在我们来到第一章 Internet,let‘s go!

概论

目标

主要介绍了什么是计算机。在这一章我们会了解到计算机网络主要的概念和术语,为后面的章节打下一个框架性的一个基础,方便我们后面理解特定的技术术语。

计算机网络的这门课程的第一章,跟其他的的课程太一样。第一章是最重要的一章,都是框架的知识。希望大家要耗费一些时间精力把他熬过去,这一章有很多的新的概念,你可能觉得很痛苦。但是第一章学好之后,后面章节的学习相对来说比较简单一些。

提纲

什么是Internet?

  • 在介绍什么是互联网之前,我们会介绍什么是网络,什么是计算机网络,什么是互联网,它的组成是什么。

什么是协议?

  • 我们会介绍什么是协议。

网络边缘 / 接入网、物理媒体

  • 网络可以分为三个部分。边上、中间、边上和中间结在一起的接入网。我们会分别看一下三个部分的组成作用和它的工作原理。

    • 先从边上讲网络的边缘,然后是把边缘接到网络核心的接入网,以及支撑接入网的的媒体和媒介。

网络核心:分组交换、线路交换

  • 核心的工作方式有两种,第一种叫项目交换,另外一种叫分组交换。

    • 我们会介绍一下,什么是线路交换,什么是分组交换。
  • 他们的工作原理分别是什么,有什么优点缺点。

Internet / ISP结构

  • 这一节中,我们会介绍互联网是一堆的网络构成的,它不是一个平面一个网络。它是由一堆的网络,通过网络互联设备,也就是路由器连在一起的的网络。我们把它称为互联网。

性能:丢包、延时、吞吐量

  • 衡量分组交换网络非常重要的一个指标,还有吞吐量,一些性能指标,它具体的定义是什么?

协议层次、服务模型

  • 在这一小节当中,我们会了解到网络的复杂性。网络不是一个平面就能够构建的,它是一层一层构建的,每一层实现一组特定的功能。然后向上一层,又借助于下层所提供的服务,通过的跟对等层的协议,实体相互交换协议的报文来实现的。
  • 实现的目的是什么呢?为了向上层提供更好、更优质的服务,所以一层一层地建立。
  • 我们会了解到互联网它的层次结构是怎么样的。每一个层次结构的主要作用。

什么是网络?

首先来看一下什么是互联网。

从具体构成角度

电话网,蜘蛛网,社交网络当中的人人之间的朋友关系,都是网。这些网络有什么共同特点呢?和大小形状无关,他们都包括节点和边。我们可以认为,只要包括节点和边的东西,就是网络。

那什么是计算机网络呢?计算机网络是联网的计算机,所构成的系统。

从构成的角度来看,计算机的节点和边节点包括主机节点和数据交换节点。

数据交换节点根据工作的层次不同,又分为交换机、路由器,和高层的负载均衡设备。

而链路,可以按照连接内容的不同来分类,分为 access 和 backbone 接入链路和骨干。

节点

在计算机网络当中,节点又分为主机节点和数据交换节点。

主机节点:主机及其上运行的应用程序;

数据交换节点:路由器、交换机等网络交换设备;

主机节点

主机节点,又叫端节点。它既是数据的源,也是数据的目标。

我们从构成的角度来看计算机网络的一种网络 —— 互联网,它有哪些端节点呢?

PC 、笔记本、 iPad 、智能手机,还有 web 服务器,都是一个主机节点,都是端系统。事实上,大几十亿的端节点都连接在互联网当中。

端系统包括什么呢?包括你计算机本身的硬件、能够把硬件管理起来的操作系统。

但是,光有这操作系统能够支持通信吗?所以,在操作系统之上还有应用进程,驻留的网络应用。比如浏览器,比如手机上的 APP ,类似美团、淘宝之类的网络应用程序。

所以说端系统包括哪些呢?设备本身,能够通讯的网络操作系统,还有在操作系统上面驻留的网络应用程序,这些构成了端系统。

有时候我们把它称之为 end system 端系统,或者我们把它叫 host 主机。

数据交换节点

另外一种节点叫做数据交换节点。他跟主机节点有什么区别呢?它既不是源,也不是目标。

来了分组从一个端口进来,按照一定的工作方式,转发出去。通过这些中转节点的相互配合,最后完成从源节点传到目标节点。

节点有两种类型,在上图中,方的叫主机节点,圆圈的叫数据交换节点。从图中,我们可以看出中转节点的主要作用就是转发。

交换机、路由器

数据交换节点按照工作的层次不同,可以分为中继器,交换机、路由器三层。

如果是交换机,按照目标 MAC 地址决定向哪里转发;如果是一个路由器,通过路由器网卡接收分组,之后,再查路由表决定从哪个方向转发。

比如我们刚刚介绍的路由器和交换机,他们只是工作层次和作用不同。

  • 路由器是工作在网络层,而交换机是工作在链路层。

    • 当然还有更高层的网络交换设备,比如的第四层、第五层的负载均衡设备等等。
  • 路由器是公开网络承载网络交换设备,交换机是工作在链路层的网络转化设备。

    • 还有一些负载均衡设备是工作在更高层的网络设备,它的主要作用也是来了一个数据把它转走,只不过他工作的层次不一样,支撑它运行的协议的层次不一样。

这些设备有什么共同特点吗?

他们也是节点,但它既不是数据的源,也不是数据的目标,它只是数据的中转节点。

边:通信链路

把节点连在一起的,叫什么?链路。

「链路」把主机跟交换节点连在一起,把交换节点跟交换节点连在一起。最后大家构成一个网,然后之间才能够相互的通讯。

然后边也分为两类。第一类是什么呢?

接入网链路:主机连接到互联网

我的主机通过以太网的网线,接到最近的一个交换机,这叫接入网链路。

然后跟另外一个交换节点能够连在一起,你是把主机连在一起的,就是接入链路。

只要跟方的(主机)有关,他就是接入链路。

用方的表示主机节点,圆的表示数据交换节点

如果你不方,两个圆接在一起,那就是主干链路。

主干链路:路由器之间

路由器和路由器之间,交换机和路由器之间的连接,我们把它叫 backbone,就是交换节点之间的主干链路

所以说联网的计算机系统是由节点和边构成的的系统,我们把它叫计算机网络。

通信链路

除了节点之外,还有链路。 把节点间连在一起的,叫做通信链路。链路不仅仅是网线本身,还有在网线光纤之上支持他们运转的链路层的协议。

带宽

链路 link ,非常重要的一个指标,就是带宽。

bps = bit per second 每秒钟传输的字节, 作为它的单位。

协议

互联网的构成,除了硬的节点和边之外,还有一个软的组成,就是协议。

协议的是什么呢?它是支撑互联网工作最重要的一些标准。

  • 各个厂商按照协议来制作、生产网络设备和网络软件产品,它们之间就能够有一个互操作性,就可以互相操作。

    • 换句话说,我的网卡和你的网卡,虽然它们的出生地不同,它们来自于不同的厂商,但是只要遵守同样的标准,就可以互相通信。比如说,苹果生产的爱苹果,华为生产的安卓,还有 linux 操作系统上运行的一个网络服务,他们遵守相同的协议,才可以互相通信。
  • 只有遵守同样协议的这种网络实体才能够相互通讯。类比到人类,如果一个人说德语,另一个说东北话,他们无法形成有效的交流🤔️。
  • 协议的标准定义是什么呢?

    • 对等层实体,在通信过程当中,应该遵守的规则的集合,包括了语法、语义和时序。
  • 协议可以按照它的层次不同,分为不同层的协议,比如物理层、链路层、网络层、传输层实体和应用层协议,而且每一层的协议他要分成若干种。比如 tcp、udp,网络层的 IP,还有一些路由选择协议等等。
  • 什么是对等实体? 不同开放系统上同一层中的实体。

    • 比如,操作系统运行中的一个 TCP 的实体和另一个操作系统中的 TCP 实体;一个服务器的 IP 和另一个服务器的 IP;网卡跟另外一个相邻的网络当中的另外一个网卡,它们都叫对等实体。
  • 从角度看,互联网是什么呢?

    • 以 TCP 协议和 IP 为主的一族协议,由这些协议来支撑其工作的网络就叫互联网。而且互联网也是目前我们在用的世界上,用户最多、覆盖最广的网络。

Internet:“网络的网络“

公共 Internet vs 专用 intranet

  • 不要以为互联网就是唯一的网络哦,我们还有很多其他的网络。比如银行的专用网络,军用的专用网络,很早之前各种各样的网络都有,互联网仅仅是网络的一种。
  • 只不过互联网是最普及的网络,它只是几十亿台的设备、几百万个网络所构成的一个复杂网络。

    • 互联网是一堆的网络连在一起的,有哪些网络呢?比如教育、科研网,还有中国电信、移动的网络这些运营商的网络,他们构成了移动互联的网络,他们通过一些或者是一系列网络交换节点,能够互联互通。

松散的层次结构,互连的 ISP

互联网服务提供商(Internet Service Provider),简称ISP,指的是面向公众提供下列信息服务的经营者:一是接入服务,即帮助用户接入Internet;二是导航服务,即帮助用户在Internet上找到所需要的信息;三是信息服务,即建立数据服务系统,收集、加工、存储信息,定期维护更新,并通过网络向用户提供信息内容服务。

互联网是一堆网络,通过网络互联的设备连在一起的。而且这一堆网络里面有包括很多小网络,这些小网络可以互相连接。

而互联网上的联网设备网络一共有多少几十万,甚至上百万的,几百万的网络连在一起。构成的角度来看,互联网是一堆的网络,通过网络互连设备。

Internet 标准

  • RFC: Request for comments
  • IETF: Internet Engineering Task Force

互联网的标准是以 IETF 发布的 RFC 的文档的形式, RFC 是请求评述, IETF 是互联网工程任务组。

  • 关于互联网的演化和进步,你有任何新的想法,都可以向 IETF 提交文档, 组织是一个非盈利的一个组织。他们收到文档之后,会内部讨论一下,如果文档是靠谱的,给他编个号,放在他的网站上。让全球的科学家和工程师对她请求评述。
  • 互联网所有的这些标准都是以 RFC 文档的形式在 IETF 的网站上发布的,包括 TCP、 UDP、IP ,所有的协议都是这么做的。大家共同建设互联网,共同促进互联网的发展,群策群力地构建一个互联网。所以说互联网的构建方式,和某个标准化机构主导制定的一些标准是不一样。

什么是协议

等层实体在通信过程当中应该遵守的规则的集合,它是一个规范。

下面,我们来对比人类的协议和网络协议,看看有什么相同之处。

人类协议 vs 网络协议

协议,就是人和人之间的通信,也要遵守相应的协议。

  • 举个 🌰

    • 你碰到一个陌生人,你想请求她问你办件事,然后,你嗨过去(请求连接),对方对你冷眼相待,或者默默拒绝了你的招呼,一般来说你就不会请求他的帮忙。
  • 只有对方回应还不错(连接响应),我们才会请求他办具体的事(发送特定的消息),也会接受他给的信息(文件)

互联网当中的所有通讯行为,都受到协议的规范。计算机和计算机的通信更要遵守相应的规范。

都包含哪些规范呢?

格式、次序和动作。

协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及在报文传输和/或接收或其他事件方面所采取的动作

例如一个 web 的浏览器,运行在 PC 机上,web 的服务器运行在这台机器上,它们之间要首先建立起一个 TCP 的连接。

格式

  • 我是浏览器,你是服务器。现在我们之间要通信,我向你发一个 pdu (协议数据单元)。
  • pdu ,到底是什么格式?有多长?前几个字段是什么字段?每个字段,代表什么样含义?
  • 比如发送了 00011,代表了我收到你的东西了,我要跟你确认等等。而你这边要解释 00011,只要你的解释跟我的解释是一样的,我们就可以互操作。
  • 例如你发了是 011 给我,或者是前面 00011 给我。然后你是一个意思,我理解成另外一个意思,那就完蛋了。两者无法互操作

所以说,格式包括语法和语义。

次序 & 动作

另外还包括次序和动作。计算机之间的通信不能想发就发,在特定的动作之后,才可以发送。

  • 我是一个 web 服务器,我收到了来自 web 浏览器的请求之后,我才会向它发送 HTTP 的报文响应。
  • 对方建立起 TCP 的连接之后,就能够收到报文。
  • 收到报文之后,再按照协议的规范解析报文,判断一下,你请求什么样的一个对象,然后我才从本地文件系统当中,这就是另一个动作了。

什么是 Internet:从服务角度

从服务的角度来看,互联网是什么呢?互联网是分布式的应用进程,以及为分布式应用进程提供通信服务的基础设施。

分布式应用

分布式应用是网络存在的理由对吗?如果没有分布式的应用,要不要网络?所以说,分布式的应用是网络存在的理由。

互联网的应用是什么呢?应用是为人类,或者是提供服务的一个各种各样的网络应用,包括电子商务,包括打游戏,包括一些办公系统,这些都是分布式的应用。

应用程序分布在不同计算机上,通过网络来共同完成一项任务。比如Web、VoIP、 email、分布式 游戏、电子商务、社交网络等等。

  • 所以说,如果从应用进程的角度来看,互联网是分布式的。
  • 从应用层以下所有的这些东西都叫基础设施;应用层之上包括了分布式的应用进程。

通信基础设施为apps提供编程接口(通信服务)

基础设施,向分布式应用提供通信服务。基础设施包括了什么?

  • 应用层以下的,所有的协议实体,以及所有的网络。可以认为除了应用,其他都是基础设施。
  • 基础设施向应用进程提供服务的方式有两种,一种是面向连接的服务,另外一种叫无连接的服务。

总结

最后,我们来简单的总结一下

  • 它是从构成的角度来看

    • 节点

      • 主机节点和数据交换节点
    • 包括接入的链路和骨干链路。
  • 把一堆比较关联紧密的节点和边连在一起,会构成一个个的网络
  • 协议
  • 网络的网络

    • 互联网是由一堆网络通过网络,互联设备(路由器),连接在一起的网络的网络。
  • 从服务角度来看互联网

    • 互联网就是分布式的应用,以及为分布式应用提供通信服务的基础设施。
  • 基础设施为分布式的应用提供通信服务,它支撑起了各种各样的网络应用,从而构建了互联网。

    • 基础设施向上层提供的服务可以分为两种

      • 第一种是面向连接的,比如 TCP
  • 另外一种是无连接的服务,比如 UDP

网络结构

以上内容是我们从构成的角度来看互联网,它是一堆的网络,通过互相连接构成的。

我们把互联网拆解开来,从结构的角度分析,可以分为这几个部分:

  • 网络边缘:包含主机和应用程序(客户端和服务器)
  • 网络核心:互连着的路由器 网络的网络
  • 接入网、物理媒体:有线或者无线通信链路

你可以把互联网分为这几个部分,按照组成的类型来把互联网分为一个个的子系统。

那这三个部分到底干吗用?

  • 接入网把边缘的主机系统接入到核心,这样构成了一个任意的网,我们才能够把数据发给另外一个主机。

网络边缘

网络边缘可以分为主机,和跑在主机上的应用进程。

端系统(主机)

处在因特网的边缘部分就是在因特网上的所有主机,这些主机又称为端系统(end system)。

我们来看一下应用进程之间通讯的模式,可以分为两种:客户/服务器模式、对等(peer-peer)模式。

CS 模式

客户端向服务器请求、接收服务。比如 Web 浏览器 / 服务器;email 客户端 / 服务器。

第一种模式叫 CS 模式, CS 指的是客户端服务器模式,例如 web 的浏览器和web 的服务器。

  • 🌰

    • 比如发送电子邮件,我的电子邮件的应用是客户端,是这种应用的客户端,电子邮件的服务器是服务端。
  • 服务器首先运转,守候在相应的端口,等待客户端请求资源。比如硬件资源,计算能力;软件资源,处理能力;还有数据资源等等。
  • 这是一种很典型的主从模式,主是指的服务器,因为所有的资源都在服务器那里,从指的是客户端,它请求的所有的资源都来自于服务器。

问题

这种客户端服务器模式有什么问题呢?

  • 我是一个服务器,我运转起来了,我向客户端提供数据库的查询服务和事务的处理的服务。如果客户端比较少,我还能够处理得过来。如果服务器下面挂的客户端非常的多,你让我怎么办?
  • 再来几个服务器?那好,我弄了一个服务器农场,就像向日葵一样长在整个的机房里。但是服务器一旦增多,周围相应的链路也要增多。而且服务器的载荷太大,就会宕机,一旦宕机,所有的服务都会挂掉。所以说,它最主要的问题是可扩展性差。
  • 可扩展性指的是什么呢?就是说随着请求载荷的增加,它的能力是下降的。而且客户端服务器模式达到一定的阈值的时候,会断崖式地下降。

有没有其他办法,能让客户端和服务器这些应用进程之间产生通讯呢?有的,这就是 p2p 模式。

p2p

p2p 模式不是贷款。

P 是 PEER, 对等体,对等体也是一个分布式应用进程。

🌰

  • 我是一个 Peer,我是迅雷的客户端,是一个对等体。

    • 在一些会话上,我是服务器。别人可以请求我所具备的资源,我可以向他提供服务。
  • 同时,在另一些会话上,我是客户端。我会向另外一个 PEER 节点请求文件的另外一个片段。

这样,任务就被分布下来了。每个节点既是客户端,又是服务器。随着 peer 节点的增多,请求资源的节点越来越多。同时,提供资源的节点也越来越多,而且它的通信怎么是分布式的。

这样,就解决了客户端服务器模式的可扩展性致命的缺陷。因此,在一些文件分发系统当中,这种模式大行其道。

例如我们用到的迅雷,这些分布式的文件分发系统,他就是一个 p two p 的模式。

  • 一开始大家都是通过 FTP 去分发文件,大家把文件上载到 FTP 服务器文件服务器,向 ftb 的客户端提供服务,这是典型的 CS 模式。
  • 但是模式存在问题,服务器的扩容总是满足不了用户的请求,所以就产生了 P2P。

    • 如果我要下载一个文件,文件共有三个片段。在 P2P 模式中,我是向个 Peer 节点请求文件片段,3 条路径同时下载,这样可以获得一个带宽的聚集。
  • 如果大家都是从某个 web 网站下载文件,大家都在向同一服务器请求,在围攻服务器。服务器可能服务了 100 个用户,这样每个客户端只能享受服务器 1% 的服务能力。,带宽下载的带宽是非常慢的。

通信服务

当然,不管是哪种模式,都要借助于基础设施所提供的通信服务,他们之间才能通信。这种通信服务,也分为两种方式。

采用网络设施的面向连接服务

第一种方式是面向连接的通讯方式, 例如 TCP 协议实体向应用进程提供的服务。

握手:在数据传输之前做好准备

分布式应用两者之间要通信,首先要打个招呼说你好,对方说你好,然后底层的协议栈为通信,准备好相应的资源准备。之后,两个应用进程才可以通信。

TCP 向上层提供的服务的特性包括什么呢?

可靠地、按顺序地传送数据:确认和重传

什么叫可靠的,这里交下来是什么,对方就能收到什么。包括哪些要素不重复,不失去,不出错、不乱序。归结成一句话,就是原原本本这里发出来的啥,对方就收到啥。

不了解计算机网络的同学可能会觉得很神奇,怎么会出错呢?

  • 从逻辑上看是我发给你的报文,但是物理上要交给下层。我要交给 ip ,ip 交给网卡,网卡再把编码,把它处理成物理信号,再一跳一跳的到另外一个网卡,再把它变成信号,信号再变成数字等等。不管怎么样,最终会落实到链路当中的物理信号、电磁波的信号、光信号再传输。
  • 人在江湖飘,哪有不挨刀。传输的过程当中,会受到各种各样干扰的影响,总有可能出错。如果你不加控制,你传输过去,可能对方根本就收不到,或者收到一个错的。

所以,要靠 TCP 的实体本身的努力。下层提供的服务不可靠,而我 TCP 要上层提供可靠的服务。

  • 那 TCP 怎么努力呢?
  • 我们在讲到传输层的时候,会看 TCP 的一系列的机制。

    • 比如发送方发送出去要缓存,之后,才可以重新传递。你没缓存,你无法重传,无法检测重传,无法超时重传。
  • 发出去的东西还要编号,因为对方要按照编号排序。
  • 。。。

在后面讲到传输层的时候,会给大家做一个详细的介绍。

流量控制:发送方不会淹没接收方

然后还有一个机制叫流量控制。什么叫流量控制?

  • 你应用进程非常强悍,是一个强大的服务器,然后内存也很大,网卡是万兆级别的。但是客户端是一个五六年前的某品牌的小手机,运行在一个老版本上。 小手机上的内存也比较小,处理能力也比较弱。如果你发送的太快,对方来不及处理,就会产生问题。
  • 所以,如果你发送速度太快,对方的 TCP 协议实体会给你一些反馈,让你慢点。如果对方的缓冲区如果还比较空,说你可以发快一点。会有流量控制,协调发送方发送速度和接收方的接收速度,从而让两者能够有序的通行。

如果两个应用进程采用 TCP 进行通信, TCP 协议实体能够自动的根据协议,来协调发送的速度和接收的速度,以至于不让方发送的速度太快,超过了接收方的处理能力。这就叫流量控制

拥塞控制:当网络拥塞时,发送方降低发送速率

在发送的信息过程中,你需要经过网络核心当中的所有的交换节点和链路。

  • 如果这条链路上的用户比较多,堵塞了,还可以继续发送吗?

    • 答案是不行。因为,如果某条链路堵了,交换节点处理不过来,就会直接扔掉部分信息。
  • 那话,发出的东西不就丢了吗?所以,除了考虑到接收方的处理能力之外,还要考虑到网络路径的通行能力。

tcp 就有一个拥塞控制的特性。

  • TCP 实体能够感知到路径当中的一个通断的情况,如果比较通畅,说应用进程你发的快一点儿,咱们 hold 的住。如果这条路径比较堵塞,它会告诉应用进程说你慢点,上面的路都堵了。

所以说采用 TCP 的传输两个应用进程,除了通信之前要握手之外,他还自动具备了几个特性。第一,可靠、保序,第二流量控制。第三拥塞控制。

采用基础设施的无连接服务

当然除了 TCP (传输控制协议)之外,还有 UDP (用户数据报协议)。

  • 无连接
    • 守护在 UDP 之上的两个应用,他们之间的通信是无连接的。
  • 什么叫无连接?应用进程和在另外一个进程之间通信,不需要握手、不需要互相打招呼,发出去的 UDP 报文只要符合规范,另一个进程收到后,就会马上回答。
  • 个我们把它叫无连接的应用无链接的,服务就是网络基础设施需要应用进程,如果应用进程采用的是 UDP 来交互,基础设施向应用进程所提供的服务,叫无连接的服务。
  • 交上来就发送对方,那就直接回应。
  • 不可靠数据传输

就是说除了无连接之外,还有其他一些特点。比如数据传输是不可靠的,只要数据发出去就行了,丢了就丢了。

  • 无流量控制 / 无拥塞控制

这些应用可能不在乎数据是不是丢失了,丢了一个,又何妨我下个周期再传。

是这意思,然后也没有流量控制,我也不管,他就上面来的速度多快,我网络当中注入的速度有多快,也没有拥塞控制,所以说非常简单。

那你说 UDP 向应用进程提供的服务是无连接不可靠,没有流量控制,没有拥塞控制。

要你何用?

那问题是 UDP 有这么多的缺点,要你何用?

  • UDP 是不可靠。 但是,如果你要确保可靠,就需要花费其他的代价。
  • 如果你的应用跑在 TCP 上面。一会要考虑对方的感受,一会要考虑到网络的感受。你为别人考虑多。你对别人都很好,你自己要付出很多的努力,要排序,要编号,又要定时重传。
  • 这些都要耗费时间的代价,一些应用可接受不了,比如实时多媒体应用。

所以说基本上没有什么好和坏,只有适合不适合。

TCP vs UDP

总结一下

  • 可靠性要求比较高的应用跑在 TCP 之上。
  • 还有一些应用是跑在 UDP 之上的。

    • 例如我们刚才讲的实时多媒体,实时流媒体的应用。
  • 还有一些事务性的应用,例如域名解析的查询。因为这些应用的事务性很强,一次来回的查询信息传输就结束了,如果采用 TCP 比较浪费资源。

网络核心

网络核心是数据交换的功能源。主机把数据发出去,并且正确地传达到目标主机。

那问题来了,怎样实现网络核心的功能 —— 数据交换?

有两种方式,电路交换 Circuit switching 和 分组交换 packet switching 。

当然,我们互联网和几乎所有的网络都是采用的分组交换, Circuit switching 起来基本上是用于电话网。

那为什么要把 Circuit switch 做个介绍呢?主要是为了对比,让大家更清楚的了解分组交换的工作原理。

电路交换 Circuit switching

传统电话网络

当你打一个电话时,端到端的资源被分配给从源端到目标端的呼叫。也就是说,在网络核心中,为你们之间的通讯分配一条独享的线路,靠信令,靠控制信息,也就是拨号,建立起一项独享的线路。

所以说,两个主机在通讯之前,要通过一个连接建立的一个过程,让两个主机在这里,当中的两个电话建立起一个独享的线路之后,双方就可以利用独享的线路来进行一个双向的通信了。就像图里那样。

为呼叫预留端-端资源

构成一个从源到目标的一个独享的线路。

  • 🌰 你把电话拨通了,你们沉默不语,电信公司也会收你的费。为什么呢?因为源主机和目标主机之间他们为你分配了独享的线路。
  • 因为是你们独享的线路,所以性能有保障。

    • 但事情从来都是有两面性的,这种交换网络通常是被传统的电话网络所使用,比较浪费资源。
  • 在通信之前,要求建立呼叫连接。

    • 两个主机要耗费一个线路建立的时间,这对于通话来说是可以忍受的。在国内,建立连接的时间大概是一两秒钟,通话会持续若干分钟,所以通信建立的时间对于整个通话时间占比很小。
  • 但是计算机的通讯如果采用了 2 秒的连接时间,可能 1 秒就搞定了通信,所以不太适合于计算机之间通信的原因。

网络资源(如带宽)被分成片

就是说我跟你就是数据交换节点,咱们俩之间呢有个很宽的链路,把我们连在一起。为了提高资源利用率,网络资源会被分成片。

然后为每个呼叫分配片,如果某个呼叫没有数据,则其资源片就处于空闲状态,不会共享。

  • 那采用什么方法把它分解成一个个 piece 呢?
  • 可以有这样一些分配的方法,频分( Frequenc division multiplexing) 、时分(Time- division multiplexing)、波分(Wave- division multiplexing)。

    • 频分,分频率;时分,分时间;波分,光纤通信,划分光波。
FDM 与 TDM

  • FDM:通过频分多路复用的这种方式可以发化解为划分为若干小片,两个主机在通讯之前,在每一条链路上找到空闲的一片频率。
  • TDM:按照时间来分,把他们的通信能力分解为一个个的以时间为单位的周期。然后,每个周期的第一片被第一个用户所使用,每个周期的第二片被第二个用户所使用,依次类推。
  • 波分:就是采用光纤通信。他们之间是采用光纤的方法连在一起。把它们之间的可用的波段,可以分为若干个小的波段,每个用户使用其中的一个小波段。

电路交换不适合计算机之间的通信

线路交换是不太适合与计算机之间的通信的,为什么呢?

  • 首先,线路交换需要很长的建立连接的时间。

    • 🌰 两个主机,通讯建立时间花了 500 毫秒,然后通讯只用了 1 毫秒,当然划不来了。但是秒一级的线路建立时间,对于计算机通讯而言,就是一世纪,非常漫长。
  • 另外一方面,
  • 计算机间通信具有很强的突发性。

    • 如果我跟你建立起一个线路,线路都是独享的,那只要连接着运营商就会收费。
  • 但是计算机之间的通信具有很强的突发性,我们在上网的时候也不是一直在打字,也不是一直在请求数据。这样的话资源浪费情况比较多,因为我占用的链路,不可以被其他人所使用。
  • 可靠性不高

    • 因为一个线路连接的交换机,要维护很多 piece 和 piece 之间的映射的关系。通常在核心的网络交换设备当中,会达到 10 万级别以上的一个关系维护,如果它一旦宕机了,那就 10 万对的通讯全都玩完。
  • 所以,采用这种方式来构建计算机网络,最核心的那个节点被损毁,影响的主机对之间的通信范围就会非常的广。

分组交换

除了采用线路交换的方式,还有哪种方式?可以让主机和主机之间通过网络核心来完成它们之间的通信呢?

分组交换 packet switch

  • 主机和主机之间的通信的数据被分成一个个的分组 pocket,以分组为单位存储-转发,分组每次移动一跳(hop)

    • A 和 B 之间的通信,有千言万语要说,十个 G 的文件要传,分组交换的方式会把它打成一个个的分组, 然后再一个个的传递。
  • 不再将节点和节点之间的通信链路分成一个个的 piece,要用就全用。
  • 包在越过每一个通信链路的时候,到了每个节点,会把它完全存下来之后再转发。以分组为单位,在每一个节点的时候,要进行一个存储转发的方式,最终由源主机传到目标主机。
  • 资源可以共享,按需使用。

    • 在每个交换节点当中,耽误的时间延迟比线路交换要多的多,但是换取了共享性的好处。
  • 不用的时候,就不占用网络的资源,有数据的时候,才占用网络资源。

排队延和丢失

如果分组到达的速率 > 链路的输出速率

  • 分组将会排队,等待传输。排队延迟。
  • 如果路由器的缓存用完了,分组将会被抛弃。分组丢失。

所以,任何事情都有两面性,分组交换的好处是共享,坏处是排队延迟和可能丢失。

关键功能:转发和路由

对于分组交换网络而言,网络的核心最主要的作用有两个,转发和路由。

路由是一个全局的。转发,是一个局部的。什么意思呢?

  • 我是一个分组交换机。从某一条链路端口出来一个分组,我先把它存下来,然后查路由表决定从哪个方向哪个链路转发。存储、转发。
  • 路由表哪来的呢?

    • 是路由实体算出来。运行中的路由模块跟其他路由器交换路由信息。然后算出来路由表。
  • 靠路由器,局部的转发功能和全局的路由功能相互配合,实现最终一个数据交换的网络。

    • 源主机把分组放出去,目标主机瞬间收到层层传输过来的数据。对他们两端而言,好像瞬间的有个切换开关,把它们连接在了一起。

统计多路复用

分组交换,是一种时分的多路复用。

  • 🌰 上图中,A 和 B 两个相邻的节点,把链路上的时间资源分成一个个的周期,每个周期分成若干个小片,每个周期绿色的给 A,蓝色的给 B 用。
  • 只不过划分时间片的方式不是固定的,我们把这种多路复用的方式,称之为统计多路复用就 statistical multiplexing。

两种工作方式

在分组交换中,分组的存储转发一段一段从源端传到目标端,可以按照有无网络层的连接,分成两种工作方式—— 数据报网络、虚电路网络。

数据报( datagram)的工作原理

  • 源主机发送给目标主机的分组,携带了目标主机的完整地址。
  • 交换节点收到分组之后,根据每个分组所携带的有目标主机的完整地址来存储、转发
  • 两个主机在通讯之前不需要握手,每个分组的传递都是独立的,交换节点不用维护通讯状态。

我们把这种分组交换的方式称之为数据报 datagram。

🌰 是不是有点像寄信呀。每封信都写了接收人的完整的地址,并且寄信公司对每封信都是独立处理的。

🌰 上图的例子

  • 源主机发送给的数据被封装成一个个的分组,在无连接的网络当中,我们把分组叫数据报。
  • 每个数据报都先携带了目标主机的完整地址。每经过一个路径的时候,都要把 IP 分组取出来,然后匹配路由表决定往哪个方向转。一跳一跳地存储转发,每个分组独立传送,最终到达目标主机。
  • 但源主机传送给目标主机的一系列分组,有可能走的是不同的路径。 因为路由表有可能变。
  • 两个主机之间通信之前,要不要建立一个连接网络层的链接?没有。也就是说路由器当中不维护他们通信的状态,是无状态的路由器
虚电路( virtual circuit)的工作原理

虚电路指的是什么呢?就像打电话一样。

  • 主机和目标主机通讯之前要握个手,握手干什么呢?在交换节点之间,保持它们的通信状态,建立起一条虚拟的线路。
  • 虚拟线路建完之后,然后每个分组携带了一个虚电路号,而不是目标主机的一个完整地址。
  • 每个分组按照序列符号来标识到每个交换节点的时候,往哪个方向转发。

所以说,虚电路跟数据报有什么差别?

  • 数据报是无连接,每个分组独立传送的,交换节点不用维护通讯状态。
  • 而虚电路,在每个交换节点当中都有相应的标识。

🌰

在上图中,主机 H1 跟主机 H4 在通讯之前,要建立起虚电路。A 到 B 的虚电路, B 到 C 的虚电路, C 到 D, D 到 H4 的虚线路。

  • 虚电路怎么建立起来的?

    • 靠信令控制信息的传递。
  • 你看节点 A 这一个个的表项分成两块,输入部分,输出部分。输入部分也分成两块,来自于哪、在第几号虚电路。输出部分也分成两块,往 B 走还是往 E 走、走第几号虚电路。
  • 一跳一跳存储转化,最终到达目标主机 H4。
  • 在过程当中,虚电路号是有可能变化的。
  • 而且,虚电路所经过的交换节点当中,都有标识,维护了他们之间通信的状态。

总结:网络分类

最后我们总结一下,整个通信网络按照电路交换网络分组交换网络来工作。

  • 电路交换网络

    • 可以按照划分 piece 的方式,分为 FDM、TDM
  • 分组交换网络

    • 可以分为虚电路网络和数据报网络

      • 虚电路是有连接的,数据报是无连接的。
  • 而且虚电路的连接不仅仅体现在源主机和目标主机之上,而且体现在中间所经过的所有实体节点之上。所以我们把连接称之为网络层的连接。
  • 现在回想一下,我们在介绍 TCP 向应用进程提供服务的时候,它是有连接还是面向连接?

    • 面向连接的。因为连接仅仅体现在端系统的 TCP 的实体上,中间的路由器不维护通讯状态,所以称之为面向连接,而不是有连接。

接入网

那么我们前面介绍了边缘和核心,现在来看一下如何边缘接入核心 —— 接入网。

怎样将端系统和边缘路由器连接?

那么接入网起到什么作用呢?

  • 把网络边缘的端系统通过接入网接入到网络核心。这样网络核心能够完成数据交换的功能,从而在源主机和目标主机之间能够实现通信。
  • 除了这种有线的接入方式之外,还有很多无线接入的方式,无线接入的方式又分为无线局域和无线广域。
  • 接入网有两个个非常重要的一个指标

    • 带宽 bps,每秒钟到底能传输多少数据。
  • 是共享的,还是专用网络?

    • 通过这个中国电信的这个光纤接入到电信的这个网络交换设备,是独享的。如果是通过有线电视公司提供的服务接入网络,那就是共享的。
  • 有些接入公司告诉你,我的网络能够达到数百兆 bps 的接入带宽,但是他没有告诉你跟剩下了好几百个用户共享带宽。那咱们使用的速度能快吗?所以说,共享还是独享是一个重要指标。