计算机网络 第二章

第二章 应用层

课程链接
教材:《计算机网络-自顶向下方法(第7版)》,机械工业出版社,2016
课件:https://pan.baidu.com/s/1EElOrkkY4WQqgeKHuGm-bg 密码:1958。


2.1应用层协议原理

网络应用的体系结构:

  • 客户-服务器模式(C/S:client/server)
    • 服务器:一直运行;固定的IP地址和周知的端口号;扩展性差
    • 客户端:主动与服务器通信;与互联网有间歇性的连接;动态IP;不直接与其它客户端通信
  • 对等模式(P2P:Peer To Peer)
    • 没有一直运行的服务器;
    • 任意端系统之间可以进行通信;
    • 每一个节点既是客户端又是服务器、可拓展性好;
    • 参与的主机间歇性连接且可以改变IP 地址,难以管理;
  • 混合体:客户-服务器和对等体系结构

分布式进程通信需要解决的问题:

  • 进程标示和寻址问题:
  • 传输层-应用层提供服务是如何:
    • 位置:层间界面的SAP (TCP/IP :socket)
    • 形式:应用程序接口API (TCP/IP :socket API)
  • 如何使用传输层提供的服务,实现应用进程之间的报文交换,实现应用:
    • 定义应用层协议:报文格式,解释,时序
    • 编制程序,使用OS提供的API,调用网络基础设施提
      供通信服务传报文

(1)对进程进行编址
进程为了接收报文,必须有一个标识即:SAP(发送也需要标示)[IP+传输层协议(TCP/IP)+端口号]
(2)传输层提供的服务-需要穿过层间的信息

  • 层间接口必须要携带的信息:
    • 要传输的报文(对于本层来说:SDU)
    • 谁传的:对方的应用进程的标示:IP+TCP(UDP) 端口
    • 传给谁:对方的应用进程的标示:对方的IP+TCP(UDP)口
  • 传输层实体(tcp或者udp实体)根据这些信息进行TCP报文段(UDP数据报)的封装

(3)传输层提供的服务-层间信息的代表(如果Socket API 每次传输报文,都携带如此多的信息,太繁琐易错,不便于管理)

  • TCP socket:可以用一个整数表示两个应用实体之间的通信关系,本地标示;4元组:(源IP,源port,目标IP,目标port)
  • UDP socket: 2元组:IP,port (源端指定)

应用层协议
定义了:运行在不同端系统上的应用进程如何相互交换报文。
应用协议仅仅是应用的一个组成部分。

公开协议:

  • 由RFC文档定义
  • 允许互操作
  • 如HTTP, SMTP

专用(私有)协议:

  • 协议不公开
  • 如:Skype

如何描述传输层的服务?

  • 数据丢失率
  • 吞吐
  • 延迟
  • 安全性

2.2 Web and HTTP

2.2.1 web

网络应用的体系结构:

  • Web页:由一些对象组成。对象可以是HTML文件、JPEG图像、Java小程序、声音剪辑文件等
  • Web页含有一个基本的HTML文件,该基本HTML文件又包含若干对象的引用(链接)
  • 通过URL对每个对象进行引用
    • 访问协议,用户名,口令字,端口等;
  • URL格式

2.2.2 HTTP

HTTP: 超文本传输协议

  • Web的应用层协议
  • 客户/服务器模式
    • 客户: 请求、接收和显示Web对象的浏览器
    • 服务器: 对请求进行响应,发送对象的Web服务器

使用TCP:客户发起一个与服务器的TCP连接 (建立套接字) ,端口号为 80

HTTP是无状态的:服务器并不维护关于客户的任何信息

HTTP连接

  • 非持久HTTP

  • 最多只有一个对象在TCP连接上发送

  • 下载多个对象需要多个TCP连接

  • HTTP/1.0使用非持
    久连接

  • 持久HTTP

  • 多个对象可以在一个(在客户端和服务器之间的)TCP连接上传输

  • HTTP/1.1 默认使用持久连接

  • 持久HTTP还分为非流水方式和流水方式

    • 非流水方式:客户端只能在收到前一个响应后才能发出新的请求;每个引用对象花费一个RTT
    • 流水方式:客户端遇到一个引用对象就立即产生一个请求;HTTP/1.1的默认模式

在这里插入图片描述
HTTP请求报文
两种类型的HTTP报文:请求、响应
方法类型:

  • HTTP/1.0
    • GET
    • POST
    • HEAD
  • HTTP/1.1
    • GET, POST, HEAD
    • PUT
    • DELET

2.2.3 用户-服务器状态:cookie

4个组成部分:

  • 在HTTP响应报文中有一个cookie的首部行
  • 在HTTP请求报文含有一个cookie的首部行
  • 在用户端系统中保留有一个cookie文件,由用户的浏览器管理
  • 在Web站点有一个后端数据库

ookies能带来什么:

  • 用户验证
  • 购物车
  • 推荐
  • 用户状态 (Web e-mail)

2.2.4 web缓存 (代理服务器)

目标:不访问原始服务器,就满足客户的请求

  • 用户设置浏览器: 通过缓存访问Web
  • 浏览器将所有的HTTP请求发给缓存
    • 在缓存中的对象:缓存直接返回对象
    • 如对象不在缓存,缓存请求原始服务器,然后再将对象返回给客户端

2.3 FTP:文件传输协议

特点:

  • 向远程主机上传输文件或从远程主机接收文件
    • 客户/服务器模式
    • 客户端:发起传输的一方
  • 服务器:远程主机
  • ftp: RFC 959
  • ftp服务器:端口号为21

控制连接

  • FTP客户端与FTP服务器通过端口21联系,并使用TCP为传输协议
  • 客户端通过控制连接获得身份确认
  • 客户端通过控制连接发送命令浏览远程目录
  • 收到一个文件传输命令时,服务器打开一个到客户端的数据连接
  • 一个文件传输完成后,服务器关闭连接

FTP服务器维护用户的状态信息:
当前路径、用户帐户与控制连接对应,有状态

2.4 EMail:电子邮件

3个主要组成部分:

  • 用户代理
    • 又名 “邮件阅读器; 撰写、编辑和阅读邮件
  • 邮件服务器
    • 输出报文队列保持待发送邮件报文
    • 邮件服务器之间的SMTP协议:发送email报文
  • 简单邮件传输协议:SMTP
    • 使用TCP在客户端和服务器之间传送报文,端口号为25
    • 命令/响应交互:命令:ASCII文本 / 响应:状态码和状态信息
    • 报文必须为7位ASCII码

SMTP:总结

  • SMTP使用持久连接
  • SMTP要求报文(首部和主体)为7位ASCII编码
  • SMTP服务器使用CRLF.CRLF决定报文的尾部

与HTTP比较:

  • 二者都是ASCII形式的命令/响应交互、状态码
  • HTTP:拉(pull)
  • SMTP:推(push)
  • HTTP:每个对象封装在各自的响应报文中
  • SMTP:多个对象包含在一个报文中、

邮件报文格式
在这里插入图片描述邮件访问协议

  • POP:邮局访问协议(Post Office Protocol)[RFC 1939]
    • 用户身份确认 (代理<–>服务器) 并下载
  • IMAP:Internet邮件访问协议(Internet Mail AccessProtocol)[RFC 1730]
    • 更多特性 (更复杂)
    • 在服务器上处理存储的报文
  • HTTP:Hotmail , Yahoo! Mail等
    • 方便

POP与IMAP

POP3

  • “下载并保留”:不同客户机上为报文的拷贝
  • POP3在会话中是无状态的

IMAP

  • IMAP服务器将每个报文与一个文件夹联系起来
  • 允许用户用目录来组织报文
  • 允许用户读取报文组件
  • IMAP在会话过程中保留
  • 用户状态: 目录名、报文ID与目录名之间映射

问题:

  • 问题1:如何命名设备
    • 用有意义的字符串:好记,便于人类用使用
    • 解决一个平面命名的重名问题:层次化命名
  • 问题2:如何完成名字到IP地址的转换
    • 分布式的数据库维护和响应名字查询
  • 问题3:如何维护:增加或者删除一个域,需
    要在域名系统中做哪些工作

2.5 DNS

DNS的主要思路

  • 分层的、基于域的命名机制
  • 若干分布式的数据库完成名字到IP地址的转换
  • 运行在UDP之上端口号为53的应用服务
  • 核心的Internet功能,但以应用层协议实现
    - 在网络边缘处理复杂性

DNS主要目的:

  • 实现主机名-IP地址的转换(name/IP translate)
  • 其它目的
    • 主机别名到规范名字的转换:Host aliasing
    • 邮件服务器别名到邮件服务器的正规名字的转换:Mail server aliasing
    • 负载均衡:Load Distributio

DNS域名结构

  • 一个层面命名设备会有很多重名
  • NDS采用层次树状结构的 命名方法
  • Internet 根被划为几百个顶级域(top lever domains)
    • 通用的(generic)
      .com; .edu ; .gov ; .int ; .mil ; .net ; .org
      .firm ; .hsop ; .web ; .arts ; .rec ;
    • 国家的(countries)
      .cn ; .us ; .nl ; .jp
  • 每个(子)域下面可划分为若干子域(subdomains)
  • 树叶是主机

DNS名字空间

  • 域名(Domain Name)
    • 从本域往上,直到树根
    • 域的域名:可以用于表示一个域
    • 主机的域名:一个域上的一个主机
  • 域名的管理
    • 一个域管理其下的子域
    • 创建一个新的域,必须征得它所属域的同意
  • 域遵从组织界限,而不是物理网络
    • 域的划分是逻辑的,而不是物理的

问题2:解析问题-名字服务器

  • 区域的划分有区域管理者自己决定
  • 将DNS名字空间划分为互不相交的区域,每个区域都是树的一部分
  • 名字服务器:
    • 每个区域都有一个名字服务器:维护着它所管辖区域的权威信息(authoritative record)
    • 名字服务器允许被放置在区域之外,以保障可靠性

顶级域(TLD)服务器:负责顶级域名(如com, org, net,edu和gov)和所有国家级的顶级域名(如cn, uk, fr, ca,jp )

资源记录(resource records)
- 作用:维护 域名-IP地址(其它)的映射关系
- 位置:Name Server的分布式数据库中

  • RR格式: (domain_name, ttl, type,class,Value)
    • Domain_name: 域名
    • Ttl: time to live : 生存时间(权威,缓冲记录)
    • Class 类别 :对于Internet,值为IN
    • Value 值:可以是数字,域名或ASCII串
    • Type 类别:资源记录的类型—见下页

DNS大致工作过程

  • 应用调用 解析器(resolver)
  • 解析器作为客户 向Name Server发出查询报文(封装在UDP段中)
  • Name Server返回响应报文(name/ip

提高性能:缓存

  • 一旦名字服务器学到了一个映射,就将该映射
    缓存起来
  • 根服务器通常都在本地服务器中缓存着

维护
增删改查

攻击DNS
在这里插入图片描述

2.6 P2P应用

2.6.1 纯P2P架构

  • 没有(或极少)一直运行的服务器
  • 任意端系统都可以直接通信
  • 利用peer的服务能力
  • Peer节点间歇上网,每次IP地址都有可能变化

文件分发时间:
在这里插入图片描述[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UKSbtXtT-1678090382698)(null)]

2.6.2 P2P文件分发: BitTorren

  • Peer加入torrent
  • 当peer下载时,该peer可以同时向其他节点提供上载服
  • Peer可能会变换用于交换块的peer节
  • 扰动churn: peer节点可能会上线或者下线
  • 一旦一个peer拥有整个文件,它会(自私的)离开或者保留(利他主义)在torrent

BitTorrent: 请求,发送文件
请求块:

  • 在任何给定时间,不同peer节点拥有一个文件块的子集
  • 周期性的,Alice节点向邻居询问他们拥有哪些块的信息
  • Alice向peer节点请求它希望的块,稀缺的

发送块:一报还一报tit-for-tat

  • Alice向4个peer发送块,这些块向它自己提供最大带宽的服务
  • 其他peer被Alice阻塞 (将不会从Alice处获得服务)
  • 每10秒重新评估一次:前4位
  • 每个30秒:随机选择其他peer节点,向这个节点发送块
    • “优化疏通” 这个节点
    • 新选择的节点可以加入这个top

2.6.3 P2P文件共享

集中式目录
文件分发是P2P,文件搜索是C/S。
存在问题:

  • 单点故障
  • 性能瓶颈
  • 侵犯版权

查询洪泛:Gnutell协议

  • 全分布式

    • 没有中心服务器
  • 开放文件共享协议

  • 许多Gnutella客户端实现了Gnutella协议

    • 类似HTTP有许多的浏览器
  • 等方X必须首先发现某些已经在覆盖网络中的其他对等方:使用可用对等方列表

    • 自己维持一张对等方列表(经常开机的对等方的IP)联系维持列表的Gnutella站点
  • X接着试图与该列表上的对等方建立TCP连接,直到与某个对等方Y建立连接

  • X向Y发送一个Ping报文,Y转发该Ping报文

  • 所有收到Ping报文的对等方以Pong报文响应

    • IP地址、共享文件的数量及总字节数
  • 收到许多Pong报文,然后它能建立其他TCP连接

层次覆盖
在这里插入图片描述
KaZaA:查询

  • 每个文件有一个散列标识码和一个描述符
  • 客户端向其组长发送关键字查询
  • 组长用匹配进行响应:
    • 对每个匹配:元数据、散列标识码和IP地址
  • 如果组长将查询转发给其他组长,其他组长也以匹配进行响应
  • 客户端选择要下载的文件
    • 向拥有文件的对等方发送一个带散列标识码的HTTP请求

分布式散列表
在这里插入图片描述

2.7 CDN

多媒体流化服务:DASH(Dynamic, Adaptive Streaming over HTTP)
服务器:

  • 将视频文件分割成多个块
  • 每个块独立存储,编码于不同码率(8-10种)
  • 告示文件(manifest file): 提供不同块的URL

客户端:

  • 先获取告示文件
  • 周期性地测量服务器到客户端的带宽
  • 查询告示文件,在一个时刻请求一个块,HTTP头部指定字节范围
    • 如果带宽足够,选择最大码率的视频块
    • 会话中的不同时刻,可以切换请求不同的编码块 (取决于当时的可用带宽)

CDN:Content distribution netw
通过CDN,全网部署缓存节点,存储服务内容,就近为用户提供服务,提高用户体验

  • enter deep: 将CDN服务器深入到许多接入网
    • 更接近用户,数量多,离用户近,管理困难
    • Akamai, 1700个位置
  • bring home: 部署在少数(10个左右)关键位置,如将服务器簇安装于POP附近(离若干1st ISP POP较近)
    • 采用租用线路将服务器簇连接起来
    • Limeligh

2.8 TCP 套接字编程

Socket编程
应用进程使用传输层提供的服务才能够交换报文,实现应用协议,实现应用。
TCP/IP:应用进程使用Socket API访问传输服务
地点:界面上的SAP(Socket) 方式:Socket API
目标: 学习如何构建能借助sockets进行通信的C/S应用程序
socket: 分布式应用进程之间的门,传输层协议提供的端到端
服务接口
2种传输层服务的socket类型:

  • TCP: 可靠的、字节流的服务
  • UDP: 不可靠(数据UDP数据报)服务

TCP套接字编程
套接字:应用进程与端到端传输协议(TCP或UDP)之间
的门户
TCP服务:从一个进程向另一个进程可靠地传输字节流
在这里插入图片描述在这里插入图片描述## 2.9 UDP 套接字编程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值