计算机网络 自顶向下方法 应用层(持续更新中)

1 应用层概述

应用层协议的实现,只需要写出能够运行在不同的端系统(服务器、手机、电脑等)和通过网络彼此通信的程序。因为网络核心设备(路由器、交换机等,不包括端系统设备)并不在应用层上起作用,只在网络层及下面层次起作用,所以不需要为网络核心设备写对应的应用程序,即开发应用程序的时候只需要考虑适配端系统,不需要考虑网络核心设备。应用层是最靠近用户的一层,它可以直接为模型外的用户提供响应服务。

应用层存在的意义?
运输层仅为应用进程提供了端到端的通信服务。但不同的网络应用的应用进程之间,还需要有不同的通信规则,因此还需要有应用层协议


1.1 应用层协议定义

  • 应用进程交换的报文类型,如请求报文和响应报文
  • 各种报文类型的语法,如报文中的各个字段及其详细描述
  • 字段的语义,即包含在字段中的信息的含义。
  • 进程何时、如何发送报文,以及对报文进行响应的规则

可以理解应用层协议是网络应用的一部分,应用层协议可以制定客户机与服务器之间传送的报文类型、格式和序列等规则。应用层产生的报文是遵循某种协议的可读数据,比方说浏览器向服务器请求页面,发送HTTP请求报文,遵循HTTP协议;向邮件服务器发送的包含电子邮件的报文,遵循SMTP协议。而至于HTML等具体文件或页面显示效果并不是应用层协议制定的内容。


1.2 网络应用程序体系结构

目前主流的网络应用程序体系结构有两种:客户-服务器体系结构(client-server architecture)对等体系结构(P2P),也存在两种主流体系结构同时存在的混合结构


1.2.1 客户-服务器体系结构(client-server architecture, c/s)

客户-服务器体系结构中,至少有一个打开的主机,被称为服务器,它服务来自其他许多称为客户的主机的请求。web应用程序就是一个典型的例子,他总是有至少一个web服务器在运行来响应浏览器的请求。客户-服务器体系结构的一个特征就是服务器具有固定且被知晓的IP地址。

服务器(client)特点:

  • 一直运行
  • 固定的IP地址和周知的端口号(port number)
  • 当客户端访问增加时,服务器的服务性能不是平滑的下降,而是在访问数量达到某一程度后呈指数下跌
  • 扩展性较差,一般只能通过升级部分硬件和服务器迁移的方式进行扩展

客户端(sever)特点:

  • 主动与服务器通信
  • 与互联网有间歇性的连接
  • 可能是动态IP 地址
  • 不直接与其它客户端通信(例如两个web进程之间不能直接进行通信)

1.2.2 对等体系结构(P2P)

P2P体系结构对位于数据中心的专用服务器有最小的(或者没有)依赖。应用程序在间断连接的主机对之间使用直接通信,这些主机对被称为对等方。这些对等方并不为服务提供商所有,为用户控制的台式机、笔记本等所有。因为这种对等方通信不必通过专门的服务器,该体系被称为对等方到对等方。(实例:迅雷、BitTorrent)

此外,任意端系统之间都可以进行互联,客户端和服务器端的角色转化是相对性的而不是绝对的。每一个节点既是客户端又是服务端,即请求服务,又提供服务(因此P2P体系结构,具有自扩展性,新节点会带来新请求同时带来新的服务)。

由于P2P体系结构允许参与主机随时进行连接或结束连接,所以该体系结构难以管理,并且在未来可能面临安全性可靠性等的挑战。

对等体系结构特点:

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

1.2.3 混合体系结构

在文件搜索的应用过程中,一般使用c/s结构,由客户端向中心服务器集中进行资源的注册和搜集。
在文件传输的应用过程中,一般使用P2P结构,在任意两个节点之间进行资源传输。


1.3 进程通信

1.3.1 通信进程的定义

在操作系统中,进行通信的实际上是进程(process)而不是程序。一个进程可以被认为是运行在端系统中的一个程序。(一个应用程序中可能包含多个进程,例如一个浏览器中的多个浏览页面就是独立的多个进程

两个不同端系统上的进程,通过跨越计算机网络交换报文而相互通信。发送进程生成并向网络中发送报文;接收进程接收这些报文并可能通过报文发送回去进行响应。

每对通信进程,我们通常将这两个进程之一标识为客户(client),另一个进程标识为服务器(server)。P2P文件共享的某些应用中,一个进程能够既是客户又是服务器。所以我们可以这样定义客户和服务器进程:在给定的一对进程之间的通信回话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器


1.3.2 进程与计算机网络直接的接口

进程通过一个称为套接字(socket)的软件接口向网络发送报文和从网络接收报文。套接字是同一台主机内应用层与运输层之间的接口,在发送端的应用程序将报文推进套接字,在该套接字的另一侧,运输层协议负责是该报文进入接收进程的套接字。由于该套接字是建立网络应用程序的可编程接口,因此套接字也称为应用程序和网络之间的应用程序编程接口(Application Programming Interface, API)。应用程序开发者可以控制套接字在应用层的一切,但对改套接字的运输层端几乎没有控制权。开发者对运输层的控制仅限于:①选择运输层协议;②也许能设定几个运输层参数,如最大缓存和最大报文段长度等。一旦开发者选择了一个运输层协议,则应用程序就建立在由该协议提供的运输层服务上。

套接字是网络通信过程中端点的抽象表示,包含进行网络通信必需的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口


1.3.3 进程标识和进程寻址

两台主机之间企图进行通讯首先至少需要两台目标主机的IP地址,以保证报文能够顺利到达目标主机并且能够根据IP响应报文,并且由于是进程间的通信,还需要两个进程的端口号,并且,最后,还需要用到所采用的传输层协议,以保证能够正确的解析数据。

目前比较流行的端口有:Web服务器的80端口、SMTP的25端口等。

表示一个进程:IP + port number(端节点)


1.4 可供应用程序使用的运输服务

一个运输层协议能够为调用他的应用程序提供的服务大致分为四个方面:可靠数据传输、吞吐量、定时和安全性

可靠数据传输:数据由一端发送,数据正确、完全地交付给应用程序的另一端。
吞吐量:可用吞吐量就是发送进程能够向接收进程交付的比特速率。多用于通信,维持双方通话基本流畅。
定时:一部分应用为了实现数据的有效交付从而对

因特网(更一般的是TCP/IP网络)为应用程序提供两个运输层协议,即UDPTCP。当为因特网创建一个新的应用时,受限要做出的决定是选择UDP还是TCP。每个协议为调用它们的应用程序提供了不同的服务集合。


1.4.1 TCP服务(面向连接服务)

TCP服务模型包括面向连接服务和可靠数据传输服务。当某个应用程序调用TCP作为运输协议时,该应用程序就能获得来自TCP的两种服务。

面向连接的服务:在应用层数据报文开始流动之前,TCP让客户和服务器互相交换运输层控制信息。这个所谓的握手过程提示客户和服务器,使它们为大量分组的到来做好准备。在握手阶段后,一个TCP连接就在两个进程的套接字之间建立了。这条连接是全双工的,即连接双方的进程可以在此连接上同时进行报文的收发。当应用程序结束报文发送时,必须拆除该连接。
可靠的数据传送服务:通信进程能够依靠TCP,无差错、按适当顺序交付所有发送的数据。当应用程序的一端将字节流传进套接字时,它能够依靠TCP将相同的字节流交付给接收方的套接字,而没有字节的丢失和冗余。

TCP协议还具有拥塞控制机制,这种服务不一定能为通信进程带来直接好处,但能为因特网带来整体好处。当发送方和接收方之间的网络出现拥塞时,TCP的拥塞控制机制会抑制发送进程(客户或服务器双方控制)。

TCP的socket是一个四元组本机ip、本机port、目标ip、目标port


1.4.2 UDP服务(无连接服务)

UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务。UDP是无连接的,因此在两个进程通信前没有握手过程。UDP协议提供一种不可靠数据传送服务,也就是说,当进程将一个报文发送进UDP套接字时,UDP协议并不保证该报文将到达接收进程。不仅如此,达到接收进程的报文也可能是乱序到达的。
  
UDP没有包括拥塞控制机制,所以UDP的发送端可以用它选定的任何速率向其下层(网络层)注入数据。UDP一般用于对网络通信要求不高的应用交互。

UDP的传输速度相较于TCP来讲更快,网络资源占用更少,而且由于是无协议传输,相较于TCP的协议传输来讲可能存在的漏洞更少,更难被攻击。

UDP的socket是一个二元组:只包含目标ip目标port


1.4.3 TCP和UDP总结

  1. TCP 面向连接(先握手); UDP 是无连接的,即发送数据之前不需要建立连接。

  2. TCP 提供可靠的服务。也就是说,通过 TCP 连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP 尽最大努力交付,即不保证可靠交付。

  3. TCP 面向字节流,实际上是 TCP 把数据看成一连串无结构的字节流;UDP 是面向报文的。UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

  4. 每一条 TCP 连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。

  5. TCP 首部开销 20 字节;UDP 的首部开销小,只有 8 个字节。

  6. TCP 的逻辑通信信道是全双工的可靠信道,UDP 则是不可靠信道。


1.5 Socket- 层间信息的代表(套接字)

如果每次通信/对话都需要携带如此多的信息,无疑会加剧管理难度,并且容易出错,所以可以采用一个代号来指代通信双方/单方的信息,这个信息就是socket(与我们通过文件操作打开文件OS会返回一个句柄一样,对句柄的操作就是对文件的操作,这里我们对socket的操作就是对通信双方交换数据的操作),所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。

实际上socket是对TCP/IP协议的封装,它的出现只是使得程序员更方便地使用TCP/IP协议栈而已。socket本身并不是协议,它是应用层与TCP/IP协议族通信的中间软件抽象层,是一组调用接口(TCP/IP网络的API函数)

在这里插入图片描述
PS:每一个双向剪头对应每一个任务进程从顶端依次向下传输。)

TCP的套接字是流套接字,UDP的套接字是网络报文套接字

已标记关键词 清除标记
相关推荐
<p> <b><span style="background-color:#FFE500;">【超实用课程内容】</span></b> </p> <p> <br /> </p> <p> <br /> </p> <p> 本课程内容包含讲解<span>解读Nginx的基础知识,</span><span>解读Nginx的核心知识、带领学员进行</span>高并发环境下的Nginx性能优化实战,让学生能够快速将所学融合到企业应用。 </p> <p> <br /> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><br /> </b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><span style="background-color:#FFE500;">【课程如何观看?】</span></b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> PC端:<a href="https://edu.csdn.net/course/detail/26277"><span id="__kindeditor_bookmark_start_21__"></span></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 移动端:CSDN 学院APP注意不是CSDN APP哦 </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 本课程为录播课,课程永久有效观看时长,大家可以抓紧时间学习后一起讨论哦~ </p> <p style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <br /> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <strong><span style="background-color:#FFE500;">【学员专享增值服务】</span></strong> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b>源码开放</b> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 下载方式:电脑登录<a href="https://edu.csdn.net/course/detail/26277"></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a>,播放页面右侧点击课件进行资料打包下载 </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p>
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页