应用构架
C/S架构
Client & Server
- 性能具有瓶颈,用户达到一定门限的时候,服务能力会急速下降
- 可拓展性比较差
- 所有用户都依赖服务器
Server
- 一直运行,ip固定和周知的端口号
- 拓展性差:服务器场
Client
-
主动与服务端通信
-
与互联网间歇性连接
-
IP不一定固定,不是直接与客户端通信
P2P架构
是用户同时也是服务器,Gnutella,迅雷等
-
几乎不会一直运行
-
任意系统之间都可以通信
-
每个节点既是客户端也是服务器
- 自拓展性
-
参与的主机间歇性连接且可以改变ip地址
-
进程: 主机上运行的应用程序
-
同一个主机内,使用进程间通信机制(操作系统定义的)
-
不同主机,通过报文(message)交换来通信
- 使用OS提供的通信服务
- 按照协议交换报文
-
P2P架构的应用也有服务器进程和客户端进程之分
混合体
Napster
-
文件搜索:集中
- 主机在中心服务器注册资源
- 主机向中心服务器查询资源位置
-
文件传输: P2P
- 任意Peer节点之间
即时通信
-
在线检测:集中
- 用户上线:向中心服务器注册IP
- 用户与中心服务器联系,找到好友位置
-
两个用户之间聊天:P2P
分布式进程通信问题
-
进程标识和寻址(服务用户)
进程标识- IP :唯一的32位的地址,不能标识进程
- 端口号 (port Number)
- TCP/UDP 所采用的传输协议
知名端口: HTTP:TCP 80 | Mail: TCP 25 | ftp:TCP 2
进程:IP + port标识端节点
本质:一对主机进程的通信由两个端节点构成
层间接口携带的信息- 谁传的 IP+UDP(TCP)端口
- 传给谁 对方的标识(IP+TCP(UDP)端口)
- 传的报文 SDU(对本层来说)
传输层实体工作> tcp或者udp实体- 根据上面的信息对TCP报文端 或者 UDP数据段进行封装
- 包括:源端口号,目标端口号,数据
- 将IP往下交IP实体,用于封装IP数据报:源IP和目标IP
-
传输层-应用层提供服务如何(服务)
- 位置:层间界面SAP (TCP|IP:socket)
- 形式:应用接口程序API (TCP/IP:socket)
socket
提供网络通信中端点抽象化和跨层数据传递效率问题的解决方案 ( 统一编程接口 , 优化数据封装和传递 )
- TCP 需要发送 4 元组,socket API 统一封装(操作系统完成),应用层无需手动添加。不是传递完整的 4 元组, 而是维护一个连接标识符,减少数据的冗余
- UDP 只需要发送目标 IP 和 端口。由操作系统统一封装,无需应用层处理底层协议。
- Socket API 承接了对协议头部解析和生成的责任,交由操作系统处理,而不是应用层手动处理。(自动添加头部协议)
通过提供统一的网络编程接口,抽象传输层细节,减少了应用层的代码冗余和带宽浪费,从而降低了整体的信息复杂度
- 主要作用:提供标准化的通信端点抽象,简化网络编程,并通过协议栈的协作优化数据传输效率。
- 带宽优化的实现:依赖于协议特性(如 TCP 连接复用、UDP 简单头部)和操作系统对协议头部的自动封装,而非 Socket 本身的直接设计目标。
TCP socket (TCP之上的套接字)
-
TCP服务,面向连接的
- 进程通信会持续一段时间
- 用一个 整数 标识两个应用实体之间的通信关系
-
令穿过层间的信息量最小
-
TCP socket包含: 源IP,源端口,目标IP,目标端口 (4元组)
UDP socket (UDP之上的套接字)
-
UDP 是无连接的
- 用一个整数指定应用所在的一个端节点 (end point)
-
发送数据报时:采用创建好的本地套接字(不必指定自己的ip和port)
-
发送报文时:
- 传输报文:必须提供对方的IP,port
- 接受报文:传输层必须上传对方的IP,port
-
UDP socket包含: 源IP,源端口,(2元组)
-
如何使用传输层提供的服务,实现应用进程之间的报文交换(用户使用服务)
- 定义应用层协议:报文格式,解释,时序
- 编制程序,使用OS提供的API,调用网络基础设施提供通信服务传报文,实现应用时序
应用层协议
-
定义
- 定义了:报文类型;报文语法;字段语义;发送和响应规则
-
协议是应用的组成部分:
- Web应用: HTTP协议;web客户端;web服务器;HTML等多个组成部分
-
协议分类:
- 公开协议和私有(专用)协议
-
衡量标准
-
数据丢失率
-
延迟
-
吞吐
-
安全性
-
UDP
-
不可靠的数据传输
-
不提供:可靠,流量控制,拥塞控制,时间,带宽保证,建立连接
TCP
-
可靠
-
流量控制
-
拥塞控制
-
不能提供:时间保证,最小吞吐量和安全
-
面向连接:客户端进程和服务器进程之间建立连接
SSL
-
在TCP上实现,提供加密的TCP通信
-
私密性,数据完整性,端到端的鉴别
-
处于应用层
- 采用SSL库,SSL库使用TCP通信
-
SSL socket API
- 应用通过API将明文传输给socket,SSL加密后在互联网传输
都不能提供安全的通信服务
通过SSL(在TCP之上)来建立安全的通信服务 (在应用层)
HTTP 是跑在TCP之上的,HTTPS是跑在SSL协议之上的
笔者才疏学浅,请多多指教