热门标签 | 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的对等方。


推荐阅读
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • HTML中span元素为何会脱离li元素对齐?
    在HTML布局中,有时会遇到span元素未能与li元素保持对齐的问题。本文将探讨这一现象的原因,并提供解决方案。 ... [详细]
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 如何撰写初级和高级前端开发者的专业简历
    如何撰写初级和高级前端开发者的专业简历 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • 本文探讨了文件传输过程中的优化与安全策略。具体而言,研究了如何将客户端的文件高效上传至服务器。通过使用结构体对象,可以封装文件的相关信息,如位置和大小,并利用缓冲区存储实际数据,从而实现高效的数据传输。此外,文章还讨论了在传输过程中确保数据完整性和安全性的多种方法,包括加密技术和身份验证机制。 ... [详细]
  • 本文详细探讨了Java中Unicode编码的二进制转换方法及其具体实现。通过分析\u开头的字符串,解释了每组\uxxxx如何对应一个特定的Unicode字符,并提供了相关代码示例以加深理解。希望读者在实际开发中能有效应用这些知识。 ... [详细]
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社区 版权所有