热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

哈工大计算机网络第二章——应用层复习

目录1.网络应用程序体系结构2.进程通信3.应用需求与传输层服务4.Web与HTTP5.Email应用6.FTP7.DNS8.P2P应用1.网络应用程序体系结构客户-

目录

1. 网络应用程序体系结构

2. 进程通信

3. 应用需求与传输层服务

4. Web与HTTP

5. Email应用

 6. FTP

7. DNS

 8. P2P应用



1. 网络应用程序体系结构

客户-服务器体系结构

服务器:总是打开,具有固定的、周知的地址(IP地址),可利用大量服务器实现可拓展性。接收到来自某客户对某对象的请求后,向客户发送所请求的对象作为响应。

客户端:与服务器通信,使用服务器提供的服务。间歇性地接入网络,可能使用动态IP。客户之间不直接通信。

P2P体系结构

对位于数据中心的专用服务器有最小的(或没有)依赖,应用程序在间断连接的主机对之间使用直接通信,主机对称为对等方。节点也有可能改变IP地址。拥有自拓展性。高度可伸缩,但难于管理。

混合结构

两种结构混合在一起使用,如Napster,文件传输使用P2P结构,文件搜索采用C/S结构。

2. 进程通信

多个端系统上的程序是如何相互通信的呢?

用操作系统的术语说,进行通信的是进程而不是程序。一个进程可以被认为是运行在端系统中的一个程序。多个进程在相同的端系统中通信时,使用由端系统上操作系统提供的进程间通信机制相互通信。

在两个不同的端系统上的进程,通过跨越计算机网络交换报文(消息)相互通信。发送进程生成并向网络中发送报文;接收进程接收报文并可能做出回应。

网络程序由成对的进程组成,这些进程通过网络相互传输报文。在每对通信进程中,一个进程标识为客户,一个标识为服务器。对Web而言,浏览器为客户进程,Web服务器为服务器进程。对P2P而言,下载文件的对等方为客户进程,上载的为服务器。而在P2P中,一个进程既能是客户也能是服务器。

定义服务器与客户进程如下:客户:发起通信的进程;服务器:会话开始时等待联系的进程

进程与网络的接口

进程通过套接字向网络发送报文和从网络接收报文。套接字是同一台主机内应用层与传输层之间的接口。该套接字是建立网络应用程序的可编程接口吧,因此套接字是应用程序与网络直接的应用程序编程接口。开发者可以控制套接字在应用层的一切,但对传输层几乎没有控制权,仅可以选择传输层协议与设定几个传输层参数

进程寻址

为了进程间的信息交换,需要对进程进行标识。

使用IP地址寻址主机。而一台主机上可能由多个进程,给每个进程一个端口号进行标识。最后进程的标识符为IP地址+端口号。·

应用层协议

网络应用需遵循应用层协议(公开协议与私有协议)。消息类型有请求消息与响应消息。消息的语法为包括的字段与字段的形式,语义为字段中信息的含义。规则为进程何时与如何发送消息。

3. 应用需求与传输层服务

网络应用对传输服务具有一定要求。

1. 数据丢失/可靠性:容忍一定的丢失或要求100%正确

2. 时间/延迟:有些要求低延迟

3. 带宽:有些需要带宽达到最低要求时才有效——网络视频

而传输层提供的传输服务如下:

TCP服务:是面向连接的服务,客户与服务器进程间需要建立TCP连接,连接为全双工的。而且是可靠的数据传输,无差错与乱序问题。支持流量控制与拥塞控制,不提供时间/延迟保障与最小带宽保障。

UDP服务:无连接,是不可靠的数据传输。不提供流量控制、拥塞控制、延迟保障和带宽保障。但是相对地,提供自由度,有极大的发挥空间。

4. Web与HTTP

(1)HTTP协议

Web页面是由对象组成,一个对象是一个文件(HTML文件、JEPG图片、Java程序或视频片段等)。多数Web页面由一个HTML基础文件和几个引用对象组成。HTML基本文件通过对象的URL地址引用页面中的其他对象。URL的构成如下:Scheme://host:port/path,对应协议、主机、端口号和路径。

Web对应的应用层协议是HTTP协议。HTTP定义了Web客户向Web服务器请求Web页面的方式以及服务器向客户发送Web页面的方式。当用户请求Web界面是,浏览器向服务器发送对页面包含对象的HTTP请求报文,服务器收到请求与并用包含对象的响应报文进行响应。(客户:请求、接收、展示Web界面,Web服务器:响应请求,发送对象)

HTTP使用TCP作为传输协议。客户(浏览器)首先发起一个与服务器的TCP连接,服务器在80端口等待请求,接收到来自浏览器的TCP连接后,开始进行HTTP消息交换。最后关闭TCP连接。

HTTP是一个无状态协议,服务器不维护任何有关客户端过去所发的请求消息。

连接建立后,浏览器与服务器就可以通过套接字接口访问TCP。在客户端发起请求报文后,报文就完全进入TCP控制。HTTP协议也就不用担心数据丢失的问题。(分层体系的好处)

非持久性连接:HTTP1.0 ,每个TCP连接最多允许传输一个对象。

持久性连接:HTTP1.1 ,允许传输多个对象。

RTT:往返时间,一个小数据包从客户端到服务器然后返回客户端的时间

响应时间包括:

1. 发起、建立TCP连接:1个RTT

2. 发送HTTP请求消息与前几个字节到达:1个RTT

3. 文件传输时间

非持久性连接:1个对象需要2个RTT,操作系统为每个TCP连接开销资源。

持久性连接:TCP连接一直打开,后续的HTTP也可以通过这个TCP连接发送

无流水连接:收到前一个的响应才发送新的请求

流水机制:HTTP1.1的默认选项,遇到一个新的引用对象发出请求

(相关计算:计算RTT)

(2)HTTP报文

HTTP报文包括请求报文和响应报文。

a. HTTP请求报文

用ASCII文本书写。必须有请求行和空白行,不一定有头部行和body

第一行为请求行,包括请求命令、URL和HTTP版本之后几行为头部行,包含各种信息。之后用空白行标识头部行结束。body在方法为GET时为空,在POST时才使用。上传输入时使用POST方法,在请求消息的body部分上传客户端的输入。也可以使用URL方法,在输入较少时使用GET方法,输入信息通过请求行的URL字段上传。

HTTP1.0:GET、POST、HEAD(请服务器不要把对象放在请求消息中,即不返回请求对象)

HTTP1.1:GET、POST、HEAD、PUT(将消息体中的文件上传到URL字段所指定的路径中)、DELETE(删除Web服务器上URL指定的对象)

b. HTTP响应报文

第一行为状态行,有三个字段:协议版本、状态码和状态信息。之后为首部行,中间有一个空白行,最后为实体体。

 状态码和相关状态信息包括:

200 OK

301 Moved Permanently

400 Bad Request

404 Not Found

505 HTTP Version Not Supported

(3)COOKIE技术

解决HTTP无状态的问题

某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

COOKIE的组件

1. HTTP响应消息的COOKIE头部行

2. HTTP请求消息的COOKIE头部行

3. 保存在客户端主机上的COOKIE文件,由浏览器管理

4. Web服务器端的后台数据库

COOKIE原理:

 COOKIE用于身份认证、购物车、推荐与Web e-mail等,但会设计隐私问题。

(4)Web缓存/代理

功能:在不访问服务器的前提下满足用户的HTTP请求

目的:缩短用户请求的响应时间,减少机构/组织的流量,在大范围内实现有效的内容转发。

用户设定浏览器通过缓存进行Web访问,浏览器向缓存/代理服务器发送所有的 HTTP请求。如果所请求对象在缓存中,缓存返回对象;否则,缓存服务器向原始服务器发送HTTP 请求,获取对象,然后返回给客户端并保存该对象。缓存既充当客户端,也充当服务器,一般由ISP架设

条件性GET方法

如果缓存有最新的版本,则不需要发送请求对象。在HTTP请求消息中声明所持有版本的日期。使用If-modified-since: 。在服务器端,如果缓存的版本是最新的,则响应消息中不包含对象。对应响应为HTTP/1.0 304 Not Modified

5. Email应用

电子邮件系统包括:用户代理、邮件服务器和简单邮件传输协议(SMTP)。

用户代理:·读写Email消息,与服务器交互,进行收发消息

邮件服务器(核心):用邮箱存储发给该用户的Email,用消息队列存储等待发送的Email

SMTP协议:同样发送的为客户,接收的为服务器,是基于TCP的

(1)SMTP协议

端口号25.。传输时会经过握手、信息传输和关闭三个阶段。如果服务器未开机,客户会在稍后继续尝试建立连接。采用命令/响应的交互模式,命令为ASCII码文本,响应对应状态代码和语句。

Email信息只能是7位ASCII码。使用持久性连接,允许在一个TCP连接下发送所有报文。SMTP服务器利用CRLF.CRLF确 定消息的结束。

与HTTP对比:

HTTP: 拉式(pull)  SMTP: 推式(push)

HTTP: 每个对象封装在独立的响应消息中 SMTP: 多个对象在由多个部分构成的消息中发送

(2)email消息格式

使用MIME进行多媒体拓展,在头部增加额外的行。

(3)邮件接收协议

邮件访问协议:POP(无状态)、IMAP(支持有状态)、HTTP

总的流程,其中access protocol就是上面的邮件访问协议。

 6. FTP

❖ FTP客户端使用TCP,在端口21与FTP服务器联系

❖ 客户端授权控制连接

❖ 客户端浏览远程目录,通过控制连接发送命令

❖ 当服务器收到文件传输命令时,服务器打开到客户端的第二个TCP数据连接(用于文件)

❖ 传输一个文件后,服务器关闭数据连接

❖ 服务器打开另一个TCP数据连接以传输另一个文件

❖ 控制连接:“带外”

❖ FTP服务器维护“状态”:当前目录,早期身份验证

❖用ADCII码编写请求报文

相关返回状态码

❖ 331 Username OK, password required

❖ 125 data connection already open; transfer starting

❖ 425 Can’t open data connection

❖ 452 Error writing file 

7. DNS

一个由分层的DNS服务器实现的分布式数据库和一个使得主机能够查询分布式数据库的应用层协议。

主要任务:进行主机名(www.facebook.com等)到IP地址转化的目录服务

其他服务:1. 主机别名 2. 邮件服务器别名 3, 负载均衡

集中式DNS的问题:1. 单点故障 2. 流量巨大 3. 距离问题(时延) 4. 维护性问题

域名层次结构

根域名服务器:提供TLD服务器的IP地址。

TLD(顶级域名服务器):负责com, org, net,edu等顶级域名和国家顶级域名,提供权威的IP地址

权威DNS服务器:组织的域名解析服务器,提供组织内部服务器的解析服务,由组织或服务商进行维护。

本地域名解析服务器:不严格属于层级体系。每个ISP有一个本地域名服务器,为默认域名解析服务器。当主机进行DNS查询时,查询被发送到本地域名服务器。作为代理(proxy),将查询转发给(层级式)域名解析服务器系统

DNS查询

递归:

迭代:

DNS缓存与更新

只要域名解析服务器获得域名—IP映射,即缓存这一映射。一段时间过后,缓存条目失效(删除)。本地域名服务器一般会缓存顶级域名服务器的映射,因此根域名服务器不经常被访问

DNS记录

资源记录为四元组——(name, value, type, ttl)

❖ Type=A ▪ Name: 主机域名 ▪ Value: IP地址

❖Type=NS ▪ Name: 域(edu.cn) ▪ Value: 该域权威域名解析服务器的主机域名 

❖Type=CNAME ▪ Name: 某一真实域名的别名 • www.ibm.com – servereast.backup2.ibm.com ▪ Value: 真实域名

❖Type=MX ▪ Value是与name(别名)相对 应的邮件服务器

DNS协议

查询与回复,有相同的消息格式

 8. P2P应用

文件分发时间:

C/S结构:

 

 P2P结构:

BitTorrent

节点加入torrent,开始时没有chunk,但是会逐渐积累。向tracker注册以获得节点清单,与某些节点 (“邻居”)建立连接。下载的同时,节点需要向其他节点上传 chunk。节点可能加入或离开,一旦节点获得完整的文件,它可能离开或留下 

获取chunk:

给定任一时刻,不同 的节点持有文件的不同chunk集合,节点(Alice)定期查询每个邻居所持有的chunk列表,节点发送请求,请求获取缺失的chunk,采用稀缺优先的原则

发送chunk: tit-for-tat

Alice向4个邻居发送chunk,选择正在向其发送Chunk中速率最快的4个。 每10秒重新评估top 4 ,每30秒随机选择一个其他节点,向其发送chunk。新选择节点可能加入top 4。

P2P信息查询

P2P系统的索引:信息到节点位置(IP地址+端口号)的映射

集中式索引:内容和文件传输是分布式的,但是内容定位是高度集中式的,面临问题1: 单点失效 2. 性能瓶颈 3. 版权问题

洪泛式查询:完全分布式架,每个节点对它共享的文件进行索引,且只对它共享的文件进行索引。查询消息通过已有的TCP连接发送,节点转发查询消息,如果查询命中,则利用反向路径发回查询节点

层次式覆盖网络:介于集中式索引和洪泛查询之间的方法。每个节点或者是一个超级节点,或者被 分配一个超级节点。节点和超级节点间维持TCP连接 。某些超级节点对之间维持TCP连接。超级节点负责跟踪子节点的内容

DHT

❖DHT:一种分布式P2P数据库

❖数据库有(key, value)对。对等方使用key查询DHT,DHT返回与key匹配的值。对等方还可以插入(key, value)对。将(key, value)对分发到(数百万个对等点)

❖中心问题:将(key, value)对分配给对等方。

❖基本思想:将每个key转换为整数,为每个对等点分配整数。将(key, value)对放入最靠近键的对等方

❖将整数标识符分配给[0,2^n-1]范围内的每一个对等方,用于某些n。每个标识符由n位表示。要求每个键都是同一范围内的整数。要获取整数key,对原始密钥进行哈希

❖规则:将key分配给具有最接近ID的对等方。


推荐阅读
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 转自:http:www.phpweblog.netfuyongjiearchive200903116374.html一直对字符的各种编码方式懵懵懂懂,什 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • c# java socketn 字节流_C#Socket编程详解(一)TCP与UDP简介
    一、TCP与UDP(转载)1、TCP1.1定义TCP(TransmissionControlProtocol)传输控制协议。是一种可靠的、面向连接的协议(eg:打电话)、传输效率低 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • MATLAB函数重名问题解决方法及数据导入导出操作详解
    本文介绍了解决MATLAB函数重名的方法,并详细讲解了数据导入和导出的操作。包括使用菜单导入数据、在工作区直接新建变量、粘贴数据到.m文件或.txt文件并用load命令调用、使用save命令导出数据等方法。同时还介绍了使用dlmread函数调用数据的方法。通过本文的内容,读者可以更好地处理MATLAB中的函数重名问题,并掌握数据导入导出的各种操作。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 常用工具(一)
    1.时间戳在线转换工具(1)链接https:tool.lutimestamp(2)说明可以通过此工具:将时间戳转为具体时间点,也可以将具体时间点转为时间戳(3)效果2.JSON在线 ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
author-avatar
高阳毛巾批零店_103
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有