文章目录
应用层协议原理
网络应用程序体系结构
-
写程序满足:
在 (不同的) 端系统上运行
通过网络进行交互
例: web服务软件与浏览器软件进行交互 -
无需为网络核心设备写软件
网络核心设备不运行在用户的应用层
端系统上的应用保证了快速应用开发及传播 -
客户/服务器架构
服务器:
主机一直在线
固定的 IP 地址
常位于数据中心,便于扩展
客户机:
与服务器通信
可能间歇性连接
可能具有动态IP地址
相互间不直接通信 -
P2P架构
无一直在线的服务器
任意端系统间直接通信
端请求其它端提供服务, 端也对其它端提供服务
自扩展性:新端的加入带来新的服务容量, 也带来新的服务需求
端间歇性连接到网络且可能改变 IP 地址
管理复杂
进程通信
进程: 在主机上运行的程序
在同一主机内两个进程的通信采用进程间通信 (由OS定义)。
不同主机上进程的通信通过交换消息(message)进行。
客户进程: 发起通信的进程
服务进程: 等待连接的进程
套接字
进程通过套接字发送/接收消息(message)
套接字类似邮筒
发送进程将消息交给套接字(丢进邮筒的投递口)
发送进程依赖类似邮政传输基础设施将消息投递到接收进程的套接字
应用层协议定义
- 所交换消息的类型,
例如 请求, 响应 - 消息格式:
消息中有哪些域及这些域如何解释 - 消息语义
域中信息的含义 - 进程何时及如何发送及响应消息的规则
- 开放协议:
在RFC协议中定义,人人都能获取协议的定义
准许互操作
例如 HTTP, SMTP - 私有协议:
例如 Skype
互联网传输协议服务
- TCP 服务:
在发送与接收进程间进行可靠传输
流控制: 发送端不溢出接收端
拥塞控制: 当网络过载时发送端节流
不提供: 时效, 最小吞吐量 保障, 安全
面向连接: 需要在客户与服务进程间建立连接 - UDP 服务:
在发送与接收进程间进行非可靠数据传输
不提供: 可靠性, 流控制, 拥塞控制, 时效, 吞吐量保证, 安全, 或建立连接
安全的 TCP
- TCP & UDP
未加密
明文密码送入套接字以明文在互联网传递 - TLS / SSL
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
提供加密的 TCP 连接
数据完整性
端点身份验证
Web与HTTP
HTTP概述
HTTP: hypertext transfer protocol
Web 的应用层协议
客户/服务器模型
客户: 浏览器发起请求、且接收 (使用 HTTP 协议)并"显示" Web 对象
服务器: Web 服务器发送 (使用 HTTP 协议) 对象以响应请求
- 使用 TCP:
客户发起 TCP 连接 (创建套接字) 到服务器, 端口 80
服务器接受来自客户的 TCP 连接请求
HTTP 消息 (应用层协议 消息) 在浏览器(HTTP 客户程序)与 Web 服务器 (HTTP 服务器)之间交换
TCP 连接关闭
HTTP连接
-
非持续 HTTP Not-persistent connection
开启 TCP 连接
通过 TCP 连接最多传送一个对象
关闭 TCP 连接
下载多个对象需要多个连接 -
持续 HTTP Persistent connection
开启 TCP 连接到服务器
多个对象可以通过在客户与服务器之间建立的单一TCP 连接进行传送
关闭 TCP 连接
HTTP请求消息
两类 HTTP 消息: 请求, 响应
Request line (请求行) : GET, POST, HEAD, PUT, DELETE
Header lines (首部行) :
GET, POST
HEAD
只向服务器请求首部,响应不含请求对象
PUT
在实体主体中上传文件到 URL 域中指定的路径
DELETE
删除 URL 域中指定的文件
POST 方法:
网页常常含有表单输入
用户输入以放入 HTTP 的 POST 请求消息的实体主体中的方式上传到服务器
HEAD 方法:
请求如果特定 URL 被用一个 HTTP GET 方法请求时所要返回的头部(仅仅头部)
GET 方法(用于上传数据到服务器):
将用户数据包含在HTTP GET请求消息的URL 域中(跟随一个问号‘?’)
PUT 方法:
上传新文件 (对象) 到服务器
以PUT HTTP 请求消息的实体主体中的内容完全覆盖在特定 URL 处存在的文件
HTTP 响应状态码
200 OK
请求成功, 所请求的对象在此消息的后部
301 Moved Permanently
所请求的对象被移动, 新位置在此消息下面说明(Location:)
400 Bad Request
服务器无法理解所请求的消息
404 Not Found
服务器找不到所请求的文档
505 HTTP Version Not Supported
维护用户-服务状态-cookie
HTTP GET/响应 交互是 无状态的
没有通过 HTTP 消息的多步交换来完成一个 Web “事务” 的概念
无需为客户/服务器去跟踪多步交换的 “状态”
所有 HTTP 请求都是相互独立的
无需为客户/服务器从一个部分完成但永远不会完成的事务中 “恢复”