欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

计算机网络之应用层

程序员文章站 2024-02-22 21:56:42
...

读计算机网络之自顶向下做的读书笔记,排版有些混乱。。。
如果有同学发现错误希望指正

应用层

  • 学习内容

    • 网络应用的体系结构
    • 网络应用的进程通信
    • Internet传输层服务模型
    • 特定网络应用及协议
    • socket编程

应用层协议原理

1.1网络应用的体系结构

客户-服务器体系结构

一个总是打开主机叫做服务器,服务于许多称作客户相应的主机  
服务器具有固定的地址(IP地址)  

P2P体系结构

实现端到端的直接通信  
自拓展性

1.2进程通信

一个进程可以看作一个程序
两个不同端系统上的进程通过计算机网络交换报文  

1.2.1客户与服务器进程

一个进程识别为客户(client),一个识别为服务器(server)
在p2p体系中,下载的识别为客户,上载的识别为服务器(或者说发起通信的识别为客户,等待联系的识别为服务器)

1.2.2进程与计算机网络之间的接口

进程之间通过套接字(后续详解)进行通信
!套接字:应用程序编程接口(API)  

1.2.3进程寻址

接受进程需要定义两种信息:  
1.主机的地址(IP地址)
2.目的主机接受进程的标识符(端口号)
流行的应用会分配固定的端口号(可在<http://www.iana.org>找到)

可供应用程序选择的运输服务

- 分类
	- 可靠数据传输
	- 吞吐量:发送进程相接受进程交付比特的速率
	- 时延
	- 安全性
- 因特网(一般TCP/IP)提供的运输服务
	- 1.TCP服务
		* 面向连接服务
		* 可靠数据传输服务
		* 拥塞控制
		* 流量控制
		* 。。。
	- 2.UDP服务
		* 无连接
		* 无可靠数据
		* 无拥塞控制
		* 。。。

1.3应用层协议

- 内容
	- 类型
	- 语法/格式
	- 语意
	- 规则

Web与HTTP

2.1 HTTP概况

HTTP:超文本传输协议
无状态协议:不维护客户端过去发送的任何信息
web网页由一个或多个对象组成
对象可以是HTML文件,图片,Java小程序。。。

2.2 HTTP连接

	1.非持续连接
	例:访问www.baidu.com 
	- 过程
		1.客户进程向百度的HTTP服务器进程(端口号80)发起TCP连接请求
		2.HTTP服务器在端口号80等待请求,接受连接后响应客户端
		3.客户端将请求消息(包含url)通过套接字(端口号80)向服务器发送请求
		4.服务器接受消息并解析出结果通过套接字返回给客户端并关闭TCP连接
	RTT(Round Trip Time):从客户端发送一个很小的数据包返回的时间
	响应时间=RTT(发起,建立TCP连接)+RTT(发送请求消息到接受到请求消息)+服务器响应的时间
	2.持久性连接
	在维持连接的情况下后续的请求和相应通过该TCP连接发送
	3.非持久性连接的问题
		1.对每一个对象都要重新建立TCP连接
		2.操作系统要对每个TCP连接开销资源
	游览器器会并行的多个TCP连接


## 2.3 HTTP的报文格式
---------------------
		
GET /admin_ui/rdx/core/images/close.png HTTP/1.1  
Host: xxx.xxx.xxx.xxx  
Connection: close  
User-agent:xxx
Accept-language: fr  


HTTP/1.1 200 OK  
Connection: close   
Server:Apache Tomcat/5.0.12  
Date:Mon,6Oct2003 13:23:42 GMT   
Content-Length:112  
Last-Modified: date  
Content-type: text/html  
data data data data data data data data 

---------------------
第一行叫做请求行, 包含了请求方式GET(类似的还有POST, PUT, DELETE),请求的URL,以及版本号  
接下来的是首部行  
HOST: 发起请求的主机  
Connetion:告诉服务器不要使用持续连接  
User-agent:游览器类型  
Accept-language:语言种类  

共有三个部分:一行状态行,六行首部行, 其余的都为实体体  
状态行:版本, 状态码, 状态  
- 常见的状态码
	* 200 OK :请求成功
	* 301 Moved Permanently:请求的对象被永久转移了,新的URL在响应报文的Location: 首部行中。客户端将自动获取新的URL
	* 400 Bad Request: 一个通用的差错代码, 该请求不能被服务器理解
	* 404 Not Found: 请求的文档不在服务器上
	* 505 HTTP Version Not Supported: 服务器不支持该版本的HTTP协议
- 首部行:
	* Connection:close 完成响应后关闭连接
	* Server:Apache Tomcat/5..12 告知服务器类型
	* Date 发送该响应报文的时间
	* Last-Modified 对象创建或最后一次修改的时间
	* Content-Length 发送对象的字节数
	* Content-type 发送对象的类型 

2.4 cookie

cookie:由于HTTP是无状态的,用于后续对用户的身份进行特定的响应
* Cookie的组成
	1. HTTP响应报文的一个cookie首部行
	2. HTTP请求报文的一个cookie首部行
	3. 在客户端的主机上保存的cookie, 游览器进行管理
	4. 在服务器上数据库储存的cookie
cookie的使用:
	1. 服务器在响应报文加上首部行 (eg: Set-cookie:6666)的同时在数据库中储存一个ID 6666
	2. 客户端在响应报文中加上首部行(eg: cookie:6666)
	3. 在后续的操作中服务器可以根据cookie的ID对用户进行特定的响应

cookie的不足:
	1.客户端浏览器可以禁用cookie,导致服务器通过cookie跟踪客户端不可靠
	2.cookie中储存的信息有限, 4k左右
	3.cookie不安全

2.5 Web缓存/代理服务器技术

作用:
	1. 减少客户请求的响应时间
	2. 减少机构或者组织的流量
	3. 实现在大范围内(Internet)的内容分发
eg:
	1. 客户端浏览器先与代理服务器建立TCP连接
	2. 代理服务器检测是否存储了客户端所需对象的副本
	3. 如果有就返回该副本, 没有就由代理服务器向该对象的初始服务器建立TCP连接
	4. 代理服务器接受到该对象后, 先存储到本地后再将该副本通过一开始建立的TCP连接返回给客户端

缓存又当客户端,又当服务器
代理服务器一般由ISP(Internet服务商)架设	
为什么大大减少响应时间:
	由于代理服务器(位于局域网中)响应的时间少于初始服务器的响应时间

问题:代理服务器上的副本并不是最新的
解决:条件性GET请求:
	代理服务器在HTTP请求报文中加入首部行: If-Modified-since:date
	告诉服务器请求的对象只有在date时间后被修改才发送更新的对象
	如果没有就发送状态码304 Not Modified

Email应用

电子邮件是一种异步的通信媒介
电子邮件系统的主要组成:
	1. 用户代理
	2. 邮件服务器
	3. 简单邮件传输协议(SMTP)
发送邮件过程:
	当张三想要发送一份邮件给李四,张三在编写完邮件后,张三的用户代理向他的邮箱服务器发送邮件,此时邮件在张三的邮件服务器外出报文队列中。再由张三的邮箱服务器发送给李四的用户服务器,李四想要查看张三发的邮件,则李四的邮箱服务器就会鉴别李四的身份(用户名和密码),此时李四就可以查看张三给他发的邮件
	当张三的邮件不能发送给李四时,张三的邮箱服务器会在报文列表中保持该邮件并以30分钟的频次尝试发送,若几天不能成功,则以电子邮件的方式通知张三

2.6.1 SMTP

SMTP是因特网电子邮件的主要的应用层协议,使用TCP可靠数据传输
邮件报文的体部分(不仅仅只有首部)只能采用7比特ASCII表示。
SMTP不使用中间服务器进行邮件的转发
端口号:25
与HTTP的对比:
	1. HTTP是一个拉取协议(pull), SMTP是一个推送协议。
	2. HTTP将每个对象封装的每一个报文里面,邮箱将所有对象封装到一个报文里面
	3. HTTP没有7比特的限制

2.6.2 邮箱报文格式

头部行:
	1.To:
	2.From:
	3.Subject:
消息体:
	消息本身(ASCII)
多媒体邮件拓展(MIME):
	在头部增加额外的行声明MIME的内容类型

2.6.3 邮件访问协议

由于SMTP协议是push协议,当用户想要向邮件服务器申请查看邮件时,需要使用pull式协议。
1. POP3协议
	主要分为三个阶段
		第一阶段:特许。用户代理通过向服务器发送用户名(明文)以及口令让服务器鉴别用户
		第二阶段:事务处理。用户代理可以取回报文并且做出删除标记或取消删除标记.
		第三阶段:更新。用户代理发送quit后,断开POP3对话,此时服务器根据删除标记删除对应的邮件
	在事务处理阶段,服务器会根据用户代理发出的命令做出应答,例如+OK代表之前的命令是正确的,-ERR代表前面的命令出现了差错。

2.IMAP协议
	由于POP3协议不能够让用户创建远程邮箱文件夹,IMAP协议可以解决该问题
	IMAP服务器会将每一个邮件与文件夹联系起来,与POP3不同的是,IMAP服务器会维护IMAP会话用户状态信息。
	IMAP还支持用户代理只获取邮件中的某些部分的命令

DNS(域名系统)

主机使用IP地址,或者域名(eg:www.facebook.com)进行标识
IP地址由四个字节所组成

2.7.1 DNS所提供的服务

1.解决域名到IP地址的映射:
	域名解析系统(DNS)
		* 多层DNS服务器组成分布式数据库
		* 应用层协议
2. 主机别名(使得别名规范主机名更好记忆)
3. 邮件服务器别名(同上)
3. 负载分配	

2.7.2 DNS工作机制

不采用集中式设计的原因:
	1. 单点故障
	2. 流量问题
	3. 距离问题
	4. 维护问题
采用分布式,层次数据库
大致来说有三种域名服务器:
	根域名服务器,*域名服务器, 权威域名服务器。
还有一种本地域名服务器:
	当主机进行DNS查询时,先将查询发到本地域名服务器上,再由本地域名服务器作为代理发送给域名解析服务器系统

eg:当主机cse.nyu.deu想要知道主机gaia.cs.umass.edu的域名
查询方式:迭代查询
*被查询的服务器返回之后将要查询服务器的地址("我不知道该服务器的地址,你可以问它")  

查询方式:递归查询
*将域名解析的任务交给查询的服务器

DNS缓存:
	当域名解析服务器获得 域名--IP 的这一映射时,将会缓存这一映射
		* 一般的域名服务器会缓存*域名服务器(所以根域名服务器一般不会被访问)
		* 缓存条目一段时间过后将会被清除

2.7.3 DNS记录和报文

共同实现分布式数据库的DNS服务器均储存了资源记录(RR)
每个报文中都包含了一条或多条资源记录
RR:提供了主机到IP地址的映射
资源记录里包含四个元组(Name, Value, Type, TTL)
TTL:记录的生存时间
Name和Value取决于Type:
	* 当Type=A, Name代表主机, Value代表IP地址
	* 当Type=NS,Name代表一个域(eg:foo.com),Value代表获得该域主机IP地址的权威DNS服务器的主机名
	* 当Type=CNAME,Value是起了别名为Name的主机对应的规范主机名
	* 当Type=MX, Value是起来别名为Name的邮箱服务器对应的规范主机名
		ps:同一个公司的邮箱服务器的别名可以与其它服务器的别名相同.

2.7.3.1 DNS报文

DNS包含两种报文且该两种报文格式相同:查询和回答报文
报文结构:
	* 首部区域(12字节):标识查询还是回答报文.....
	* 问题区域:正在进行的查询信息
	* 回答区域:最初请求名字的资源记录
	* 权威区域
	* 附加区域

2.7.3.2 在DNS数据库里插入记录

在注册登记机构注册域名

P2P文件分发

学习内容:研究一个单一主机想多个主机(对等方)发大文件的应用,使用BitTorrent协议

1. P2P体系结构的拓展性

在对于单一主机对多个对等方发送文件具有时间上的优越性

2.BitTorrent

文件分发协议:
名词介绍:
	洪流(torrent):被接受方的所有集合。
	追踪器:每个洪流都具有的一个基础设施节点。
内容:
	假设有一个新的对等方A加入洪流,追踪器会向A发送一个洪流中的主机IP地址的子集(作为A的邻居),子集中的每一个用户都会拥有来自该文件块的子集。A周期性的向邻居询问他们所拥有的块列表.
	此时出现了两个问题:
		1. A应该向邻居选择哪些块呢?
		2. A应该响应哪些向他发起请求的邻居发送块。
	解决一:
		最稀缺优先:针对A所需的文件块,优先发送最稀缺的块
	解决二:
		A优先向能够给他发送速率最高的四个邻居发送块。并且每过10秒重新计算速率。这四个对等方被称作**疏通**。并且A还要随机的选择另外的一个对等方B向其发送块,也许由于A向B发送数据,A或许能够成为B的疏通。相应的B也许也可以成为A的疏通。

视频流和内容分发网

在用户向服务器请求视频文件时,可根据自身网络速率选择不同画质的视频。

内容分发网

建立单规模数据中心造成的问题:
	1.如果客户远离数据中心,将会通过多个ISP。
	2. 浪费网络带宽
	3. 单点故障
采用CDN(内容分发网):
	管理多个地理位置上的服务器,根据客户位置为其选择最优的服务器。
CDN服务器安置原则:
	1.“深入”,利用高度分布式设计,将每个CDN服务器尽量在地理位置靠近端用户。维护和管理服务器较为困难。
	2.“邀请做客”,建立多个大型数据中心。较高时延和较低吞吐量作为代价

1.CDN操作

当用户主机检索特定视频时,需要1.选择合适的CDN服务器集群2.将用户请求重定向到该集群的某台服务器上。

2.集群选择策略

1.地理位置最近。
2.根据实时测量。

套接字编程

网络应用程序由客户程序和服务器程序组成
开发网络应用程序有两种:
	1.使用公开的协议标准
	2.自己定义私有的协议标准
分组地址包括目的主机的IP地址与端口号
每创建一个套接字都会创建一个端口号
....

应用层小结

应用层中学习了客户-服务器模型,主要内容是各种应用层协议。

相关标签: 读书笔记 网络