应用层

原理

结构和模型

客户-服务器体系结构(client-server architecture )

通信不是直接的,需要通过服务器转发

经常会在服务器积压大量的负载

服务器(server)

服务器是提供服务的机器

服务器是一台常连接(always-on)的主机,具有固定的 IP 地址

因此,客户总是可以通过向服务器的 IP 地址发送分组(packet)来与服务器通信

客户(client)

客户是需要获取服务的机器

客户直接与服务器通信,相互之间不是直接通信的

此外,客户不是常连接的,且大多数具有动态的 IP 地址

可扩展性(scalability)

这种体系结构的可扩展性不强,如果客户过多,服务器会因为超出负载而崩溃

对等体系结构(P2P architecture)

纯的 P2P 结构没有常连接的服务器,终端系统直接通信,相互之间称对等体(peer)

对等体之间间断地连接,对等体自身间断地切换 IP 地址

优点:这种体系结构有较强的可扩展性,加入一个新的对等体并不影响原先的对等体

缺点:难以管理,并且可靠性也不强,例如 P2P 下载时,由于 1st seed peer 下线了,下载进度卡在 99%

两种体系结构的混合(Hybrid)

例如 Skype 和 QQ

Skype

服务器负责处理远程地址查询,客户和客户之间是直接通信的

QQ

两个客户之间的通信是直接的,服务器负责查询客户当前的位置

两台机器上的应用程序进程可以相互通信

进程通信(process communicating)

进程是主机上运行着的程序,在同一台主机上进程通过进程间通信(IPC)来通信,IPC 是由操作系统定义的

不同主机上的进程通过交换报文(message)来进行通信

客户进程发起通信,服务进程等待通信,在这种定义下 P2P 体系结构也有这两类进程的区分

套接字(socket)

进程通过套接字收发报文,套接字接口包括选择传输协议和设置一系列的参数等等

进程寻址(process addressing)

接收报文的进程需要一个地址,为了标识特定的进程,需要定义①主机的地址和②主机中该进程的标识符

Internet 的主机由 IP 地址来标识,同一台主机上可运行多个进程,使用端口号(port number)来区分进程

流行的应用分配了特定的端口号,例如 HTTP server 对应端口号 80,Mail server 对应端口号 25

应用层协议概要

应用层协议需要定义运行在不同端系统上的应用程序进程如何相互传递报文,包括下面的内容

  1. 交换报文的类型,例如请求(request)报文和响应(response)报文

  2. 各种报文的语法,例如报文中包含什么字段,这些字段又是如何描述的

  3. 各种报文的语义,就是报文字段包含信息的含义

  4. 进程发送和响应报文的时间和方法的规则

定义在 RFC 文档的应用层协议位于公共域(public-domain)中,例如 HTTP 协议和 SMTP 协议

还有很多别的协议是专用的,有意不为公共域所使用,例如 Skype 就使用了专有的应用层协议

应用层协议依赖于传输层协议,它决定了使用哪一种传输层协议,这就涉及了应用程序的多个指标

  1. 数据丢失(data-loss):有些应用,例如交互式的音频,可以容忍一定的数据丢失,而其他大多数应用,例如文档传输,要求百分之百可靠的数据传输

  2. 定时(timing):即时在线游戏等应用要求数据传输低延时(low delay)

  3. 吞吐量(throughput):多媒体应用等应用要求吞吐量足够大

  4. 安全性(security):加密和数据完整性等等

Internet 提供的传输层协议

主要包括 TCP 和 UDP

TCP 服务

  1. 面向连接的服务(connection-oriented):在应用层数据报文开始流动之前,TCP 让客户和服务器相互交换传输层控制信息,这个握手过程提示客户和服务器为大量 packet 的到来做好准备。握手结束后客户进程和服务进程的套接字之间就建立起了一个 TCP 连接,这个连接是全双工(full duplex)的。应用程序结束报文发送时,必须关闭该连接

  2. 可靠的数据传输服务(reliable transport)

  3. 拥塞控制机制,在网络拥塞时抑制发送进程

  4. 流控制机制,发送进程不会吞没(overwhelm)接收进程

TCP 服务不提供定时机制,不保证最小吞吐量,也没有安全性方面的考量

UDP 服务

不可靠的数据传输服务,不建立连接,没有流控制机制,没有拥塞控制机制,不保证吞吐量,不考虑安全性

但是,非常轻量级,不提供不必要的服务,对于可以容忍数据丢失的应用有意义

实例:Web 和 HTTP

HTTP 概要

HTTP 即超文本传输协议(hypertext transfer protocol)是 Web 的应用层协议,使用 client/server 模型

client 对应浏览器,浏览器请求、接受并显示 Web 对象

server 对应 Web server,对于浏览器的请求,响应并发送相应的 Web 对象

HTTP 使用 TCP 协议作为支撑它的传输层协议,整个过程大致如下

  1. HTTP 客户通过创建 socket 发起一个与服务器的 TCP 连接,端口号 80

  2. 服务器接受客户发起的 TCP 连接,连接建立

  3. HTTP 报文在浏览器(HTTP client)和 Web server(HTTP server)之间交换

  4. 关闭 TCP 连接

服务器向客户发送被请求的文件,但不存储任何关于该客户的状态信息,即浏览器不知道用户的状态

因此 HTTP 协议是一个无状态协议(stateless protocol)

建立一个维护状态的协议是非常复杂的,因为所有的状态历史都需要维护,而且一旦客户或服务器宕机,那么维护的状态历史就可能不一致,从而还需要考虑状态的同步问题

HTTP 连接

HTTP 连接分为持久连接和非持久连接,非持久连接指的是每个请求/响应对使用一个单独的 TCP 连接发送,持久连接指的是多个或所有的请求/响应对使用同一个 TCP 连接发送

建立单独的 TCP 来传输一个文件所需的时间为 2RTT + transmit time,其中 RTT 为往返时间(Round-Trip Time),即一个短分组,在这里即一个小的 TCP 报文,从客户到服务器再返回客户所需要的时间,transmit time 为传输文件本身的时间

首先由客户向服务器发送一个小 TCP 报文段,服务器用一个小 TCP 报文段做出确认和相应,客户再向服务器返回确认,这样的过程称为 TCP 的三次握手

HTTP 报文

请求报文

一个请求报文的例子


GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
User-agent: Mozilla/5.0
Connection: close
Accept-language: fr

请求报文的一般形式


<method><SPC><URL><SPC><version><CR><LF>
<header field name>:<value><CR><LF>
<header filed name>:<value><CR><LF>
...
<header filed name>:<value><CR><LF>
<CR><LF>

用户提交输入可以通过 Web 页面的提交框,或 URL 后附带提交数据,格式为?<key>=<val>&<key>=<val>

方法类型在 HTTP/1.0 中包括 GET、POST 和 HEAD,在 HTTP/1.1 中增加了 PUT 方法和 DELETE 方法

通过在 GET 中添加 If-Modified-Since 首部行,可以实现条件 GET 方法

响应报文

一个响应报文的例子

HTTP/1.1 200 OK
Connection: close
Date: Thu, 06 Aug 1998 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Mon, 22 Jun 1998 …...
Content-Length: 6821
Content-Type: text/html

data data data data data ...

响应报文包括状态行(status line),首部行(header line)和实体部分(entity body)

Cookie

HTTP 服务器是无状态的,但是 Web 站点经常希望能识别用户,这可以使用 cookie 技术来实现,它允许站点对用户进行跟踪

Cookie 技术包括四个组件

  1. HTTP 响应报文中的一个 cookie 首部行

  2. HTTP 请求报文中的一个 cookie 首部行

  3. 用户主机上的 cookie 文件,由用户浏览器管理

  4. Web 站点的后端数据库

Cookie 的好处

  1. 授权认证(authorization)

  2. 支持购物车(shopping carts)

  3. 针对性推荐(recommendations)

  4. 用户会话状态(user session state)

Web 缓存器 / 代理服务器

典型的代理过程

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

  2. Web 缓存器进行检查,看看本地是否存储了该对象的副本,如果有就直接客户浏览器用 HTTP 响应报文返回该对象,否则转下一步

  3. Web 缓存器打开一个与该对象的初始服务器的 TCP 连接,发送一个对该对象的 HTTP 请求。初始服务器在收到该请求后向 Web 缓存器发送具有该对象的 HTTP 响应

  4. Web 缓存器收到该对象,在本地存储空间存储一份副本,并向客户浏览器用 HTTP 响应报文发送该副本

Web 缓存器在其中即扮演了客户的角色,又扮演了服务器的角色

Web 缓存器的好处

  1. 减少响应时间

  2. 减轻初始服务器的压力

  3. 支持访问外网

  4. 支持匿名化

实例:FTP

FTP 即文件传输协议(file transport protocol),用于传送文件到远程主机或从远程主机接受文件

FTP 使用客户服务器模型,建立连接的一端为客户端,另一端为服务端

FTP 的端口号为 21,对应的 RFC 文档为 RFC 959

FTP 运行在 TCP 上,它使用两个并行的 TCP 连接来传输文件,一个控制连接(control connection)和一个数据连接(data connection)

控制链接用于在两个主机之间传输控制信息,例如用户标识,口令,改变远程目录以及 PUT 和 GET 文件的命令

数据连接用于实际发送一个文件,每传输一个文件使用一个单独的数据连接

由于 FTP 的控制信息使用单独的控制链接传输,因此说 FTP 是带外(out-of-band)传输控制信息的;HTTP 的控制信息包含在首部行中,因此说 HTTP 是带内(in-band)传输控制信息的

FTP 服务器必须在整个会话期间保留用户的状态,特别是把特定的用户账户和控制链接对应起来,此外还有用户在远程目录树上的当前位置等等,这限制了 FTP 能够同时维持的会话总数

FTP 的命令和回答使用 ASCII 文本在控制连接上传输

常见的命令如下

USER <username> 用于向服务器传输用户标识

PASS <password> 用于向服务器传输用户口令

LIST 用于请求服务器响应当前远程目录中的所有文件列表

RETR <filename> 用于请求在远程当前目录上 GET 文件

STOR <filename> 用于请求在远程当前目录上 PUT 文件

常见的回答如下

331 Username OK, Password required

125 Data connection already open; transfer starting

425 Can't open data connection

452 Error writing file

 

[Note] 计算机网络的应用层的更多相关文章

  1. 计算机网络之应用层_part -1

    应用层协议原理 一.网络应用程序体系结构 网络应用程序体系结构是由程序研发者设计的,规定了如何在各种端系统中组织该应用程序,主要流行的有两种: 1.客户--服务器体系结构: 有一个总是打开的主机(称为 ...

  2. 计算机网络Web应用层与运输层(HTTP/TCP)

    应用层协议原理 Web和HTTP DNS:英特网的目录服务 运输层 面向连接的运输:TCP及拥塞原理 一.应用层协议原理 DNS域名解析: (用例:www.baidu.com)域名解析是网络请求的第一 ...

  3. 计算机网络之应用层概述(C/S模型与p2p模型)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105582318 学习课程:<2019王道考研计算机网络> 学习目的 ...

  4. 【计算机网络】应用层(一) HTTP

      HTTP报文 HTTP报文是HTTP应用程序间发送的数据块,它由三部分组成:起始行(start line),首部(header)和主体(body),如下图所示:   从分类上,报文又可以分为请求报 ...

  5. 计算机基础:计算机网络-chapter6应用层

    应用层为协议最顶部,为用户服务. 常见的服务:邮件,万维网,DNS等 DNS:使用UDP承载,部分使用TCP协议 作用 将域名映射为IP 域名格式:自己到上级域名的访问 DNS服务器提供域名的资源记录 ...

  6. <计算机网络>计算机网络和应用层

    1.端系统通过通信链路和分组交换机连接在一起,构成网络.网络和网络之间通过路由器相连,组成了因特网. 2.ISP(Internet Service Provider)因特网服务提供商.端系统通过ISP ...

  7. 【计算机网络】WebSocket实现原理分析

    1.介绍一下websocket和通信过程? 1.1 基本概念 [!NOTE] Websocket是应用层第七层上的一个应用层协议,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 T ...

  8. Python模块探秘之smtplib,实现纯文本邮件的发送

    今天学到了如何使用Python的smtplib库发送邮件,中间也是遇到了各种各样的错误和困难,还好都一一的解决了.下面来谈一谈我的这段经历. 配置你的邮箱 为什么要配置邮箱呢?具体要配置什么呢? 因为 ...

  9. page 页 分页 分段

    小结: 1. 页:磁盘和内存间传输数据的最小单位: MySQL: What is a page? https://stackoverflow.com/questions/4401910/mysql-w ...

随机推荐

  1. Servlet--转发和重定向

    Servlet的跳转有2种,一种是转发,一种是重定向. 重定向: <strong><span style="font-size:14px;"></sp ...

  2. Servlet和web服务器关系

    前面的博客我详细的罗列了下Servlet的常用的类和接口,然后在前面的前面我类似tomcat模拟了一套web服务器,这里来做一个统一的整理,这样子可以更好的把握Servlet,也可以更好的了解下web ...

  3. jdk源码->集合->HashSet

    类的属性 public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, ...

  4. Java项目专栏之数据库建表

    Java项目专栏之数据库建表 数据库建表前期准备 1. 安装mysql:数据库语言,语法和sql server差不太多,如果习惯于sql server可以不用mysql. 2. 安装navicat:可 ...

  5. tomcat无法打开8080页面

    tomcat已启动 app已经正常执行 但不能打开8080管理页面 可能是在webapps目录下没有ROOT目录

  6. curl访问nagios中Host Status Details For All Host Groups页面的方法

    由于进入nagios要输入用户名与密码才能进入,故用curl模拟输入用户名与密码取得当前所有主机的报警信息: # curl -u nagiosadmin:password http://192.168 ...

  7. 【转】awk数组操作

    转自:http://blog.csdn.net/wangran51/article/details/9168361 用awk进行文本处理,少不了就是它的数组处理.那么awk数组有那些特点,一般常见运算 ...

  8. Animations and transitions

    在交互式可视化中,有一个词叫reactive,指的是以可视化的方式来响应用户的行为,帮助用户进行可视化并理解其结果.这个很有用.那如何来实现这种交互呢?通过动画. 如果处理得当,动画可以展现出不错的可 ...

  9. 浅谈计算机中的IO模型

    IO模型一共有5种: blocking IO #阻塞IO nonblocking IO #非阻塞IO IO myltiplexing #IO多路复用 signal driven IO #信号驱动IO ...

  10. Matplotlib快速入门笔记

    我正以Python作为突破口,入门机器学习相关知识.出于机器学习实践过程中的需要,快速了解了一下matplotlib绘图库.下图是我学习过程中整理的一些概念. 本文将以该图为线索梳理相关概念. 简介 ...