应用层的目标

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

  • 传输层的服务模型
  • 客户-服务器模式
  • 对等模式(peer-to-peer)
  • 内容分发网络

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

  • HTTP
  • FTP
  • SMTP / POP3 / IMAP
  • DNS

编程:网络应用程序

  • Socket API

一些网络应用的例子

E-mail、Web、文本消息、远程登录、P2P文件共享、即时通信、多用户网络游戏、流媒体(YouTube, Hulu, Netflix) 、Internet 电话、实时电视会议、社交网络、搜索 ……


体系架构

  • C/S(客户器-服务器模式):资源全在服务端、可扩展性强、随着访问的用户增加服务器性能断崖式下降
  • P2P(对等模式):每个节点既是客户端也是服务器,性能平滑下降,管理困难,在每个会话上也有客户端与服务端之分
  • 混合体(客户端-服务端和对等体系结构):每个客户端向服务器请求链接时,提供自己所拥有的资源
C/S 体系架构

image-20210418095417922


P2P 体系结构

image-20210418095600859


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

image-20210418095750574


进程通信

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

客户端进程:发起通信的进程

服务器进程:等待连接的进程

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

不同主机,通过 交换报文(Message) 来通信

  • 使用 OS 提供的通信服务
  • 按照应用协议交换报文(借助传输层提供的服务)
分布式进程通信需要解决的问题

标识:标识自己是唯一的,与别人不同

寻址:让别人能找到自己

image-20210418100607244


# 问题1:对进程进行编址(addressing)

image-20210418101008232

任何应用进程间的通信都可以使用两个端节点(end point)来标识

image-20210417161624835

传输层如何区分不同的应用程序:

  • 第1个:你在哪,即你的 ip
  • 第2个:你在哪跑,即 tcp 还是 udp(都有提供端口号,16个比特,65536个)
  • 第3个:你在哪个端口上 port

例如:常用的 web 应用跑在 80 端口上,FTP 跑在21号端口,tomcat 跑在23号端口


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

image-20210418101404778


缺点:每次传输都需要提供ip和端口,比较麻烦,使用 Socket API

# 问题2: 传输层提供的服务-层间信息的代表

如果 Socket API 每次传输报文,都携带如此多的信息,太繁琐易错,不便于管理

用个代号 标示 通信的双方或者单方:socket

类比:就像 OS 打开文件返回的句柄一样,对句柄的操作,就是对文件的操作

TCP Scoket

一个本地标识(只有本操作系统知道);应用层和传输层的一个约定,方便管理,使用的时候会返回一个整数,代表我的 ip/端口号,以及对方的 ip/端口号。

从物理层面上看代表的是一个整数,实际上是代表会话关系的一个本地关系,四元组

传输层知道本地的ip和端口号,当拿到对方的ip和端口号的时候,就可以从应用层创建Socket的时候生成的一张表中,根据两方ip/端口信息,找到那个整数

image-20210418102500602

image-20210418102129446


image-20210418102204709


与不同的应用进程之间通信:

image-20210418102320759


UDP Socket

使用 Socket API ,即一个整数来代表本地的 ip 和端口(本地标识),不代表会话关系。2元组

所以应用层在进行传输的时候必须要交给传输层3样东西:

  • UDP Socket
  • 传输的数据
  • 传输给谁(对方的ip和端口号)

image-20210418102710131

image-20210418102754310


image-20210418102840043


# Q: 具体 Socket 是如何实现的呢 ? (后面会讲到)

进程向套接字发送报文或从套接字接收报文

套接字 <—> 门户

  • 发送进程将报文 推出 门户,发送进程依赖于传输层设施在另外一侧的门将报文交付给接受进程
  • 接收进程从另外一端的门户 收到 报文(依赖于传输层设施

image-20210418103239446


# 问题3:如何使用传输层提供的服务实现应用?

协议:在对等层的应用进程进行通信的过程中应该遵循的规则集合

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

编制程序,通过 API 调用网络基础设施提供通信服务传报文,解析报文,实现应用时序等

image-20210418103552741

应用层协议

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

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

应用协议仅仅是应用的一个组成部分,一个应用除了协议(应用实体)之外,还有用户界面、IO、内部的处理逻辑等等,例如:

  • Web应用:HTTP协议 + web客户端 + web服务器 + HTML

协议分类:

  • 公开协议:由 RFC 文档定义,允许互操作,如 HTTP, SMTP
  • 专用(私有)协议:协议不公开,如:Skype
# 如何描述传输层的服务?(几个侧面指标)

image-20210418110034363

常见应用对传输服务的要求:

image-20210418104827344


Internet 传输层提供的服务

image-20210418105119592

# Q 为什么要有 UDP? UDP存在的必要性?

image-20210418105314726

# Q: 常见 Internet 应用 及 其应用层协议和传输协议 ?

image-20210418105622902

# Q: 要实现安全的 TCP,可以怎么做?

image-20210418105927482


Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐