【计算机网络】【应用层-1】

小白笔记

应用层目标:

1.网络应用的原理:网络应用协议的概念和实现方面

·传输层的服务模型  ·客户-服务器模型   ·对等模式   ·内容分发网络

2.网络应用的实例:互联网流行的应用层协议

·HTTP   ·FTP   ·SMTP/POP3/IMAP   ·DNS(为因特网提供目录服务,很好的说明了一种核心的网络功能(网络名字到网络地址的转换)是注意在因特网的应用层实现的)

3.编程:网络应用程序

·Socket API

  

应用层--应用层原理

1.网络应用程序体系结构:

1)客户-服务器(C/S)体系结构:

在客户-服务器体系结构中,有一个总是打开的主机称为服务器,另一个特征式该服务器具有固定的、周知的地址,该地址称为IP地址。

C/S模式原理差不多是这样,服务器先运行而且始终在运行,守候在一个知名端口上,为什么要守候在80号端口21号端口这样的一些知名端口上?因为它是先运行的,客户端要先找它,它运行在设备上,我通过域名可以找到它,在设备上哪个端口运行需要先约定好,所以说呢,它是在固定的端口上一直跑而且首先跑,然后客户端去后跑起来,然后主动的去请求这个资源,然后服务器响应这个资源,然后再把资源返回来,然后客户端就得到了这个资源,整个过程差不多就这样。而且客户端不见得要运行在固定的IP上,可以运行在一些动态IP上,例如笔记本电脑到了一个房间通过WiFi来接入,然后这个网络会采用DHCP协议动态的给你一个地址,所以说你的地址是可以动的,服务器的地址一般都是固定IP。服务器是中心,资源在服务器,包括软件资源包括硬件资源包括数据资源都在服务器那里,客户端没有任何资源,客户端需要请求服务器资源,服务器响应之后才能反转回资源。值得注意的式利用客户-访问器体系结构,客户相互之间不直接通信。

C/S模式有什么问题?可扩展性比较差,就是说随着访问用户的增加,它的性能达到一定阈值之后它是一个急剧性的下降而不是那种平滑的合理的下降,如果一个架构,它的性能随着用户的增加是那种平滑的下降它是正常的,但是像C/S这种达到一定程度后断崖式下降,所以说这个架构呢它的可靠性就比较差,因为就一台服务器呀,大家都请求一台服务器的服务能力呀。而且还有一个就是它的可靠性比较差,大家都依赖于这个服务器所提供的服务,如果服务器宕机了呢,那这个服务器提供的服务那客户端就不能享受了啊。

服务器: ·一直运行  ·固定的IP地址和周知的端口号(约定)  ·扩展性:服务器场(·数据中心进行扩展  ·扩展性差)

客户端: ·主动与服务器通信  ·与互联网有间歇性的连接  ·可能是动态IP地址  ·不直接与其他客户端通信

2)对等体(P2P)体系结构:

所以P2P系统应运而生,对等方体系不必提供专门的服务器,原理大致是,每个节点它既请求别人的服务其他Peer节点的服务,同时具它所具备的资源又可以向其他节点提供服务,所以说即是客户端又是服务器,所以说随着节点数量的增加,请求节点的数量在增加,但是提供服务的节点也在增加,那这样的话那就能很容易平滑的扩展,所以说它在随着用户规模的增加它的性能不是断崖式的下降而可能是单个用户所享受的资源能维持在一定的程度。所以说像迅雷呀很容易能把用户扩容到几百万个用户,这在C/S模式中是不可以想象到的。

但是它也有它的问题,它管理起来非常困难,每个节点它有时候会上线有时候会下限,它所提供的服务能力只是在它上线的时候能够提供,所以管理起来比较困难。

·(几乎)没有一直运行的服务器  ·任意端系统之间可以进行通信  ·每一个节点即客户端又是服务器(自扩展性-新peer节点带来新的服务能力,当然也带来新的服务请求)  ·参与的主机间歇性连接且可以改变IP地址(难以管理)  ·例子:Gnutella,迅雷

C/S和P2P体系结构的混合体:

Napster: (用户越多资源越多速度越快)

·文件搜索:集中  (·主机在中心服务器上注册其资源  ·主机向中心服务器查询资源位置)

·文件传输:P2P(·任意peer节点之间)

即时通信:

·在线检测:集中(·当用户上线时,向中心服务器注册其IP地址  ·用户与中心服务器联系,以找到其在线好友的位置)

·两个用户之间聊天:P2P

2.进程通信:

进程:在主机上运行的应用程序

·在同一个主机内,使用进程间通信机制通信(操作系统定义)

·不同主机,提供交换报文来通信(·使用OS提供的通信服务  ·按照应用协议交换报文,借助传输层提供的服务)

·客户端进程:发起通信的进程    ·服务器进程:等待连接的进程

·注意:P2P架构的应用也有客户端进程和服务器进程之分

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

问题1.进程标识和寻址的问题(服务用户)

标识就要标识出唯一的你,寻址就要让别人能找的到你,比如淘宝客服要有你id,而且你的id能转出物理地址,这样客服才发的到货给你。

问题2.传输层-应用层提供服务时如何(服务)

  ·位置:层间界面的SAP(TCP/IP:socket)

  ·形式:应用程序接口API(TCP/IP:socket API)

我们的问题是下层所提供的服务形式是什么?下层所提供的服务在哪里拿来调用?我要通过承接接口上的SAP(服务访问点)来访问这个传输层向上层提供的服务,从而能够跟对方联系。

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

  ·定义应用层协议:报文格式,解释,时序等

  ·编程程序,使用OS提供的API,调用网络基础设施提供通信服务传报文,实现应用时序等。

问题1:对进程进行编址

·进程为了接收报文,必须有一个标识,即SAP(发送也需要标识)

   ·主机:唯一的32位IP地址(仅仅有IP地址不能够唯一标示一个进程,在一台端系统上有很多应用进程在运行)

   ·所采用的传输层协议:TCPorUDP

   ·端口号

·一些知名端口号的例子: ·HTTP ·TCP 80 Mail ·TCP25 ftp ·TCP 2

·一个进程:用IP+port标识端节点

·本质上,一对主机进程之间的通信由2个端节点构成

为了表示某接收进程,需要定义两种信息:

1)主机的地址(即IP地址)

2)在目的主机中知道接收进程的标识符(即目的地端口号,

除了知道报文发送目的地的主机地址外,发送进程还必须指定运行在接收主机上的接收进程(更具体的说,接收套接字),因为一般而言一台主机能够运行许多网络应用,不指定怎么知道你具体是哪个进程接收呀)

应用进程的标识和寻址实际上包括以下几个部分:第一,你在哪个IP机器上,你在哪个终端设备上IP是什么。第二,终端系统上有TCP和UDP,那你的应用进程是在TCP上跑还是UDP上跑。第三,在TCP上有很多应用进程,你到底在哪个端口上(传输层向应用层做区分不同的应用进程除了IP地址外还引入了端口号)。  所以说我要标识一个应用进程寻址一个应用进程最起码包括主机IP,TCP或UDP,TCP或UDP的端口号这三个要素。所以说一个进程要IP地址和端口号(port)来标识。

问题2:传输层提供的服务-需要穿过层间的信息

·层间接口必须要携带的信息(应用进程要借助传输层的服务提供承接的接口要传数据要收数据,要穿过它需要哪些信息?)

  ·要传输的报文(对于本层来说:SDU)

  ·谁传的:对方的应用进程的标示:IP+TCP(UDP)端口

  ·传给谁:对方的应用进程的标示:对方的IP+TCP(UDP)端口号

多数应用程序是通过体系进程对组成,每对中的两个进程互相发送报文,而从一个进程向另一个进程发送的报文必须提供下面的网络,进程提供一个称为套接字(socket)d的软件接口向网络发送报文和从网络接收报文(socket就像连接应用层和传输层之间的门)

我跟你建立通信我发给你的东西可能要持续一段时间可能要传很多很多东西,有没有办法减少承接接口的承接量呢?

这个办法就是采用Socket  ·如果Socket API每次传输报文,都携带如此多的信息,太繁琐易错,不便于管理  ·用个代号标示通信的双方或单方:socket  ·就像OS打开文件返回的句柄一样(对句柄的操作,就是对文件的操作)  ·TCP socket:  ·TCP服务,两个进程通信之前要先建立连接(两个进程通信会持续一段时间,通信关系稳定) ·可以用一个整数表示两个应用实体之间的通信关系,本地标示  ·穿过层接口的信息量最小  ·TCPsocket:源IP,源端口,目标IP,目标端口

socket其实就是一个整数,我一旦跟对方建立起通信关系,它就会给我返回一个整数,这个整数在TCP中就代表着我是谁即我的IP我的端口号,对方是谁即对方的IP对方的端口号,称做4元组,以后就用这个整数和对方通信,在UDP中就着我是谁我的IP我的端口号,称2元组,以后就用这个整数和对方通信,就尽量的减少要传输的信息量而且容易管理。

传输层使用这个整数代表着我IP和TCP端口,对方的IP和TCP端口这样的一个关系,然后应用进程只需使用这个socket的应用进程发,操作系统就会知道从我的这个IP的TCP端口发给对方的这个IP的TCP端口,收也是类似。TCP的socket概念和端口任意混淆,而且理解起来有点难度,socket难道就是端口号嘛?不是,socket是在TCP当中在面向连接的服务当中它代表着本地的IP本地的TCP的端口对方的IP对方的TCP端口的一个本地标识,便于应用层和传输层的一个约定,就是建立socket的时候弄了一个整数代表了我这个IP和端口对方的IP和端口,弄了一个本地标识,所以说应用层向传输层发的时候就弄了这样一个整数,操作系统就能知道应该是从我的这个IPTCP端口发给对方的那个IPTCP端口。这是socket的意义,一个是便于管理,另一个是使得穿过层间的信息量最少,为什么呢?因为通信要持续一段时间,如果你每次都我IP我端口对方IP对方TCP端口然后再加上货物本身不是很烦嘛信息量很大。我对socket的写就是传给对方,从socket读就是对方传送给我。TCP的socket代表两个主机之间的绘画关系。

UDP socket,·不代表一个绘画关系,只代表本地的IP,本地的端口这样的一个2元组关系  ·UDP服务,两个进程之间的通信之前无需建立连接,每个报文都是独立传播的,前后报文可能给不同的分布式进程  ·因此,只能用一个整数表示本应用实体的标示,因为这个报文可能传给另一个分布式进程  ·穿过层间接口的信息量大小最小  ·但是传输报文时;必须要提供对方IP,port,接收报文时,传输层应上传对方的IP和port。所以UDP时要传输三件东西:货物本身、socket,对方IP和port。

·传输层实体(tcp或者udp实体)根据这些信息进行TCP报文段(UDP数据报)的封装

  ·源端口号,目标端口号,数据等

  ·将IP地址往下叫IP实体,用于封装IP数据报:源IP,目标IP

问题3:如何使用传输层提供的服务实现应用(如何定制我们的协议如何来编制应用程序)

前面讲过套接字是应用程序进程和运输层协议之间的接口,在发送端的应用程序将报文推进该套接字,在该套接字的另一端,运输层协议负责从接收进程的套接字得到该报文。包括因特网在内的很多网络提供了不止一种运输层协议,当开发一个应用是,必须下载一种可用的运输层协议,所以你需要去下载一个最能为你的应用需求提供恰当服务的协议,一个运输层协议能够为调用它的应用程序提供什么服务呢?可以从四个方面进行分类:可靠数据传输、吞吐量、定时和安全性。

3.应用层协议:

我们刚刚学习了通过把报文发送进套接字实现网络进程间的相互体系,但是如何构造这些报文?在这些报文中各个字段的含义时什么?进程合适发送这些报文?这些问题将我们带进应用层协议的范围。应用层协议定义了运行在不同端系统上的应用程序如何相互传递报文。

应用层协议:

·定义了:运行在不同的端系统上的应用基础如何交换报文

  ·交换的报文类型:请求和应答报文

  ·各种报文的语法:报文中各字段及其描述

  ·字段的语义:即字段取值的含义

  ·进程何时,如何发送报文及对报文进行响应的规则

·应用协议仅仅是应用的一个组成部分

  ·Web应用:HTTP协议,web客户端,web服务器,HTML

公开协议:·有RFC文档定义  ·允许互操作  ·如HTTP,SMTP

专有(私有)协议:协议不公开,如Skype

区分网络应用和应用层协议时很重要的,应用层协议只是网络应用的一部分。

补充:应用需要传输层提供什么样的服务?

·数据丢失率: ·有些应用则要求100%的可靠数据(如文件) ·有写应用(如音频)能容忍一定比例以下的数据丢失

·延迟: ·一些应用处于有效性考虑,对数据传输有一个使得时间限制(·Internet电话、交互是游戏,·延迟、延迟差)

·吞吐: ·一些应用(如多媒体)必须需要最小限度的吞吐,从而得到应用能够有效运转  ·一些应用能够充分利用可供使用的吞吐(弹性应用)

·安全性: ·机密性 ·完整性 ·可以认证性(鉴别)

4.Internet传输层提供的服务

TCP服务:当某个应用程序调用TCP作为其运输协议时,该应用程序就能获得来自TCP的服务。

·可靠的传输服务

·流量控制:发送方不会淹没接收方(就是如果发送方发的比较快而接收方接收的比较慢,它们两者也能够协调好)

·拥塞控制:当网络出现拥塞时,能控制发送方

·不能提供的服务:时间保证,最小吞吐保证和安全

·面向连接:要求在客户端进程和服务器进程之间建立连接

UDP 服务:

·不可靠数据传输

·不提供的服务:可靠、流量控制、拥塞控制、时间、宽带保证、建立连接

UDP存在的必要性

·能够区分不同的进程,而IP服务不能,在IP提供的主机到主机端到端功能的基础上,区分了主机的应用进程

·无需建立连接,省去了建立连接的时间,适合事务性的应用

·吧做可靠性的规则,例如检错重发,适合那些对实时性要求比较高而对正确性要求不高的应用,因为为了实现可靠性(准确性、保序等)必须付出时间代价(检错重发)

·没有拥塞控制和流量控制,应用能够按照设定的速度发送数据,而在YCP上面的应用,应用发送数据的速度和主机向网络发送的实际速度是不一样的,因为有流量控制和拥塞控制

安全TCP&UDP

·都没有加密,明文通过互联网传输,甚至密码

要想提高安全性可以用SSL,SSL在TCP上面实现,提供加密的TCP连接,有私密性,数据完整性,端到端的鉴别。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值