Alamofire 是用 swift 写的一套网络请求三方库,至关于 OC 中的 AFNetWorking。在开始学习 Alamofire 以前,先来复习一下网络的一些基础知识,这样能够更有助于咱们学习理解这个网络请求框架。html
互联网协议 按照功能不一样分为 OSI 七层或 tcp/ip 五层或 tcp/ip 四层。每一层都运行不一样的协议。以下图: swift
每层的对应的功能与协议以下表格:服务器
OSI七层网络模型 | TCP/IP四层概念模型 | 功能 | 对应的协议 |
---|---|---|---|
应用层(Application) | 应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | HTTP、TFTP, FTP, NFS, WAIS、SMTP、Telnet |
表示层(Presentation) | 应用层 | 数据格式化,代码转换,数据加密 | Telnet, Rlogin, SNMP, Gopher |
会话层(Session) | 应用层 | 解除或创建与其余接点的联系 | SMTP, DNSr |
传输层(Transport) | 传输层 | 提供端对端的接口 | TCP, UDP |
网络层(Network) | 网络层 | 为数据包选择路由 | SMTP, DNSr |
数据链路层(Data Link) | 网络接口层 | 传输有地址的帧,错误检测功能 | FDDI, Ethernet, Arpanet, PDN, SLIP, PPP |
物理层(Physical) | 网络接口层 | 以二进制数据形式在物理媒体上传输数据 | IEEE 802.1A, IEEE 802.2 到 IEEE 802.11 |
客户端发送请求到接收端的过程: 网络
物理层就是经过光纤、电缆等进行链接,基于电器特性发送高低电压(电信号),高电压对应数字 1,低电压对应数字 0,传输一堆 001010100 的二进制位。架构
只是物理层的单纯的电信号 0 和 1 是没有意义的,必须规定电信号多少位一组,每组什么意思才行,数据链路层就是来对电信号来作分组的。数据链路层在不可靠的物理介质上提供可靠的传输。 该层的做用包括: 物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。在这一层,数据的单位称为帧(frame)。数据链路层协议的表明包括:SDLC、HDLC、PPP、STP等。框架
网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息- -源站点和目的站点地址的网络地址。网络层主要设备是路由器。 网络层还能够实现拥塞控制、网际互连等功能。在这一层,数据的单位称为数据包(packet)。网络层协议的表明包括:IP、IPX、RIP、OSPF 等。tcp
网络层的 ip 帮咱们区分子网,以太网层的 mac 帮咱们找到主机,那么如何标识这台主机上的应用程序,那就须要端口,端口就是应用程序与网卡关联的编号。 传输层功能就是创建端口到端口的通讯。端口范围 0-65535,0-1023 为系统占用端口。 ####(1)TCP 协议: 可靠传输,TCP 数据包没有长度限制,理论上能够无限长,可是为了保证网络的效率,一般 TCP 数据包的长度不会超过IP数据包的长度,以确保单个 TCP 数据包没必要再分割。 学习
源端口和目的端口: 一个 IP 地址和端口的组合称为**“套接字”或“端点”**。 因此 IP 协议中的源 IP 地址和目的地址,组成了“一对”套接字(发送端的套接字和接收端的套接字)。加密
序号: 每个“TCP 报文段中的第一个字节”都会被赋予一个序号(递增)。根据 控制标志 中的 SYN 是否为 1,序号表达不一样的含义: SYN = 1:当前为链接创建阶段,此时的序号为初始序号(ISN)。当数据传输正式开始时,数据的第一个字节的序号为 ISN + 1; SYN = 0:当前报文段中,数据部分的第一个字节的序号。操作系统
确认号(TCP返回报文使用): 确认号也称 ACK 号或 ACK 字段。确认号包含的值为:“确认号的发送方”但愿接收的下一个序列号。(即最后接收成功的序列号 +1)一旦链接创建成功,ACK 值一直为1。
数据偏移量: TCP 报文段的首部长度,单位是 word(4字节)。字面含义是:TCP 报文段的数据的起始处,距离 TCP 报文段的起始处 的偏移量。4 个字节最大能表示的数字是 15,因此首部最大 60 字节。
保留字段: 预留做为后续用途,必须是 0。
控制标志: 一共有 6 个控制标志,其中 SYN/ACK、FIN/ACK 主要用于链接的创建、断开阶段。 URG:当置为 1 时,表示 紧急指针 字段有效; ACK:确认 序号 字段有效; PSH:接收方应当即把这个报文段交给应用层; RST:重建链接; SYN:同步序号,用于创建链接; FIN:发送端再也不发送数据;
窗口大小: 容许对方发送的数据量。告诉对方本身缓冲区还能容纳多少字节,用来控制对方发送数据的速度。
校验和: 发送端对 TCP 首部、数据进行 CRC 运算得出的结果。接收端收到数据后,对接收到的 TCP 报文段的首部、数据进行CRC 运算,并跟 TCP 首部中的校验和进行对比,确保数据在传输过程当中没有损坏。
紧急指针: 仅在 URG=1 时才生效,它的值是一个偏移量,和序号字段中的值相加获得紧急数据最后一个字节的序号。
可选字段: 最多见的可选字段是 MSS(Maximum Segment Size),表示最长报文大小,通讯双方一般在链接的第一个报文段中指明这个选项。(只能出如今 SYN 报文中)
三次握手和四次挥手:
####(2)UDP 协议: 不可靠传输,”报头”部分一共只有 8 个字节,总长度不超过65,535 字节,正好放进一个 IP 数据包。
这一层也能够称为会晤层或对话层,在会话层及以上的高层次中,数据传送的单位再也不另外命名,而是统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的创建和维护应用之间通讯的机制。如服务器验证用户登陆即是由会话层完成的。
这一层主要解决拥护信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于 OSI 系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩, 加密和解密等工做都由表示层负责。
应用层为操做系统或网络应用程序提供访问网络服务的接口。应用层协议的表明包括:Telnet、FTP、HTTP、SNMP 等。
以上的总结参考了并部分摘抄了如下文章,很是感谢如下做者的分享!:
二、上野 宣 的《图解http》
转载请备注原文出处,不得用于商业传播——凡几多