缘起
有很多像我一样毕业后转行的程序员,在大学里可能没有系统地学习过计算机的专业课程。
短时间内看,这些东西在工作中也不会接触到。但是作为一个程序员,计算机网络是必备的知识,在排查复杂问题的时候也会用到。
借用耗子叔的话来说:
打个比方,就像《笑傲江湖》里提到的「气宗和剑宗」。
- 剑宗功夫易于速成,见效极快。大家都练十年,定是剑宗占上风;各练二十年,那是各擅胜场,难分上下;要到二十年之后,练气宗功夫的才渐渐的越来越强;到得三十年时,练剑宗功夫的便再也不能望气宗之项背了。
剑宗功夫可以速成,但是后劲不足。如果从长远看,还是气宗更为厉害。
而在编程领域,平常学习的框架就是剑宗,见效很快,马上可以上手工作。而基础知识就是气宗,从长远来看很重要。
所以,现在我决定系统地学习计算机基础知识,用博客记录下来。
首先来看计算机网络,我们的教材是 《计算机网络-自顶向下方法(第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 的接入带宽,但是他没有告诉你跟剩下了好几百个用户共享带宽。那咱们使用的速度能快吗?所以说,共享还是独享是一个重要指标。