计算机网络(自顶而下)——应用层及常见协议

1、应用层协议原理

1.1、网络应用的体系结构

可能的应用架构:

  • 客户-服务区模式(C/S)
    • 不平等的模式,以服务器为主,可扩展性比较差,
    • 例子:web应用
  • 对等模式(P2P)
    • 自扩展性;
    • 例子:迅雷
  • 混合体:客户-服务器和对等体系结构
    • Napster:
      • 主机在中心服务器上注册其资源
      • 主机向中心服务器查询资源位置
    • 例子:即时通讯(聊天室)

进程通信

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

  • 形式:通过socket API(源语) 下层提供的服务来进行访问
  • 地址:对应的主机层面的SAP

在这里插入图片描述

寻址:在哪个地址(IP)、端口

1.2、套接字(socket

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

TCP socket :(代表本地的IP和端口,对方的IP和端口)

  • 对于使用面向连接服务(TCP)的应用而言,套接字是4元组的一个具有本地意义的标示
    • 4元组:(源IP、源端口、目标IP、目标port)
    • 唯一的指定了一个会话(TCP的socket实际就是代表2个进程之间的会话关系
    • 应用使用这个标示,与远程的应用进程通信
    • 不必在每一个报文的发送都要指定这4元组
    • 就像使用操作系统打开一个文件,OS返回一个文件句柄一样,以后使用这个文件句柄,而不是使用这个文件的目录名,文件名
    • 简单,便于管理
    • 所以传输信息只需要传递
      • 数据、socket

在这里插入图片描述

UDP socket:

  • UDP服务,两个进程之间的通信需要之前无需建立连接
    • 每个报文都是独立传输的
    • 前后报文肯给不同的分布式进程
  • 因此,只能用一个整数标识本应用实体的标示
    • 因为这个报文可能给另外一个分布式进程
  • 穿个层间接口的信息大小最小
  • UDP socket:本地IP、本地端口
  • 但是传输 报文时:必须要提供对方IP,port
    • 接收报文时:传输层需要上传对方的IP,port
  • 所以传输信息需要传递三件东西:
    • socket,数据本身,对方的地址(IP和port)

在这里插入图片描述

传输层向应用层提供的性能指标:

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

在这里插入图片描述

  • TCP和UDP都是明文传输的,不提供安全性,

  • 所以如果安全传输,需要通过SSL协议进行传输层的服务的安全性

    • 应用采用SSL库,SSL库使用TCP通信
    • SSL
      • 在TCP上面实现,提供加密的TCP连接
      • 私密性
      • 数据完整性
      • 端到端的鉴别
    • SSL socket API
      • 应用提供API将明文交给socket,SSL将其加密在互联网上传输

2、WEB and HTTP

1.0版本HTTP为,非持久的HTTP连接

1.1之后HTTP连接改为了持久的HTTP连接;

2.1、HTTP请求报文:80(默认端口)

  • 两种请求报文:请求、响应;
  • HTTP请求报文:
    • ASCII
    • 请求行(GET、POST)

2.2、FTP:21

ftp:文件传输协议

双通道连接,分别在两个TCP连接上进行,带外的(发送的指令)和带内的(发送的数据),有状态的协议

2.3、Email:25

SMTP协议:邮箱服务器

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

传输的三个阶段:

  • 握手
  • 响应报文
  • 关闭

在这里插入图片描述

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

3、DNS

UDP:57

域名解析系统

DNS解决的问题:

  • 如何命名;
  • 如何解析;
  • 如何维护;

DNS的主要思路:

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

DNS主要目的:

  • 实现主机名-IP地址的转换(name/IP translate)
  • 其他目的
    • 主机别名到规范名字的转换
    • 邮件服务器别名到邮件服务器的正规名字的转换
    • 负载均衡

DNS大致工作过程:

  • 应用调用解析器(resolver)
  • 解析器作为客户向Name Server 发出查询报文(封装在UDP段中)
  • Name Server返回响应报文(name/ip)
  • 查询域名方式
    • 递归查询
      在这里插入图片描述
    • 迭代查询
      在这里插入图片描述

4、P2P应用

4.1、纯P2P架构

  • 没有(或极少)一直运行的服务器

4.2、文件分发:C/S vs P2P

  • 非结构化P2P
    • 集中化目录
    • 完全分布式
    • 混合体
  • DHT(结构化)P2P
    • 哈希表
    • 树状

5、TCP套接字编程

5.1、Socket编程

  • 应用进程使用传输层所提供的服务才能够交换报文,实现应用协议实现应用
    • TCP/IP:应用进程使用Socket API访问传输协议
    • 地点:界面上的SAP(Socket) 方式:Socket API
  • socket:分布式应用进程之间的门,传输层协议提供的端到端服务接口

5.2、TCP套接字编程

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

  • 服务器进程去必须先处于运行状态
    • 建立欢迎socket
    • 和本地端口捆绑
    • 在欢迎socket上阻塞式等待接收用户的连接

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

  • 创建客户端本地套接字(隐性捆绑到本地port)
    • 指定服务器进程的IP地址和端口号,与服务器进程连接
  • 当与客户端连接请求到来时
    • 服务器接受来自用户端的请求,解除阻塞式等待,返回一个新的socket,与客户端通信
    • 允许服务器与多个客户端通信
    • 使用源IP和源端口来区分不太的客户端
  • 连接API调用有效时,客户端与服务器建立了TCP连接

socket结构体

在这里插入图片描述

socket交互

在这里插入图片描述

黑色的代表UCP交互的过程,红色的代表应用报文交互的过程

两个进程可以守护同一个端口,但两个进程的socket不同

  • socket本质是一个四元组结构体的内存空间地址
    • socket所代表的四元组分别是目标ip/源ip/目标端口/源端口

UDP Socket编程

UDP scoket交换,在建立通讯之前不需要握手,可直接建立连接
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_52315708/article/details/131642902