欢迎来到TB体育·(中国)手机客户端下载
计算机网络:Internet基本原理(上)TB体育app
栏目:行业动态 发布时间:2023-06-15 08:17:10

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

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

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

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

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

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

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

  在这一小节当中,我们会了解到网络的复杂性。网络不是一个平面就能够构建的,它是一层一层构建的,每一层实现一组特定的功能。然后向上一层,又借助于下层所提供的服务,通过的跟对等层的协议,实体相互交换协议的报文来实现的。

  实现的目的是什么呢?为了向上层提供更好、更优质的服务,所以一层一层地建立。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  换句话说,我的网卡和你的网卡,虽然它们的出生地不同,它们来自于不同的厂商,但是只要遵守同样的标准,就可以互相通信。比如说,苹果生产的爱苹果,华为生产的安卓,还有 linux 操作系统上运行的一个网络服务,他们遵守相同的协议,才可以互相通信。

  协议可以按照它的层次不同,分为不同层的协议,比如物理层、链路层、网络层、传输层实体和应用层协议,而且每一层的协议他要分成若干种。比如 tcp、udp,网络层的 IP,还有一些路由选择协议等等。

  比如,操作系统运行中的一个 TCP 的实体和另一个操作系统中的 TCP 实体;一个服务器的 IP 和另一个服务器的 IP;网卡跟另外一个相邻的网络当中的另外一个网卡,它们都叫对等实体。

  不要以为互联网就是唯一的网络哦,我们还有很多其他的网络。比如银行的专用网络,军用的专用网络,很早之前各种各样的网络都有,互联网仅仅是网络的一种。

  只不过互联网是最普及的网络,它只是几十亿台的设备、几百万个网络所构成的一个复杂网络。

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

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

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

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

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

  关于互联网的演化和进步,你有任何新的想法,都可以向 IETF 提交文档, 组织是一个非盈利的一个组织。他们收到文档之后,会内部讨论一下,如果文档是靠谱的,给他编个号,放在他的网站上。让全球的科学家和工程师对她请求评述。

  互联网所有的这些标准都是以 RFC 文档的形式在 IETF 的网站上发布的,包括 TCP、 UDP、IP ,所有的协议都是这么做的。大家共同建设互联网,共同促进互联网的发展,群策群力地构建一个互联网。所以说互联网的构建方式,和某个标准化机构主导制定的一些标准是不一样。

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

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

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

  我是浏览器,你是服务器。现在我们之间要通信,我向你发一个 pdu (协议数据单元)。

  pdu ,到底是什么格式?有多长?前几个字段是什么字段?每个字段,代表什么样含义?

  比如发送了 00011,代表了我收到你的东西了,我要跟你确认等等。而你这边要解释 00011,只要你的解释跟我的解释是一样的,我们就可以互操作。

  例如你发了是 011 给我,或者是前面 00011 给我。然后你是一个意思,我理解成另外一个意思,那就完蛋了。两者无法互操作

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

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

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

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

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

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

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

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

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

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

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

  我是一个服务器,我运转起来了,我向客户端提供数据库的查询服务和事务的处理的服务。如果客户端比较少,我还能够处理得过来。如果服务器下面挂的客户端非常的多,你让我怎么办?

  再来几个服务器?那好,我弄了一个服务器农场,就像向日葵一样长在整个的机房里。但是服务器一旦增多,周围相应的链路也要增多。而且服务器的载荷太大,就会宕机,一旦宕机,所有的服务都会挂掉。所以说,它最主要的问题是

  可扩展性指的是什么呢?就是说随着请求载荷的增加,它的能力是下降的。而且客户端服务器模式达到一定的阈值的时候,会

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

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

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

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

  一开始大家都是通过 FTP 去分发文件,大家把文件上载到 FTP 服务器文件服务器,向 ftb 的客户端提供服务,这是典型的 CS 模式。

  但是模式存在问题,服务器的扩容总是满足不了用户的请求,所以就产生了 P2P。

  如果我要下载一个文件,文件共有三个片段。在 P2P 模式中,我是向个 Peer 节点请求文件片段,3 条路径同时下载,这样可以获得一个带宽的聚集。

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

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

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

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

  从逻辑上看是我发给你的报文,但是物理上要交给下层。我要交给 ip ,ip 交给网卡,网卡再把编码,把它处理成物理信号,再一跳一跳的到另外一个网卡,再把它变成信号,信号再变成数字等等。不管怎么样,最终会落实到链路当中的物理信号、电磁波的信号、光信号再传输。

  人在江湖飘,哪有不挨刀。传输的过程当中,会受到各种各样干扰的影响,总有可能出错。如果你不加控制,你传输过去,可能对方根本就收不到,或者收到一个错的。

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

  你应用进程非常强悍,是一个强大的服务器,然后内存也很大,网卡是万兆级别的。但是客户端是一个五六年前的某品牌的小手机,运行在一个老版本上。 小手机上的内存也比较小,处理能力也比较弱。如果你发送的太快,对方来不及处理,就会产生问题。

  所以,如果你发送速度太快,对方的 TCP 协议实体会给你一些反馈,让你慢点。如果对方的缓冲区如果还比较空,说你可以发快一点。会有流量控制,协调发送方发送速度和接收方的接收速度,从而让两者能够有序的通行。

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

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

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

  什么叫无连接?应用进程和在另外一个进程之间通信,不需要握手、不需要互相打招呼,发出去的 UDP 报文只要符合规范,另一个进程收到后,就会马上回答。

  个我们把它叫无连接的应用无链接的,服务就是网络基础设施需要应用进程,如果应用进程采用的是 UDP 来交互,基础设施向应用进程所提供的服务,叫无连接的服务。

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

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

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

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

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

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

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

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

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

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

  FDM:通过频分多路复用的这种方式可以发化解为划分为若干小片,两个主机在通讯之前,在每一条链路上找到空闲的一片频率。

  TDM:按照时间来分,把他们的通信能力分解为一个个的以时间为单位的周期。然后,每个周期的第一片被第一个用户所使用,每个周期的第二片被第二个用户所使用,依次类推。

  波分:就是采用光纤通信。他们之间是采用光纤的方法连在一起。把它们之间的可用的波段,可以分为若干个小的波段,每个用户使用其中的一个小波段。

  但是计算机之间的通信具有很强的突发性,我们在上网的时候也不是一直在打字,也不是一直在请求数据。这样的话资源浪费情况比较多,因为我占用的链路,不可以被其他人所使用。

  因为一个线路连接的交换机,要维护很多 piece 和 piece 之间的映射的关系。通常在核心的网络交换设备当中,会达到 10 万级别以上的一个关系维护,如果它一旦宕机了,那就 10 万对的通讯全都玩完。

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

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

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

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

  源主机发送给的数据被封装成一个个的分组,在无连接的网络当中,我们把分组叫数据报。

  每个数据报都先携带了目标主机的完整地址。每经过一个路径的时候,都要把 IP 分组取出来,然后匹配路由表决定往哪个方向转。一跳一跳地存储转发,每个分组独立传送,最终到达目标主机。

  两个主机之间通信之前,要不要建立一个连接网络层的链接?没有。也就是说路由器当中不维护他们通信的状态,

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

  而且虚电路的连接不仅仅体现在源主机和目标主机之上,而且体现在中间所经过的所有实体节点之上。所以我们把连接称之为网络层的连接。

  现在回想一下,我们在介绍 TCP 向应用进程提供服务的时候,它是有连接还是面向连接?

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

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