《计算机网络:自顶向下方法》逻辑线上

写在前面:

虽然是在疫情期间,但计算一下时间,也差不多该期中考试了,就在这里复习一下我学习的《计算机网络:自顶向下方法》这本书。

我复习的时候,习惯使用一种“珍珠项链”的方法,到不能说自己原创,但是很少看到身边的人用过。简单地将,就是将所有的重点提炼出来,就像一颗颗珍珠,然后找出每一章之间的逻辑线,将所有的珍珠一颗一颗地串联起来,构成一串美丽的项链。

首先,看书的题目,很明显我们要学习的是“计算机网络”这个概念,而学习的顺序和方法则是“自顶向下”方法。那么首先,先看一下什么是计算机网络。

提到计算机网络,最先想到的肯定是因特网,那么我们就要首先理解一下什么是“因特网”。这个时候我们有两种理解方式,第一种理解他的物理构成,第二种是理解他的功能服务

首先来看因特网的具体构成。因特网是电脑的网络,所以肯定是包括由大量互联的计算设备构成的端系统;而端系统之间需要线路进行链接,也就是通信链路。在通信链路中需要专门的参数来衡量他的性能,即衡量传输速率和性能的是带宽,单位为bps,即每秒所传输的比特位数。而在通信链路上传输的数据是分组,当一台端系统向另一台端系统发送数据时,发送端系统将数据进行分段,并为每一段加上首部字节,由此形成的信息包称为分组;而通信链路可能会发生相交(如果全是一对一会非常的费时费力),所以就需要另一个硬件分组交换机,他的一条入通信链路接受到达的信息包(分组),并从他的一条出通信链路转发该分组,类似于一个交通枢纽,一个区域内的所有主机链接到一个分组交换机,分组交换机之间相互连接构成网络。

也就是说,我们可以说:从发送端系统到接收端系统,一个分组所经历的一些列通信链路和分组交换机称为通过该网络的路径,而计算机网络=端系统+通信链路+转发设备(分组交换机),即通过交换网络互连主机

而只有了物理硬件是不够的,还需要软件上的协议和应用支持。端系统通过因特网服务提供商(ISP)接入因特网,而每一个ISP是一个由多个分组交换机和多段通信链路组成的网络。端系统通过接入ISP连接到Internet(低层ISP),接入ISP必须进一步互连,这样任意两个主机才可以互相发送分组。ISP之间的互连可以通过对等链路或者iXP(互联网交换节点)实现。

然后来看因特网的功能服务。因特网可是被看做通信的基础设施,将信息从一个端系统传送到另一个端系统。网络可以为不同的网络的应用提供不同的网络服务,注意,这些网络应用程序不运行在网络核心的分组交换机,而是请求的端系统。而与因特网相连的端系统提供了一个应用程序编程接口(API),本质上上是一套发送软件必须遵守的规则集合,使用网络和从网络接收消息的接口,是网络向应用开放的接口

因特网是一种基础设施,新应用程序正在其上不断地被发明和设置

看完了因特网是什么,我们就开始以因特网来学习计算机网络。首先,我们看一下他的硬件是怎么实现的。

上文已经说了,因特网是计算机的互联网络,但是,并不单单是计算机的互联,也有很多的中间部分,这也就导致了网络可以分为三部分:网络边缘(主机,网络应用)、接入网络(网络传输介质,即有线无线通信链路)、网络核心(互连的路由器和交换机)

首先来看网络边缘。端系统位于因特网的边缘,包括桌面计算机、服务器和移动计算机,端系统也被称为主机,因为他们容纳(运行)诸如web浏览器程序、web服务器程序、电子邮件阅读程序或电子邮件服务器程序等应用程序。

而在两个计算机通过互联网进行交互的时候,就会需要一种模型,来描述这两个计算机的动作,就是客户机与服务器模型P2P模型。下面先大体的看一下:

客户机与服务器程序/模型:即所谓的CS模式(客户机-服务器模式)。客户及程序是运行在一个端系统上的程序,它发出请求,并从运行在另一个端系统上的服务器程序接受服务。客户机只能发送请求,服务器只负责提供服务,客户机与客户机不能直接通信

对等(P2P)应用程序/模型:两者之间是对等的,即其中的端系统互相作用并运行执行客户机和服务器供能的程序,两者既可以提供服务又可以请求服务

然后,我们再看一下接入网络。接入网络实际上就是将端系统连接到其边缘路由器的物理链路,边缘路由器是端系统到任何其他远程端系统的路径上的第一台路由器。接入网络的三种方式:住宅接入、企业接入、移动无线接入。不同接入方式的带宽有区别,以及分为共享和独占两种

首先看住宅接入。是一种点对点接入,将家庭端系统与边缘路由器相连接,家用调制解调器将PC输出的数字信号转换为模拟形式,以便在模拟电话线上传输。一般由双绞铜线构成,就是用于普通电话的电话线。此时,接入网络仅仅是连同一条点对点拨号电话线一起的一对调制解调器

由于电话线会导致上网与通话的冲突,现在对宽带住宅区有两种新类型:数字用户线DSL混合光纤同轴电缆HFCASDL是非对称数字用户线路

DSL类似于拨号调制解调器,是一种新型调制解调器技术,通过限制用户和ISP调制解调器之间的距离,可以以高得多的速率实现传输和接收数据,但是传输速率(传出与接收)可能是不对称的(ADSL)。是一种多路复用技术。DSL在家庭和ISP之间将通信链路划分为3个不重叠的频段:高速下行(50KHZ-1MHZ)、中速上行(4KHZ-50KHZ)、普通的双向电话信道(0-4KHZ)。这使得单根DSL线路看起来就像有三条单独的线路,因此电话呼叫和因特网链接可以同时共享DSL链路。用户可用的实际下载和上载传输速率是家庭调制解调器和ISP调制解调器之间的距离、双绞线规格、电磁干扰强度等因素的函数。

DSL被明确设计为用户和ISP调制解调器之间的短距离的传输,因此允许比拨号接入高得多的传输速率。频段的大小(带宽)越大,传输速率越快(相当于路很宽)

HFC与DSL类似,都需要特殊的调制解调器,即电缆调制解调器,是一种频分多路复用(不同频带<载波>上传输不同频道),电缆调制解调器将HFC网络划分为两个信道,即下行信道和上行信道,与DSL类似,下行信道通常分配了更大的带宽,因而有更快的传播速率**(所以一般下载比上传快)**

HFC的重要特征是他共享广播媒体。也就是说所有用户共享一个宽带,一根线上有很多个用户。因为上传信道也是共享的,需要一个分布式多路访问协议,以协调传输和避免碰撞。HFC各家庭共享家庭至电缆头端的接入网络,然后电缆(光纤)接入ISP路由器,而DSL独占只中心局的接入

那他们的区别是什么呢?DSL是在家庭和ISP之间建立了一条点对点连接,因此所有的DSL带宽都是专用的而不是共享的,不会有因为使用者增加导致速度变慢的情况;HFC电缆如果能够覆盖范围合理的HFC网络将会提供比DSL更大的带宽,因为HFC本身不需要分一些给电话通信,所以本身的速度快于DSL,但当用户很多的时候会竞争。

接入网络的物理媒体分为两类:导引性媒体(电波沿着固体媒体被引导,就是有线介质)和非导引型媒体(电波在空气或外层空间中被传播,就是无线介质)

最后,我们看一下网络核心。网络核心是由**中转设备(路由器)**组织起来的,覆盖很大区域,其核心的问题是如何让数据从原路由器到目的路由器,网络核心就是互连的路由器网络,关键功能是路由(确定分组从源到目的传输路径)和转发(将分组从路由器的输入端口交换至正确的输出端口)

所以,我们可以说网络核心通过数据交换实现数据从源主机通过网络核心送达目的主机

上文提到了,端系统之间最直接的连接方式是两两直接物理链路相连,但由于N2链路问题,需要链路N(N-1)/2。所以需要交换设备,即网络核心

输方式主要有电路交换(传统电话)和分组交换(计算机网络)。路由器有一个路由转发表(本地转发表),规定了去目的地址需要走哪一条链路。

首先来看一下电路交换。在电路交换网络中,沿着端系统通信路径,为端系统之间通信所提供的资源在通信会话期间会被预留。每次进行实际数据交换之前要进行端到端资源预留,资源预留包括链路带宽和交换带宽,一旦资源已经分配,资源就成了专用的,即资源独占资源预留后获得可保证的性能,资源复用(划分)方式包括频分复用和时分复用,这个和资源独占是不冲突的,在用户看来,他独占了整个资源

网络必须在发送方和接收方之间建立一个连接,这是一个真正意义上的连接,此时之间路径上的交换机都将为该连接维护连接状态,即一条电路,当网络创建这条件路的时候,也在该网络链路上预留了带宽,即预留了恒定的连接期间的传输速率,因此发送方能够以确保的恒定速率向接收方传送数据。

电路交换可以划分为三个阶段:呼叫(电路)建立阶段,建立连接;通信;电路拆除,释放连接。

注意链路与电路的区别,一条链路可以有很多条电路,为了解决多用户访问同资源的复用问题,链路中的电路要么通过频分多路复用(FDM)实现,要么通过时分多路复用(TDM)实现

a、频分多路复用:链路的频谱由跨越链路创建的所有连接所共享,特别是,该链路在链接期间为每条连接(电路)专用一个频段,改频段的宽度被称为带宽。

b、时分多路复用:时间被划分为固定区间的帧,并且每帧又被划分为固定数量的时隙,每当网络跨越一条链路创建一条连接的时候,该网络在每个帧中位该连接之顶一个IE时隙,这些时隙专门由该连接单独使用,一个时隙可以用于传输该链接的数据。每个电路在循环的TDM帧中被分配相同的专用时隙。一条电路的传输速率等于一个时隙中的比特数乘以该帧的速率。

一个连续性的得到部分带宽,一个周期性的得到所有带宽,但总会带宽损失

这里有两个重要的延时需要区分:传播延时和传输延时

传播延时:第一个字节从始点到终点所用的延时
传输延时:把数据放到链路所用的时间(格式转换等)

然后看一下分组交换。什么是分组呢?各种应用程序在完成其任务时需要交换报文,报文能够包含协议设计者需要的任何东西,报文可以执行一种控制功能,或者能够包含数据。源主机将长报文拆分为较小的数据块,并称之为分组,即。每段会加上首部字节,这个不是给用户看的,而是给每一层的转发器进行处理的。

分组通过一系列通信链路传输,但分组被送往网络而不必预留任何带宽,如果此时其他分组需要同时经过某链路发送,链路将会变得阻塞,因此分组不得不进行等待,从而形成时延。因特网尽力而为的以实时的方式传递分组,但不能做出任何确保。因此我们可以说:分组以链路的最大传输速率在通信链路上进行传输,分组交换资源利用率高,但不一定能够保证服务质量

分组交换中资源不会发生预留,分组交换以竞争的方式按需使用资源,竞争会带来拥塞、数据排队、数据丢失。因此分组交换中的基本交换方式是存储转发:任何时候任何一个节点在接收到全部数据之后才会向下一个节点转发。因此产生的时间延时称为存储转发时延。 所以我们可以说:分组交换的性能取决于当前用户数

简单地讲,就是两家餐厅,一家需要预定,一家不需要预定但是不能保证可以进行安排

但是,还有一个问题,就是分组是怎样通过分组交换网络形成通路的呢?实际上就在问路由器如何确定他应该向哪一条链路进行转发

每个通过网络传输的分组(包)在他的首部包含了其的目的地址,该地址是一种层次结构,当分组到达一台路由器时,该路由器检查分组的目的地址的一部分,并向相邻路由器转发该分组。

每个路由器具有一个转发表,用于将目的地址(或者目的地址的一部分)映射到输出链路。当分组到达一台路由器时,该路由器检查目的地址,并用这个目的地址搜索转发表,以找到合适的输出链路。并将该分组导向输出链路

因特网具有一些特殊的选路协议,用于自动的设置转发表。如可以决定从每台路由器到每个目的地的最短路径,并使用最短路径进行配置

这个时候,我们就要牵扯到一个ISP的概念了,实际上上文中提到了,就是因特网服务提供商。而我们这里也说了,就可以理解为一个小的分组交换网络。坐落在因特网边缘的接入网络通过分层的ISP层次结构与因特网的其他部分相连,接入ISP位于层次结构的底部,层次结构的最顶层是数量相对较少的第一层ISP。

然后,我们来分析一下分组交换网络中的时延。之所以不分析电路交换网络是因为太简单了,仅仅是带宽来决定,而分组交换网络是计算机网络的主要应用,而且某些时刻时延比较复杂,所以在这里进行分析。

首先明确一个定义“吞吐量”,就是每秒能够传输的数据量

在分组交换网络中,节点处理时延、传输时延和传播时延是一直有的,当到达速率超过链路允许输出的最大速率的时候,还会有排队时延,这些时延加起来就是节点总时延,即端到端时延

我自己总结出来的分组交换公式为:所有分组下放到第一个路由器的时间+最后一个分组从第一个路由器到达目的地址所需要的时间

a、处理时延:当交换设备接收到设备时要检查数据是否出错,还要决定数据会被转发到那条线路上,毫秒微秒级别。
b、排队时延:每个输出上都有个缓冲的部分(队列);排队时延的大小取决于转发设备当前拥塞状况,注入速率块,输出慢就要排队,毫秒微妙级别。到达组的分组数量是到达该队列的流量的强度和性质(即流量是周期性到达还是突发性到达)的函数。
c、传输时延:将一个比特推送到链路上所花费的时间叫传输时延,传输时延和链路带宽有关,也叫发送速率,毫秒微妙级别。传输时延又叫存储转发时延,是将所有分组的比特传输向链路所需要的时间。
d、传播时延:将比特从线路的一端传到另一端所需要花费的时间,与链路长度、速率有关,毫秒级别。从链路的起点到路由器转播所需要的时间。
e、传输与传播的区别:常说的网络带宽指的是传输速率(发送速率);传输时延与路由器之间的距离无关,传播时延是两台路由器之间距离的函数。类比于高速公路收费站收费时间(传输时延)和车在高速上跑的时间(传播时延)。
f、最大吞吐量:一台路由器能够转发分组的最大速率

而由于排队时延会导致丢包,所以在设计的时候,需要考虑一个流量强度的概念:

设链路带宽(输出带宽)为R(理解为比特从队列中推出的速率bps),分组大小为L比特,分组到达队列的平均速率为a(每秒分组pkt),则比特到达队列的平均速率是La bps,假定队列很大,那么流量强度就是(L*a)/R,他决定排队时延。当他大于1时,比特到达队列的平均速率超过传输速率,因此必须要求,设计系统时流量强度不能大于1。我们需要事先规定用户量。

平均吞吐量是文件总比特/文件接收总时间

吞吐量的影响因素是取决于瓶颈链路。瓶颈链路就是带宽最小的链路。

下面我们需要学习他的软件部分,即网络应用和网络协议

先来看网络协议。首先我们要明白什么是网络协议

网络协议就是计算机网络中数据交换必须遵守的规则,好比交通系统。报文的发送和接收,以及当这些报文发送和接收时所采取的一些列约定俗成的动作,就是网络协议的核心

那么,网络协议有什么用呢

网络协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及在报文传输和接收时其他时间方卖弄所采取的动作。这个协议实际上我们可以人为随意定制(私有协议),而目前比较公认的就是TCP/IP协议(公有协议)。即协议定义了网络实体之间信息的发送和接收的格式、意义、顺序以及接受或传输相应信息时所应采取的动作。

或者说一句话——协议规范了网络中所有信息发送和接收过程

那么,网络协议由哪些组成呢

网络协议的三要素:
a、语法:数据与控制信息的结构或格式,或者信号电平
b、语义:需要发出何种控制信息,完成何种动作以及做出如何响应,差错控制
c、时序:事件顺序和速度匹配

这只是对网络协议的一个大致的描述,可以看到协议是一个很笼统的概念,而我们的前辈们为了让这个网络能够比较清楚,进行了分层。

每个层次与其下面的层次结合在一起,在这层中执行了某种运动,也可以使用直接下层的服务。只要该层对其上层提供相同的服务,并且使用来自下面层次的相同服务,当某层的实现变化时,该系统的其余部分就可以保持不变。

相应的,协议也进行了分层。以分层的方式组织协议以及实现这些协议的网络硬件和软件。每个协议属于一层。

一系列的层和网络协议组成了网络结构

协议栈:特定网络系统的一系列协议,或者说各层的所有协议。因特网的协议栈由5个层次组成:物理层、链路层、网络层、运输层、应用层。

下面来看看这几层:

a、应用层:应用层是网络应用程序及其应用协议(如http、DNS<域名系统>、SWTP<电子邮件的报文传输>、FTP<两个端系统间通信>)存留的地方。应用层的功能是为两端系统中的应用程序交换报文。支持用户通过用户代理(如浏览器)或网络接口使用网络(服务)实现应用于应用之间的规范,这个应用不在同一个端系统上。只需要规范传输到应用的信息。即宏观上的两个端系统上的应用的传输

b、运输层:提供了在应用程序端点之间传输应用层报文的服务。有两个传输协议TCP(向他的应用程序提供面向连接的服务,包括应用层报文向目的地的确保传递和流量控制,可将长报文划分为短报文,并提供拥塞控制机制)和UDP(向他的应用程序提供无连接服务,不提供可靠性,没有流量控制,也没有阻塞控制)。两者任意一个都能传输应用层报文。

实现进程与进程之间的传输,这个进程不在同一个端系统上。只要规范传输到进程的信息。即宏观上的两个端系统上的应用所产生的进程之间的信息传输。运输层实际上就是将数据传输到相应的进程,并有一个将报文划分为分组(运输层分组称为报文段)的过程。类似于交通工具。SAP寻址,确保将完整报文提交给正确进程,如端口号。有流量控制、连接控制、差错控制的功能

c、网络层:负责将称为数据报的网络层分组从一台主机移动到另一台主机。有IP协议(定义了数据报中的各个字段以及端系统和路由器如何作用到这些字段)和路由的选路协议(根据其从源传输到目的地)。两个都是必要的。

实现主机与主机之间(不同网络)的传输,有路由器,选择路由器(路由路径和转发规则)。只要规范传输到主机的信息。即宏观上的两个端系统之间的信息传输。逻辑寻址:全局唯一逻辑地址,确保数据分组被送达目的主机,即IP地址。路由:路由器互联网络,负责路径选择

d、链路层:通过一系列路由器在源和目的地之间发送分组,为了将分组从一个节点移动到路径上的下一个节点,网络层必须依靠链路层的服务,网络层将数据报下传给链路层,链路层沿着路径将数据报传递给下一个节点。链路层只负责相邻节点之间的传输,如果要跨网络需要上传给网络层决定走下一条链路(内网和外网)。

物理层提供的服务取决于应用于该链路的特定链路层协议。某些协议基于链路提供可靠传递,即从传输节点跨越一条链路到接收节点。注意,这种可靠传递服务不同于TCP,TCP针对一个端系统到一个端系统。

相邻主机之间的交互依赖于链路层,本层及以上的层的主机之间的交互是逻辑上的,只关心源和目的。实现相邻节点(同一网络)之间的传输,未经过路由器。只要规范在同一个网络之间的信息。即宏观上每两个相邻节点(一条通信链路)之间的信息传输。物理寻址:在帧头中增加发送端和/或接收端的物理地址表示数据帧的发送端和/或接收端。有流量控制(避免淹没接收端)、差错控制(检测并重传损坏或丢失帧,并避免重复帧)、访问控制(在任意给定时刻决定哪个设备拥有链路控制使用权)

e、物理层:链路层的任务是将整个帧从一个网络元素移动到邻近的网络元素,而物理层的任务是将该帧中的每个比特从一个节点移动到下一个节点。

物理层中的协议仍然是链路相关的。实现比特的传输,包括电气特性(那些引脚接收数据,那些引脚发送数据,高低电平代表什么逻辑含义)、机械特性、功能特性、规程特性。比特同步是通过时钟同步实现的。只要规范在一条物理线路上的信息。即微观上的每一根线上的信息传输

看起来非常复杂是不是,实际上在传输过程中,有些时候我们并没有全都用上:
在这里插入图片描述
对于一个信息,首先发送端的主机将信息经过五层(全部的因特网协议)进行一个封装;然后到达交换机,交换机向上解析两层,获得链路层层次的目的地址,再重新封装两层的协议(这个时候协议中的目的地址可能已经发生了改变),然后进行传输;然后路由器向上解析三层,获得网络层层次的目的地址,再重新封装三层的协议(这个时候协议中的目的地址可能已经发生了改变),然后进行传输;到达接收端的主机后,主机向上解析五层,获得被封装的信息

应用层报文和运输层首部信息共同构成了运输层报文段。运输层报文段因此封装了应用层报文,附加的信息可能包括(允许接收端运输层向上向适当的应用程序交付报文的信息;差错检测比特信息,利用信息接收方能够判断报文中的比特是否发生错误和丢失)

运输层向网络层传递报文段,网络层增加了如源和目的端系统地址等网络层首部信息(上图中的Hn),形成了网络层数据报,该数据报接下来被传递给链路层。

链路层增加了他的首部信息并创建了链路层帧。

在每一层,分组有两种类型的字段:首部字段和有效载荷字段,有效载荷通常来自上一层的分组

下面来分层详细讨论一下每一层的协议构成。

首先是应用层。网络应用是计算机网络存在的理由,网络应用都是在端系统上的,所以应用层只在端上存在,因此写的时候只需在端上构建,而网络核心最高管到网络层

首先看一下协议的体系结构,应用程序体系结构由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序,现在有三种(可不包括混合结构)结构:

a、CS结构:即客户机/服务器体系结构。

有一个总是打开的主机称为服务器,他服务于来自许多其他称为客户机的主机请求,客户机相互之间不直接通信,如web应用中两个浏览器(客户机程序)并不直接通信,但偶尔也会。

服务器有固定的、周知的地址,称为IP地址,且总是处于打开状态,多个服务器共同对外提供服务(即主机群集,有时候称为服务器场),构成一个抽象的虚拟服务器,以应对客户端的规模性。客户端允许有动态的IP地址,不要求一直在线,一般是客户机主动联系服务器。此类结构模式一般是基础设施密集的,因为要求服务提供商购买、安装和维护服务器场。

b、P2P体系结构:即对等体系结构

对总是打开的基础设施服务器有最小的依赖。任意简短连接的主机(对等方)直接相互通信。大多数流行的流量密集型应用程序都是。如文件分发、文件搜索。任意节点可以随意退出、加入。系统稳定,因为所有节点地位对等,所以即使攻击某个节点并不会对系统其他节点造成影响,但是CS中,只要攻击S整个系统就崩溃了

P2P最突出的特点是自扩展性。尽管每个对等方都有请求文件产生负载,但是每个对等方可以向其他对等方分发文件,相当于为系统增加了服务能力。即BT下载(用户越多下载速度越快,因为每当用户加入时,他不单是下载的用户,也是服务器)系统也更安全。

c、混合结构

即时信息系统:QQ、微信。进行用户定位时用CS系统,当开始聊天时变为P2P系统

但是,这只是规定了两个端系统的相互通信,而没有详细的定义一个段系统中如何进行传输信息,即进程和计算机网络之间的通信。下面就来了:

从一个进程向另一个进程发送的报文必须通过下面的网络。进程通过一个称为套接字socket的软件接口在网络上发送和接收报文。进程可以类比于一座房子,而套接字可以类比于他的门。

当进程想向位于另一台主机的另一个进程发送报文时,他把报文推出门(套接字),该发送进程假定门到另一侧之间有运输的基础设施,该设施将把报文传送到目的进程的门口,一旦抵达,则通过报文接收进程的门(套接字)传递。

套接字是同一台主机内应用层与运输层之间的接口。由于套接字是在网络上建立网络应用程序的可编程接口,因此也将套接字称为应用程序和网络之间的应用程序编程接口。套接字可以理解为简单地read和write函数,名称不一定是read。服务器通过套接字从本地缓存中将数据取回去。

应用程序开发者对运输层的控制仅限于:选择传输层协议、也许能设定几个运输层参数,如最大缓存、最大报文段长度等。每一个进程一旦创建以后都要与一个套接字进行绑定,套接字类型与协议有关

传输层辅助将数据发送到对方传输层

那么应用程序对运输层协议有什么要求呢?有可靠数据传输(丢包)、吞吐量(带宽)、定时(时延)和安全性(安全)

这个时候就需要穿插一点关于运输层协议的知识了,即两个运输层协议:UDP和TCP

a、TCP服务:TCP服务模型包括面向连接服务和可靠数据传输服务

①、面向连接服务:使用TCP协议时,在应用层数据报文开始流动之前,其客户机程序和服务器程序之间互相交换运输层控制信息。即“握手过程”,提示客户机和服务器做好传输分组的准备,在握手阶段后,就在两个进程的套接字之间建立了一条TCP连接。这个连接是全双工的(连接双方的进程可以在此链接上同时进行报文收发)。当应用程序结束报文发送时,必须拆除该连接。

②、可靠数据传输服务:进行通信的进程依靠TCP协议,无差错、按适当顺序交付发送的数据。没有字节的丢失和冗余。

TCP协议还支持流控制,具有拥塞控制机制,这种服务不一定能为通信进程带来直接好处,但能为因特网整体带来好处。当出现拥塞时,TCP协议的拥塞控制机制会抑制发送进程。TCP的拥塞控制试图限制每个TCP链接,使他们达到公平共享网络带宽的目的,但对于有最低要求带宽限制的应用是有害的。实时应用是可以容忍数据丢失的,并不需要完全可靠的传输服务,因此,实时应用的开发者们通常使用UCP而不是TCP。

SSL:安全套接字层,用SSL加强后的TCP提供了关键的进程到进程的安全型服务,包括加密、数据完整性和端点鉴别。SSL不是独立于TCP和UDP的第三种运输层协议,而是对TCP的加强,这种加强是在应用层上实现的。

b、UDP服务:UDP是一种不提供不必要服务的轻量级运输层协议,仅提供最小服务。UDP是无连接的,因此在两个进程通信前没有握手过程。

①、UDP提供的是不可靠数据传输服务,可能丢包,可能乱序。

②、UDP不提供连接的建立,不支持流控制,没有拥塞控制机制。因此发送端可以以任何速率向下面的层(网络层)注入数据。(注意到实际的端到端吞吐量可能小于这一速率,因为中间链路的带宽首先或因为拥塞导致的)

实时应用通常可以忍受一定的数据丢失,同时具有最低速率的要求,所以可以使用UDP,以避开TCP的拥塞控制机制和分组开销。故竞争带宽时UDP占优势

c、因特网运输层协议所不提供的服务:TCP提供了可靠地端到端数据传输服务。目前的因特网运输层没有提供吞吐量和定时保证两种服务。但是设计时尽最大可能弥补了这两种服务。

d、进程寻址:为了识别接收进程,需要定义两种信息:①该主机的名称或地址;②用来指定目的主机上接收进程的标识。主机用IP地址来进行标志,IP地址是用来唯一标识主机的32比特数。目的地端口号标识了主机上的接收进程,当开发者创建了一个新的网络应用程序时,必须为该应用程序分配一个新的端口号。

下面我们详细了解一下应用层的协议

应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文。定义了:
①、交换的报文类型,如请求报文和响应报文
②、各种报文类型的语法,如报文中的各个字段极其详细叙述
③、字段的语义,即包含在字段中的信息的含义
④、进程何时、如何发送报文
⑤、对报文进行响应的规则

最常见的应用层协议是HTTP超文本传输协议SMTP简单邮件传输协议,下面就讲一下这两个应用层协议(当然,还有别的,也会讲到)

web应用层协议是超文本传输协议HTTP,是web的核心。

HTTP协议由两部分程序实现:一个客户机程序和一个服务器程序,他们运行在不同的端系统中,通过交换HTTP报文进行会话。也就是说,HTTP协议针对的是CS应用层结构体系。

而HTTP中也有一些术语:

对象:简单来说就是文件,这些文件可通过一个URL地址寻址。
web页面(文档):是由对象组成的,多数web页面含有一个基本HTML文件以及几个引用对象
基本HTML文件:在基本HTML文件中通过对象的URL地址对对象进行引用
URL地址由两部分组成:存放对象的服务主机名和对象的路径名。例如URL地址http://www.somesc.edu/sd/pic.gif中的www.somesc.edu就是主机名(域名),而/sd/pic.gif就是路径名。
web浏览器实现了HTTP的客户机端
web服务器:存储web对象,对象由URL寻址,实现了HTTP的服务器端

HTTP采用TCP而不是UDP作为他的支持运输层协议,进行数据传输服务。采用的是CS模式。首先要建立到服务器的连接,建立完连接才能传输信息

服务器向客户机发送被请求的文件时,并不存储任何关于该客户机的状态信息,假如一个客户机在短时间内多次访问,服务器不会因为刚刚提供了服务就不再做出反应,而是重新发送该对象。一个HTTP服务器并不保存关于客户机的任何信息,所以我们说HTTP是一个无状态协议

使用请求的基本步骤:不需要进行多媒体数据与ASCII码的转换!!!
①、客户端发起TCP连接,目的端口号为80(80指向的就是一个web应用);建立连接是传输层的任务。
②、服务器接收请求,在服务器上发送应用层的HTTP
③、给出响应
④、TCP连接关闭,资源释放

HTTP是同时支持非持久连接和持久连接的,在这里进行一下讲解这两种是什么:

默认方式下HTTP使用持久连接。

a、非持久连接每个请求/响应对是经一个单独的TCP连接发送

非持久连接下,请求处理的具体过程:以http://www.somesc.edu/sd/home.index为例
①、客户机进程在端口号80发起一个到服务器www.somesc.edu的TCP连接,该端口号是HTTP的默认端口,客户机和服务器上分别有一个套接字与该连接相关联。
②、客户机经他的套接字向服务器发送一个HTTP请求报文。请求报文中包含了路径名sd/home.index
③、服务器进程经他的套接字接收该请求报文,从其存储器(RAM或磁盘)中检索出对象sd/home.index,在一个HTTP响应报文中封装对象,并通过其套接字向客户机发送响应报文
④、服务器进程通知TCP断开该TCP连接,直到TCP确认客户机已经完整地接收到响应报文后,真正中断连接
⑤、客户机接收响应报文,TCP连接关闭。报文指出封装的对象是一个HTML文件,客户机从响应报文中提取出该文件,检查该文件。
⑥、如果得到的文件是某些对象的应用,那么会重复前四步,直到拿到所有的对象。

非持久连接的使用,每个TCP连接在服务器返回对象后关闭,即该连接并不为其他的对象而持续下来。每个TCP连接只传输一个请求报文和一个响应报文。用户可以设置浏览器以控制并行度。默认情况下浏览器可以允许5-10个并行的TCP链接,每一个链接处理一个请求-响应事物。一般来讲使用并行链接可以缩短响应时间。

往返时间RTT:一个小分组从客户机到服务器再返回客户机所需要的时间。包括分组传播时延、分组在中间路由器和交换机上的排队时延和分组处理时延

三次握手:浏览器在浏览器和web服务器之间发起一个TCP连接,会有三次:
①、客户机向服务器发送一个小TCP报文段
②、服务器用一个小TCP报文段做出确认和响应
③、客户机向服务器返回确认

一个RTT等于三次握手中两个部分所耗费的时间。完成了三次握手的前两个部分后,客户机将三次握手的第三个部分(确认)与一个HTTP请求报文结合起来发送到该TCP连接,一旦请求报文到达服务器,服务器向该TCP连接发送HTML文件,该HTML请求/响应又耗掉一个RTT。

故有公式:总的响应时间=两个RTT+服务器传输HTML文件的时间

缺点:①为每个请求的对象建立和维护一个全新的连接,都要分配TCP的缓冲区和变量;②每个传输时延为两个RTT;③每个对象都要经历TCP缓启动。

b、持久连接所有的请求及相应的响应经相同的TCP连接发送

持久连接下,服务器在发送响应后保持该TCP连接打开,可以在单个TCP连接上进行,对这些对象的请求可一个接一个发出,而不必等待未决请求的回答(流水线)。如果一个连接经过一定时间间隔(一个可配置的超时间隔)仍未被使用,服务器就关闭该连接。HTTP默认使用流水线方式的持久连接。

由于我们知道,HTTP是一个基于分组交换网络的应用层协议,所以必然会牵扯到HTTP的分组,即报文的格式问题:

HTTP报文有两种:请求报文和响应报文

a、HTTP请求报文
GET /sd/pa.html HTTP/1.1
Host: www.ssc.edu
Connection: close
User-agent: Mozilla/4.0
Accept-Language: fr
注意,这里有一个回车!!!

报文使用普通的ASCII文本书写的,此报文共含有5行,每行用一个回车换行符结束,最后一行后跟有一个附加的回车换行符。但有的报文可能有多或少行。

第一行叫请求行,有三个字段:方法字段、URL字段和HTTP协议版本字段。方法字段可以取值GET\POST\HEAD\PUT\DELETE,绝大部分使用GET,当浏览器请求一个对象时,使用GET方法,在URL字段填写该对象的URL地址。一般来讲1.0的HTTP是非持续的,1.1是持续的。

请求行的后继行为首部行

首部行Host定义了目标所在的主机。虽然主机已经有一个TCP连接了,但是首部行提供的信息时Web代理高速缓存所要求的;

首部行Connection: close告诉服务器不使用持久连接,要求服务器在发送完被请求的对象后就关闭连接;

首部行User-agent用来定义用户代理,即向服务器发送请求的浏览器的类型。上文的浏览器类型是Mozilla/4.0,即Netscape浏览器。服务器可以根据这个正确地为不同类型的用户代理实际发送相同对象的不同版本,每个版本都由相同的URL处理。

**首部行Accept-language表示拥护想得到该对象的法语版本(如果有),否则使用服务器的默认版本。**这仅是HTTP众多可选内容协商首部之一。

首部行(和附加的回车换行符)后有一个“实体主体”,使用GET方法时实体主体为空,而使用POST方法时才是用。客户机通常在用户提交表单时使用POST方法。当方法字段的值为POST时,实体主体中包含的就是用户在表单字段中输入的值。实体是由客户端发送到服务端的具体内容。

GET产生1个TCP数据报,header与data一起发送(获取data);POST会产生2个TCP数据包,先发送header再发送data(提交data)。

用表单生成的请求报文不需要使用POST方法。HTML表单经常使用GET方法,将输入数据(在表单字段内)传送到正确的URL
HEAD方法类似于GET方法,当服务器收到HEAD方法的请求时,会用一个HTTP报文进行相应,但不返回请求对象。可以用他进行故障跟踪。PUT方法常与web发型工具联合使用,用来上传对象到指定的web上的指定路径。FELETE方法可以删除web服务器上的对象。

b、HTTP响应报文
HTTP/1.1 200 OK
Connetion:close
Date:Thu, 03 Jul 2003 12:00:15 GMT
Server: Apache/1.3.0 (unix)
Last-Modified:sun, 6 May 2007 09:223:24 GMT
Content-Length: 6821
Content-Type: text/html

(data data data data …)

初始状态行:有3个字段,即协议版本、状态码和相关信息

请求环境(即首部行形容的环境):请求时间+运行版本+请求对象最后的更新时间+内容长度+内容类型

首部行Connection:close告诉客户机在报文发送后关闭了TCP连接

首部行Date指示服务器产生并发送该响应报文的日期和时间。这个时间不是指对象创建或者最后修改的时间,而是服务器从他的文件系统中检索到该对象、插入到响应报文并发送该响应报文的时间

首部行server表明该报文是由一个Apache web服务器产生的,类似于请求报文中的User-agent

首部行Last-Modified指示了对象创建或者最后修改的时间,对既可能在客户机也可能在网络缓存服务器上的对象缓存来说非常重要

首部行Content-Length表明了被发送对象的字节数

首部行Content-Type指示了实体主体中的对象是HTML文本(对象类型应正式的用首部行而不是文件拓展名来指示)

一些常见的状态码和相关的短语:
①、200 OK:请求成功,信息包含在返回的响应报文中
②、301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文的location:首部行中指定。客户机软件自动用新的URL获取该对象
③、400 Bad Request:一个通用差错代码,表示请求不能被服务器理解
④、404 Not Found:被请求的文档不在服务器上
⑤、505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本

前面说到HTTP是一个无状态协议,并不会保存用户的记录,那么,如果想要记录状态怎么办?cookie可以记录用户状态且用户可控。

cookie允许站点跟踪用户。有四个组成部分:
①、在HTTP响应报文中有一个cookie首部行
②、在HTTP请求报文中有一个cookie首部行
③、在用户端系统中保留有一个cookie文件,由用户的浏览器管理
④、在web站点有一个后端数据库

**cookie具有不可跨域名性,根域名不可访问子域的cookie,反之则可以。**保存的有Unicode字符或二进制数据(字符串)。

cookie工作过程:假设通过internet explorer上网
①、当他第一次访问amazon.com的时候,当请求报文到达amazon web服务器的时候,web站点将产生一个唯一识别码,并以此为索引在他的后端数据库中产生一个表项
②、amazon web服务器用一个包含首部行set-cookie的HTTP响应报文对客户机的浏览器internet explorer进行相应,其中set-cookie含有识别码。
③、当浏览器收到了HTTP响应报文时,他会看到set-cookie首部行,然后浏览器在他管理的特定cookie文件中增加一行,其中包含该服务器的主机名和收到的识别码(set-cookie首部行)。此时,cookie文件已经有了用于ebay的表象,因为曾经访问过(第一次请求报文)。当继续浏览的时候,每请求一个web页面,其浏览器就会从他的cookie文件中获取这个网站的识别码,并放到HTTP请求报文中含有识别码的cookie首部行中。此后,发往服务器的每个请求报文都含有首部行:cookie:识别码。
④、在cookie方式下,服务器可以追踪访问者在该站点的活动。他会把访问者以识别码的形式进行标记和记录。
⑤、如果一个星期后该用户再次访问同一个站点,它的浏览器会在请求报文中继续使用在端系统中保留的cookie文件中的识别码,这样服务器可以在后端数据库中进行搜索,找到保存的有关该用户的数据。如果用户在服务器进行了注册,即提供了他的全名、邮箱地址、邮政地址和信号用卡账号,则会在数据库中记录了这些信息,并将这些信息与识别码关联(以及过去访问的所有页面)。

由此可以知道,cookie可以用于标识客户。用户首次访问站点时,可能需要提供一个用户标识(可能是名字)。在后继访问中浏览器向服务器传递一个cookie首部,提供服务器识别该用户。因此,cookie可以在无状态的HTTP上建立一个用户会话层。
HTTP请求、响应消息的首部行都要包含cookie的首部行。

cookie需要什么呢
要有用户主机管理的cookiefile。后端要有与用户身份相关的数据库。

但是,即使曾经访问过,在换一台电脑后访问仍会被当成新用户,因为cookiefile放在原来的电脑上

那么,如何解决cookie的不能移动的问题呢?这就有了web缓存的出现:

web缓存器也叫代理服务器,能够代表初始web服务器来满足HTTP请求的网络实体。有自己的磁盘存储空间,可以保留最近请求过的对象的拷贝。

通过代理服务器可以不访问原始的服务器,而是从代理服务器上访问。如果代理服务器上没有这个页面,那么它会代替客户机去访问原始服务器。当代理服务器得到这个页面后,首先将这个页面缓存。过程如下:
①、浏览器建立一个到web缓存器的TCP连接,并向web缓存器中的对象发送一个HTTP请求
②、web缓存器检查本地是否存储了该对象的拷贝,如果有,web缓存器就用HTTP响应报文向客户机浏览器返回该对象
③、如果没有,就与对象的初始服务器打开一个TCP连接,web缓存器则在TCP连接上发送获取该对象的HTTP请求,在收到请求后,初始服务器向web缓存器发送具有该对象的HTTP响应
④、web缓存器接收到该对象,在他本地存储空间存储了一份拷贝,并用HTTP响应报文向客户机的浏览器发送该报文(通过已经建立在客户机浏览器和web缓存器之间的TCP连接)

web缓存器既是服务器又是客户机

缺点:网页更新不及时
优点:时延短,可以大大减少对客户机请求的响应时间;节约接入带宽,可以减少一个机构内部网与因特网接入连路上的通信量。

一般而言,web缓存器由ISP购买并安装,并将一个区域网内的所有用户浏览器配置为指向他。

既然web缓存器有一个更新不及时的缺点,那么就有了改进方法,即条件GET方法

需要一种机制,以解决缓存器中的对象拷贝可能是陈旧的问题,即可能已经被修改了。因此,条件GET出现了

如果一个请求报文中使用GET方法,同时请求报文包含一个if-modified-since首部行,则该请求报文就是一个条件GET请求报文。过程如下:
①、一个代理服务器代表一个请求浏览器,向web服务器发送一个请求报文。
②、web服务器向缓存器发送具有被请求的对象的响应报文
③、缓存器将对象发送到请求浏览器,并保存,同时保存了最后修改时间
④、另一用户通过该缓存器访问同一个对象。
⑤、web缓存器向web服务器发送一个条件GET报文,询问在指定日期之后某对象是否发生修改。
⑥、web服务器返回一个响应报文,如果没有修改直接返回‘304 not modified’并在主体中不包含该对象;如果修改了则返回修改后了的对象?。

是解决更新不及时的一种方式,如果last modified不一致就返回新的,一致则OK,但这个时间不太可靠

除了HTTP之外,还有一种文本传输协议,即FTP协议

在典型的FTP会话中,用户坐在一台主机(本地主机)前,向一台远程主机上传文件或从远程主机下载文件。为了让用户能访问远程主机的账户,用户必须提供一个用户标识和口令作为FTP命令的一部分,在提供了授权信息后,用户就能从本地文件系统向远程主机文件系统传送文件。过程如下:
①、用户提供远程主机的主机名,使本地主机的FTP客户机进程建立一个到远程主机FTP服务器进程的TCP连接
②、用户提供用户标识和口令,作为FTP命令的一部分在TCP连接上传送
③、一旦该服务器向用户授权,用户就可以向远程文件系统拷贝存放在本地文件系统中的一个或多个文件。

HTTP和FTP都是文件传输协议,都运行在TCP上。但是FTP使用两个并行的TCP连接来传输文件,一个是控制连接,一个是数据连接

控制连接用来在两个主机之间传输控制信息,如用户标识、口令、改变远程目录的命令以及‘put’和‘get’文件的命令
数据连接用于实际传输一个文件

FTP协议使用一个分离的控制连接,故也称FTP的控制信息时带外传送的。同理可以说HTTP是带内发送控制信息的。FTP在internet上构建文件服务器,端口为21,是专门用作FTP服务器的端口

FTP的数据连接精确地传送一个文件并关闭连接,如果在同一个会话期间想要传送多个文件,需要打开多个数据连接,即控制连接贯穿了整个用户会话期间,而针对会话中的每一个文件传输都要建立一个新的数据连接。

FTP服务器必须在整个会话期间保留用户的状态信息,必须追中用户在远程目录树上的当前位置,而HTTP是无状态的,不必对任何用户状态进行追踪。

客户机和服务器之间的命令和回答都是按照7位ASCII格式在控制连接上传送,因此FTP协议的命令也是人可读的。注意,只有指令和指令的回答是在控制连接上传颂的,所有的文件,包括文件列表都是在数据连接上传送的。用户发出的指令和FTP协议在控制连接上发送的指令一般是一一对应。

然后,我们看一下用来传输电子邮件的SMTP协议

首先要明确因特网的电子邮件系统internet电子邮件系统通常包括:用户代理、邮件服务器、简单邮件传输协议SMTP。

用户代理允许用户阅读、回复、转发、保存、撰写报文。邮件发送到邮件服务器,被放在发送报文队列中。邮件服务器是电子邮件体系结构的核心,每个接收方在其中的某个服务器上有一个邮箱,邮箱管理和维护发送给用户的报文。

典型过程为:发送方的用户代理发送邮件到发送方的邮件服务器,再传输到接收方的邮件服务器,最后被分发到接收方的邮箱中。

SMTP是应用层协议,使用TCP可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。SMTP分别运行在发送方邮件服务器的客户机端和接收方邮件服务器的服务器端。
在这里插入图片描述
电子邮件的协议包括但不限于SMTP协议:
①、SMTP:简单邮件传输协议,推协议,负责发送(HTTP是拉协议,负责获取)
②、POP3:邮局协议第三版本
③、IMAP:internet邮件访问协议

SMTP的端口为固定的25端口,标识通信进程,使用直接连接,不被中转?包括握手阶段->信息传输阶段->关闭阶段发送状态码+短语?

邮件服务器向客户代理发送时不能使用推协议,因为客户不是随时都在线,所以SMTP只能用于发送,如果要接收需要使用POP3协议。

首先来看SMTP协议

持久连接,运行在TCP上,SMTP仅用于从发送方的邮件服务器发送报文到接收方的邮件服务器,是internet电子邮件应用的核心。

**SMTP限制所有邮件报文的主体(不仅是首部)只采用简单的7位ASCII码。**在使用SMTP传送邮件前,需要将二进制多媒体数据编码为ASCII码,并在使用SMTP传输后需要将相应的ASCII码邮件解码还原为多媒体数据。过程如下:
①、用户调用邮件代理程序并提供接收方的邮箱地址,然后通过用户代理发送该邮件
②、发送方用户代理把报文发给发送方的邮件服务器,并进入报文发送队列中。
③、运行在发送方邮件服务器上的SMTP客户机端发现了报文发送队列中的这个报文,并创建一个到运行在接收方邮件服务器上的SMTP服务器的TCP连接。
④、经过初始的SMTP握手,SMTP客户机通过该TCP连接发送邮件报文。
⑤、在接收方的邮件服务器上,SMTP的服务器端接收到该报文,接收方的邮件服务器将该报文发送到接收方的邮箱中。
⑥、接收方调用用户代理阅读报文。

即可简化为:SMTP:握手阶段->传数据阶段->关闭阶段,消息编码为7位ASCII码

SMTP一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端也是如此,即TCP连接是两个邮件服务器之间的直接相连。

如果接收方的邮件服务器没有开机,该报文会保留在发送方的邮件服务器上(报文发送队列中)。

SMTP是用的是持久连接,如果发送邮件服务器有几个报文发往同一个接收邮件服务器,就可以通过同一个TCP连接发送所有的报文。握手中有HELO、MAL FROM、RCPT TO三条命令。对每一个报文,客户机都用一个mall from:crepes.fr开始,以CRLF。CRLF结束。用一个独立的句点表示该邮件的结束,并且当且仅当所有邮件发送完后才发送QUIT。

当进行文件传送时,持久HTTP和SMTP都使用持久连接

我们来看一下SMTP与HTTP的不同点:
①、HTTP是一个拉协议,即人们可以在方便的时候装载web服务器上的信息,即用户使用HTTP从服务器拉取信息,TCP连接是由想获取文件的机器发起的。SMTP是一个推协议,即发送邮件服务器把文件推向接收邮件服务器,TCP连接是由要发送文件的机器发起的。
②、SMTP要求每个报文(包括主体)都使用7位ASCII码格式,如果包含了非7位的ASCII码字符(如有重音的发文字符或二进制数据的图形文件)必须按照7位ASCII码进行编码,HTTP没有这个限制。
③、在面对一个既包含文本又包含图形的文档时,HTTP把每个对象封装到他的HTTP响应报文中(一对一),而internet电子邮件把所有报文对象放在一个报文中
④、HTTP使用带内控制,FTP使用带外控制

既然SMTP严格限制了使用7为ASCII码,那么如果我们想发送图片怎么办,这就用到了MIME

首先看一下邮件报文的格式:

每个首部必须包含一个from首部行和一个to首部行,可以包含一个subject首部行或者其他可选的首部行。报文首部后有一个空行,然后接报文主体。

这些邮件报文的首部行和SMTP命令是不同的,SMTP命令是SMTP握手协议的一部分,首部行则是邮件报文的一部分。

**为了发送非ASCII文本格式的报文,发送方的用户代理必须在报文中使用附加的首部行,定义在RFC 2045和RFC2046中,多用途因特网邮件扩展MIME是对RFC 822的拓展。**故MIME可以在发送端将非ASCII码的内容编码为ASCII。

支持多媒体的三个关键MIME首部是MIME-version、content-type和content-transfer-encoding。

mime-version首部告诉了接收用户代理所使用的的mime的版本号。
content-type首部允许接收用户代理对报文采取适当的动作,即接收用户代理可以为报文主体启用一些解压缩程序。
content-transfer-encoding首部提示接收用户代理该报文已经使用了ASCII编码,并指出了所用的编码类型。
当用户代理接收到包含这两个首部行的报文时,会根据content-transfer-encoding的值将报文还原成非ASCII格式,然后根据content-type首部行决定他应当采取何种动作来处理报文主体。

接收服务器一旦受到具有RFC 822和MIME首部行的报文,就在该报文的顶部添加一个received首部行,该首部行定义了发送该报文的SMTP服务器的名称(from)和接收该报文的服务器的名称(by)以及接受服务器接收到的时间。给用户代理提供了所访问的SMTP服务器的踪迹,以及访问发生的时间。

由此,我们可以知道邮件访问协议包括了:
用户代理主动向邮件服务器拉取邮件,有HTTP、第三版的邮局协议POP、因特网邮件访问协议IMAP。邮件客户端需要配两个协议,SMTP负责发送,POP3负责接收

我们先来看一下POP3协议

是一个非常简单的邮件访问协议,有RFC 1939进行了定义。按照三个阶段进行工作:
①、特许:用户代理发送(以明文形式)用户名和口令以鉴别用户
②、事务处理:用户代理取回报文,还可以对报文做删除标记、取消删除标记、以及获取邮件的统计信息。
③、更新:在客户机发出了quit命令之后,结束该POP3会话。这个时候可以删除那些被标记为删除的报文。

POP3支持下载并保存的方式。POP3服务器保留了一些状态信息,并记录哪些用户报文被标记为删除。

由于POP3可以将邮件下载在本地主机,但没有办法做到移动,即无法使用一个远程服务器上的层次文件夹,无法从任一台机器对所有报文进行访问。所以我们需要IMAP协议,可以让用户远程操控。

IMAP协议为用户提供了创建文件夹以及在文件夹之间移动邮件的命令。IMAP允许用户代理获取报文组件的命令。

但这还不够,如果我们想用浏览器打开邮件怎么办呢?故HTTP也要来参合一下,即基于web的电子邮件(HTTP)

以web的方式获取邮件。用户代理就是普通的浏览器,用户和远程邮箱之间的通信通过HTTP进行。电子邮件报文通过HTTP从邮件服务器发送到浏览器,同时,发送邮件时通过HTTP从浏览器发送到邮件服务器,而不是用SMTP

这个时候我们看似解决了应用层的所有问题,但是有一个非常非常重要的问题我们忘了——我们要发给谁啊?即,在应用层中,我们需要一个方法来确定我们的主机名,来分辨谁是谁,也就是域名系统

主机的一种识别方式是主机名,如cnn.com,但由于主机名可能由不定长的字母数字组成,路由器很难处理,由此主机也可以使用所谓的IP地址进行识别。而域名系统可以将IP地址和主机名进行映射

一个IP地址由四个字节组成,并有严格的层次结构,每个字节(32位)都被句点分隔开,表示了0-255的十进制数字。

由于主机名中还有别名和真实名,故必须使用IP地址。

DNS协议是应用层协议,因为:
①、使用CS模式在通信的端系统之间运行
②、在通信的端系统之间通过下面的端到端运输层协议传送DNS报文

DNS是一种能够进行主机名到IP地址转换的目录服务。包括:
①、一个由分层的DNS服务器实现的分布式数据库(很多名字服务器组成的层次结构)
②、一个允许主机查询分布式数据库的应用层协议(名字服务器之间和客户端的应用层协议,实现名字解析)

DNS通常是运行在BIND软件的UNIX机器,DNS协议运行在UDP之上,使用53号端口。

DNS通常由其他应用层协议(SMTP和FTP)所使用,用于将用户提供的主机名解析为IP地址。过程如下:
①、同一台用户主机上运行着DNS应用的客户机端
②、该浏览器从URL中抽取出主机名,并将这个主机名传给DNS应用的客户机端
③、该DNS客户机向DNS服务器发送一个包含主机名的请求
④、该DNS客户机收到一份回答保温,其中包含对应于主机名的IP地址
⑤、一旦该浏览器接收到来自DNS的IP地址,可以向由该IP地址定位的HTTP服务器发起一个TCP连接。

除了进行主机名到IP地址的转换,DNS还提供了一些重要的服务:
①、主机别名:有复杂主机名的主机可以拥有一个或者多个别名,这种情况下真实的复杂主机名称为规范主机名。主机别名比主机规范名更容易记忆,应用程序可以调用DNS来获得主机别名对应的规范主机名以及主机的IP地址。
②、邮件服务器别名:邮箱地址可能也有别名,由此电子邮件应用程序可以调用DNS,对提供的邮件服务器别名进行解析,以获得该主机的规范主机名和IP地址。实际上MX记录允许一个公司的邮件服务器和web服务器使用相同的别名。
③、负载分配:繁忙的站点被冗余分配在多台服务器上,每台服务器运行在不同的端系统上,有着不同的IP地址,而IP地址集合对应于同一个规范主机名。DNS通过旋转这些IP地址在集合中的顺序,调整web服务器的负载分配。DNS的旋转同样可以用于邮件服务器,由此,多个邮件服务器可以具有相同的别名。

实际上,就可以理解,DNS就是一个存储着目录的数据库罢了。那么他是怎么工作的呢?

DNS的一种简单设计方式是在因特网上使用一个DNS服务器,该服务器包含所有的映射。客户机直接将所有查询直接发往单一的DNS服务器,该DNS服务器直接对所有的查询客户机作出相应。但这种集中式设计的问题有:
①、单点故障:DNS服务器崩溃导致整个因特网崩溃
②、通信容量
③、远距离的集中式数据库:严重的时延
④、维护:为所有的因特网主机保留记录,需要频繁更新

总的来说,完全没有可拓展能力,因此,DNS采用了分布式的设计方案

有3种类型的DNS服务器:
①、根DNS服务器:因特网上有13个根DNS服务器,是冗余的服务器集群,以提供安全性和可靠性,互相镜像备份,可能有时间差。
②、顶级域(TLD)服务器:负责顶级域名(com\org\net等)和所有国家的顶级域名(uk\fr等)
③、权威DNS服务器:在因特网上具有公共课访问主机的每个权威机构必须提供公共可访问的DNS记录,将主机名映射为IP地址,由组织机构的权威DNS服务器负责保存这些DNS记录。

以上三种的交互的具体的过程如下:以www.a.com为例
①、客户机首先与根服务器之一联系,它将返回顶级域名com的TLD服务器的IP地址。
②、客户机与这些TLD服务器之一联系,它将返回权威服务器的IP地址。
③、客户机联系权威服务器之一,它将返回主机名www.a.com的IP地址。

除了以上三种,还有一种本地DNS服务器。并不属于DNS服务器的层次结构。每一个ISP都有一台本地DNS服务器(也叫默认名字服务器),当主机与某个ISP相连时,该ISP提供一台主机的IP地址,该主机具有一台或多台其本地DNS服务器的IP地址(通常通过DHCP)。当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用。

从主机开始的DNS过程如下:
①、请求主机向本地DNS服务器发送一个DNS查询报文发出请求
②、本地DNS服务器将该报文转发到根服务器
③、根服务器处理其顶级域名并返回负责顶级域名的TLD服务器
④、本地DNS服务器将该报文转发到TLD服务器
⑤、TLD服务器处理其域名(DHCP)并返回相应的权威DNS服务器
⑥、本地DNS服务器将该报文转发到权威DNS服务器
⑦、权威DNS服务器返回该域名的IP地址
⑧、本地DNS服务器将IP地址返回到请求主机
这个DNS过程中利用了递归查询和迭代查询。从主机向本地DNS发出的查询是递归查询,而后继的三个查询是迭代查询。理论上讲,任何DNS查询既可以是迭代的也可以是递归的。

但是,这样还是很慢,为了改善时延性能并减少在因特网上到处传输的DNS报文数量,DNS广泛使用了缓存技术

在请求链中,当一个DNS服务器接收到一个DNS回答时,DNS服务器能将回答中的信息缓存在本地存储器。这个缓存包含在回答中的任何信息,包括主机名/地址对。因为主机和主机名与IP地址间的映射不是永久地,所以DNS服务器在一段时间后(通常为两天)将丢弃缓存的信息。

本地DNS服务器也可以缓存TLD服务器的IP地址(不仅仅是权威服务器的IP地址)。因此允许本地DNS绕过查询链中的根DNS服务器。

那么,DNS到底存储的是什么样子的目录呢

实现DNS分布式数据库的所有DNS服务器共同存储着资源记录RR,RR提供了主机名到IP地址的映射。资源记录是一个包含了下列字段的四元组:name、value、type、TTL。TTL是该记录的生存时间,他决定了资源记录应当从缓存中删除的时间。

name和value的值取决于type:
①、type=A,则name是主机名,value是该主机名的IP地址。提供了一条标准的主机名到IP地址的映射
②、type=NS,则name是域,value是知道如何获取该域中主机地址的权威DNS服务器的主机名,即负责解析域的权威主机名。
③、type=CNAME,则value是别名为name的主机对应的规范主机名。
④、type=MX,则value是别名为name的邮件服务器的规范主机名。

指定主机名的权威DNS服务器必有一条包含该主机名的A记录

如果DNS服务器不是某个主机名的权威DNS服务器,那么将包含一条NS记录,对应于包含主机名的域;同时会包含一条A记录,提供了NS记录的value字段中的DNS服务器的IP地址。

那么,DNS是如何进行访问和回答的呢?即他的请求报文和回答报文是什么样子的呢

DNS只有DNS查询报文和DNS回答报文。DNS只有这两种报文,并且查询和回答报文有着相同的格式。
在这里插入图片描述
DNS报文中各个字段的寓意如下:

①、前12字节是首部区域,分几个字段:
第一个字段是一个16bit的标识符,用来标识该查询,会被复制到对查询的回答报文中,以便让客户机匹配发送的请求和接收到的回答。
第二个字段是标志字段,中有若干标志,包括1bit的‘查询/回答’标志位、1bit的‘权威的’标志位(回答报文)、1bit的‘希望递归’标志位(请求报文)、1bit的‘递归可用’标志位(回答报文)。
剩余字段是四个‘数量’字段,指出了在首部后4类数据区域出现的数量。

②、问题区域,包含着正在查询的信息:
名字字段,指出正在被查询地主机名字
类型字段,指出正在被询问的问题类型(A或MX)

③、回答区域,仅回答报文,包含了对最初请求的名字的资源记录。可以包含多条RR,因为一个主机名可以对应多个IP地址

④、权威区域,包含了其他权威DNS服务器的记录

⑤、附加区域,包含了其他一些有帮助的记录。

那么,我们是如何在DNS数据库中插入记录

首先,在注册登记机构注册域名。注册登记机构是一个商业实体,它验证域名的唯一性,将域名输入DNS数据库。
当向注册登记机构注册域名时,需要向该机构提供基本权威DNS服务器和辅助权威DNS服务器的名字和IP地址。注册登记机构将所有的IP地址输入到对应的TLD服务器。
确保用于web服务器的类型A资源记录和用于邮件服务器的类型MX记录被输入到你的权威DNS服务器中。

以上是我目前所学的《计算机网络:自顶向下方法》的全部知识,如果你能看到这里,便可以看到,内容虽然复杂繁多,但还是存在一条比较清晰的逻辑线的。当然,我还会继续进行更新,在期末的时候也会把《下》写出来。

发布了317 篇原创文章 · 获赞 194 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_40851744/article/details/105311983
今日推荐