本章分为三个部分:

  • 原理
    • 传输层的服务模型
    • 客户-服务器模式
    • 对等模式(peer-to-peer)
    • 内容方法网络
  • 实例
    • HTTP
    • FTP
    • SMTP/POP3/IMAP
    • DNS
  • 编程
    • Socket API

image-20250123024827721

image-20250123024832303

应用层协议原理

客户-服务器模式(C/S:client/server)

image-20250123025028234

  • 主要在于扩展性差,且客户端多于阈值,服务器的性能会断崖式地下降
  • 可靠性也差

对等模式(P2P)

image-20250123025039562

混合体:CS和P2P体系结构

image-20250123025056878

进程通信

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

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

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

  • 在同一个主机内,使用进程间通信机制通信(操作系统定义)
  • 不同主机,交换报文(Message)来通信
    • 使用OS提供的通讯服务
    • 按照应用协议交换报文
      • 借助传输层提供的服务
    • 注意:P2P架构的应用也有客户端进程和服务器进程之分

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

image-20250123025817359

  • 问题1:进程标示和寻址问题**(服务用户)**
  • 问题2:传输层-应用层提供服务是如何**(服务)**
    • 位置:层间界面的SAP(TCP/IP:socket)
    • 形式:应用程序接口API(TCP/IP : socket API)
  • 问题3:如何使用传输层提供的服务,实现应用进程间的报文交换,实现应用**(用户使用服务)**
    • 定义应用层协议:报文格式,解释,时序等
    • 编制程序,使用OS提供的API,调用网络基础设备提供通讯服务传报文,实现使用时序等

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

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

    • 主机:唯一的32位IP地址
      • 仅仅有IP地址不能够唯一标示出一个进程;在一台端系统上有很多应用进程在运行
    • 所采用的传输层协议:TCP or UDP
    • 端口号(Port Numbers)
  • 一些知名端口号的例子

    • HTTP:TCP 80 Mail: TCP25 ftp:TCP 2
  • 一个进程:用IP+port标示 端节点

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

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

  • 层间接口必须要携带的信息
    • 要传输的报文(对本层来说:SDU)
    • 谁传的:自己的应用进程标示:IP+TCP(UDP)端口
    • 传给谁:对方的应用进程标示:对方的IP+TCP(UDP)端口号
  • 传输层实体(tcp或udp实体) 根据这些信息进行TCP报文段(UDP数据报)的封装
    • 源端口号,目标端口号,数据等
    • 将IP地址往下交IP实体,用于封装IP数据报:源IP, 目标IP

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

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

    • 所以使用socket来替代自己和对方的IP的信息
  • 用个代号标示通信的双方或者单方:socket

  • 就像OS打开文件返回的句柄一样

    • 对句柄的操作,就是对文件的操作
  • TCP socket:

    • TCP服务,两个进程之间的通信需要之前要建立连接
      • 两个进程通信会持续一段时间,通信关系稳定
    • 可以用一个整数表示两个应用实体之间的通信关系,本地标示
    • 穿过层间接口的信息量最小
    • TCP socket:源IP,源端口,目标IP,目标IP,目标端口

TCP之上的套接字(socket)

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

image-20250123031245958

image-20250123031302707

TCP socket是存在本地的,因此应用层传给传输层后,传输层会查socket表来得到IP

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

  • UDP socket:
    • UDP服务,两个进程间的通讯需要前无需建立连接
      • 每个报文都是独立传输的
      • 前后报文可能给不同的分布式进程
    • 因此,只能用一个整数表示本应用实体的标示
      • 因为这个报文可能传给另外一个分布式进程
    • 穿过层间接口的信息大小最小
    • UDP socket: 本IP, 本端口
    • 但是传输报文时,必须要提供对方IP,port
      • 接收报文时:传输层需要上传对方的IP,port

UDP之上的套接字(socket)

  • 对于使用无连接服务(UDP)的应用而言,套接字是2元组的一个具有本地意义的标示
    • 2元组:IP,port (源端指定)
    • UDP套接字指定了应用所在的一个端节点(end point)
    • 在发送数据报时,采用创建好的本地套接字(标示ID),就不必在发送每个报文中指明自己所采用的ip和port
    • 但是在发送报文时,必须要指定对方的ip和udp port(另外一个段节点)

image-20250123031445502

套接字(Socket)

  • 进程向套接字发送报文或从套接字接收报文
  • 套接字 <-> 门户
    • 发送进程将报文推出门户,发送进程依赖于传输层设施在另一侧门将报文交付给接收进程
    • 接收进程从另一侧门收到报文(依赖于传输层设施)

image-20250123031629874

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

image-20250123031746279

  • 定义应用层协议: 报文格式,解释,时序等
  • 编制程序,通过API调用网络基础设施提供通信服务传报文,解析报文,实现应用时序等

应用层协议

image-20250123031910811

应用需要传输层提供什么样的服务?如何描述传输层的服务?

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

image-20250123032014169

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

image-20250123032032624

Internet传输层提供的服务

image-20250123032052396

UDP存在的必要性

  • 能够区分不同的进程,而IP服务不行
    • 在IP提供的主机到主机端到端功能的基础上,区分了主机的应用进程
  • 无需建立连接,省去了建立连接时间,适合事务性应用
  • 不做可靠性的工作,例如检错重发,适合那些对实时性要求高且正确率要求不高的应用
    • 因为未了实现可靠性(正确性,保序等),必须付出时间代价
  • 没有拥塞控制和流量控制,应用能够按照设定的速度发送数据
    • 而在TCP上面的应用,应用发送数据的速度和主机向网络发送的实际数据是不一致的,因为有流量控制和拥塞控制

Internet应用及其应用层协议和传输层协议

image-20250123032421154

安全TCP

image-20250123032456861

Web and HTTP

一些术语

image-20250123192311378

HTTP概况

HTTP:超文本传输协议

  • Web的应用层协议
  • 客户/服务器模式
    • 客户:请求、接收和显示Web对象的浏览器
    • 服务器:对请求进行响应,发送对象的Web服务器
  • HTTP 1.0: RFC 1945
  • HTTP 1.1: RFC 2068

image-20250123192433380

  • 使用TCP:
    • 客户发起一个与服务器的TCP连接(建立套接字),端口号为80
    • 服务器接受客户的TCP连接
    • 在浏览器(HTTP客户端)与Web服务器(HTTP服务器server)交换HTTP报文(应用层协议报文)
    • TCP连接关闭
  • HTTP是无状态的
    • 服务器并不维护关于客户的任何信息
    • image-20250123192625792

HTTP连接

  • 非持久HTTP

    • 最多只有一个对象在TCP连接上发送

    • 下载多个对象需要多个TCP连接

    • HTTP/1.0使用非持久连接

  • 持久HTTP

    • 多个对象可以在一个(在客户端和服务器之间的)TCP连接上传输

    • HTTP/1.1默认使用持久连接

非持久HTTP连接

image-20250123212345153

image-20250123212351548

响应时间模型

image-20250123212427745

持久HTTP

image-20250123212442645

HTTP请求报文

image-20250123212458392

通用格式

image-20250123212514701

提交表单输入

image-20250123212532556

方法类型

image-20250123212545311

HTTP响应报文

image-20250123212604591

HTTP响应状态码

image-20250123212620333

image-20250123212630396

cookies

image-20250123212646707

image-20250123212652117

image-20250123212657255

Web缓存(代理服务器)

image-20250123212718200

image-20250123212727065

实例

image-20250123212736467

image-20250123212753602

image-20250123212807695

image-20250123212815790

条件GET方法

image-20250123212830275

FTP*

image-20250123042138470

image-20250123042158411

image-20250123042215311

Email、SMTP、POP3、IMAP

Email电子邮件

三个组成部分

  • 用户代理
  • 邮件服务器
  • 简单邮箱传输协议:SMTP

image-20250123042422116

用户代理

  • 又名“邮件阅读器”
  • 撰写,编辑和阅读邮件
  • 如Outlook
  • 输出和输入邮件保存在服务器上

邮件服务器

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

Email: SMTP{RFC 2821}

  • 使用TCP在客户端和服务器之间传送报文,端口号为25
  • 直接传输:从发送方服务器到接收方服务器
  • 传输的3个阶段
    • 握手
    • 传输报文
    • 关闭
  • 命令/响应交互
    • 命令:ASCII文本
    • 响应:状态码和状态信息
  • 报文必须为7位ASCII码

例子

image-20250123042817170

简单的SMTP交互

image-20250123042830213

image-20250123042840166

SMTP:总结

image-20250123042927925

邮件报文格式

image-20250123042950457

报文格式:多媒体扩展

image-20250123043007180

邮箱访问协议

image-20250123043027854

  • SMTP:传送到接收方的邮件服务器
  • 邮件访问协议:从服务器访问邮件
    • POP:邮局访问协议(Post Office Protocol)[RFC 1939]
      • 用户身份确认(代理<->服务器)并下载
    • IMAP: Internet邮件访问协议(Internet Mail Access Protocao)[RFC 1730]
      • 更多特性
      • 在服务器上处理存储的报文
    • HTTP:Hotmailm Yahoo! Mail等
      • 方便

POP3协议

image-20250123043259038

POP3与IMAP

image-20250123043338347

DNS(域名解析)

P2P应用

CDN

TCP套接字(Socket)编程

UDP套接字编程