详细讲解计算机网络——应用层
应用层协议
在传输层之上,便是应用层。传输层的 udp 报文和 tcp 报文段的数据部分就是应用层交付的数据。
应用层直接为用户提供服务,应用层有很多协议,每一个协议对应着计算机上的一个服务。
不同类型的网络应用有不同的通信规则,因此应用层协议是多种多样的,比如dns、ftp、telnet、smtp、http、rip、nfs等协议都是用于解决其各自的一类问题。
应用层协议(application-layer protocol)定义了运行在不同端系统上的应用程序如何相互传递报文。
应用层协议定义了:
一、dns
1、dns 是什么
dns 全名叫 domain name server,中文俗称“域名服务器”
在 internet 上域名与 ip 地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识ip地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,dns 就是进行域名解析的服务器,将域名(机器名) 转换为 ip地址。
dns 是一个分布式数据库,提供了主机名和 ip 地址之间相互转换的服务。
这里的分布式数据库是指,每个站点只保留它自己的那部分数据。
如果整个因特网都使用一个域名服务器,负荷太大, 所以 dns 设计成一个分布式的数据库,即使单个主机出故障也不会妨碍整个 dns 系统。
另外 dns 使得大多数域名都能在本地解析,仅少量解析需要在因特网上通信,因此 dns 效率很高。
域名和 ip 是一对一关系吗?
- 实际上域名和 ip 是多对多关系。
- 一个 ip 可以被多个域名指向(购买的虚拟主机)
- 一个域名下也可以有多个 ip(负载均衡)
2、域名结构
- 域名指的是用点符号分割的计算机名字。
- ip地址对应着网络上的各个机器,但由于ip地址没有具体字面含义,难以记忆,有时ip地址还会经常更换。
- 引入域名来标识某台机器。域名是全球唯一的,每次申请域名,都会在域名服务器上查询是否存在。
- 所有域名都是以“ . ”开始的。
域名结构是树状结构,树的最顶端代表根域名
- 下一层是 .com、.cn 等*域名。
- 再下层就是二级、三级、四级域名。
- *域名代表服务器或网站的性质常见有com(商用)、cn(中国)、net(提供信息)、edu(教育)、gov(*)等等。
- 二级域名:每个人都可以申请的,可以在*域名下申请,比如 www.esyc.com中esyc就是一个二级域名。在二级域名下你就可以注册其他域名了。
- 三级域名:www.mail.esyc.com中mail就是三级域名。在www.esyc.com这个域名注册这个三级域名的时候无需在征得com域名的同意。即一个域创建子域的时候不需要征求上级同意。
当然域名可以3级可以4级可以5级等等,级别是没有限制的,只需要满足,一个域名的各个组成部分不超过63个字符长,总长不超过255个字符长。
3、域名服务器
● 根域名服务器:最高层次的域名服务器,根域名服务器知道所有*域名服务器的域名和ip地址。任何一个本地域名服务器要对互联网上的任何域名进行解析,只要自己无法解析,就会首先求助于根域名服务器。
● *域名服务器:管理在该*域名服务器下注册的所有二级域名。当收到dns查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步需要去找的域名服务器的ip地址)。
● 权限域名服务器(权威域名服务器):负责一个区的域名服务器。当一个权威域名服务器不能给出最终的查询结果时,就会告诉发出请求方,下一步应该去找哪一个权威域名服务器。
● 本地域名服务器(递归服务器):主机发出 dns 查询请求时,该请求首先会发给本地域名服务器。
理论上讲,任何标准域名的解析都需要经过层级式的域名解析。
即首先要通过第一层的根域名服务器的指引,才能去下面的*域名服务器寻找。
但是实际应用,提供接入服务的服务商的缓存域名服务器上可能已经有了域名与 ip 映射的缓存。
4、dns 解析流程
● 在浏览器中输入 www.qq.com 域名,浏览器先检查自身缓存中有没有被解析过的这个域名对应的 ip 地址,如果有,就调用这个 ip 映射,完成域名解析。
● 如果浏览器缓存中未命中,操作系统会检查本地的 hosts 文件是否有该域名和 ip 的映射,如果有,就调用这个ip地址映射,完成域名解析。
● 如果 hosts 里也没有这个域名的映射,则向本地域名服务器(ldns)发送请求,看是否有这个域名的映射关系,如果有,直接返回,完成域名解析。(ldns 一般在城市的某个角落,距离你不会很远,一般都会缓存域名解析结果,大约 80% 的域名解析到这里就完成了)
● 如果 ldns 仍然未命中,ldns 就向根服务器发送查询请求,根服务器里面记录的都是各个*域所在的服务器 ip,根服务器会根据域名后缀返回对应的*域名服务器位置。当向根请求 www.qq.com 的时候,根服务器就会返回 .com 服务器的位置信息。
● ldns 拿到 .com 的权威服务器地址以后,就会询问 .com 的权威服务器,知不知道 www.qq.com 的位置。这个时候 .com 权威服务器查找并返回 www.qq.com 服务器的地址。ldns 继续向 www.qq.com 的权威服务器去查询这个地址,由 www.qq.com 的服务器给出了 ip 地址:202.173.11.10
● ldns 服务器得到了 www.qq.com 对应的 ip 地址后以 dns 应答包的方式传递给客户机,并把域名和对应的 ip 地址在本地缓存下来。
● 客户机根据 ip 地址建立连接,并在客户端缓存域名/ip映射。
简单来说,其实只有四步:
5、dns 服务器查询方式
(1)迭代查询
dns 服务器会向客户机提供其他能够解析查询请求的 dns 服务器地址。
- 当客户机发送查询请求时,dns 服务器并不直接回复查询结果,而是告诉客户机另一台 dns 服务器地址,
- 客户机再向这台 dns 服务器提交请求,依次循环直到返回查询的结果为止。
- 迭代查询返回的是最佳的查询点或者主机地址。本地域名服务器向根域名服务器的查询通常是采用迭代查询。
(2)递归查询
dns 服务器必须使用一个准确的查询结果回复客户机。
- 如果dns 服务器本地没有存储查询目标的 dns 信息,那么该服务器会去询问其他服务器(即代替客户机去查询,而不是让客户机自己进行下一步查询),并将返回的查询结果提交给客户机。
- 因此,递归查询返回的查询结果或者是所要查询的ip地址,或者是报错(表示无法查询到所需的 ip 地址)。主机向本地域名服务器的查询一般都是采用递归查询。
6、dns 缓存机制
dns 缓存不仅产生于操作系统,浏览器、应用程序以及 isp(网络服务提供商)都会对 dns 进行缓存。
一条域名的 dns 记录会在本地有两种缓存:浏览器缓存和操作系统缓存。
- 在浏览器中访问的时候,会优先访问浏览器缓存,如果未命中再访问os缓存,
- 最后再访问 dns 服务器(一般是isp提供),然后 dns 服务器会递归式的查找域名记录并返回结果。
dns 记录会有一个 ttl 值(time to live,存活时间),单位是秒,代表这条记录最长有效期是多少。
浏览器 dns 缓存的时间跟 dns 服务器返回的 ttl 值无关。
应用程序的 dns 缓存是由应用程序控制的,比如 java 网络应用程序的 dns 缓存是由 jvm 的缓存策略控制的。
os 缓存会参考 dns 服务器响应的 ttl 值,但是不完全等于 ttl 值。
● 浏览器 dns 缓存:浏览器在获取网站域名的实际 ip 地址后会对其 ip 进行缓存,减少网络请求的损耗。每种浏览器都有一个固定的 dns 缓存时间,其中 chrome 的过期时间是 1 分钟,在这个期限内不会重新请求 dns。chrome 浏览器看本身的 dns 缓存时间比较方便,在地址栏输入:chrome://net-internals/#dns,就能看到看浏览器的缓存。
● java dns 缓存:java 网络应用程序的 dns 缓存是由 jvm 的缓存策略控制的,可以直接设置缓存过期时间:java.security.security.setproperty(“networkaddress.cache.ttl”, 10);
● isp dns 缓存:一般 isp 服务器上缓存时间(15 min)比 os 缓存时间长,就算刷新了本机操作系统的缓存,isp 上仍然保留。
● windows dns 缓存:windows 访问 dns 后会把记录保存一段短暂的时间,可通过 ipconfig /displaydns 查看 windows 的 dns 缓存、通过 ipconfig /flushdns 来清除缓存。
● ios dns 缓存:按照官方文档说法,ios 设备上每 24 小时刷新一次 dns 缓存。
7、dns 使用 udp 还是 tcp
dns 占用 53 号端口,同时使用 tcp 和 udp 协议。
dns 在进行区域传输的时候使用 tcp 协议,其它时候则使用 udp 协议;
dns 有两种类型的 dns 服务器:主 dns 服务器和辅助 dns 服务器
- 在一个区中主 dns 服务器从自己本机的数据文件中读取该区的 dns 数据信息而辅助 dns 服务器则从区的主 dns 服务器中读取该区的 dns 数据信息。
- 当一个辅助 dns 服务器启动时,它需要与主 dns 服务器通信,并加载数据信息,即区域传输(zone transfer)。
区域传送(主、辅 dns 服务器通信)时使用 tcp
辅 dns 服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。
如有变动,则会执行一次区域传送,进行数据同步。
区域传送将使用 tcp而不是 udp,因为数据同步传送的数据量比较大。
tcp是一种可靠的连接,保证了数据的准确性。
域名解析时使用 udp
客户端向 dns 服务器查询域名,一般返回的内容都不超过 512 字节,用 udp 传输即可。不用经过 tcp 三次握手,这样 dns 服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向 dns 服务器查询的时候使用 tcp,但事实上,很多 dns 服务器进行配置的时候,仅支持 udp 查询包。
二、万维网
1、万维网概述
- 万维网 www (world wide web) 并非某种特殊的计算机网络。
- 万维网是一个大规模的、联机式的信息储藏所。
- 万维网用链接的方法能非常方便地从互联网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。
这种访问方式称为“链接”。
通俗的来说万维网的使用就是我们通过游览器进行网络的通信,得到的是网页及其其他的数据。
(1)超媒体与超文本
- 万维网是分布式超媒体 (hypermedia) 系统,它是超文本 (hypertext) 系统的扩充。
- 一个超文本由多个信息源链接而成。
- 利用一个链接可使用户找到另一个文档。
- 这些文档可以位于世界上任何一个接在互联网上的超文本系统中。
- 超文本是万维网的基础。
- 超媒体与超文本的区别是文档内容不同。超文本文档仅包含文本信息,而超媒体文档还包含其他表示方式的信息,如图形、图像、声音、动画,甚至活动视频图像。
(2)万维网的工作方式
- 万维网以客户/服务器方式工作。
- 浏览器就是在用户计算机上的万维网客户程序。
- 万维网文档所驻留的计算机则运行服务器程序,因此这个计算机也称为万维网服务器。
- 客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档。
- 在一个客户程序主窗口上显示出的万维网文档称为页面(page)。
(3)万维网必须解决的问题
1)怎样标志分布在整个互联网上的万维网文档?
使用统一资源定位符 url (uniform resource locator) 来标志万维网上的各种文档。使每一个文档在整个互联网的范围内具有唯一的标识符 url。
2)用何协议实现万维网上各种超链的链接?
在万维网客户程序与万维网服务器程序之间进行交互所使用的协议,是超文本传送协议 http (hypertext transfer protocol)。http 是一个应用层协议,它使用 tcp 连接进行可靠的传送。
3)怎样使各种万维网文档都能在互联网上的各种计算机上显示出来,同时使用户清楚地知道在什么地方存在着超链?
超文本标记语言 html (hypertext markup language) 使得万维网页面的设计者可以很方便地用一个超链从本页面的某处链接到互联网上的任何一个万维网页面,并且能够在自己的计算机屏幕上将这些页面显示出来。
4)怎样使用户能够很方便地找到所需的信息?
为了在万维网上方便地查找信息,用户可使用各种的搜索工具(即搜索引擎)。
2、超文本传送协议 http
(1)http 的操作过程
为了使超文本的链接能够高效率地完成,需要用 http 协议来传送一切必须的信息。
从层次的角度看,http 是面向事务的(transaction-oriented)应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
(2)请求一个万维网文档所需的时间
每次的数据传输度需要进行建立连接与释放连接的过程,为了提高传输的效率,提出了以下几种方案:
不释放连接、流水操作、代理服务器。
1)不释放连接
- http/1.0 协议每次传完一个万维网文档后会释放连接,故每请求一个文档需要2×rtt的开销。
- 万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 http 请求报文和响应报文。
- 这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。
- 目前一些流行的浏览器(例如,ie 6.0)的默认设置就是使用 http/1.1。
2)流水与非流水
- 非流水线方式:客户在收到前一个响应后才能发出下一个请求。这使得客户每访问一次对象都只需要一个 rtt 时间。但服务器在发送完一个对象后,其 tcp 连接就处于空闲状态,浪费了服务器资源。
- 流水线方式:客户在收到 http 的响应报文之前就能够接着发送新的请求报文。一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。使用流水线方式时,客户访问所有对象只需要花费一个 rtt时间,使 tcp 连接中的空闲时间减少,提高了下载文档效率。
3)代理服务器
- 代理服务器 (proxy server) 又称为万维网高速缓存 (web cache),它代表浏览器发出 http 请求。
- 万维网高速缓存把最近的一些请求和响应暂存在本地磁盘中。
- 当与暂时存放的请求相同的新请求到达时,万维网高速缓存就把暂存的响应发送出去,而不需要按 url 的地址再去互联网访问该资源。
- 代理服务器既是一个服务器,有时也是一个客户。
3、万维网的文档
(1)超文本标记语言 html
html
(hypertext markup language) 中的 markup 的意思就是“设置标记”。
当浏览器从服务器读取 html 文档后,就按照 html 文档中的各种标签,根据浏览器所使用的显示器尺寸和分辨率大小,重新排版并恢复出所读取的页面。
两种不同的链接:
html还规定了链接的设置方法。每个链接都有一个起点和终点。
xml
- xml (extensible markup language)是可扩展标记语言,它和html很相似。
- 但xml的设计宗旨是传输数据,而不是显示数据(html是为了在浏览器上显示数据)。
- xml 不是要替换 html,而是对 html 的补充。
xhtml
- xhtml (extensible html) 是可扩展超文本标记语言,它与 html 4.01 几乎是相同的。
- 但 xhtml 是更严格的 html 版本,也是一个 w3c 标准(2000年1月),是作为一种 xml 应用被重新定义的 html,并将逐渐取代 html。
- 新的浏览器都支持 xhtml。
css
- css (cascading style sheets) 是层叠样式表,它是一种样式表语言,用于为 html 文档定义布局。
- css 与 html 的区别就是:html 用于结构化内容,而 css 则用于格式化结构化的内容。
(2)动态万维网文档
静态文档是指该文档创作完毕后就存放在万维网服务器中,在被用户浏览的过程中,内容不会改变。
动态文档是指文档的内容是在浏览器访问万维网服务器时才由应用程序动态创建。
动态文档和静态文档之间的主要差别体现在服务器一端。
这主要是文档内容的生成方法不同。而从浏览器的角度看,这两种文档并没有区别。
cgi (common gateway interface) 是一种标准,它定义了动态文档应如何创建,输入数据应如何提供给应用程序,以及输出结果应如何使用。万维网服务器与 cgi 的通信遵循 cgi 标准。
(3)活动万维网文档
浏览器屏幕的连续刷新
每当浏览器请求一个活动文档时,服务器就返回一段程序副本在浏览器端运行。
活动文档程序可与用户直接交互,并可连续地改变屏幕显示。
由于活动文档技术不需要服务器的连续更新传送,对网络带宽的要求也不会太高。
三、http 与 https 协议
- http 是用于从万维网(www)服务器传输超文本到本地浏览器的传送协议,是基于 tcp/ip 协议之上的应用层协议。
- http 定义了客户端如何从服务器请求 web 页面,以及服务器如何把 web 页面传送给客户端。
- http 采用了请求 / 响应模型,客户端向服务器发送一个请求报文,服务器以一个状态行作为响应。
1、http 特点
(1)简单快速:
客户向服务器请求服务时,只需传送请求方法和路径。
请求方法常用的有 get、head、post。
每种方法规定了客户与服务器联系的类型不同。
由于 http 协议简单,使得 http 服务器的程序规模小,因而通信速度很快。
(2)灵活:
http 允许传输任意类型的数据对象。 正在传输的类型由 content-type 加以标记。
(3)无连接:
无连接的含义是限制每次连接只处理一个请求。
服务器处理完客户的请求,并收到客户的应答后立即断开连接。
采用这种方式可以节省传输时间。
http使用tcp协议作为它的支撑运输协。
http客户首先发起一个与服务器的tcp连接,一旦建立连接,该浏览器和服务器就可以通过套接字接口访问tcp。
(4)无状态保存:
http 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。
- 缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大(缺点)。
- 另一方面,在服务器不需要先前信息时它的应答就较快,可以更快地处理大量事务(优点)。
补充:对于无状态保存,如果用户登录一家购物网站,希望即使用户跳转到该站的其他页面也能继续保持登录状态。http/1.1 虽然是无状态协议,但为了实现保存状态的功能,引入了 cookie 技术。
对于无连接,早期的 http 是请求响应之后直接断开,但现在的 http/1.1 不直接断开,而是等几秒钟,如果用户在这几秒钟之内有新的请求,那么还是通过之前的连接通道来收发消息,如果过了这几秒钟用户没有发送新的请求,那么就会断开连接,这样可以提高效率,减少短时间内建立连接的次数,因为建立连接也是耗时的。
(5)支持 b/s 及 c/s 模式。
2、http 各版本比较
3、http 的请求与响应报文
(1)http 请求(request)
客户端发送一个 http 请求到服务器的请求消息包括:请求行(request line)、请求头部(header)、空行和请求数据四个部分。
http 请求行
http 请求头
请求头信息为 “名:值” 对,之间用冒号分隔。
请求头参数包括:
空行
http 请求头的最后会有一个空行,表示请求头部结束,接下来为请求数据,空行一定要有。
请求数据
请求数据不一定有,比如 get 请求就没有请求数据。
(2)http 响应(response)
服务器接收并处理客户端发过来的请求后会返回一个 http 的响应消息,响应包括:状态行、响应头部、空行和响应正文四个部分。
状态行:
包括协议版本、状态码和状态码描述。协议版本和请求报文一致,状态码是一个 3 位数字。
比较常见的状态码有:
- 200 表示响应成功;
- 302 表示跳转,跳转地址通过响应头中的 location 属性指定;
- 400 表示客户端请求有语法错误,不能被服务器识别;
- 403 表示服务器接收到请求,但拒绝提供服务(认证失败);
响应头部
4、http 请求响应步骤
(1)客户端连接到 web 服务器
用户确定要访问网页的url,并将其输入到浏览器的地址栏中,浏览器向dns服务器发出请求,获取web服务器域名所对应的ip地址。
http 客户端通常就是浏览器,与 web 服务器的 http 端口(默认为 80)建立一个 tcp 套接字连接,比如http://www.abc.com;
(2)发送 http 请求
通过 tcp 套接字,客户端向 web 服务器发送一个请求传输网页的 http 请求报文。
一个请求报文由请求行、请求头部、空行和请求数据 4 部分组成;
(3)服务器接受请求并返回 http 响应
web 服务器解析请求,定位请求资源并将资源复本写到 tcp 套接字,由客户端读取。
一个响应由 状态行、响应头部、空行和响应数据 4 部分组成;
(4)释放 tcp 连接
若 connection 模式为 close,则服务器主动关闭 tcp 连接,客户端被动关闭连接,tcp 连接释放;
若 connection 模式为 keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
(5)客户端浏览器解析 html 内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。
然后解析每一个响应头,响应头告知以下为若干字节的 html 文档和文档的字符集。
客户端浏览器读取响应数据 html,根据 html 的语法对其进行格式化,并在浏览器窗口中显示;
5、https 协议
https(secure hypertext transfer protocol)安全超文本传输协议,使用安全套接字层(ssl)进行信息交换
即 https 是使用了 tls/ssl 加密的 http 协议,基于非对称加密算法和对称加密算法的协作使用。
tls/ssl 指加密的规范,介于 tcp 和 http 之间的安全协议,不影响原有的 tcp 和 http 协议。
(1)tls/ssl协议的三个特性
tls/ssl 协议就是客户端和服务器之间实现安全交换信息的协议。
tls/ssl 的功能实现主要依赖于三类基本算法:散列函数 hash、非对称加密和对称加密。
- 先利用非对称加密实现身份认证和密钥协商
- 再通过对称加密算法用协商好的密钥对数据加密
- 最后基于散列函数验证信息的完整性
(2)ssl 握手过程
● clienthello:客户端请求建立 ssl 连接,向服务器提供以下信息:
1)支持的 ssl 协议版本,比如 tls1.0;
2)客户端生成的随机数,用于后续对称加密阶段生成对话密钥;
3)支持的加密方法,比如rsa公钥加密。
● severhello:服务器对客户端的请求发出回应,包括以下信息:
1)确认使用的 ssl 协议版本,如果服务器与客户端支持的版本不一致,服务器关闭通信;
2)服务器生成的随机数,用于后续对称加密阶段生成对话密钥;
3)确认使用的加密方法,比如 rsa 公钥加密;
4)服务器证书。(如果服务器也需要确认客户端的身份,就会再包含一项信息,即要求客户端提供客户端证书,比如金融机构只允许认证客户连入自己的网络)
● 客户端收到服务器回应后,验证服务器证书的合法性,如果证书非可信机构颁布、证书已过期等,会提出警告,选择是否还要继续通信。如果证书没有问题,客户端就从证书中取出服务器的公钥。然后向服务器发送三个信息:
1)用公钥加密的随机数(pre-master key);
2)编码改变通知,表示随后的信息将用双方商量好的加密方法和密钥发送;
3)客户端握手结束通知,这一项同时也是前面发送的所有内容的 hash 值,用于供服务器校验。
● 服务器的最后回应,服务器收到客户端的 pre-master key 之后,计算生成本次会话所用的会话密钥,然后向客户端发送以下信息:
1)编码改变通知,表示随后的信息将用双方商量好的加密方法和密钥发送;
2)服务器握手结束通知,这一项同时也是前面发送的所有内容的 hash 值,用于供客户端校验。
握手阶段结束,客户端和服务器进入加密通信阶段,就是使用 http 协议,只不过通信内容都用上面商定的会话密钥进行了加密。
(3)非对称加密和对称加密
1)非对称加密:用于在 ssl 握手过程中加密生成的密码。一对多通信,分为公钥和私钥,公钥加密的信息只有私钥能解开(甚至公钥都不能解密出自己加密的信息),因此掌握公钥的不同客户端之间不能互相解密信息。常见非对称加密算法有 rsa、ecc、dh 等。
2)对称加密:用于加密真正要传输的数据。一对一通信,使用相同的密钥对信息进行加密和解密,只有掌握密钥才能获取信息,能够防止信息窃听。常见的对称加密算法有 aes-cbc、des、3des、aes-gcm 等。不同节点采用的对称密钥不同,从而保证了信息只能由通信双方获取。
3)hash 算法:用于验证数据的完整性。哈希函数特性是单向不可逆,对输入非常敏感,输出长度固定,对原始数据的任何修改都会改变散列函数的结果,在这里用于防止信息篡改并验证数据的完整性。常见的算法有 md5、sha1、sha256(secure hash algorithm,安全哈希算法)。散列函数不能脱离加密进行信息防篡改,因为明文传输时中间人可以修改信息后重新计算信息摘要,因此需要对传输的信息及信息摘要进行加密。
6、http 和 https 区别
https 优点:
https 缺点:
7、web 缓存
web缓存(web cache)也叫代理服务器(proxy server)。
(1)web缓存的作用
(2)工作过程
1) 浏览器和代理服务器建立tcp连接,并将http请求发送到代理服务器
2)代理服务器见检查本地已存储对象复本。如果存储对象在其中,代理服务器向浏览器发送http响应报文返回该对象
3)如果代理服务器中没有该请求对象,代理服务器和源服务器建立tcp连接,然后代理服务器向源服务器发送一个目标对象的http请求。源服务器接到请求后,将请求对象通过http响应发送给代理服务器
4)代理服务器收到请求的对象时,在本地建立该对象的副本,然后通http响应将对象发送给浏览器。
8、web 页面请求过程
(1)dhcp 配置主机信息
假设主机最开始没有 ip 地址以及其它信息,那么就需要先使用 dhcp 来获取。
① 主机生成一个 dhcp 请求报文,并将这个报文放入具有目的端口 67 和源端口 68 的 udp 报文段中。
② 该报文段则被放入在一个具有广播 ip 目的地址(255.255.255.255) 和源 ip 地址(0.0.0.0)的 ip 数据报中。
③ 该数据报则被放置在mac 帧中,该帧具有目的地址 ff:ff:ff:ff:ff:ff,将广播到与交换机连接的所有设备。
④ 连接在交换机的 dhcp 服务器收到广播帧之后,不断地向上分解得到 ip 数据报、udp 报文段、dhcp 请求报文,之后生成 dhcp ack 报文,该报文包含以下信息:ip 地址、dns 服务器的 ip 地址、默认网关路由器的 ip 地址和子网掩码。该报文被放入 udp 报文段中,udp 报文段有被放入 ip 数据报中,最后放入 mac 帧中。
⑤ 该帧的目的地址是请求主机的 mac 地址,因为交换机具有自学习能力,之前主机发送了广播帧之后就记录了 mac 地址到其转发接口的交换表项,因此现在交换机就可以直接知道应该向哪个接口发送该帧。
⑥ 主机收到该帧后,不断分解得到 dhcp 报文。之后就配置它的 ip 地址、子网掩码和 dns 服务器的 ip 地址,并在其 ip 转发表中安装默认网关。
(2)arp 解析 mac 地址
①: 主机通过浏览器生成一个 tcp 套接字,套接字向 http 服务器发送 http 请求。为了生成该套接字,主机需要知道网站的域名对应的 ip 地址。
②: 主机生成一个 dns 查询报文,该报文具有 53 号端口,因为 dns 服务器的端口号是 53。
③: 该 dns 查询报文被放入目的地址为 dns 服务器 ip 地址的 ip 数据报中
④: 该 ip 数据报被放入一个以太网帧中,该帧将发送到网关路由器。
⑤: dhcp 过程只知道网关路由器的 ip 地址,为了获取网关路由器的 mac 地址,需要使用 arp 协议。
⑥: 主机生成一个包含目的地址为网关路由器 ip 地址的 arp 查询报文,将该 arp 查询报文放入一个具有广播目的地址(ff:ff:ff:ff:ff:ff)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧转发给所有的连接设备,包括网关路由器。
⑦: 网关路由器接收到该帧后,不断向上分解得到 arp 报文,发现其中的 ip 地址与其接口的 ip 地址匹配,因此就发送一个 arp 回答报文,包含了它的 mac 地址,发回给主机。
(3)dns 解析域名
①: 知道了网关路由器的 mac 地址之后,就可以继续 dns 的解析过程了。
②: 网关路由器接收到包含 dns 查询报文的以太网帧后,抽取出 ip 数据报,并根据转发表决定该 ip 数据报应该转发的路由器。
③:因为路由器具有内部网关协议(rip、ospf)和外部网关协议(bgp)这两种路由选择协议,因此路由表中已经配置了网关路由器到达 dns 服务器的路由表项。
④: 到达 dns 服务器之后,dns 服务器抽取出 dns 查询报文,并在 dns 数据库中查找待解析的域名。
⑤: 找到 dns 记录之后,发送 dns 回答报文,将该回答报文放入 udp 报文段中,然后放入 ip 数据报中,通过路由器反向转发回网关路由器,并经过以太网交换机到达主机。
(4)http 请求页面
①: 有了 http 服务器的 ip 地址之后,主机就能够生成 tcp 套接字,该套接字将用于向 web 服务器发送 http get 报文。
②: 在生成 tcp 套接字之前,必须先与 http 服务器进行三次握手来建立连接。生成一个具有目的端口 80 的 tcp syn 报文段,并向 http 服务器发送该报文段。
③: http 服务器收到该报文段之后,生成 tcp syn ack 报文段,发回给主机。
④: 连接建立之后,浏览器生成 http get 报文,并交付给 http 服务器。
⑤: http 服务器从 tcp 套接字读取 http get 报文,生成一个 http 响应报文,将 web 页面内容放入报文主体中,发回给主机。
⑥: 浏览器收到 http 响应报文后,抽取出 web 页面内容,之后进行渲染,显示 web 页面。
四、远程终端协议 telnet
telnet 是一个简单的远程终端协议,也是互联网的正式标准。
用户用 telnet 就可在其所在地通过 tcp 连接注册(即登录)到远地的另一个主机上(使用主机名或 ip 地址)。
telnet 能将用户的击键传到远地主机,同时也能将远地主机的输出通过 tcp 连接返回到用户屏幕。
这种服务是透明的,因为用户感觉到好像键盘和显示器是直接连在远地主机上。
客户/服务器方式
现在由于 pc 的功能越来越强,用户已较少使用 telnet 了。telnet 也使用客户/服务器方式。
在本地系统运行 telnet 客户进程,而在远地主机则运行 telnet 服务器进程。
和 ftp 的情况相似,服务器中的主进程等待新的请求,并产生从属进程来处理每一个连接。
telnet 使用网络虚拟终端 nvt 格式 。
网络虚拟终端 nvt 格式
客户软件把用户的击键和命令转换成 nvt 格式,并送交服务器。
服务器软件把收到的数据和命令,从 nvt 格式转换成远地系统所需的格式。
向用户返数据时,服务器把远地系统的格式转换为 nvt 格式,本地客户再从 nvt 格式转换到本地系统所需的格式。
五、ftp
文件传输协议(filetransfer protocol,ftp)属于 tcp/ip 协议族的应用层协议,其传输层使用的是 tcp,基于客户机/服务器模式工作,为数据传输提供了可靠保证。
ftp的工作过程
其实就是客户机程序根据用户需要发送命令,服务器程序响应命令的过程。
需要建立两种类型的连接:控制连接和数据连接。
- 控制连接传送客户机程序发出的命令和服务器返回的响应信息
- 而数据连接则负责传输文件的内容。
流程
(1)启动ftp服务器:
由于ftp采用了客户机/服务器工作模式,因此在创建ftp会话之前,首先必须启动ftp服务器,并使其处于等待客户机程序的ftp请求状态。
(2)启动ftp客户机程序并建立控制连接:
启动ftp客户机程序,并向ftp服务器的21端口(控制连接端口)发出主动连接的请求,以期获得ftp服务器的相应权限。服务器响应请求后便在用户协议解释器和服务器协议解释器之间建立了一条tcp连接。
(3)建立数据连接并进行文件传输:
用户通过客户机程序输入ftp命令,服务器接收命令。如果命令正确且需要进行文件传输,服务器使用tcp20端口在双方之间建立另一条tcp连接,即数据连接,并通过该连接进行文件传输。当本次命令的文件传输完毕,关闭该数据连接。
(4)关闭ftp:
用户执行完其所需的ftp命令后,发出退出ftp命令,控制连接关闭,本次ftp服务结束。
常见的命令下:
六、电子邮件传输协议
一个电子邮件系统由三部分组成:
用户代理、邮件服务器以及邮件协议。
需要发送者邮件代理、发送者邮件服务器、接收者邮件服务器,接收者代理4个程序的参与。
● 邮件服务代理(邮件服务器)mta:邮件服务代理通常是计算机系统中的一个进程,负责把邮件从源端传输到目的端。
● 用户代理:用户代理就是我们平时见到的gmail,qq邮箱之类的,其中有查看邮件等功能。
● 邮件传输过程:用户编写邮件后会存放在邮件服务器,发送时根据目的邮箱地址从dns查找对方的邮件服务器地址并发送,目的邮件服务器将邮件存储 。
邮件协议包含发送协议和读取协议,发送协议常用 smtp,读取协议常用 pop3 和 imap。
电子邮件格式:
1、smtp(simple mail transfer protocol)
简单邮件传输协议smtp(下层协议tcp,端口25):一般用于发送邮件即由用户代理发送到邮件服务器,或邮件服务器到达目的邮件服务器。 smtp 是建立在传输层协议 tcp 上的可靠高效的邮件传输协议,采用请求/应答方式来实现。整个工作过程包括连接建立、邮件传送和连接释放3个阶段。
(1)连接建立:smtp是基于客户机/服务器模式工作的,邮件服务器在tcp的25端口守候客户机的请求。当需要发送邮件时,发送主机的smtp客户机向连接主机的smtp服务器的tcp端口25发出建立连接请求,得到服务器确认后连接建立。此后,smtp客户机再次向smtp服务器发送helo命令,并附上发送方主机名以确认smtp服务器是否已经准备好接收邮件。如果smtp服务器应答“250 xxxx”表示已准备好接收邮件。(2)邮件传送:smtp客户机得到smtp服务器的肯定回答后,随即可利用mail命令告诉smtp服务器新的邮件发送操作已经开始。如果smtp服务器已经准备好接收邮件,则以250应答代码应答。其后smtp客户机可以用rcpt命令发送邮件接收者的目的地址,以便smtp服务器把邮件内容最终传送到收件人的邮箱中。如果命令被接收,则返回250应答码。然后smtp客户机可利用data命令告诉smtp服务器下面将要发送邮件内容。如果命令被接收,则smtp服务器以354应答码应答,并认定以下的各行都是邮件内容。发送完毕后,再发送
2、pop3
邮局协议版本3pop3协议(下层协议tcp,端口110)用于由邮件服务器接收邮件到用户代理端。
(1)只要用户从服务器上读取了邮件,就把该邮件删除,但是目前改进的 pop3 已经全面支持下载而不删除原邮件。
(2)无论你在客户端做了任何操作(如移动、标记),都不会反映到服务器上,也就是只能单方面地从服务器“读取”。pop3协议所用的是110端口。
3、imap
交互邮件访问协议imap协议(下层协议tcp,端口143)用于由邮件服务器接收邮件到用户代理端。
imap 协议中客户端和服务器上的邮件保持同步,如果不手动删除邮件,那么服务器上的邮件也不会被自动删除。
imap 这种做法可以让用户随时随地去访问服务器上的邮件。
同时它与 pop3 的本质区别在于,在客户端的操作(包括删除)都会反映到服务器上,是一个双向的通信。
七、socket
tcp下的socket
处于应用层和运输层之间,给出了一个接口,可以使用tcp协议进行通信。
tcp 下 socket 流程:
到此这篇关于详细讲解计算机网络——应用层的文章就介绍到这了,更多相关计算机网络应用层内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!