计网笔记 02 | 应用层
应用层协议原理
关于网络应用
(1)网络应用:
- 运行在不同的端系统上
- 通过网络交流(可向网络发送数据、接收数据,可对数据进行处理)
- 可快速部署开发
- 不需要在网络核心设备上运行
(2)网络应用的架构
共三种:
C/S架构:
- 一个服务器(或多个服务器共同构成服务器集群),服务的提供者
- 多个客户端,服务的使用者
P2P体系架构:
客户机两两直连,所有客户机同时承担服务器、客户端的功能(身份对等)。
混合结构(C/S+P2P):
客户机向服务器发送资源请求,若服务器没有该资源,则服务器会询问其它客户机并找到拥有该资源的客户机,使得这台客户机与请求客户机之间进行连接,完成资源的传递。
(3)网络应用所需要的服务类型(不同应用对以下所有服务的需求可能不同):
- 数据的可靠传输
- 带宽的自动控制
- 传输和反馈的实时性
- 安全性
应用层协议
- 定义了不同主机上的进程之间通信的规则(此处的进程,专指不同端系统上的进程)
- 不同主机上进程的通信采用的报文交换的方式
-
应
用
层
协
议
定
义
内
容
{
交
换
的
报
文
类
型
各
种
报
文
类
型
的
语
法
字
段
的
语
义
进
程
何
时
、
如
何
发
送
报
文
及
对
报
文
进
行
响
应
应用层协议定义内容 \begin{cases} 交换的报文类型\\ 各种报文类型的语法\\ 字段的语义\\ 进程何时、如何发送报文及对报文进行响应 \end{cases}
应用层协议定义内容⎩⎪⎪⎪⎨⎪⎪⎪⎧交换的报文类型各种报文类型的语法字段的语义进程何时、如何发送报文及对报文进行响应
协议不同于应用,协议给定的是规则,应用则是运行时对应的实体载体
一个问题,区分网络应用所在的主机 & 区分该应用是该主机上的哪个网络应用(进程)⇒ 套接字(socket)
套接字(“传送门”)
每个网络应用进程都有一个属于自己的套接字 ,该套接字在整个因特网上独一无二 。
套接字组成:
- 主机地址:32位 IP 地址(唯一)进行标识,标识该网络应用进程运行在因特网上哪一台主机上
- 端口地址:16位端口号,标识在该主机上标示该网络应用进程
- 套接字长度:32+16=48位
进程通过套接字来发送、接收报文。发送进程将报文交给套接字,套接字将报文传输到接收进程的套接字。
两类传输层服务
运输层将所提供的传输服务整合为两类:TCP & UDP
TCP
Transmission Control Protocol
UDP
User Datagram Protocol
TCP & UDP 安全性
各种协议
http
关于web
不必对web感到神秘,web只是一种网络应用:
-
web属于C/S模式
-
web的构成:
客户机通过http协议向服务器发起外部请求,服务器可搭载于不同平台上;服务器对客户机进行响应,最终返回基于http的服务。
整个过程的载体即为浏览器为整个http提供服务。
-
web内容的表达:
web的内容通过 HTML协议+HTTP协议 进行解释和表述。我们需要一个唯一的标识符去指代需要的对象所在地址,这样才有可能在服务器中找到对象,故而使用 URL 来定位。
- web内容传输:使用http 协议
关于http协议,具体见下。
http TCP传输服务
- 客户端启动 TCP 连接 创建套接字 ) 到服务器 , 端口 80
- 服务器接受来自客户端的 TCP 连接
- http 报文(应用层协议报文)在浏览器 (http client) 和Web 服务器 (http 之间进行交换
- 关闭 TCP 连接
http无状态,服务器不会保留任何访问过的请求信息
http两种连接方式
http1.0 非持久性连接
对于非持久性连接:
- 取对象需要 2 RTTs,一次是TCP连接,一次是对象请求/发送
- 总时间=2 RTTs+文件传输时间
- 许多浏览器同时打开多个并行的连接来改善性能
示意图如下:
http1.1 持久性连接
服务器在发送响应后,不再断开 TCP 连接,而是保持该连接用于后续对象的传送,直至该连接“ 休息 ”了一个较长的时间后,再断开该连接。
- 优点:减少了对服务器端连接数的需要,从而减少了对服务器端套接字资源的占用,提高了服务器的负载能力
- 分类:
http报文类型
请求报文
客户机发送给服务器
http报文请求的一般格式:
(1)请求行支持办法
http 1.0:
响应报文
服务器发送给客户机
一段典型的http响应报文:
响应报文的一般格式:
与请求报文的区别在于状态行,URL的位置变成了状态,版本的位置变成了短语
常见响应状态码和短语:
Cookie
http协议无状态,但很多情况下又需要“保持状态”,这也正是cookie产生的一个原因
(1)什么是Cookie:
- 服务器响应请求中的一段数据
- 浏览器需要保存这段数据,不得轻易删除(以文本的形式保存在客户机上)
- 此后每次浏览器访问该服务器,都必须带上这段数据
或者说,Cookie是一个唯一标识,能让服务器知道访问的用户身份,从而恢复该用户所保存的一些信息等等。
(2)使用Cookie的目的:
- 限制用户访问
- 把内容和用户身份关联起来
(3)Cookie的组成部分:
(4)Cookie工作流程:
(4)Cookie用途
显然,cookie安全性较差,一旦被攻击,将会泄漏大量用户信息,故而有了session:通过cookie识别不同的用户,对应的在session里保存私密的信息以及超过4096字节的文本,session保存在服务器。
SMTP
Simple Mail Transfer Protocol,简单邮件传输协议。SMTP 作为邮件传输的一个主要协议,运行在电子邮件系统中。
电子邮件系统:
(1)构成:
- 用户代理
- 邮件服务器
- SMTP:在传输邮件过程中告诉服务器这是一封邮件,而非可任意显示的对象
(2)工作流程:
- 发送方用户通过用户代理来写作、编辑邮件,形成邮件报文
- 发送端的报文通过SMTP传送到邮件服务器,邮件服务器收到报文请求后,将用户邮件发送到接收方的邮件服务器
- 接收方的邮件服务器推送邮件(或:接收方的用户代理拉取邮件)给接收方用户(此过程不是SMTP,而是POP3/IMAP,后述讲到)
SMTP协议:
- SMTP 使用持续连接
- SMTP 要求报文 (首部 &信体 ) 全部使用 7 bit ASCII 码
- 某些代码组合不允许出现在报文中 (e.g.,CRLF.CRLF),否则容易被错读或误读。此类数据必须进行编码 通常使用 base 64 或 quoted printable)
- SMTP 服务器用 CRLF.CRLF 表示邮件报文的结束
SMTP 与 HTTP 对比:
邮件报文格式(RFC 822):
注意,邮件报文格式不同于SMTP协议,SMTP协议是对报文格式进行的标准化解释,各方主机通过这个标准的解释才能正确传输邮件
MIME:
Multipurpose Internet Mail Extensions,多用途互联网邮件扩展
MIME试图在不改变SMTP协议和RFC822(邮件格式标准)的基础上,使得邮件可以传送任意二进制文件。
客户机获取邮件的方法:
其中,HTTP协议是一种较为偷懒的方式,可直接在浏览器上请求获取对象。
POP3:
客户机将邮件从服务器拉过来
- 认证阶段(用户名、密码)
- 认证之后,
总结:
IMAP:
达到客户机和邮件服务器同步
DNS
Domain Name System,域名解析系统,即将域名与其所需对应的实体进行连接。作为一个网络应用来理解比较容易。
将域名(如www.baidu.com)解析为IP地址(如 211.69.4.1,IP地址是标准的能够被所有进程所接受的实体),从而不必记录32位冗长的IP地址,只需使用域名即可访问需要访问的地址。
DNS服务内容:
DNS解析过程:
发起请求使用递归查询,后续解析为迭代查询
DNS的实现:
对于一个DNS请求,首先会到权威DNS服务器上去找,找不到的话去顶级DNS服务器上找,再找不到的话就去根DNS服务器上找。
(1)根域名服务器:
(2)顶级域服务器、权威域服务器:
严格的讲,本地 DNS 服务器其并不属于 DNS 层次结构中的一层:
- 每一个网络服务提供商都会提供一个本地 DNS 服务器,有时我们将其称为默认 DNS 服务器。
- 当一台主机需要做一个域名查询的时候,查询请求首先被发送到就近的本地域名服务器进行查询(就近,这也可以说明比如当你访问一个(从未访问过的)网站发现访问速度较快时,可能是使用同一个DNS服务器的人之前访问过这个网站,访问信息就近缓存在了本地DNS服务器)
本地域名服务器的行为就像一个代理,它会向域名的层次体系中进行进一步的域名查询
DNS缓存:
插播nslookup看域名:
DNS记录的实现:
攻击DNS服务器:
(1)DDos攻击:
本地DNS服务器容易受到拒绝服务攻击
(2)重定向攻击:
(3)利用 DNS 服务器对目标主机采用 DDoS 攻击——反射攻击
P2P文件共享
一次P2P传输情景:
P2P结点数量过多,虽易于扩展,但不便管理。
- C/S模式:文件传输效率受结点间链路和节点数量确定(受节点数量的单个链路所确定?)
- P2P模式:受整体文件传输速率所确定
故而随着加入节点数量的增多,C/S需要的时间越长,呈线性递增;而P2P,越来越多的节点能够请求资源也能够提供资源,时间没有太明显的变化,此时效率更高
P2P文件定位的方法:
- 集中式目录
- 洪泛查询
- 利用不均匀性法
一个典型应用:BT
试图在整个P2P应用构成的网络(应用)中,试图找到所有可能存在我所需资源的点,这个过程使用各种键值、数值表示,最后构成一个正常的分布式哈希表,试图标识所有散列值和对等方的标识
实际上,是一个环形DHT