本篇介绍计算机网络和因特网的一些基础概念,内容皆总结摘抄自《计算机网络:自顶向下方法》,仅作笔记。
因特网
具体构成描述
因特网是一个世界范围的计算机网络,即它是一个互联了遍及全世界数十亿计算设备的网络。这些设备包括桌面PC、服务器、智能手机、平板电脑、家用电器等等。所有的这些设备都称为主机或端系统。
端系统通过通信链路和分组交换机连接到一起。通信链路由不同类型的物理媒体组成,这些物理媒体包括电缆、铜线、光线和无线电频谱,不同的链路能够以不同的速率传输数据,链路的传输速率以比特/秒(bit/s)度量。当一台端系统要像另一台端系统发送数据时,发送端系统将数据分段,并为每段加上首部字节,由此形成的信息包用计算机网络的数据来说称为分组。这些分组通过网络发送到目的端系统,在那里被装配成初始数据。
分组交换机从它的一条入通信链路接收到达的分组,并从它的一条出通信链路转发该分组。最著名的分组交换机类型是路由器和链路层交换机,这两种类型的交换机朝着最终目的地转发分组。链路层交换机通常用于接入网中,而路由器通常用于网络核心中。从发送端系统到接收端系统,一个分组所经历的一系列通信链路和分组交换机称为通过该网络的路径。
端系统、分组交换机和其他因特网部件都要运行一系列协议,这些协议控制因特网中信息的接收和发送。TCP(Transmission Control Prorocol,传输控制协议)和IP(Internet Prorocol,网际协议)是因特网中两个最为重要的协议。IP协议定义了在服务器和端系统之间发送和接收的分组格式。因特网的主要协议统称为TCP/IP。
服务描述
除了诸如电子邮件和Web冲浪等传统应用外,因特网应用包括移动智能手机和平板电脑应用程序,其中包括即时讯息、与实时道路流量信息的映射、来自云的音乐流、电影和电视流、在线社交网络、多人游戏以及基于位置的推荐系统。因为这些应用程序涉及多个相互交换数据的端系统,故它们被称为分布式应用程序。因特网应用程序并不运行在网络核心中的分组交换机中,而是运行在端系统上。我们无论是使用Java,C++还是Python,都是在开发在端系统上运行的分布式因特网应用程序。而运行在不同端系统上的应用程序或许需要互相发送数据,这时我们就需要使用套接字接口(socket interface)。
与因特网相连的端系统提供了一个套接字接口,该接口规定了运行在一个端系统上的程序请求因特网基础设施向另一个端系统上的特定目的地程序交付数据的方式。因特网套接字是一套发送程序必须遵循的规则集合,因此因特网能将数据交付给目的地。就像寄快递时必须遵循寄件网点的规则:填写收件人地址和联系方式,否则无法寄出,即便寄出,目标也无法收到。
网络协议
协议定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文发送和接收一条报文或其他事件所采取的动作。在因特网中,涉及两个或多个远程通信实体的所有活动都受协议的制约。计算机网络广泛的使用了协议,不同的协议用于完成不同的通信任务。掌握计算机网络领域知识的过程就是理解网络协议的构成、原理和工作方式的过程,因此后续文章很多都涉及到网络协议。
网络核心
网络核心由互联因特网端系统的分组交换机和链路构成的网状网络。
分组交换
在各种网络应用中,端系统彼此交换报文(message)。报文能够包含协议设计者需要的任何东西,可以执行控制功能,也可以包含数据。为了从源端系统向目的端系统发送一个报文,源将长报文分为较小的数据块,称之为分组(packet)。在源和目的地之间,每个分组都通过通信链路和分组交换机传送。分组以等于该链路最大传输速率的速度传输通过通信链路。因此,如果某源端系统或分组交换机经过一条链路发送一个L比特的分组,链路的传输速率为R比特/秒,则传输该分组的时间为L/R秒。
多数分组交换机在链路的输入端使用存储转发传输机制(store-and-forward transmission)。存储转发传输是指在交换机能够开始向输出链路(分组交换机从它的一条入通信链路接收到达的分组,并从它的一条出通信链路转发该分组)传输该分组的第一个比特之前,必须接收到整个分组。
转发表和路由选择协议
路由器由与它相连的一条通信链路得到分组,然后向与它相连的另一条通信链路转发该分组。但路由器可能会有多条通信链路,它怎样决定向哪条链路进行转发呢?
在因特网中,每个端系统具有一个称为IP地址的地址。当源主机要向目的端系统发送一个分组时,源在该分组的首部包含了目的地的IP地址。该地址具有等级结构,当一个分组到达网络中的路由器时,路由器检查该分组的目的地地址的一部分,并向一台相邻路由器转发该分组。每台路由器都有一个转发表(forwarding table),用于将目的地址或目的地址的一部分映射成为输出链路。当某分组到达一台路由器时,路由器检查该地址,并用这个目的地址搜索其转发表,以发现适当的出链路,路由器则将分组导向该出链路。
因特网具有一些特殊的路由选择协议(routing protocol),用于自动地设置这些转发表。例如,一个路由选择协议可以决定从每台路由器到每个目的地的最短路径,并使用这些最短路径结果来配置路由器中的转发表。
电路交换
通过网络链路和交换机移动数据有两种基本方法:电路交换(circuit switching)和分组交换(packet switching)。分组交换之前介绍过,下面介绍电路交换。
在电路交换网路中,在端系统间通信会话期间,预留了端系统间沿路径通信所需要的资源(缓存,链路传输速率)。而在分组交换网络中,这些资源不是预留的;会话的报文按需使用这些资源,其后果可能是排队接入通信线路。举个简单的例子,电路交换就好比我们电话预定餐馆,坏处是必须要提前打电话预定,好处是预定之后我们到了餐馆就可以直接吃饭;而分组交换就是直接去到餐馆,好处是不需要打电话预定,坏处是到了餐馆可能需要排队,等到有空闲餐桌才能入座。
传统的电话网络就是电路交换网络的例子。当一个人通过电话网向另一个人发送信息时,在发送方能够发送信息之前,该网络必须在发送方和接收方之间建立一条连接,此时沿着发送方和接收方之间路径上的交换机都将为该连接维护连接状态。用电话的术语来说,该连接被称为一条电路(circuit)。当网络创建这种电路时,它也在连接期间在该网络链路上预留了恒定的传输速率。既然已为该发送方-接收方连接预留了带宽,则发送方能够以确保的恒定速率向接收方传送数据。
分组交换网中的时延和丢包
因特网能够看成是一种基础设施,该基础设施为运行在端系统上的分布式应用提供服务。理想情况下,因特网服务能够在任意两个端系统之间随心所欲地瞬间移动数据而没有任何数据丢失。然而现实中,计算机网络必须要限制在端系统之间的吞吐量(每秒能传送的数据量),在端系统之间引入时延,也会丢失分组。
分组交换网中的时延概述
分组从一台源主机触发,通过一系列路由器传输,在另一台目的地主机中结束它的历程。当分组从一个节点(主机或路由器)沿着这条路径到后继节点(主机或路由器),该分组在沿途的每个节点经受了几种不同类型的时延。这些时延中最重要的是节点处理时延、排队时延、传输时延和传播时延,这些时延总体累加起来是节点总时延。
为了更好的理解以上几种类型的时延,考虑下面场景:作为源和目的地之间的端到端路由的一部分,一个分组从上游节点通过路由器A向路由器B发送。当分组从上游节点到达路由器A时,路由器A检查该分组的首部以决定它的适当出链路,并将该分组导向该链路(通过路由器B的链路)。仅当在该链路没有其他分组正在传输并且没有其他分组排在该队列前面时,才能在这条链路上传输该分组;如果该链路当前正繁忙或有其他分组已经在该链路上排队,则新到达的分组将加入排队。此场景中的时延分为以下几种:
- 处理时延
处理时延包括检查分组首部和决定将该分组导向何处所需要的时间,除此之外,也包括检查比特级别的差错所需要的时间,该差错出现在从上游节点向路由器A传输这些分组比特的过程中。高速路由器的处理时延通常是微秒或更低的数量级。在这种节点处理之后,路由器将该分组引向通往路由器B链路之前的队列。
- 排队时延
排队时延即分组在链路上排队等待传输时的时间。一个特定分组的排队时延长度将取决于先期到达的正在排队等待向链路传输的分组数量。如果该队列是空的,并且当前没有其他分组正在传输,则该分组的排队时延为0;如果流量很大,并且许多其他分组也在等待传输,则该排队时延将很长。
- 传输时延
在分组交换网中,分组一般都是以先到先服务的方式传输,即仅当所有已经到达的分组被传输后,才能传输刚到达的分组。用L比特表示该分组的长度,用R b/s表示从路由器A到路由器B的链路传输速率。传输时延是L/R。传输时延是将所有分组的比特推向链路(发射)所需要的时间。
- 传播时延
一旦一个比特被推向链路,该比特需要向路由器B传播。从该链路的起点到路由器B传播所需要的时间是传播时延。该比特以该链路的传播速率传播,传播速率取决于该链路的物理媒体,例如光纤、双绞铜线等。传播时延等于两台路由器之间的距离除以传播速率。一旦该分组的最后一个比特传播到节点B,该比特以及前面的所有比特被存储于路由器B。整个过程将随着路由器B的执行转发而持续下去。
传输时延与传播时延是不一样的。将路由器类比高速收费站,车队类比一个分组,传输时延就好像从车队的第一辆车到最后一辆车通过收费站的时间,而传播时延是这个车队从这个收费站到达下一个收费站的时间。
丢包
路由器中只能存储有限的队列,当分组到达该路由器的平均速率大于该路由器的传输速率时,路由器中得排队队列总有满的时候。当队列满时,路由器中就没有地方存储新到达的分组,新到达的分组将被丢弃,即该分组会丢失,也就是我们常说的丢包。
协议层次及其服务模型
因特网是一个极为复杂的系统,包含了大量的应用程序和协议、各种类型的端系统、分组交换机以及各种类型的链路级媒体。这么一个庞大而又复杂的系统,自然需要一个可以良好解释或者讨论的体系结构。网络设计者以分层的方式组织协议以及实现这些协议的网络硬件和软件,每个协议属于这些层次之一。利用分层的体系结构,将计算机网络的功能划分为一些层次,这些层对其上面的层提供相同的服务,并且使用来自下面层次的相同服务,当某层的实现变化时,该系统的其余部分保持不变。
一个协议层能够用软件、硬件或两者的结合来实现,例如HTTP或SMTP这样的应用层协议几乎总是在端系统中用软件实现。协议分层具有概念化和结构化的优点,分层提供了一种结构化的方式来讨论系统组件,模块化使更新系统组件更为的容易。但分层同样有不少缺点,例如某层可能冗余较低层的功能,或者某层的功能需要仅在其他层次才出现的信息等等。
各层的所有协议被称为协议栈,因特网的协议栈由5个层次组成:物理层、链路层、网络层、运输层和应用层。自顶向下方法即指的是先处理应用层,然后向下进行处理。
应用层
应用层是网络应用程序及它们的应用层协议存留的地方。因特网的应用层包括很多协议,例如HTTP(提供了Web文档的请求和传送)、SMTP(提供了电子邮件报文的传输)和FTP(提供了两个端系统之间的文件传送)。某些网络功能例如www.csdn.net易辨别的端系统名字转换为32比特的网络地址也是借助于特定的应用层协议及域名系统(DNS)完成的。
应用层协议分布在多个端系统上,一个端系统中的应用程序使用协议与另一个端系统中的应用程序交换信息分组。我们把这种位于应用层的信息分组称为报文(message)。
运输层
因特网的运输层在应用程序端点之间传送应用层报文。在因特网中有两种运输协议,即TCP和UDP,利用其中的任一个都能运输应用层报文。TCP向它的应用程序提供了面向连接的服务,这种服务包括了应用层报文向目的地确保传递和流量控制(即发送方/接收方速率匹配)。TCP也将长报文划分为短报文,并提供拥塞控制机制,因此当网络拥塞时,源抑制其传输速率。UDP协议向它的应用程序提供无连接服务,这是一种不提供不必要服务的服务,没有可靠性,没有流量控制,也没用拥塞控制。运输层的分组称为报文段(segment)。
网络层
在网络层中的分组称为数据报(datagram)。因特网的网络层负责将数据报从一台主机移动到另一台主机。在一台源主机中的因特网运输层协议(TCP或UDP)向网络层递交运输层报文段和目的地址。网络层包含著名的网际协议IP,该协议顶一个在数据报中的各个字段以及端系统和路由器如何作用于这些字段。IP仅有一个,所有具有网络层的因特网组件必须运行IP。因特网的网络层也包括决定路由的路由选择协议,它根据该路由将数据报从源传输到目的地。因特网是一个网络的网络,在一个网络中,网络管理者能够运行其所希望的任何路由选择协议。尽管网络层包括了网际协议和一些路由选择协议,但通常把它称为IP层,这反映了IP是将因特网连接在一起的粘合剂。
链路层
网络层通过源和目的地之间的一系列路由器来路由数据报,为了将分组从一个节点(主机或路由器)移动到路径的下一个节点,网络层必须依靠该链路层的服务。在每个节点中,网络层将数据报下传给链路层,链路层沿着路径将数据报传递给下一个节点,在下一个节点中链路层将数据报上传给网络层。链路层的分组称为帧(frame)。
物理层
链路层的任务是将整个帧从一个网络元素移动到临近的网络元素,而物理层的任务是将该帧中的一个个比特从一个节点移动到下一个节点。物理层中的协议仍然是链路相关的,并且进一步与该链路的实际运输媒体相关。例如,以太网有很多物理层协议:关于双绞铜线的,关于同轴电缆的以及关于光纤的等等。在每种场合中,跨越这些链路移动一个比特是以不同的方式进行的。
OSI模型
国际标准化组织在20世纪70年代后期提出了“开放系统互连(OSI)模型”,即在以上5层模型的基础上再添加了两层模型。这7层模型由上到下分别为:应用层、表示层、会话层、运输层、网络层、链路层以及物理层。其中表示层的作用是使通信的应用程序能够解释交换数据的含义,这些服务包括数据压缩和数据加密以及数据描述。会话层提供了数据交换的定界和同步功能,包括了简历检查点和恢复方案的方法。
以上简略的介绍一些计算机网络中的名词,后面的文章会详细介绍计算机网络以及Java网络编程相关内容。