计算机网络(6):应用层

每个应用层协议都是为了解决某一类应用问题,而问题的解决又往往是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的
应用层的具体内容就是规定应用进程在通信时所遵循的协议

应用层的许多协议都是基于客户服务器方式。即使是对等通信方式,实质上也是一种特殊的客户服务器方式。
客户(client)和服务器(server)都是指通信中所涉及的两个应用进程。客户服务器方式所描述的是进程之间服务和被服务的关系。客户是服务请求方,服务器是服务提供方。

域名系统 DNS

域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换为 IP 地址。域名系统其实就是名字系统。
许多应用层软件经常直接使用域名系统 DNS,但计算机的用户只是间接而不是直接使用域名系统。

因特网的域名系统 DNS 被设计成为一个联机分布式数据库系统,并采用客户服务器方式。DNS 使大多数名字都在本地进行解析(resolve),仅少量解析需要在因特网上通信,因此DNS 系统的效率很高。由于 DNS 是分布式系统,即使单个计算机出了故障,也不会妨碍整个 DNS 系统的正常运行。

域名到 IP 地址的解析是由分布在因特网上的许多域名服务器程序(可简称为城名服务器)共同完成的。域名服务器程序在专设的结点上运行,而人们也常把运行域名服务器程序的机器也称为域名服务器

域名到IP 地址的解析过程:
当某一个应用进程需要把主机名解为 IP 地址时,该应用进程就调用解析程序(resolver),并成为 DNS 的一个客户,把待解析的域名放在 DNS 请求报文中,以 UDP 用户数据报方式发给本地域名服务器(使用 UDP 是为了减少开销)。本地域名服务器在查找域名后,把对应的 IP 地址放在回答报文中返回。应用进程获得目的主机的IP地址后即可进行通信。
若本地域名服务器不能回答该请求,则此域名服务器就暂时成为 DNS 中的另一个客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。

因特网的域名结构

任何一个连接在因特网上的主机或路由器,都有一个 唯一的层次结构 的名字,即 域名(domain name) 。这里,域(domain) 是名字空间中一个可被管理的划分。域还可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了顶级域、二级域、三级域,等等。
从语法上讲,每一个域名都是由 标号(label) 序列组成,而各标号之间用点隔开(小数点.)。
例子:
在这里插入图片描述

DNS 规定,域名中的标号都由英文字母和数字组成,每一个标号不超过 63 个字符(但为了记忆方便,最好不要超过 12个字符),也不区分大小写字母。标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的顶级域名则写在最右边。由多个标号组成的完整域名总共不超过 255 个字符。 DNS 既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思 。各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由 ICANN 进行管理。

需要注意的是,域名只是个逻辑概念,并不代表计算机所在的物理地点
域名中的点和点分十进制 IP 地址中的点并无一一对应的关系 。点分十进制IP 地址中一定是包含三个点,但每一个域名中点的数目则不一定正好是三个。

现在顶级域名 TLD(Top Level Domain) 分为三大类:
(1)国家顶级域名 nTLD:采用 ISO 3166 的规定。如 cn 表示中国,us 表示美国,uk 表示英国,等等。国家顶级域名又常记为 CCTLD(cc 示国家代码 country-code)。
(2)通用顶级域名 gTLD:最常见的通用顶级域名有 7个,即:com(公司企业),net (网络服务机构),org(非营利性的组织),int (国际组织),edu(美国专用的教育机构),gov(美国的政府部门),ml(美国事部门)
其余 11个通用顶级域名是:aero(航空运输企业),biz(公司和企业),cat (加泰隆人的语言和文化团体),coop(合作团体),info(各种情况),jobs (人力资源管理者),mobi(移动产品与服务的用户和提供者),museum(博物馆),name (个人),pro(有证书的专业人员),travel(旅游业)。
(3)基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此又称为反向域名
在国家顶级域名下注册的二级域名均由该国家自行确定。我国把二级域名划分为类别域名和“行政区域名两大类。
在这里插入图片描述

域名服务器

因特网上的 DNS 域名服务器也是按照层次安排的。每一个域名服务器都只对域名体系中的一部分进行管辖。
根据域名服务器所起的作用,可以把域名服务器划分为以下四种不同的类型:
(1)根域名服务器(root name server) :根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址。
(2)顶级域名服务器(即 TLD 服务器) :这些域名服负责管理在该顶级域名服务器注册的所有二级域名。当收到 DNS 查询请求时,就给出相应的回答(可能是最后的结果也可能是下一步应当找的域名服务器的IP 地址)。
(3)权限域名服务器 :这就是前面已经讲过的负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的 DNS 客户,下一步应当找哪一个权限域名服务器。

在这里插入图片描述

(4)本地域名服务器(local name server) :当一个主机发出 DNS 查询请求时,这个查询请求报文就发送给本地域名服务器。每一个因特网服务提供者 ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为默认域名服务器
本地域名服务器是用户计算机或网络中的DNS服务器。
当用户发起域名解析请求时,本地域名服务器负责递归地查询整个DNS系统,直到获得域名对应的 IP 地址。
(5)递归域名服务器(Recursive DNS Servers):
递归域名服务器通常是本地域名服务器的一部分,负责从根域名服务器开始递归地查询解析域名。
它们可以缓存查询结果,以提高查询效率,并向客户端返回解析后的IP地址。
(6)反向域名服务器(Reverse DNS Servers):
反向域名服务器负责将IP地址解析为域名,与正向解析相反。
主要用于邮件服务器的反垃圾邮件检查、安全审计等。
(7)缓存域名服务器(Caching DNS Servers):
缓存域名服务器保存最近解析过的域名和其对应的IP地址,以提高查询速度。
这些服务器可以独立运行,也可以是本地域名服务器或递归域名服务器的一部分。
(8)辅助域名服务器(Secondary DNS Servers):
辅助域名服务器是备份权威域名服务器,存储与主权威域名服务器相同的域名信息。
当主服务器不可用时,辅助服务器可以提供域名解析服务。

文件传送协议

文件传送协议FTP(File Transfer Protocol) 是因特网上使用得最广泛的文件传送协议。
FTP 提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用 ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口)。
FTP 屏蔽了各计算机系统的细节,适合于在异构网络中任意计算机之间传送文件

基于 TCP 的 FTP 和基于UDP 的 TFTP,都是文件共享协议中的一大类,即复制整个文件,其特点是:若要存取一个文件,就必须先获得一个本地的文件副本。如果要修改文件,只能对文件的副本进行修改,然后再将修改后的文件副本传回到原节点。

文件共享协议中的另一大类是联机访问(on-line access)
联机访问意味着允许多个程序同时对一个文件进行存取。和数据库系统不同之处是用户不需要调用一个特殊的客户进程,而是由操作系统提供对远地共享文件进行访问的服务,就如同对本地文件的访问一样。这就使用户可以用远地文件作为输入和输出来运行任何应用程序,而操作系统中的文件系统则提供对共享文件的透明存取
透明存取的优点:将原来用于处理本地文件的应用程序用来处理远地文件时,不需要对该应用程序作明显的改动。属于文件共享协议的有网络文件系统NFS(Network File System)最初是在 UNIX 操作系统环境下实现文件和目录的共享。NFS 可使本地计算机共享远地的资源,就像这些资源在本地

FTP 的基本工作原理

文件传送协议 FTP 只提供文件传送的一些基本的服务,它使用 TCP 可靠的运输服务。 FTP 的主要功能是减少或消除在不同操作系统下处理文件的不兼容性。
FTP 使用客户服务器方式。一个FTP 服务器进程可同时为多个客户进程提供服务。FTP的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。

主进程的工作步骤如下:
(1)打开熟知端口(端口号为21),使客户进程能够连接上。
(2)等待客户进程发出连接请求。
(3)启动从属进程来处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程。
(4)回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发地进行。

FTP的工作情况如图。图中的服务器端有两个从属进程:控制进程和数据传送进程。为简单起见, 服务器端的主进程没有画上。在客户端除了控制进程和数据传送进程外,还有一个用户界面进程用来和用户接口。
在这里插入图片描述
在进行文件传输时,FTP 的客户和服务器之间要建立两个并行的 TCP 连接:控制连接和数据连接
控制连接在整个会话期间一直保持打开,FTP 客户所发出的传送请求,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件。 实际用于传输文件的是数据连接 。服务器端的控制进程在接收到 FTP 客户发送来的文件传输请求后就 创建数据传送进程和数据连接 ,用来连接客户端和服务器端的数据传送进程。数据传送进程实际完成文件的传送,在传送完毕后关闭“数据传送连接”并结束运行。由于FTP 使用了一个分离的控制连接,因此FTP 的控制信息是 带外(out of band) 传送的。

当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口(21),同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。接着,服务器进程用自己传送数据的熟知端口(20)与客户进程所提供的端口号码建立数据传送连接。由于FTP 使用了两个不同的端口号,所以数据连接与控制连接不会发生混乱。

使用两个独立的连接的主要好处是使协议更加简单和更容易实现,同时在传输文件时还可以利用控制连接。
FTP 并非对所有的数据传输都是最佳的。例如,计算机 A 上运行的应用程序要在远地计算机 B 的一个很大的文件末尾添加一行信息。若使用 FTP,则应先将此文件从计算机 B 传送到计算机 A,添加上这一行信息后,再用 FTP 将此文件传送到计算机 B,来回传送这样大的文件很花时间。实际上这种传送是不必要的,因为计算机 A 并没有使用该文件的内容。

然而网络文件系统 NFS 则采用另一种思路。 NFS 允许应用进程打开一个远地文件,并能在该文件的某一个特定的位置上开始读写数据 。这样,NFS 可使用户只复制一个大文件中的一个很小的片段,而不需要复制整个大文件。计算机 A 中的 NFS 客户软件,将要添加的数据和在文件后面写数据的请求一起发送到远地的计算机 B 中的 NFS 服务器,NFS 服务器更新文件后返回应答信息。在网络上传送的只是少量的修改数据。

简单文件传送协议 TFTP

TCP/IP 协议族中还有一个 简单文件传送协议 TFTP(Trivial File Transfer Protocol) ,它是个很小且易于实现的文件传送协议。
虽然 TFTP 也使用客户服务器方式,但它使用 UDP 数据报,因此 TFTP 需要有自己的差错改正措施。TFTP 只支持文件传输而不支持交互。TFTP 没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。

TFTP 的主要优点有:
1.TFTP 可用于 UDP 环境。例如,当需要将程序或文件同时向许多机器下载时就往往需要使用 TFTP。
2.TFTP 代码所占的内存较小。对较小的计算机或某些特殊用途的设备是很重要:这些设备不需要硬盘,只需要周化了 TFTP,UDP 和 IP 的小容量只读存储器即可。当接通电源后,设备执行只读存储器中的代码,在网络上广播一个 TFTP 请求。网络上的 TFTP 服务器就发送响应,其中包括可执行二进制程序。设备收到此文件后将其放入内存,然后开始运行程序。这种方式增加了灵活性,也减少了开销。

TFTP 的主要特点是:
(1)每次传送的数据报文中有 512 字节的数据,但最后一次可不足 512 字节;
(2)数据报文按序编号,从1开始;
(3)支持 ASCII 码或二进制传送;
(4)可对文件进行读或写;
(5)使用很简单的首部。

TFTP 的工作很像停止等待协议。 发送完一个文件块后就等待对方的确认,确认时应指明所确认的块编号。发完数据后在规定时间内收不到确认就要重发数据 PDU。发送确认 PDU 的一方若在规定时间内收不到下一个文件块,也要重发确认 PDU。这样就可保证文件的传送不致因某一个数据报的丢失而告失败。

在一开始工作时。TFTP 客户进程发送一个读请求报文或写请求报文给 TFTP 服务器进程,其熟知端口号码为 69。TFTP 服务器进程要选择一个新的端口和 TFTP 客户进程进行通信。若文件长度恰好为 512 字节的整数倍,则在文件传送完毕后,还必须在最后发送一个只含首部而无数据的数据报文。若文件长度不是 512 字节的整数倍,则最后传送数据报文中的数据字段一定不满 512 字节,这正好可作为文件结束的标志。

远程终端协议 TELNET

TELNET 是一个简单的远程终端协议,它也是因特网的正式标准。
用户用 TELNET 就可在其所在地通过 TCP 连接注册(即登录)到远地的另一个主机上(使用主机名或 IP 地址)。
TELNET 能将用户的击键传到远地主机,同时也能将远地主机的输出通过 TCP 连接返回到用户屏幕,这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连在远地主机上。因此,TELNET 又称为 终端仿真协议

TELNET的主要特点和工作原理:
基于文本:
TELNET是基于文本的协议,它传输的是字符流而不是二进制数据。用户在远程主机上的操作以及主机返回的输出都是文本形式的。

端口号:
TELNET默认使用TCP协议,其端口号是23。

明文传输:
最初的 TELNET 版本是以明文形式传输数据的,即用户的登录信息和传输的命令都是以纯文本形式传送的。因此,它是不安全的,容易受到窃听和中间人攻击。

加密协议:
为了提高安全性,后续出现了使用加密的TELNET协议,如Secure Shell(SSH)取代了TELNET在安全性上的应用。

会话控制:
TELNET 维护一个会话,使用户能够在远程主机上执行命令,查看输出,并与远程系统进行交互。

终端类型:
TELNET 支持不同的终端类型,以便适应各种不同的终端设备和用户界面。

环境变量:
TELNET 允许用户在远程主机上设置和修改环境变量,以影响其远程会话的行为。

万维网 WWW

万维网www (World Wide Web) 并非某种特殊的计算机网络。万维网是一个大规模的、联机式的信息储藏所 ,英文简称为Web。
万维网用链接的方法能非常方便地从因特网上的一个站点访问另一个站点(也就是所谓的“链接到另一个站点"),从而主动地按需获取丰富的信息。

万维网是一个分布式的 超媒体(hypermedia) 系统,它是 超文本(hypertext) 系统的扩充。
所谓超文本是包含指向其他文档的链接的文本。也就是说,一个超文本由多个信息源链接成,而这些信息源的数目实际上是不受限制的。利用一个链接可使用户找到另一个文档,而这又可链接到其他的文档(依次类推)。这些文档可以位于世界上任何一个接在因特网上的超文本系统中。超文本是万维网的基础
超媒体与超文本的区别是文档内容不同:超文本文档仅包含文本信息;而超媒体文档还包含其他表示方式的信息,如图形、图像、声音、动画,甚至活动视频图像。

分布式的和非分布式的超媒体系统有很大区别。
在非分布式系统中,各种信息都驻留在单个计算机的磁盘中。由于各种文档都可从本地获得,因此这些文档之间的链接可进行一致性检查。所以,一个非分布式超媒体系统能够保证所有的链接都是有效的和一致的

万维网以客户服务器方式工作。
万维网文档所驻留的主机运行服务器程序,因此这个主机也称为万维网服务器。客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档。在一个客户程序主窗口上显示出的万维网文档称为 页面(page)

万维网必须解决以下几个问题:
(1)怎样标志分布在整个因特网上的万维网文档?
万维网使用 统一资源定位符URL(Uniform Resource Locator) 来标志万维网上的各种文档,并使每一个文档在整个因特网的范围内具有唯一的标识符 URL。

(2)用什么样的协议来实现万维网上各种链接?
要使万维网客户程序与万维网服务器程序之间的交互遵守严格的协议,这就是 超文本传送协议HTTP (HyperText Transfer Protocol) 。HTTP 是一个应用层协议,它使用 TCP 连接进行可靠的传送。为

(3)怎样使不同作者创作的不同风格的万维网文档都能在因特网上的各种主机上显示出来,同时使用户清楚地知道在什么地方存在着链接?
万维网使用超文本标记语言HTML (HyperText Markup Language),使得万维网页面的设计者可以很方便地用链接从本页面的某处链接到因特网上的任何一个万维网页面,并且能够在自己的主机屏幕上显示出来。

(4)怎样使用户能够很方便地找到所需的信息?
用户可使用搜索工具在万维网上方便地查找所需的信息。

统一资源定位符 URL

统一资源定位符 URL 是用来表示从因特网上得到的资源位置和访问这些资源的方法。
URL 给资源的位置提供一种抽象的识别方法,并用这种方法给资源定位。只要能够对资源定位,系统就可以对资源进行各种操作,如存取、更新、替换和查找其属性。
“资源” 是指在因特网上可以被访问的任何对象,包括文件目录、文件、文档、图像、声音等,以及与因特网相连的任何形式的数据。“资源”还包括电子邮件的地址和 USENET 新闻组,或 USENET 新闻组中的报文。

URL 相当于一个文件名在网络范围的扩展。 因此,URL 是与因特网相连的机器上的任何可访问对象的一个指针。由于访问不同对象所使用的协议不同,所以URL还指出读取某个对象时所使用的协议。URL的一般形式由以下四个部分组成:
< 协议 > : / / < 主机 > : < 端口 > / < 路径 > <协议>://<主机>:<端口>/<路径> <协议>://<主机>:<端口>/<路径>

URL 的第一部分是最左边的<协议>:指出使用什么协议来获取该万维网文档。现在最常用的协议就是http(超文本传送协议HTTP),其次是ftp (文件传送协议FTP)。在<协议>后面是规定必须写上的格式“😕/”,不能省略。
右边是第二部分<主机>,指出这个万维网文档是在哪一个主机上。这里的<主机>就是指该主机在因特网上的域名。
再后面是第三和第四部分<端口>和<路径>,有时可省略。

使用 HTTP 的 URL

对于万维网的网点的访问要使用 HTTP 协议。HTTP的URL的一般形式是:
h t t p : / / < 主机 > : < 端口 > / < 路径 > http://<主机>:<端口>/<路径> http://<主机>:<端口>/<路径>

HTTP 的默认端口号是 80,通常可省略。若再省略文件的<路径>项,则URL就指到因特网上的某个 主页(home page)
主页可以是以下几种情况之一:
(1)一个 WWW 服务器的最高级别的页面。
(2)某一个组织或部门的一个定制的页面或目录。从这样的页面可链接到因特网上的与本组织或部门有关的其他站点。
(3)由某一个人自己设计的描述他本人情况的WWW页面。

URL 里面的字母不分大小写

超文本传送协议 HTTP

HTTP 协议定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。
从层次的角度看,HTTP是面向事务的(transaction-oriented)应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。

在这里插入图片描述

每个万维网网点都有一个服务器进程,它不断地监听 TCP 的端口 80,以便发现是否有浏览器(即万维网客户,浏览器和万维网客户是同义词)向它发出连接建立请求。一旦监听到连接建立请求并建立了 TCP 连接之后,浏览器就向万维网服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。最后,TCP连接就被释放了。在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则。这些格式和规则就是超文本传送协议 HTTP。

HTTP 规定在 HTTP 客户与 HTTP 服务器之间的每次交互,都由一个 ASCII 码串构成的请求和一个“类MIME (MIME-like)”的响应组成。HTTP 报文通常都使用 TCP 连接传送。
用户浏览页面的方法有两种:1.在浏览器的地址窗口中键入所要找的页面的URL;2.在某一个页面中用鼠标点击一个可选部分,这时浏览器会自动在因特网上找到所要链接的页面。

HTTP 使用了面向连接的 TCP 作为运输层协议,保证了数据的可靠传输。HTTP不必考虑数据在传输过程中被丢弃后又怎样被重传。但是,HTTP协议本身是无连接的。这就是说,虽然 HTTP 使用了 TCP 连接,但通信的双方在交换 HTTP 报文之前不需要先建立 HTTP 连接。

HTTP 协议是无状态的(stateless)。也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同(假定现在服务器还没有把该页面更新),因为服务器并不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。

用户在点击鼠标链接某个万维网文档时,HTTP 协议首先要和服务器建立 TCP 连接。这需要使用三次握手。当三次握手的前两部分完成后(即经过了一个 RTT 时间后),万维网客户就把 HTTP 请求报文作为三次握手的第三个报文的数据发送给万维网服务器。服务器收到 HTTP 请求报文后,就把所请求的文档作为响应报文返回给客户。
在这里插入图片描述

请求一个万维网文档所需的时间是该文档的传输时间(与文档大小成正比)加上两倍往返时间 RTT(一个 RTT 用于连接 TCP 连接,另一个 RTT 用于请求和接收万维网文档。这里 TCP 建立连接的三次握手的第三个报文段中捎带了客户对万维网文档的请求)。

HTTP/1.0 的主要缺点,就是每请求一个文档就要有两倍RTT的开销。若一个主页上有很多链接的对象(如图片等)需要依次进行链接,那么每一次链接下载都导致2×RTT 的开销。另一种开销就是万维网客户和服务器为每一次建立新的 TCP 连接都要分配缓存和变量。特别是万维网服务器往往要同时服务于大量客户的请求,这样会使万维网服务器的负担很重。使用并行TCP连接可以缩短响应时间。
HTTP/1.1协议较好地解决了这个问题,它使用了持续连接(persistent connection)。所谓持续连接就是万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。
HTTP/1.1 协议的持续连接有两种工作方式,即 非流水线方式(without pipelining)流水线方式(with pipelining)
非流水线方式的特点,是客户在收到前一个响应后才能发出下一个请求。
流水线方式的特点,是客户在收到 HTTP的响应报文之前就能够接着发送新的请求报文。于是一个接-个的请求报文到达服务器后,服务器就可连续发回响应报文。因此,使用流水线方式时,客户访问所有的对象只需花费一-个RTT 时间。流水线工作方式使TCP连接中的空困时间减少,提高了下载文档效率。

代理服务器

代理服务器(proxy server)是一种网络实体,它又称为万维网高速缓存(Web cache)
代理服务器把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按 URL 的地址再次去因特网访问该资源。代理服务器可在客户端或服务器端工作,也可在中间系统上工作。下

代理服务器有时是作为服务器(当接受浏览器的HTTP请求时),但有时却作为客户(当向因特网上的源点服务器发送HTTP请求时)。

HTTP 的报文结构

HTTP有两类报文:
(1)请求报文:从客户向服务器发送请求报文,图(a)。
(2)响应报文:从服务器到客户的回答,图(b)。
由于 HTTP 是 面向文本的(text-oriented),因此在报文中的每一个字段都是一些 ASCII 码串,因而各个字段的长度都是不确定的。
在这里插入图片描述

HTTP 请求报文和响应报文都是由三个部分组成,这两种报文格式的区别就是开始行不同。
(1)开始行 ,用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行(Request-Line),而在响应报文中的开始行叫做状态行(Status-Line)。在开始行的三个字段之间都以空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”。请求报文的第一行请求行只有三个内容,即方法,请求资源的 URL,以及 HTTP 的版本。

(2)首部行 ,用来说明浏览器、服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有“回车”和“换行”。整个首部行结束时,还有-空行将首部行和后面的实体主体分开。
(3)实体主体(entity body) ,在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。

在服务器上存放用户的信息

HTTP是无状态的。在实际工作中,一些万维网站点却常常希望能够识别用户。
可以在 HTTP 中使用 Cookie。万维网站点可以使用 Cookie 来跟踪用户。Cookie表示在 HTTP服务器和客户之间传递的状态信息

Cookie就是一些数据,用于存储服务器返回给客服端的信息,客户端进行保存。在下一次访问该网站时,客户端会将保存的cookie一同发给服务器,服务器再利用cookie进行一些操作。利用cookie我们就可以实现自动登录,保存游览历史,身份验证等功能。

这里有详细的介绍:cookie是什么?有什么用?cookie详解,一篇文章彻底搞懂cookie

万维网的文档

超文本标记语言 HTML

超文本标记语言 HTML(HyperText Markup Language) 是一种制作万维网页面的标准语言,它消除了不同计算机之间信息交流的障碍。

HTML 定义了许多用于排版的命令,即“标签”(tag)。例如,表示后面开始用斜体字排版,而则表示斜体字排版到此结束。
HTML就把各种标签嵌入到万维网的页面中,这样就构成了所谓的 HTML 文档。HTML 文档是一种可以用任何文本编辑器创建的ASCII 码文件。但仅当HTML文档是以.html或.htm为后缀时,浏览器才对这样的HTML 文档的各种标签进行解释。如果HTML文档改换以.txt为其后缀,则HTML解释程序就不对标签进行解释,而浏览器只能看见原来的文本文件。

并非所有的浏览器都支持所有的 HTML 标签。若某一个浏览器不支持某一个 HTML 标签,则浏览器将忽略此标签,但在一对不能识别的标签之间的文本仍然会被显示出来。

HTML 允许在万维网页面中插入图像。一个页面本身带有的图像称为内含图像(inlineimage)。HTML标准并没有规定该图像的格式。实际上,大多数浏览器都支持GIF和JPEG文件。很多种格式的图像占据的存储空间太大,因而这种图像在因特网传送时就很浪费时间。

HTML 还规定了链接的设置方法。每个链接都有一个起点和终点。链接的起点说明在万维网页面中的什么地方可引出一个链接。链接的终点可以是其他网站上的页面。这种链接方式叫做远程链接。这时必须在 HTML 文档中指明链接到的网站的 URL。有时链接可以指向本计算机中的某一个文件或本文件中的某处。这叫做本地链接。这时必须在 HTML 文档中指明链接的路径。

动态万维网文档

静态文档是指在文档创作完毕后就存放在万维网服务器中,在被用户浏览的过程中,内容不会改变。由于这种文档的内容不会改变,因此用户对静态文档的每次读取所得到的返回结果都是相同的。
静态文档的最大优点是简单。由于HTML是一种排版语言,因此静态文档可以由不懂程序设计的人员来创建。但静态文档的缺点是不够灵活。当信息变化时就要由文档的作者手工对文档进行修改。可见,变化频繁的文档不适于作成静态文档。

动态文档(dynamic document)是指文档的内容是在浏览器访问万维网服务器时才由应用程序动态创建。当浏览器请求到达时,万维网服务器要运行另一个应用程序,并把控制转移到此应用程序。接着,该应用程序对浏览器发来的数据进行处理,并输出 HTTP 格式的文档,万维网服务器把应用程序的输出作为对浏览器的响应。
由于对浏览器每次请求的响应都是
临时生成
的,因此用户通过动态文档所看到的内容是不断变化的。动态文档的主要优点是具有报告当前最新信息的能力。但动态文档的创建难度比静态文档的高,因为动态文档的开发不是直接编写文档本身,而是编写用于生成文档的应用程序,这就要求动态文档的开发人员必须会编程,而所编写的程序还要通过大范围的测试,以保证输入的有效性。

动态文档和静态文档之间的主要差别体现在服务器一端。这主要是文档内容的生成方法不同。而从浏览器的角度看,这两种文档并没有区别。动态文档和静态文档的内容都遵循HTML所规定的格式,浏览器仅根据在屏幕上看到的内容并无法判定服务器送来的是哪一种文档,只有文档的开发者才知道。

动态主机配置协议 DHCP

为了把协议软件做成通用的和便于移植,把协议软件参数化。这就使得在很多台计算机上有可能使用同一个经过编译的二进制代码。一台计算机和另一台计算机的许多区别,都可以通过一些不同的参数来体现。在协议软件运行之前,必须给每一个参数赋值。
在协议软件中给这些参数赋值的动作叫做协议配置。一个协议软件在使用之前必须是已正确配置的。具体的配置信息有哪些则取决于协议栈。

**动态主机配置协议(Dynamic Host Configuration Protocol,简称DHCP)**是一种网络协议,通过自动分配IP地址和其他网络配置参数,为计算机网络提供了高效的管理和配置手段。

工作原理:
1.DHCP服务器的角色:
DHCP的核心在于DHCP服务器,它负责管理IP地址池、分配IP地址和配置其他网络参数。DHCP服务器通常在网络中的中央位置,能够响应来自客户端设备的DHCP请求。
2.DHCP客户端的角色:
DHCP客户端是网络中的设备,它们在连接到网络时会发送DHCP请求以获取配置信息。这些设备可以是计算机、移动设备、网络打印机等。
3.广播通信:
当一个DHCP客户端连接到网络或者重新连接时,它会发送一个DHCP发现(Discover)广播消息到网络上的所有设备。这个广播消息是一个特殊的UDP包,目的是找到可用的DHCP服务器。
4. DHCP服务器的响应:
DHCP服务器收到DHCP发现消息后,会以广播形式回复一个DHCP提供(Offer)消息,其中包含可用的IP地址、子网掩码、默认网关、DNS服务器等网络配置信息。服务器可能收到多个发现请求,但只为一个客户端提供一个唯一的IP地址。
5. 租约分配:
客户端收到DHCP提供消息后,会选择其中一个提供的配置,并向DHCP服务器发送DHCP请求(Request)消息,表示接受该配置。服务器在接收到请求后,为客户端分配IP地址,并提供租约时间,即该IP地址在网络上的使用有效期。
6. 配置应用:
客户端收到DHCP确认(Acknowledge)消息后,会将配置信息应用到自身网络接口。现在,设备拥有了有效的IP地址和其他网络参数,可以正常参与网络通信。
7. 租约更新:
在租约到期之前,客户端可以选择续租,向DHCP服务器发送DHCP请求消息,以延长租约时间。如果客户端不再需要IP地址,它可以发送DHCP释放(Release)消息通知服务器释放分配的地址。

简单网络管理协议 SNMP

简单网络管理协议(Simple Network Management Protocol,SNMP)是一种用于管理和监控网络设备的协议。SNMP允许网络管理员通过网络监控、配置和收集信息,以确保网络的稳定性和性能。

简单网络管理协议SNMP(Simple Network Management Protocol)中的管理程序和代理程序按客户服务器方式工作。管理程序运行 SNMP 客户程序,而代理程序运行 SNMP 服务器程序。在被管对象上运行的SNMP 服务器程序不停地监听来自管理站的 SNMP 客户程序的请求(或命令)。一旦发现,就立即返回管理站所需的信息,或执行某个动作(例如,把某个参数的设置进行更新)。在网管系统中往往是一个(或少数几个)客户程序与很多的服务器程序进行交互。

若要管理某个对象,就必然会给该对象添加一些软件或硬件,但这种“添加”必须对原有对象的影响尽量小些。

若网络元素使用的不是 SNMP 协议而是另一种网络管理协议,那么吧 SNMP 协议就无法控制该网络元素。这时可使用委托代理(proxy agent)
委托代理能提供如协议转换和过滤操作等功能对被管对象进行管理。

SNMP 的网络管理由三个部分组成,即 SNMP本身管理信息结构SMI (Structure of Management Information)和管理信息库MIB (Management Information Base)。下面简述这三部分的作用。
SNMP 定义了管理站和代理之间所交换的分组格式。所交换的分组包含各代理中的对象(变量)名及其状态(值)。SNMP负责读取和改变这些数值。

SMI定义了命名对象和定义对象类型(包括范围和长度)的通用规则,以及把对象和对象的值进行编码的规则。这样做是为了确保网络管理数据的语法和语义的无二义性。但从SMI的名称并不能看出它的功能。请注意,SMI并不定义一个实体应管理的对象数目,也不定义被管对象名以及对象名及其值之间的关联。

MIB在被管理的实体中创建了命名对象,并规定了其类型。

SNMP操作:

SNMP定义了一组标准的操作,包括:
GET: 从设备中获取特定OID的信息。
SET: 修改设备中特定OID的值。
GET-NEXT: 获取MIB中下一个OID的信息。
GET-BULK: 一次获取大量数据的操作。

SNMP支持事件通知,当设备状态发生变化时,代理可以向管理站点发送通知。这种机制使得管理者能够实时了解网络设备的状态。

应用进程跨越网络的通信

应用进程跨越网络进行通信是通过网络协议实现的。网络协议定义了应用进程之间的通信规则和数据传输方式,确保数据在网络中可靠、有序地传递。
以下是一些常见的用于应用进程通信的网络协议:
HTTP(Hypertext Transfer Protocol):
HTTP是用于在Web浏览器和Web服务器之间传输超文本的协议。它是一个无状态的协议,基于请求-响应模型,常用于获取和发送网页内容。

HTTPS(Hypertext Transfer Protocol Secure):
HTTPS是HTTP的安全版本,使用SSL/TLS协议进行数据加密和身份验证。它提供了更安全的通信通道,广泛用于敏感数据的传输,如在线支付和登录。

FTP(File Transfer Protocol):
FTP用于在客户端和服务器之间传输文件。它支持文件上传、下载、删除和重命名等操作,通常用于网站维护和文件共享。

SMTP(Simple Mail Transfer Protocol):
SMTP是用于在邮件客户端和邮件服务器之间传输电子邮件的协议。它定义了邮件的传输规则,确保邮件能够正确地从发件人发送到收件人。

POP3(Post Office Protocol 3):
POP3用于从邮件服务器下载邮件到本地设备。它是一种应用于电子邮件接收的协议,允许用户通过邮件客户端访问服务器上的电子邮件。

IMAP(Internet Message Access Protocol):
IMAP也是一种用于电子邮件的协议,与POP3类似,但它允许用户在邮件服务器上管理邮件,而不仅仅是下载。

DNS(Domain Name System):
DNS用于将域名转换为IP地址,使应用能够通过易记的域名访问网络资源。它在应用进程中提供域名解析服务。

RPC(Remote Procedure Call):
RPC是一种用于实现分布式计算的协议,允许一个进程调用另一个进程的过程。它在应用程序之间提供远程通信的机制。

WebSocket:
WebSocket是一种在客户端和服务器之间实现全双工通信的协议。它允许应用程序建立持久的连接,实时地推送数据而不需要客户端发起请求。

TCP(传输控制协议)是一种可靠的、面向连接的协议,常用于实现可靠的数据传输。在使用TCP的过程中,应用程序可以通过系统调用与操作系统内核进行交互。实现TCP服务为例:

在这里插入图片描述

socket(创建套接字):
int socket(int domain, int type, int protocol);
该系统调用用于创建一个套接字,套接字是通信的端点。参数domain指定协议族(如AF_INET表示IPv4),type指定套接字类型(如SOCK_STREAM表示流式套接字,即TCP),protocol指定具体的协议。

bind(绑定套接字地址):
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
该系统调用用于将一个本地地址(IP地址和端口号)绑定到套接字。sockfd是套接字描述符,addr是一个指向sockaddr结构的指针,描述了要绑定的地址信息。

listen(监听连接请求):
int listen(int sockfd, int backlog);
该系统调用用于使套接字处于监听状态,等待客户端的连接请求。sockfd是套接字描述符,backlog指定等待连接队列的最大长度。

accept(接受连接):
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
该系统调用用于接受客户端的连接请求,创建一个新的套接字用于与客户端进行通信。sockfd是监听套接字的描述符,addr是一个指向sockaddr结构的指针,用于存储客户端的地址信息。

connect(发起连接):
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
该系统调用用于发起与远程服务器的连接请求。sockfd是套接字描述符,addr是一个指向sockaddr结构的指针,描述了远程服务器的地址信息。

send(发送数据)和 recv(接收数据):
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
这两个系统调用用于在已建立的连接上发送和接收数据。sockfd是套接字描述符,buf是数据缓冲区,len是数据长度,flags是操作标志。

close(关闭套接字):
int close(int sockfd);
该系统调用用于关闭套接字连接。应用程序在完成数据传输后通常会调用close来释放资源。

有些东西没有去学习,比如电子邮件。。。需要用的时候再看吧

谢希仁第五版《计算机网络》学习笔记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/312391.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PTA——计算火车运行时间

本题要求根据火车的出发时间和达到时间&#xff0c;编写程序计算整个旅途所用的时间。 输入格式&#xff1a; 输入在一行中给出2个4位正整数&#xff0c;其间以空格分隔&#xff0c;分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数&#xff08;00-23&#xff0…

Pandas教程(二)—— 不同格式的数据读取

前言&#xff1a;几种常用数据格式的介绍 csv文件 1. 逗号分隔值文件&#xff0c;以纯文本形式&#xff08;记事本&#xff09;存储表格数据 2. 它是一种平面文件&#xff1a;即只存储数据和文字&#xff0c;不能存储公式、图表等 3. 更适合存储大数据&#xff0c;一般用来批…

docker里面不能使用vim的解决办法

docker里面不能使用vim的解决办法 目录 docker里面不能使用vim的解决办法 1.在使用时会出现 2.在使用这些都不能解决的时候考虑 3.测试是否可用 1.在使用时会出现 bash: vim: command not found 出现这种错误时首先考虑使用 apt-get update 然后在用 apt-get install …

Plantuml之EBNF语法介绍(二十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

数据库——建立ER模型及关系模型转换

​ 【实验内容及要求】 使用画图工具或MySQL Workbench等建模工具设计出相应的ER图&#xff0c;将局部ER图合并为一个整体ER模型&#xff0c;在ER模型中填加多样性约束&#xff0c;建立显示主键的ER模型&#xff0c;标识实体的属性&#xff0c;确认主键、外键。将上述ER图转化…

Kubernetes集群部署Rook Ceph实现文件存储,对象存储,块存储

Kubernetes集群部署Rook Ceph部署Ceph集群 1. Rook Ceph介绍 Rook Ceph是Rook项目中的一个存储方案&#xff0c;专门针对Ceph存储系统进行了优化和封装。Ceph是一个高度可扩展的分布式存储系统&#xff0c;提供了对象存储、块存储和文件系统的功能&#xff0c;广泛应用于提供…

《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识(17)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第1章 PCI总线的基本知识&#xff08;16&#xff09; 1.4 PCI总线的中断机制 PCI总线使用INTA#、INTB#、INTC#和INTD#信号向处理器发出中断请求。这些中断请求信号为低电平有效&#xff0c;并与处理器的中…

2024新年快乐

今天就不讲题解了&#xff0c;2024年&#xff0c;祝所有博客身体健康&#xff0c;粉丝越多&#xff0c;点赞越高&#xff01;&#xff01;&#xff01; #include<bits/stdc.h> using namespace std; int main(){cout<<"新年快乐!!";return 0&#xff1b;…

【第5期】前端Vue使用Proxy+Vuex(store、mutations、actions)跨域调通本地后端接口

本期简介 本期要点 本地开发前后端如何跨域调用全局请求、响应处理拦截器处理封装HTTP请求模块编写API请求映射到后端API数据的状态管理 一、 本地开发前后端如何跨域调用 众所周知&#xff0c;只要前端和后端的域名或端口不一样&#xff0c;就存在跨域访问&#xff0c;例如&…

java进阶(三)

IO与网络编程 3 输入输出流IO3.1 基础定义3.2 IO框架3.3 读取字节输入流-InputStream3.3.1 InputStream.read3.3.2 FileInputStream类说明 3.4读取字符输入流Reader3.4.1 Reader.read3.4.2 FileReader类说明 3.5 字节输出流OutputStream3.5.1 OutputStream.write3.5.2 FileOutp…

Django 学习教程- Django 入门案例

Django学习教程系列 Django学习教程-介绍与安装 前言 本教程是为 Django 5.0 编写的&#xff0c;它支持 Python 3.10 至以上。如果 Django 版本不匹配&#xff0c;可以参考教程 使用右下角的版本切换器来获取你的 Django 版本 &#xff0c;或将 Django 更新到最新版本。如果…

Android Studio如何创建尺寸大小及API通用的模拟器

目录 前言 一、操作步骤 二、总结 三、更多资源 前言 在开发移动应用程序的过程中&#xff0c;使用模拟器进行测试是一种常见和方便的方式。Android Studio是一款功能强大的集成开发环境&#xff0c;它提供了创建和管理模拟器的功能。在本文中&#xff0c;我们将介绍如何创…