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》
轉載請備註原文出處,不得用於商業傳播——凡幾多