深入淺出RPC服務 | 不同層的網絡協議

語言: CN / TW / HK

導讀:✍️

本系列文章從RPC產生的歷史背景開始講解,涉及RPC核心原理、RPC實現、JSF的實現等,通過圖文類比的方式剖析它的內部世界,讓大家對RPC的設計思想有一個宏觀的認識。

作者:王禹展   京東健康

網絡協議

為什麼需要網絡協議?

網絡協議是為計算機網絡中進行數據交換而建立的規則、標準或約定的集合。

網絡中一個微機用户和一個大型主機的操作員進行通信,由於這兩個數據終端所用字符集不同,因此操作員所輸入的命令彼此不認識。為了能進行通信,規定每個終端都要將各自字符集中的字符先變換為標準字符集的字符後,才進入網絡傳送,到達目的終端之後,再變換為該終端字符集的字符。就像我們説話用某種語言一樣,在網絡上的各台計算機之間也有一種語言,這就是網絡協議,不同的計算機之間必須使用相同的網絡協議才能進行通信。

一次請求都需要用到那些協議?

1.要傳輸數據,首先如何知道對應的機器的地址?通過IP可以確認具體的機器(網絡層的IP層協議)。

2.找到目標機器後,需要知道該機器上那個程序接受本次請求?通過端口就能確定具體的程序(傳輸層的TCP層協議)。

3.確定完程序後,怎麼區分不同的請求,每一個請求如何關聯對應的響應呢?(應用層的RPC協議)通過消息id區分。

4.以上這些最後是由物理層的光纜、電纜、無線信道等支持的,如何控制信號在物理層之上的傳遞,還需要PPP協議、ARP協議等。

不同層的協議簡介

應用層的協議

HTTP協議

超文本傳輸協議(Hyper Text Transfer Protocol,HTTP)是一個簡單的請求-響應協議,它通常運行在TCP之上。它指定了客户端可能發送給服務器什麼樣的消息以及得到什麼樣的響應。

HTTPS協議

全稱:Hyper Text Transfer Protocol over SecureSocket Layer,是以安全為目標的 HTTP 通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性 。HTTPS 在HTTP 的基礎下加入SSL,HTTPS 的安全基礎是 SSL,因此加密的詳細內容就需要 SSL。 HTTPS 存在不同於 HTTP 的默認端口及一個加密/身份驗證層(在 HTTP與 TCP 之間)。這個系統提供了身份驗證與加密通訊方法。它被廣泛用於萬維網上安全敏感的通訊,例如交易支付等方面。

RPC協議

一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。

RTMP協議

全稱:Real Time Messaging Protocol(實時消息傳輸協議)。該協議基於TCP,是一個協議族,包括RTMP基本協議及RTMPT/RTMPS/RTMPE等多種變種。RTMP是一種設計用來進行實時數據通信的網絡協議,主要用來在Flash/AIR平台和支持RTMP協議的流媒體/交互服務器之間進行音視頻和數據通信。支持該協議的軟件包括Adobe Media Server/Ultrant Media Server/red5等。RTMP與HTTP一樣,都屬於TCP/IP四層模型的應用層。

P2P協議

點對點技術又稱對等互聯網絡技術,是一種網絡新技術,依賴網絡中參與者的計算能力和帶寬,而不是把依賴都聚集在較少的幾台服務器上。P2P網絡通常用於通過Ad Hoc連接來連接節點。這類網絡可以用於多種用途,各種檔案分享軟件已經得到了廣泛的使用。P2P技術也被使用在類似VoIP等實時媒體業務的數據通信中。

DNS協議

DNS是一種可以將域名和IP地址相互映射的以層次結構分佈的數據庫系統。DNS系統採用遞歸查詢請求的方式來響應用户的查詢,為互聯網的運行提供關鍵性的基礎服務。目前絕大多數的防火牆和網絡都會開放DNS服務,DNS數據包不會被攔截,因此可以基於DNS協議建立隱蔽信道,從而順利穿過防火牆,在客户端和服務器之間傳輸數據。

GTP協議

全稱:GPRS隧道協議(GPRSTunnelingProtocol),可以分解成三種獨立的協議,GTP-C(控制面)、GTP-U(用户面)及GTP'(計費傳輸)。GTP-C用於GPRS核心網絡中,用於不同網絡節點之間的信令數據。GTP-U 用於承載用户數據。 GTP可以用在UDP或TCP上,GTP v1僅用於UDP上。用於 GPRS(2.5代通信技術)、UMTS(3G移動通信技術)、LTE(3G與4G技術之間的過渡) 和 5G 網絡

DHCP協議

全稱:Dynamic Host Configuration Protocol(動態主機配置協議),通常被應用在大型的局域網絡環境中,主要作用是集中地管理、分配IP地址,使網絡環境中的主機動態的獲得IP地址、Gateway地址、DNS服務器地址等信息,並能夠提升地址的使用率。

其它協議

FTP·、Gopher IMAP4 、 IRC 、 NNTP 、XMPP 、POP3 、SIP 、SMTP 、SNMP 、SSH 、TELNET 、RTCP 、RTP 、RTSP 、 SDP 、 SOAP 、STUN 、 NTP 、SSDP 、BGP等。

傳輸層協議

TCP傳輸控制協議

全稱:Transmission Control Protocol,是一種面向連接的、可靠的、基於字節流的傳輸層通信協議,TCP旨在適應支持多網絡應用的分層協議層次結構。 連接到不同但互連的計算機通信網絡的主計算機中的成對進程之間依靠TCP提供可靠的通信服務。TCP假設它可以從較低級別的協議獲得簡單的,可能不可靠的數據報服務。 原則上,TCP應該能夠在從硬線連接到分組交換或電路交換網絡的各種通信系統之上操作。

網絡層協議

IP協議

IP指網際互連協議,Internet Protocol的縮寫,是TCP/IP體系中的網絡層協議。設計IP的目的是提高網絡的可擴展性:一是解決互聯網問題,實現大規模、異構網絡的互聯互通;二是分割頂層網絡應用和底層網絡技術之間的耦合關係,以利於兩者的獨立發展。根據端到端的設計原則,IP只為主機提供一種無連接、不可靠的、盡力而為的數據包傳輸服務。

鏈路層協議

PPP協議

點對點協議(Point to Point Protocol,PPP)為在點對點連接上傳輸多協議數據包提供了一個標準方法。PPP 最初設計是為兩個對等節點之間的 IP 流量傳輸提供一種封裝協議。在 TCP-IP 協議集中它是一種用來同步調製連接的數據鏈路層協議OSI模式中的第二層),替代了原來非標準的第二層協議,即 SLIP。除了 IP 以外 PPP 還可以攜帶其它協議,包括 DECnet 和 Novell 的 Internet 網包交換協議(IPX)。

每層協議之間的關係

發送端的流程

1.發送端將用户數據拋給RPC層時,RPC協議將用户的數據(消息體)加上RPC頭部,然後拋給下一層“傳輸層“

2.”傳輸層”收到“應用層”的數據後,不會考慮上一次的協議是啥,它會將整個傳遞進來的數據作為‘消息體’,加上TCP頭部後繼續向下一層“網路層”拋。

3.”網絡層“收到數據後,也不會考慮上一次的協議是啥,會將整個傳遞進來的數據作為‘消息體’並加上IP頭部,繼續繼續拋向下一層”數據鏈路層“。

4.”數據鏈路層“同樣加上MAC頭部,最後由物理層通過光電信號傳輸到接收端。

接收端的流程

1.接受端收到數據後,”數據鏈路層“開始解析,識別以太網頭部,取出數據後向上拋給”網絡層“。

2.”網絡層“識別IP頭部後,取出數據,向上拋給”傳輸層“。

3.”傳輸層“收到數據後,識別TCP頭部,取出數據後繼續向上拋給”應用層“。

4.”應用層“識別RPC協議頭部,最終取出發送端的用户數據。

每層協議的設計

TCP協議

設計的目的

在網絡發展的過程中,IP協議提供了讓彼此相連的主機之間能夠進行數據傳送。但是IP協議無法讓接收信息的主機知道從遠處傳送來的數據究竟要給到哪一個進程進行處理。TCP(傳輸控制協議)就是為了解決進程間的通信問題而發展出來的協議。

1.源端口號和目標端口號:沒有這兩個端口號。數據就不知道應該發給哪個應用。

2.包的序列號:為什麼要給包編號呢?是為了解決亂序的問題。不編好號怎麼確認哪個應該先來,哪個應該後到呢。

3.確認序列號:發出去的包應該有確認,要不然我怎麼知道對方有沒有收到呢?如果沒有收到就應該重新發送,直到送達。這個可以解決不丟包的問題。

4.狀態位:SYN 是發起一個連接,ACK 是回覆,RST 是重新連接,FIN 是結束連接等。TCP 是面向連接的,因而雙方要維護連接的狀態,這些帶狀態位的包的發送,會引起雙方的狀態變更。

5.窗口大小:TCP 要做流量控制,通信雙方各聲明一個窗口,標識自己當前能夠的處理能力,發的太快處理不過來,發的太慢就會有空閒,使用窗口大小來達到一個最佳的處理水平。