个人如何建立公司网站,佛山短视频拍摄,石狮市,网站设计模板 优帮云每个应用层协议都是为了解决某一类应用问题#xff0c;而问题的解决又往往是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。 应用层的具体内容就是规定应用进程在通信时所遵循的协议。
应用层的许多协议都是基于客户服务器方式。即使是对等通信方式#x…每个应用层协议都是为了解决某一类应用问题而问题的解决又往往是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。 应用层的具体内容就是规定应用进程在通信时所遵循的协议。
应用层的许多协议都是基于客户服务器方式。即使是对等通信方式实质上也是一种特殊的客户服务器方式。 客户(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 代码所占的内存较小。对较小的计算机或某些特殊用途的设备是很重要这些设备不需要硬盘只需要周化了 TFTPUDP 和 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 ShellSSH取代了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.在浏览器的地址窗口中键入所要找的页面的URL2.在某一个页面中用鼠标点击一个可选部分这时浏览器会自动在因特网上找到所要链接的页面。
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 ProtocolSNMP是一种用于管理和监控网络设备的协议。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支持事件通知当设备状态发生变化时代理可以向管理站点发送通知。这种机制使得管理者能够实时了解网络设备的状态。
应用进程跨越网络的通信
应用进程跨越网络进行通信是通过网络协议实现的。网络协议定义了应用进程之间的通信规则和数据传输方式确保数据在网络中可靠、有序地传递。 以下是一些常见的用于应用进程通信的网络协议 HTTPHypertext Transfer Protocol HTTP是用于在Web浏览器和Web服务器之间传输超文本的协议。它是一个无状态的协议基于请求-响应模型常用于获取和发送网页内容。
HTTPSHypertext Transfer Protocol Secure HTTPS是HTTP的安全版本使用SSL/TLS协议进行数据加密和身份验证。它提供了更安全的通信通道广泛用于敏感数据的传输如在线支付和登录。
FTPFile Transfer Protocol FTP用于在客户端和服务器之间传输文件。它支持文件上传、下载、删除和重命名等操作通常用于网站维护和文件共享。
SMTPSimple Mail Transfer Protocol SMTP是用于在邮件客户端和邮件服务器之间传输电子邮件的协议。它定义了邮件的传输规则确保邮件能够正确地从发件人发送到收件人。
POP3Post Office Protocol 3 POP3用于从邮件服务器下载邮件到本地设备。它是一种应用于电子邮件接收的协议允许用户通过邮件客户端访问服务器上的电子邮件。
IMAPInternet Message Access Protocol IMAP也是一种用于电子邮件的协议与POP3类似但它允许用户在邮件服务器上管理邮件而不仅仅是下载。
DNSDomain Name System DNS用于将域名转换为IP地址使应用能够通过易记的域名访问网络资源。它在应用进程中提供域名解析服务。
RPCRemote Procedure Call RPC是一种用于实现分布式计算的协议允许一个进程调用另一个进程的过程。它在应用程序之间提供远程通信的机制。
WebSocket WebSocket是一种在客户端和服务器之间实现全双工通信的协议。它允许应用程序建立持久的连接实时地推送数据而不需要客户端发起请求。
TCP传输控制协议是一种可靠的、面向连接的协议常用于实现可靠的数据传输。在使用TCP的过程中应用程序可以通过系统调用与操作系统内核进行交互。实现TCP服务为例 socket创建套接字 int socket(int domain, int type, int protocol); 该系统调用用于创建一个套接字套接字是通信的端点。参数domain指定协议族如AF_INET表示IPv4type指定套接字类型如SOCK_STREAM表示流式套接字即TCPprotocol指定具体的协议。
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来释放资源。
有些东西没有去学习比如电子邮件。。。需要用的时候再看吧
谢希仁第五版《计算机网络》学习笔记