OkHttp框架设计(一)

正在整合笔记,近期将会把后续部分上传

网络模型

网络分层模型

OkHttp框架设计(一)

OSI各层解释

OkHttp框架设计(一)

各层对应的设备

OkHttp框架设计(一)

各层对应协议

OkHttp框架设计(一)

UDP


UDP概要:

  • UDP User Datagram Protocol
    • TCP/IP协议栈中的两个传输层协议之一
  • 技术特征
    • 面向消息
    • 无连接
    • 只是在IP基础上加了一层复用
      • 无任何高级、复杂功能,如可靠传输、流量控制、拥塞控制等

UDP首部

OkHttp框架设计(一)

  • 字段:
    • SrcPort,DstPort:辨识应用进程
    • Checksum:可选项,基于净荷和伪首部计算

UDP优缺点

  • 精细控制何时发送什么数据
    • 应用进程一写入数据,UDP即可封装和传出报文段
  • 没有连接建立产生的时延
    • 无需任何准备,即可传出数据,避免不必要的时延引入
  • 没有连接相应的状态
    • 无需分配缓存,配置参数等,因此容易同时处理多个活跃客户端
  • 首部开销较小 只有8个字节
  • 不保证可靠和依序数据发送
  • 不能自适应与网络状态
    • 可能导致网络过载
    • 可能压制自适应流量

采用UDP的应用

  • 简单查询协议,例如DNS(Domain Name System)
    • 对于承载一条查询消息,单个UDP报文段通常足够
    • 连接建立的开销属于过分之举
    • 如有需要,由应用来启动重传比较容易
  • 多媒体流,如VoIP,视频流
    • 偶尔的数据包丢失,可以接受
    • 重传丢失或者损坏的数据包,并不值得
    • 当数据包重传过来的时候,或许为时已晚

TCP


TCP概要:

  • TCP:Transmission Control Protocol
    • TCP/IP协议栈中两个传输层协议之一,为多数网络应用所用
  • 字节流(byte streaming)
    • 不区分上层待传输的消息之间的边界
  • 面向连接
    • 数据传输之间需要建立连接
    • 全双工:一个连接支持并行双向数据传输
  • 可靠传输
    • 保证依序、无损数据传输
  • 流量控制
    • 发送方避免接收方过载
  • 拥塞控制
    • 发送方便网络过载

TCP字节流传输

OkHttp框架设计(一)
传输仍然还是以报文段形式,但是TCP并不区分应用进程带传输的消息之间的边界

TCP报文段

  • TCP发送报文段的时机

    • 待传数据量达到最大报文段长度(Maximum Segment Size,MSS)
    • 应用进程触发,例如应用进程采用推送(push)操作
    • 周期式定时
  • MSS的选择

    • 使得IP数据包不至于分片
    • MSS = MTU - IP首部长度 - TCP首部长度

TCP发送报文段的时机

  • TCP何时发送一个报文段

    • 带传数据量达到最大报文段长度(MSS)
    • 应用进程触发 ,例如应用进程采用个推送操作
    • 定时周期到
  • 报文段发送触发定时器 的设计考量

    • 提高传输效率 ,例如尽可能发送长报文段,而不是多个短报文段
    • 同时不会影响需要实时传输的交互式应用 (如远程登录等,通常传输段字符串)

TCP首部

OkHttp框架设计(一)

  • SrcPort, DstPort:用于识别源主机
    (发送)、目的地主机(接收)应用进程
  • SequenceNum, Acknowledgement,
    Advertisedwindow
    :用于基于滑动
    窗口的流量控制
  • Flags
    • SYN, FIN:建立/终止TCP连接
    • ACK:当确认字段有效时置1
    • URG:表明紧急数据,其中UrgPtr指出非紧急数据起始位置
    • PUSH:不用等待报文段填满再发送
    • RESET:中断连接
  • AdvertisedWindow:用于流量控制

TCP端口

  • 类似于UDP, TCP采用端口号识别上层的网络应用

  • 服务端被动等候连接,其应用进程采用熟知端口

    • 示例: HTTP(Web)服务器 ——80, FTP服务器——21
    • 熟知端口号通常范围:1~1023
  • 客户端主动连接服务器,其应用进程端口号由主机系统实施分配

    • 由于客户端引用进程随时会关闭,持续时间有限,这些端口称为临时端口
    • 临时端口号通常范围:1024~5000
  • 每个TCP连接可用四元组 <SrclP,SrcPort,DstPort,DstIP> 唯一标识

  • 考虑到其他的传输层协议(例如UDP)存在,端到端数据流的标识可以采用五元组 <SrclP,SrcPort,Protocol,DstPort,DstIP>

    • 其中Protocol元素表明所用的传输层协议,比如TCP、UDP
    • 服务质量(Quality Of Service,QoS)机制可以进行服务区分的流量的最精细颗粒度
  • 从主动连接放的角度来看,<DstIP,Protocol,Port> 则意味着Socket API中的socket

TCP连接建立:三次握手

OkHttp框架设计(一)
首先发送一个 TCP SYN消息 (可以认为是一个标志),告诉服务端,我要和你建立连接。
服务端收到 TCP SYN消息,回复客户端一个 TCP SYNACK消息
客户端收到TCP SYNACK消息,认为客户端是活跃的在线的,那么再发送给服务端一个对应收到SYNACKACK,而且这部分可能包含了 客户端发给服务端的数据。
服务端收到这个ACK,确认客户端是活跃的在线的

TCP连接关闭:四次挥手(两轮两次握手)

OkHttp框架设计(一)
客户端发送一个FIN,关闭客户到服务器的数据传送
服务器收到FIN,返回一个ACK给服务端

服务器关闭客户端的连接,发送一个FIN给客户端
客户端接收到FIN,返回ACK给服务端

ACK和超时

OkHttp框架设计(一)

  • 如何确定超时值
    • 点对点链路情况下,比较简单

      • 传播时延固定,且能预先获知,链路带宽已知
      • 因此可以设定固定的超时值
    • 但对于TCP链接,比较复杂

TCP的超时

  • TCP的超时机制必须在任何时候和任何地方都能正常工作

  • 技术方案:超时值正比于RTT

  • 为TCP链接确定RTT的挑战所在

    • 终端主机之间距离差异很大
      • 事先并不知道传播时延
    • 排队时延或者丢包随时间变化
      • 排队时延还有可能构成RTT的主要成分
  • TCP采用自适应机制确定超时值

HTTP协议

HTTP 1.1

建立在TCP协议之上的“超文本传输协议”(HyperText Transfer Protocol)
历程:0.9 -> 1.0 ->1.1 -> 2.0

HTTPS

HTTP1.x在传输数据的时候,所有传输的内容都是明文,无法保证数据的安全性。
网景在1994年创建了HTTPS,HTTPS就是安全版HTTP
OkHttp框架设计(一)
HTTPS在传输数据之前需要进行SSL握手
OkHttp框架设计(一)

  • 客户端发出:TLS协议版本、支持的加密套件、支持的压缩算法与随机数等
  • 服务端传回:TLS版本,根据客户端的支持选择的加密套件,压缩算法,随机数,服务器整数(对称加密算法公钥 如RSA)
  • 客户端 校验整数合法性并提取公钥,产生对称加***(如AES),使用证书中的公钥加密AES秘钥,后续通信使用的**与算法,将之前握手参数的hash值等信息使用**加密的数据
  • 服务端 根据RSA私钥解密AES**,使用**解密数据并验证,随后同样发送一段AES加密数据

HTTP工作原理(发送请求)

  1. 客户端与服务端建立连接(三次握手在这里)
  2. 客户端向服务器提出请求
  3. 服务器接受请求,并根据请求返回相应的文件作为应答
  4. 客户端与服务器关闭连接(四次握手)

客户端发送请求到服务器:请求行-- 通用信息头-- 请求头-- 实体头-- 报文主体

服务器响应客户端: 状态行-- 通用信息头-- 响应头-- 实体头-- 报文主体

状态行:1xx信息,2xx成功,3xx重定向,4xx客户端错误,5xx服务器错误

相关文章:

  • 2021-06-08
  • 2021-11-30
  • 2021-04-27
  • 2021-12-08
  • 2021-08-05
  • 2021-07-03
  • 2021-12-29
猜你喜欢
  • 2022-01-07
  • 2021-07-22
  • 2021-10-12
  • 2021-10-16
  • 2021-10-26
  • 2021-07-06
  • 2021-10-01
相关资源
相似解决方案