1、应用层协议原理
1.1、网络应用的体系结构
可能的应用架构:
- 客户-服务区模式(C/S)
- 不平等的模式,以服务器为主,可扩展性比较差,
- 例子:web应用
- 对等模式(P2P)
- 自扩展性;
- 例子:迅雷
- 混合体:客户-服务器和对等体系结构
- Napster:
- 主机在中心服务器上注册其资源
- 主机向中心服务器查询资源位置
- 例子:即时通讯(聊天室):
- 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交换,在建立通讯之前不需要握手,可直接建立连接