计算机网络笔记2 应用层

应用层

1、应用层协议原理

CS模式:可扩展性差,可靠性差

p2p模式:管理起来比较困难。

napster:文件搜索用cs模式 文件传输用p2p

分布式应用进程需要解决那些问题才能通信?

问题1:进程标示和寻址问题(服务用户)

问题2:传输层-应用程提供服务是如何(服务)

  • 位置:层间界面的SAP(TCP/IP:socket)
  • 形式:应用程序接口API(TCP/IP:socket API)

问题3:如何使用传输层提供的服务,实现应用进程之间的报文交换,实现应用(用户使用服务)

  • 定义应用层协议:报文格式、解释、时许等
  • 编制程序,使用OS提供的API,调用网络基础设施提供通信服务传报文,实现应用时序等。
传输层提供的服务-层间信息的代表
  • 如果Socket API 每次传输报文,都携带如此多的信息,太繁琐易错,不便于管理
  • 用个代号标示通信的双方或者单方:socket
  • 就像OS打开文件返回的句柄一样
    • 对句柄的操作,就是对文件的操作
  • TCP socket
    • TCP服务:两个进程之间的通信需要之前要建立连接
      • 两个进程通信会持续一段时间,通信关系稳定
    • 可以用一个整数表示两个应用实体之间的通信关系,本地标识
    • 传功层间接口的信息量最下
    • TCP socket:源IP,源端口号,目标IP, 目标端口号
TCP之上的套接字(socket)
  • 对于使用面向连接的服务(TCP)的应用而言,套接字是4元组的一个具有本地意义的标志
  • 4元组:源IP,源端口号,目标IP, 目标端口号
  • 唯一的指定了一个会话(2个进程之间的会话关系)
  • 应用使用这个标志,与远程的应用进程通信
  • 不必在每一个报文的发送都要指定这4元组
UDP socket
  • UDP服务,两个进程之间的通信需要之前无需建立连接
    • 每个报文都是独立传输的
    • 前后报文可能给不同的分布式进程
  • 只能用一个整数标识本应用的实体的标示
  • 穿过层间接口的信息量大小最小
  • 本IP 本端口号
  • 但是传输报文时:必须要提供对方IP, port;
    • 接收报文时:传输层需要上传对方的IP, port;
  • 对于使用UDP的应用而言,套接字时2元组的一个具有本地意义的标示
    • IP, port(源端指定)
    • UDP套接字指定了应用所在的一个端节点
    • 在发送数据报时,采用创建好的本地套接字(标识ID),就不必再发送每个报文中知名自己所采用的IP和port
应用层协议

定义了运行在不同端系统上的应用进程如何相互交换报文

  • 交换的报文类型,请求和应答报文
  • 各种报文类型的语法:报文中的各个字段及其描述
  • 字段的语义:即字段取值的含义
  • 进程何时,如何发送报文及对报文进行相应的规则

应用协议仅仅是应用的组成部分

公开协议:专用协议

衡量指标
  • 数据丢失率
  • 延时
  • 吞吐
  • 安全性
Internet传输层提供的服务
TCP服务
  • 可靠的传输服务
  • 流量控制:发送方不会淹没接收方
  • 拥塞控制:当网络出现拥塞时,能抑制发送方
  • 不能提供的服务:时间保证,最小吞吐保证和安全
  • 面向连接:要求在用户端进程和服务器进程之间建立连接
UDP服务
  • 不可靠数据传输
  • 不提供的服务:可靠、流量控制、拥塞控制、时间、带宽保证、建立连接
安全TCP

tcp和udp都没有加密,明文通过互联网传输,甚至是密码

SSL

在TCP上面实现,提供加密的TCP连接

  • 私密性
  • 数据完整性
  • 端到端的鉴别

SSL在应用层

  • 应用采用SSL库,SSL库使用TCP通信

SSL socket API

  • 应用通过API将明文交给socket,SSL将其加密在互联网上传输

2、Web and HTTP

web是应用 http是支持web的协议。

  • Web页:由一些对象组成
  • 通过URL可以对每个对象进行访问
  • URL 格式
    • Prot://user:psw@www.someSchool.edu/someDept/pic.gir:port
    • 协议名 用户:口令 主机名 路径名 端口
HTTP:超文本传输协议
  • 客户:请求、接收和显示Web对象的浏览器
  • 服务器:对请求进行相应,发送对象的Web服务器

HTTP1.0:RFC 1945

HTTP1.1:RFC 2068

使用TCP

  • 客户发起一个与服务器的TCP连接(建立套接字)

  • 服务器接收客户的TCP连接

  • 在浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP报文

  • TCP连接关闭

HTTP是无状态的

  • 服务器并不维护关于客户的任何信息
非持久HTTP 1.0
  • 最多只有一个对象在TCP连接上发送
  • 下载多个对象需要多个TCP连接
持久HTTP 1.1
  • 多个对象可以在一个TCP连接上传输
HTTP请求报文

两种类型的HTTP报文:请求、响应

HTTP请求报文

  • ASCII(人能阅读)
  • GET POST  HEAD(搜索引擎)

请求行   GET /somedir/page.html HTTP/1.1

首部行 Host: www.saaa.com

​ User-agent: Mozilla/4.0

​ Connection : close

​ Accept-language:fr

Post方式
  • 网页通常包括表单输入
  • 包含在实体主体(entity body)中的输入被提交到服务器
Url方式
  • 方法:get
  • 输入通过请求行的URL字段上载

1.1

(网络管理员用的)

put

将实体主体中的文件上载到url字段规定的路径

delete

删除url字段规定的文件

HTTP请求报文

状态行 HTTP/1.1 100 OK\r\n

首部行 Connection close\r\n

​ Data: Thu, 06

实体行

HTTP状态码

200 OK

301 Moved Permanently

400 Bad Request

404 Not Found

505 Http Version Not Supported

用户-服务器状态 cookie

大多数主要的门户网站使用cookie

4 个组成部分

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

能带来什么

  • 用户验证
  • 购物车
  • 推荐
  • 用户状态

隐私问题很严重

Web缓存(代理服务器)

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

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

好处

  • 提升访问速度
  • 缓解服务器压力
  • 减少网络载荷

风险

  • 本地缓存下来了,服务器端内容边了
条件Get

if-modified-since;

如果服务器没有改变,就返回304

如果服务器端改了,就返回200ok及修改后的内容

3、FTP*文件传输协议

  • 向远程主机上传文件或者从远程主机接收文件
  • ftp:RFC 959
  • port:21号端口

FTP客户端与FTP服务器通过端口21联系,并使用TCP为传输协议

  • 客户端通过控制连接获得身份确认
  • 客户端通过控制连接发送命令,浏览远程目录
  • 服务器打开第二个TCP数据连接用来传输一个文件
  • 受到一个文件传输命令时,服务器打开一个到客户端的数据连接
  • 一个文件传输完成后,服务器关闭连接
  • 控制连接,带外的
  • 有状态的

4、Email SMTP POP3 IMAP

邮件服务器
  • 邮箱中管理和维护发送给用户的邮件
  • 输出报文队列保持待发送邮件报文
  • 邮件服务器之间 是通过SMTP协议发送email报文
    • 客户:发送方邮件服务器
    • 服务器:接收端邮件服务器
SMTP

使用TCP在客户端和服务器之间传输报文,端口为25

  • 直接传输:从发送方服务器发送到接收端服务器
  • 传输的3个阶段
    • 握手
    • 传输报文
    • 关闭
  • 命令/响应交互
    • 命令:ASCII文本
    • 响应:状态码和状态信息
  • 报文必须为7为ASCII码

持续的

MIME:报文扩展

多媒体文件扩展(mulitmedia mail extension)

RFC 2045 2056

在报文首部用额外的行申明MIME内容类型

POP3

邮局访问协议(Post Office Protocol) [RFC 1939]

  • 用户身份确认(代理------服务器)并下载
  • 无状态
IMAP

Internet邮件访问协议(Internet Mail Access Protocol)[RFC 1730]

  • 更多特性(更复杂)
  • 在服务器上处理存储的报文
  • 有状态
HTTP等

5、DNS(域名解析)(Domain Name System)

必要性

  • IP地址标识主机、路由器
  • 但IP地址不好记忆,不便人类使用(没有意义)
  • 人类一般倾向于使用一些有意义的字符串来标识Internet上的设备
  • 存在着“字符串”–IP地址的转换的必要性
  • 人类提供字符串,用dns进行转换
问题1:如何命名设备
  • 用有意义的字符串:好记,便于人类使用
  • 解决一个平面命名的重要问题:层次化命名

一个层面命名设备会有很多崇明

Internet被划分为几百个顶级域(top level domains)TLD

  • 通用的(generic)
    • com edu gov int mil
  • 国家的
    • cn us nl jp

每个子域下面可划分为若干个子域

树叶是主机

根名字服务器:有13个根服务器。

域名

从本域网上,直到树根

中间使用“."间隔不同级别

域的域名:可以用于标识一个域

主机的域名:一个域上的一个主机

域名的管理
  • 一个域管理其下的子域
域与物理网络无关
  • 域遵从组织界限,而不是物理网络
区域
  • 区域的划分由区域管理者自己决定
  • 将DNS名字空间划分为互不相交的区域,每个区域都是树的一部分
  • 名字服务器
    • 每个区域都有一个名字服务器:维护着它所管辖区域的权威信息
    • 名字服务器允许被放置在区域之外,以保障可靠性
问题2:如何完成名字到IP地址的转化
  • 分布式的数据库维护和响应名字查询
DNS主要思路
  • 分层的,基于域的命名机制
  • 若干分布式的数据库完成名字到IP地址的转换
  • 运行在UDP之上的端口53的应用服务
  • 核心的Internet功能,但以应用层表现出来。
DNS主要目的
  • 实现主机----IP地址的转换
  • 其他目的
    • 主机的别名到规范名字的转换
    • 负载均衡的作用

顶级域(TLD)服务器:负责顶级域名和所有国家域名

区域名字服务器维护资源记录

资源记录

作用:维护域名—IP地址(其他)的映射关系

位置:Name Server的分布式数据库中

RR格式:(domain_name, ttl, type, class, Value)

  • Domain_name:域名
  • Ttl: time to live:生存时间(权威,缓冲记录)如果是权威的,则永久, 如果是缓存的,则日后再删除
  • Class类别:对于Internet, 值为IN
  • Value值:可以是数字,域名或者ASCII串
  • Type类别:资源记录的类型
Type = A

Name 为主机

Value 为IP地址

Type = NS

Name 为域名(如foo.com)

Value 为该域名的权威服务器域名

Type = CNAME

Name 为规范服务器的别名

value 为规范名字

Type = MX

Value 为name 对应的邮件服务器的名字

缓冲为了性能,删除为了一致性

DNS大致工作过程
  • 应用调用解析器(resolver)
  • 解析器作为客户向Name Server发出查询报文(封装在UDP)
  • Name Server返回响应报文(name/ip)
本地名字服务器(Local Name Server)
  • 并不严格属于层次结构
  • 每个ISP(居民区的ISP, 工资, 大学)都有一个本地DNS服务器
  • 当一个主机发起一个DNS查询时,查询被送到本地DNS服务器
    • 起着代理作用,将查询转发到层次结构中
递归查询
  • 名字解析负担都放在当前联络的名字服务器上

问题:根服务器负担太重

解决:迭代查询

迭代查询

一个一个DNS问

本地先问根,本地再问TLD

提高性能:缓存
问题3:维护问题:新增一个域

6、P2P应用

纯P2P架构

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

无序的

集中化目录

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

完全分布式

  • 没有中心服务器

泛洪flooding:有限泛洪

混合体(分组)

每个对等方要么时一个组长,要么隶属于一个组长

  • 对等方与其组长之间有TCP连接
  • 组长对之间有TCP连接

组长跟踪其所有孩子的内容

组长与其他组长联系

  • 转发查询到其他组长
  • 获得其他组长的数据拷贝

P2P文件分发:BitTorrent

  • 文件被分为一个个块:256kb
  • 及网络中的这些peer发送接收文件块,相互服务。

Peer加入torrent:

  • 一开始没有块,但是将会通过其他节点处理积累文件块
  • 向跟踪服务器注册,获得peer节点列表,和部分peer节点构成邻居关系

当peer下载时,该peer可以同时向其他节点提供上载服务

Peer可能回变换用于交换块的节点

扰动:peer节点可能回上线或者下线

一旦一个Peer拥有整个文件(种子),它会(自私的)离开或者保留(利他主义)再torrent中

俗称种子

DHT(结构化)P2P

有序的(了解即可)

环装,树状

7、CDN(视频流化服务和CDN:上下文)

  • 视频流量:占据着互联网大部分的带宽
  • 挑战:规模性—如何服务这么多用户?
  • 挑战:异构性
    • 不同用户拥有不同的能力(例如:有线接入和移动用户:带宽丰富和受限用户)
  • 解决方案:分布式的,应用层面的基础设施
多媒体:视频
  • CBR(constant bit rate):以固定速率编码
  • VBR(variable bit rate):视频编码速率随时间的变化而变化
存储视频的流化服务

一边下缓存一边看。大部分减少等待时间

DASH Dynamic, Adaptive Stream over HTTP

服务器

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

客户端

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

只能客户端:客户端自适应决定

  • 什么时候去请求(不至于缓存挨饿,或者溢出)
  • 请求什么编码速率的视频块(当带宽够用时,请求质量的视频块)
  • 哪里去请求块(可以向离自己仅的服务器发送URL, 或者向高可用带宽的服务器请求)

挑战:服务器如何通过网络向成百万的用户同时提供流化视频服务?

选择1:单个的大的超级服务中心

  • 服务器到客户路径上的跳数比较多,瓶颈链路的带宽小导致停顿
  • 二八定律 决定了网络同时充斥着同一个视频的多个拷贝
  • 单点故障点,性能瓶颈
  • 周边网络的拥塞

我的评价是:相当简单,,但这个方法不可扩展

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

  • enter deep 将CDN服务器深入到许多接入网
    • 更加接近用户,数量多。
  • bring home 部署少数的关键位置,如将服务器安装与pop附近(离若干ISP pop较近)

ICP预先把内容放在CDN运营商的缓存节点

用户点播时从源服务器获得manifest file

用户请求块的时候,决定于客户端自己。向附近的缓存节点获取。

中国 : 中国蓝汛

8、TCP套接字(Socket)编程

应用进程使用传输层提供的服务才能够交换报文,实现应用协议,实现应用

TCP/IP:应用进程使用Socket AP访问传出服务

地点:界面上的SAP,方式:Socket API

目标:学习如何构建借助sockets进行同i性能的C/S应用程序

socket:分布式应用进程之间的门,传输层协议提供端到端服务接口。

套接字:应用进程与端到端传输协议之间的门户

TCP服务:从一个进程向另一个进程可靠的传输字节流

服务器首先运行,等待连接建立

1、服务器进程必须先处于运行状态

  • 创建欢迎socket
  • 和本地端口捆绑
  • 在欢迎socket上阻塞式的等待用户的连接

2、客户端主动和服务器建立连接

  • 指定服务器进程的IP地址和端口号、与服务器进行连接

3、当与客户端连接请求到来时

  • 服务器接收来自客户端的请求,解除阻塞式等待,返回一个新的socket(与欢迎socket不一样),与客户端通信。
    • 允许服务器与多个客户端通信
    • 使用IP和源端口来区分不同的客户端
struct sockaddr_in{
    short sin_family;//地址族
    u_short sin_port;   //端口号
    struct in_addr sin_addr;	//IP地址
    char sin_zero[8]; //对齐
}

struct host_ent{
    char * h_name;   //主机域名
    char ** h_aliases;  //主机别名
    int h_addrtype;
    int h_length;   //地址长度
    char ** h_addr_list;
    #define h_addr h_addr_list[0];
}

9、UDP套接字编程

UDP:在客户端和服务器之间没有连接

  • 没有握手
  • 发送端在每一个报文种明确地指定目标的IP地址和端口号
  • 服务器必须从受到的分组中提取出发送端的IP地址和端口号

UDP传送的数据可能乱序,有可能丢失

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值