• 程序员必学的计算机网络知识(应用层)


    写在前面的话:今天是中秋节的前一天,下午开始放假了,教室只有我一个人,没有小伙伴。我的心也随之有点躁动,下午听了一首《消愁》继续开干。让自己埋头学习五分钟后,之前不想学,现在居然不想走了。也是没谁了!我是梦阳辰,未来我陪你一起成长。(文章较长,建议收藏再看哦)

    01.引入

    1.应用层解决的问题(应用层是干嘛的)
    我们用QQ发送数据给朋友的电脑上,但是如何将这些数据构造成报文呢?在这些报文中的各个字段的含义是什么?进程何时发送这些报文?

    解决这个问题就需要通信规则,不同的应用对之间的通信,就需要不同的通信规则。所以应用层具体的内容就是来精确的定义这些内容。

    Web 的应用层协议是 HTTP ,它定义了在浏览器和 Web 服务器之间传输的报文格式和序列。

    2.那应用层协议应该定义哪些内容呢?
    1)应用进程交换的报文类型,如:请求报文和响应报文。

    2)各种报文类型的语法:如报文中的各个字段及其详细的描述。

    3)字段的含义:即包含在字段中的信息的含义。

    4)进程何时,如何发送报文,以及对报文进行响应的规则。

    注意:应用层交互的数据单元称为报文。

    有些应用层协议是由RFC 文档定义的,因此它们位于公共域中 例如, Web 的应用层协议 HTTP (超文本传输协议[RFC 2616J) 就作为一个RFC 可供使用 如果浏览器开发者遵从 HTTPRFC 规则,所开发出的浏览器就能访问任何遵从该文档标准的 Web 服务器并获取相应 Web页面 ,还有很多别的应用层协议是专用的,有意的不为公共域使用 ,例如,kype使用了专用的应用层协议。
    3.网络应用与应用层协议

    区分网络应用和应用层协议是很重要的,应用层协议只是网络应用的一部分。

    举个例子:
    Web 是一种客户-服务器应用,它允许客户按照需求从 Web 服务器获得文档 Web 应用有很多组成部分,包括文档格式的标准(即 HTML) Web 浏览器(如 Firefox Microsoft Intemet Explorer)Web 服务器(如 Apache 、Microsoft 服务器程序) ,以及一个应用层协议。

    Web 的应用层协议是 HTTP ,它定义了在浏览器和 Web 服务器之间传输的报文格式和序列 ,因此, HTTP只是 Web 应用的一个部分。

    4.网络应用程序体系结构
    客户-服务器体系结构 (clienl-server archilecture) ,有个总是打开的主机称为服务器,它服务于来自许多其他称为客户的主机的请求 。一个经典的例子是 Web 应用程序,其中总是打开的 Web 服务器服务于来自浏览器(运行在客户主机上)的请求Web 服务器接收到来自某客户对某对象的请求时,它向该客户发送所请求的对象作为响应。值得注意的是利用客户-服务器体系结构,客户相互之间不直接通信;例如,在 Web应用中两个浏览器并不直接通信 ,客户-服务器体系结构的另一个特征是该服务器具有固定的、周知的地址,该地址称为 lP 地址。因为该服务器具有固定的、周知的地址,并且因为该服务器总是打开的,客户总是能够通过向该服务器的lP地址发送分组来与其联系 ,具有客户-服务器体系结构的非常著名的应用程序包括WebTelnet 和电子邮件。

    P2P体系结构
    是指两台主机在通信时并不区分哪一个是服务请求方哪一个是服务提供方,只要两台主机都运行了对等连接软件,他们就可以进行平等的,对等连接通信。这时双方都可以下载对方已经存储在硬盘中的共享文档。

    下面我们将详细的讨论几种重要的应用: 目录服务(DNS),Web 、文件传输、电子邮件和P2P。
    在这里插入图片描述

    02.DNS

    DNS为因特网提供目录服务,大多数用户不直接与 DNS 打交道,而是通过其他的应用(Web 、文件传输和电子邮件)间接使用它 ,DNS 很好地说明一种核心的网络功能(网络名字到网络地址的转换)是怎样在因特网的应用层实现的。

    当我们通过浏览器访问互联网上的某个网站时,我们需要ip地址访问网站的主机,但是ip地址复杂难记。我们可不可以通过访问主机名访问网站的主机呢?

    答案是可以的,人们喜欢便于记忆的主机名标识方式,而路由器则喜欢定长的、有着层次结构的 IP 地址,为了折衷这些不同的偏好,我们需要一种能进行主机名到地址转换的目录服务。这就是域名系统(Domain Name System , DNS) 的主要任务, DNS是:①一个由分层的 DNS 服务器( DNserver) 实现的分布式数据库 ②一个使得主机能够查询分布式数据库的应用层协议。DNS服务器通常是运行 BIND (Berkeley Internet Name Domain) 软件的UNJX 机器DNS 协议运行在 UDP 之上,使用53号端口。

    DNS协议:
    与HTTP,FTP,SMTP 协议一样, DNS 协议是应用层协议。DNS通常是由其他应用层协议所使用的,包括 HTTP ,SMTP, FTP ,将用户提供的主机名解析为IP地址。

    当某个用户主机上的一个浏览器,请求URL页面时。为了将用户的主机能够将一个HTTP请求报文发送到Web服务器,该用户主机必须获得该网站主机的IP地址。那是如何获取的呢?

    1)同一台用户主机上运行着 DNS 应用的客户端。

    2)浏览器从上述 URL中抽取出 主机名 www. someschool. edu ,并将这台主机名传给DNS 应用的客户端。

    3) DNS 客户向 DNS 服务器发送一个包含主机名的请求。

    4) DNS 客户最终会收到一份回答报文,其中含有对应于该主机名的 IP 地址。

    一旦浏览器接收到来自 DNS 的该IP地址,它能够向位于该 lP 地址 80 端口的 HTTP服务器进程发起一个 TCP 连接。

    当然除了主机名到IP地址的转换,DNS还提供了,主机别名,邮件服务器别名,负载分配…服务。

    DNS的设计
    DNS 的一种种简单设计是在因特网上只使用 一个DNS 服务器,该服务器包含所有的映射。在这种集中式设计中,客户直接将所有查询直接发往单一的 DNS 服务器,同时该DNS 服务器直接对所有的查询客户做出响应 尽管这种设计的简单性非常具有吸引力,但它不适用于当今的因特网,因为因特网有着数量巨大(并持续增长)的主机 这种集中式设计的问题包括:单点故障,通信容量(处理所有的DNS的查询…

    在单一 DNS服务器上运行集中式数据库完全没有可扩展能力,因此,DNS采用了分布式的设计方案,事实上DNS 是一个在因特网上实现分布式数据库的精彩范例:

    为了处理扩展性问题, DNS 使用了大量的 DNS 服务器,它们以层次方式组织,并且分布在全世界范围内,没有一台 DNS 服务器拥有因特网上所有主机的映射。相反,该映射分布在所有的 DNS 服务器上,大致说来,有四种类型的 DNS 服务器:根 DNS 服务器、顶级域 (Top- Level Domain , TLD) DNS 服务器和权威 DNS 服务器,这些服务器以如下所示的层次结构组织起来 。

    一个本地 DNS 服务器严格说来并不属于该服务器的层次结构,但它对 DNS 层次结构是重要的。每个 ISP (如一个大学、一个系、一个公司或一个居民区的 ISP) 都有一台本地 DNS 服务器(也叫默认名字服务器)。
    在这里插入图片描述
    域名解析过程:
    当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序,并成为DNS的一个客户,把待解析域名放在DNS请求报文中,以UDP用户数据报方式发送给本地域名服务器,本地域名服务器在查找域名对应的IP地址后,把对应的IP地址放在回答报文中返回,应用进程在收到的目的主机的IP地址后即可进行通信。

    若本地域名服务器不能回答该请求,这此域名服务器就暂时成为DNS中的另一个客户,并向其他域名服务器发出请求。这种过程直到能够回答该请求的域名服务器为止。
    解析方式:
    在这里插入图片描述
    一个服务器所负责管辖的范围叫做区。各单位根据具体情况来划分自己管辖的范围的区。但在一个去中的所有节点必须是能过联通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到IP地址的映射。

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

    原理:
    在一个请求链中,当某 DNS服务器接收一个 DNS 回答(例如,包含主机名到 IP 地址的映射)时,它能将该回答中的信息缓存在本地存储器中。由于主机和主机名与 IP 地址间的映射并不是永久的, DNS 服务器在一段时间后(通常设置为两天)将丢弃缓存的信息。举个例子:假定某大学的一台主机查询了taobao.com的主机地址。过了几小时,该大学的另外一台主机也向taobao.com查询相同的主机名。因为有了缓存,该本地 DNS 服务器可以立即返回taobao. com 的 IP地址,而不必查询任何其他 DNS 服务器。
    在这里插入图片描述
    每个域名都由标号序列组成。标号序列不超过63个字符,最好不超过12个字符。域名不区分大小写。

    03.Web和HTTP

    Web 的应用层协议是超文本传输协议 (HyperText Transfer Protocol , HTTP) ,它是 Web的核心,在 [RFC 1945 ]和 [RFC 2616 ]中进行了定义 HTTP 由两个程序实现:一个客户程序和一个服务器程序。客户程序和服务器程序运行在不同的端系统中,通过交换HTTP 报文进行会话。HTTP 定义了这些报文的结构以及客户和服务器进行报文交换的方式。

    Web 服务器( Web server) 实现了 HTTP 的服务器端,它用于存储 Web 对象,每个对象由 URL 寻址, 流行的 Web 服务器有 Apache ,MicrosoÍl Inlernel InfonnalÌon Server (微软互联网信息服务器)。

    URL:统一资源定位符,是用来表示从互联网上获得资源的位置和访问这些资源的方法。互联网上的所有资源,都有一个唯一确定的URL。

    URL相当于一个文件在互联网范围的扩展,由于访问不同的对象所使用的协议不同,所以URL还得指出读取某个对象时所使用的协议。
    URL一般形式:

    <协议>://<主机>:<端口>/<路径>
    

    万维网WWW并非某种特殊的计算机网络。万维网是一个大规模的,联机式的信息存储所,是无数个网络站点和网页的集合。英文简称为Web.

    URL标志了分布在整个互联网上的万维网文档。

    HTTP协议实现了万维网上的各种链接。
    HTTP协议:

    HTTP 定义了 Web 客户向 Web 服务器请求Web 页面的方式,以及服务器向客户传送 Web页面的方式。

    HTTP使用面向连接的TCP作为运输层的协议,保证了数据的可靠传输。

    HTTP协议不需要考虑数据在传输过程中被丢弃后又怎样被重传。HTTP 客户首先发起一个与服务器的 TCP 连接 ,一旦连接建立,该浏览器和服务器进程就可以通过套接字接口访问 TCP。客户端的套接字接口是客户进程与 TCP 连接之间的门,在服务器端的套接字接口则是服务器进程与 TCP 连接之间的门,客户向它的套接字接口发送HTTP 请求报文并从它的套接字接口接收 HTTP 响应报文。

    套接字:(ip地址:端口号)
    在这里插入图片描述
    HTTP协议是无状态的。(无记忆)

    一些网站需要识别用户,使用Cookie。

    Cookie是存储在用户主机中的文本文件,记录一段时间内用户的访问记录。

    cookie可以用于标识某个用户, 用户首次访问某个站点时,可能需要提供一个用户标识(可能是名字) 在后继会话中,浏览器向服务器传递cookie 首部,从而向该服务器标识了用户 因此 cookie 可以在无状态的 HTTP 之上建立一个用户会话层。
    在这里插入图片描述

    HTTP采用TCP作为运输层协议,但HTTP协议本身是无连接的。(通信双方在交换HTTP报文之前不需要先建立HTTP连接)

    在这里插入图片描述

    在这里插入图片描述
    HTTP/1.0就是非持久连接,每请求一个文档就要有两倍的RTT开销。

    RTT 包括分组传播时延、分组在中间路由器和交换机上的排队时延以及分组处理时延。

    一个RRT用于连接TCP连接,另一个用于请求和接收万维网文档。

    三次握手:
    客户向服务器发送一个小的TCP 报文段,服务器用一个小的TCP 报文段做出确认和响应,最后,客户向服务器返回确认(就是客户发送的请求报文)。三次握手中前两个部分所耗费的时间占用了一个 RTT。

    HTTP/1.1持久连接。
    流水线方式:连续发送多个HTTP请求,不需要等响应报文完全收到。

    非流水线方式:要等到响应报文完全收到,才发送HTPP请求报文。

    HTTP报文结构:
    在这里插入图片描述
    在这里插入图片描述
    Web 缓存器 (Web cache) 也叫代理服务器 (proxy server) ,它是能够代表初始 Web 服务器来满足 HTTP 请求的网络实体 Web 缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本 ,可以配置用户的浏览器,使得用户的所有 HTTP请求首先指向 Web 缓存器。一旦某浏览器被配置,每个对某对象的浏览器请求首先被定向到该 Web 缓存器。

    1)浏览器建立一个到 Web 缓存器的 TCP 连接,并向 Web 缓存器中的对象发送一个HTTP 请求。

    2)Web 缓存器进行检查,看看本地是否存储了该对象副本。如果有, Web 缓存器就向客户浏览器用 HTTP 响应报文返回该对象。

    3)如果 Web 缓存器中没有该对象,它就打开一个与该对象的初始服务器(如www. someschool. edu) TCP 连接,Web 缓存器则在这个缓存器到服务器的 TCP连接上发送一个对该对象的 HTTP 请求,在收到该请求后,初始服务器向该Web缓存器发送具有该对象的 HTTP响应。

    4)当 Web 缓存器接收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览器用HTTP 响应报文发送该副本(通过现有的客户浏览器和 Web 缓存器之间的TCP 连接)
    在这里插入图片描述

    04.FTP

    文件传输协议FTP(RFC 959)。FTP屏蔽了计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。我们使用的xftp软件就是基于这个。

    在一个典型的FTP 会话中,用户坐在一台主机(本地主机)前面,向一台远程主机传输(或接收来自远程主机的)文件。为使用户能访问它的远程账户,用户必须提供一个用户标识和口令 (也可以不许授权,即匿名FTP服务器,目的是向公众提供文件的拷贝服务,不要求用户事先在服务器进行登记注册)在提供了这种授权信息后,用户就能从本地文件系统向远程主机文件系统传送文件。

    FTP的主要功能是减少或消除不同操作系统下处理文件的不兼容性。

    一个FTP服务器进程可以同时为多个客户进程提供服务。

    FTP服务器进程由两大部分组成:
    一个主进程:负责接收新的请求。
    若干个从属进程:复杂处理单个请求。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    05.远程终端协议(TELNET)

    TELNET是一个简单的远程终端协议,它也是互联网的正式标准。用户可以用TELNET就可在其所在地通过TCP连接注册(登录)到远地的另一台主机上。TELNET能够将用户的击键传到远地主机,同时也能将远地主机的输出通过TCP连接返回到用户屏幕。我们用的Xshell软件类似于这个。但是Xshell用的是SSH协议。

    06.电子邮件

    与普通邮件一样,电子邮件是一种异步通信媒介,即当人们方便时就可以收发邮件,不必与他人的计划进行协调 。与普通邮件相比,电子邮件更为快速并且易于分发,而且价格便宜 现代电子邮件具有许多强大的特性,包括具有附件、超链接、 HTML 格式文本和图片的报文。

    电子邮件的信息格式:
    在这里插入图片描述
    电子邮件系统的组成部分:
    1)用户代理
    用户阅读,回复,转发,保存,和写报文。

    2)邮件服务器

    3)简单邮件传输协议(SMTP)

    在这里插入图片描述
    邮件服务器形成了电子邮件体系结构的核心。每个接收方(如 Bob) 在其中的某个邮件服务器上有一个邮箱(mailbox) 。 Bob的邮箱管理和维护着发送给他的报文。

    一个典型的邮件发送过程是:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。当Bob 要在他的邮箱中读取该报文时,包含他邮箱的邮件服务器(使用用户名和口令)来鉴别 Bob。 Alice 的邮箱也必须能处理 Bob 的邮件服务器的故障, 如果Alice 的服务器不能将邮件交付给 Bob 的服务器,Alice 的邮件服务器在一个报文队列( mess queue) 中保持该报文并在以后尝试再次发通常每 30 分钟左右进行一次尝试;如果几天后仍不能成功,服务器就删除该报文并以电子邮件的形式通知发送方 (Alice)。

    像大多数应用层协议一样,SMTP也有两个部分:运行在发送方邮件服务器的客户端和运行在接收方邮件服务器的服务器端每台邮件服务器上既运行 SMTP 的客户端也运行 SMTP 的服务器端 。当一个邮件服务器向其他邮件服务器发送邮件时,它就表现为 SMTP 的客户;当邮件服务器从其他邮件服务器上接收邮件时,它就表现为一个 SMTP的服务器。
    在这里插入图片描述
    Alice向Bob发送邮件,如果 Bob 的邮件服务器没有开机,该报文会保留在Alice 的邮件服务器上并等待进行新的尝试,这意味着邮件并不在中间的某个邮件服务器存留。

    SMTP协议
    SMTP规定了在两个相互通信的SMTP进程之间如何交换信息。

    SMTP规定了14条命令(几个字母)和21中应答信息(三维数字代码+简单文字说明)。

    SMTP使用TCP连接,使用端口号25,采用c/s模式。
    SMTP通信三个阶段:
    1)连接建立
    在这里插入图片描述

    2)邮件传送
    A代表客户端,B代表服务器端。
    在这里插入图片描述

    3)连接释放
    邮件发完,SMTP客户发送QUIT命令,SMTP服务器返回”221“,表示同意释放TCP连接。

    SMTP的缺点:
    1)SMTP不能传送可执行文件或者其他二进制文件。

    2)SMTP仅限于传送7位ASCII码,不能传送其它非英语国家的文字。

    3)SMTP服务器会拒绝超过一定长度的邮件。

    为了解决以上缺点MIME协议诞生了。
    MIME将非ASCII码转换成了7位的ASCII码。
    在这里插入图片描述
    POP3协议和网际报文存取协议IMAP
    如果 Bob 的邮件服务器位于他的 PC 上,那么为了能
    够及时接收可能在任何时候到达的新邮件,他的 PC 必须总是不间断地运行着并一直保恃在线, 这对于大多数因特网用户而育是不现实的。

    相反,典型的用户通常在本地 PC 上运个用户代理程序,而它访问存储在总是保持开机的共享邮件服务器上的邮箱 。该邮件服务器与其他用户共享,并且通常由用户的 ISP(公司,大学) 进行维护。

    为什么Alice的用户代理不直接发送给BOB的邮件服务器?
    通过首先将邮件存放在自己的邮件服务器中, Alice 的邮件服务器可以重复地尝试向 Bob 的邮件服务器发送该报文,如每 30 分钟次,直到 Bob 的邮件服务器变得运行为止 (并且如果 Alice 的邮件服务器关机,她则能向系统管理员进行申告!) SMTP RFC 文档定义了如何使SMTP 命令经过多个 SMTP 服务器进行报文中继。

    接下来一个问题:接收方如何通过运行其本地 PC上的用户代理,获得位于他的某 ISP 的邮件服务器上的邮件呢?
    值得注意的是 Bob 的用户代理不能使用 SMTP 取回报文,因为取报文是个拉操作,而 SMTP 协议是一个**推协议。**这时就需要特殊的邮件访问协议来解决这个问题。
    第三版的邮政协议(POP3)。
    在这里插入图片描述

    在这里插入图片描述
    POP3是一个极为简单的邮件访问协议,由 RFC 1939 进行定义文档 RFC J939 简短且可读性强 ,因为该协议非常简单,放其功能相当有限,当用户代理(客户)打开了一个到邮件服务器(服务器)端口 110 上的 TCP 连接后,POP3就开始工作, 随着建立 TCP连接, POP3按照 三个阶段进行工作:特许( auLhorization )、事务处理以及更新。
    在第一个阶段:即特许阶段,用户代理发送(以明文形式)用户名和口令以鉴别用户。

    在第二个阶段:即事务处理阶段,用户代理取回报文;同时在这个阶段用户代理还能进行如下操作,对报文做删除标记,取消报文删除标记,以及获取邮件的统计信息 。

    在第三个阶段:即更新阶段,它出现在客户发出了quit命令之后,目的是结束该 POP3会话;这时,该邮件服务器删除那些被标记为删除的报文。

    POP3协议没有给用户提供任何创建远程文件夹并为报文指派文件夹的方法,为了解决这个或其他些问题,由RFC 3501 定义的因特网邮件访问协议 (IMAP应)运而生。

    IMAP协议比POP协议复杂。当用户Pc上的IMAP客户程序打开IMAP服务器邮箱时,用户可以看到邮箱的首部,若用户需要打开某个邮箱,该邮件才上传到用户的计算机上。

    IMAP可以让用户在不同的地方使用不同的计算机随时上网阅读处理邮件,还允许只读取邮件的某一个部分(如先看正文,有WIFI的时候再下载附件)。

    基于万维网的电子邮件
    当一个收件人(如 Bob) ,想从他的邮箱中访问一个报文时,该电子邮件报文从 Bob 的邮件服务器发送到他的浏览器,使用的是 HTTP 而不是POP3或者 IMAP 协议 。当发件人(如Alice) 要发送一封电子邮件报文时,该电子邮件报文从 Alice 的浏览器发送到她的邮件服务器,使用的是 HTTP 而不是 SMTP 。然而,Alice的邮件服务器在与其他的邮件服务器之间发送和接收邮件时,仍然使用的是 SMTP。
    在这里插入图片描述
    HTTP协议与SMTP协议
    HTTP Web 服务器向 Web 客户(通常是一个浏览器)传送文件(也称为对象); SMTP 从一个邮件服务器向另一个邮件服务器传送文件(即电子邮件报文) 。当进行文件传送时,持续的 HTTP 和SMTP 都使用持续连接。 因此,这两个协议有一些共同特征。然而,两者之间也有一些重要的区别 首先, HTTP 主要是一个拉协议 (pull protocol) ,即在方便的时候,某些人在 Web 服务器上装载信息,用户使用 HTTP 从该服务器拉取这些信息 。特别是 TCP 连接是由想接收文件的机器发起的 。另一方面, STMP基本上是一个推协议 (push protocol) ,即发送邮件服务器把文件推向接收邮件服务器 特别是,这个 TCP连接是由要发送该文件的机器发起的。

    07.P2P

    P2P应用就是指具有P2P体系结构的网络应用。P2P体系结构就是在这样的网络应用中,没有(或只有极少数)固定的服务器,而绝大多数的交互都是使用对等的方式进行的。

    P2P应用很广:
    如:文件分发,实时音频或视频会议,数据库系统,网络服务支持(如P2P打车软件)。

    P2P文件分发
    P2P文件分发不需要使用集中的媒体服务器,而所有的音频/视频文件都是在普通的互联网用户之间传输的。这其实相当于有很多分散在各地的媒体服务器向其他用户提供所要下载的音频/视频文件。

    参考文献:
    计算机网络第7版(谢希仁)

    计算机网络自顶向下

    b站:韩立刚版(计算机网络)

    b站:王道考研(计算机网络)

    只要你不认输,就有机会!

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    以梦为马,不负韶华。
  • 相关阅读:
    java线程小结1
    String和StringBuffer
    java队列的实现
    java栈的实现
    java链表
    this与super关键字总结
    JVM内存杂记1
    面试题18:删除链表节点
    面试题17:打印从 1 到最大的 n 位数
    面试题16:数值的整数次方
  • 原文地址:https://www.cnblogs.com/huangjiahuan1314520/p/13819401.html
Copyright © 2020-2023  润新知