深入淺出RPC服務(wù) | 不同層的網(wǎng)絡(luò)協(xié)議
作者:王禹展 京東健康
網(wǎng)絡(luò)協(xié)議
為什么需要網(wǎng)絡(luò)協(xié)議?
網(wǎng)絡(luò)協(xié)議是為計(jì)算機(jī)網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或約定的集合。
網(wǎng)絡(luò)中一個(gè)微機(jī)用戶和一個(gè)大型主機(jī)的操作員進(jìn)行通信,由于這兩個(gè)數(shù)據(jù)終端所用字符集不同,因此操作員所輸入的命令彼此不認(rèn)識(shí)。為了能進(jìn)行通信,規(guī)定每個(gè)終端都要將各自字符集中的字符先變換為標(biāo)準(zhǔn)字符集的字符后,才進(jìn)入網(wǎng)絡(luò)傳送,到達(dá)目的終端之后,再變換為該終端字符集的字符。就像我們說(shuō)話用某種語(yǔ)言一樣,在網(wǎng)絡(luò)上的各臺(tái)計(jì)算機(jī)之間也有一種語(yǔ)言,這就是網(wǎng)絡(luò)協(xié)議,不同的計(jì)算機(jī)之間必須使用相同的網(wǎng)絡(luò)協(xié)議才能進(jìn)行通信。
一次請(qǐng)求都需要用到那些協(xié)議?
1.要傳輸數(shù)據(jù),首先如何知道對(duì)應(yīng)的機(jī)器的地址?通過(guò)IP可以確認(rèn)具體的機(jī)器(網(wǎng)絡(luò)層的IP層協(xié)議)。
2.找到目標(biāo)機(jī)器后,需要知道該機(jī)器上哪個(gè)程序接受本次請(qǐng)求?通過(guò)端口就能確定具體的程序(傳輸層的TCP層協(xié)議)。
3.確定完程序后,怎么區(qū)分不同的請(qǐng)求,每一個(gè)請(qǐng)求如何關(guān)聯(lián)對(duì)應(yīng)的響應(yīng)呢?(應(yīng)用層的RPC協(xié)議)通過(guò)消息id區(qū)分。
4.以上這些最后是由物理層的光纜、電纜、無(wú)線信道等支持的,如何控制信號(hào)在物理層之上的傳遞,還需要PPP協(xié)議、ARP協(xié)議等。
不同層的協(xié)議簡(jiǎn)介
應(yīng)用層的協(xié)議
HTTP協(xié)議
超文本傳輸協(xié)議(Hyper Text Transfer Protocol,HTTP)是一個(gè)簡(jiǎn)單的請(qǐng)求-響應(yīng)協(xié)議,它通常運(yùn)行在TCP之上。它指定了客戶端可能發(fā)送給服務(wù)器什么樣的消息以及得到什么樣的響應(yīng)。
HTTPS協(xié)議
全稱:Hyper Text Transfer Protocol over SecureSocket Layer,是以安全為目標(biāo)的 HTTP 通道,在HTTP的基礎(chǔ)上通過(guò)傳輸加密和身份認(rèn)證保證了傳輸過(guò)程的安全性 。HTTPS 在HTTP 的基礎(chǔ)下加入SSL,HTTPS 的安全基礎(chǔ)是 SSL,因此加密的詳細(xì)內(nèi)容就需要 SSL。 HTTPS 存在不同于 HTTP 的默認(rèn)端口及一個(gè)加密/身份驗(yàn)證層(在 HTTP與 TCP 之間)。這個(gè)系統(tǒng)提供了身份驗(yàn)證與加密通訊方法。它被廣泛用于萬(wàn)維網(wǎng)上安全敏感的通訊,例如交易支付等方面。
RPC協(xié)議
一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。
RTMP協(xié)議
全稱:Real Time Messaging Protocol(實(shí)時(shí)消息傳輸協(xié)議)。該協(xié)議基于TCP,是一個(gè)協(xié)議族,包括RTMP基本協(xié)議及RTMPT/RTMPS/RTMPE等多種變種。RTMP是一種設(shè)計(jì)用來(lái)進(jìn)行實(shí)時(shí)數(shù)據(jù)通信的網(wǎng)絡(luò)協(xié)議,主要用來(lái)在Flash/AIR平臺(tái)和支持RTMP協(xié)議的流媒體/交互服務(wù)器之間進(jìn)行音視頻和數(shù)據(jù)通信。支持該協(xié)議的軟件包括Adobe Media Server/Ultrant Media Server/red5等。RTMP與HTTP一樣,都屬于TCP/IP四層模型的應(yīng)用層。
P2P協(xié)議
點(diǎn)對(duì)點(diǎn)技術(shù)又稱對(duì)等互聯(lián)網(wǎng)絡(luò)技術(shù),是一種網(wǎng)絡(luò)新技術(shù),依賴網(wǎng)絡(luò)中參與者的計(jì)算能力和帶寬,而不是把依賴都聚集在較少的幾臺(tái)服務(wù)器上。P2P網(wǎng)絡(luò)通常用于通過(guò)Ad Hoc連接來(lái)連接節(jié)點(diǎn)。這類網(wǎng)絡(luò)可以用于多種用途,各種檔案分享軟件已經(jīng)得到了廣泛的使用。P2P技術(shù)也被使用在類似VoIP等實(shí)時(shí)媒體業(yè)務(wù)的數(shù)據(jù)通信中。
DNS協(xié)議
DNS是一種可以將域名和IP地址相互映射的以層次結(jié)構(gòu)分布的數(shù)據(jù)庫(kù)系統(tǒng)。DNS系統(tǒng)采用遞歸查詢請(qǐng)求的方式來(lái)響應(yīng)用戶的查詢,為互聯(lián)網(wǎng)的運(yùn)行提供關(guān)鍵性的基礎(chǔ)服務(wù)。目前絕大多數(shù)的防火墻和網(wǎng)絡(luò)都會(huì)開(kāi)放DNS服務(wù),DNS數(shù)據(jù)包不會(huì)被攔截,因此可以基于DNS協(xié)議建立隱蔽信道,從而順利穿過(guò)防火墻,在客戶端和服務(wù)器之間傳輸數(shù)據(jù)。
GTP協(xié)議
全稱:GPRS隧道協(xié)議(GPRSTunnelingProtocol),可以分解成三種獨(dú)立的協(xié)議,GTP-C(控制面)、GTP-U(用戶面)及GTP'(計(jì)費(fèi)傳輸)。GTP-C用于GPRS核心網(wǎng)絡(luò)中,用于不同網(wǎng)絡(luò)節(jié)點(diǎn)之間的信令數(shù)據(jù)。GTP-U 用于承載用戶數(shù)據(jù)。 GTP可以用在UDP或TCP上,GTP v1僅用于UDP上。用于 GPRS(2.5代通信技術(shù))、UMTS(3G移動(dòng)通信技術(shù))、LTE(3G與4G技術(shù)之間的過(guò)渡) 和 5G 網(wǎng)絡(luò)。
DHCP協(xié)議
全稱:Dynamic Host Configuration Protocol(動(dòng)態(tài)主機(jī)配置協(xié)議),通常被應(yīng)用在大型的局域網(wǎng)絡(luò)環(huán)境中,主要作用是集中地管理、分配IP地址,使網(wǎng)絡(luò)環(huán)境中的主機(jī)動(dòng)態(tài)的獲得IP地址、Gateway地址、DNS服務(wù)器地址等信息,并能夠提升地址的使用率。
其它協(xié)議
FTP·、Gopher IMAP4 、 IRC 、 NNTP 、XMPP 、POP3 、SIP 、SMTP 、SNMP 、SSH 、TELNET 、RTCP 、RTP 、RTSP 、 SDP 、 SOAP 、STUN 、 NTP 、SSDP 、BGP等。
傳輸層協(xié)議
TCP傳輸控制協(xié)議
全稱:Transmission Control Protocol,是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,TCP旨在適應(yīng)支持多網(wǎng)絡(luò)應(yīng)用的分層協(xié)議層次結(jié)構(gòu)。 連接到不同但互連的計(jì)算機(jī)通信網(wǎng)絡(luò)的主計(jì)算機(jī)中的成對(duì)進(jìn)程之間依靠TCP提供可靠的通信服務(wù)。TCP假設(shè)它可以從較低級(jí)別的協(xié)議獲得簡(jiǎn)單的,可能不可靠的數(shù)據(jù)報(bào)服務(wù)。 原則上,TCP應(yīng)該能夠在從硬線連接到分組交換或電路交換網(wǎng)絡(luò)的各種通信系統(tǒng)之上操作。
網(wǎng)絡(luò)層協(xié)議
IP協(xié)議
IP指網(wǎng)際互連協(xié)議,Internet Protocol的縮寫(xiě),是TCP/IP體系中的網(wǎng)絡(luò)層協(xié)議。設(shè)計(jì)IP的目的是提高網(wǎng)絡(luò)的可擴(kuò)展性:一是解決互聯(lián)網(wǎng)問(wèn)題,實(shí)現(xiàn)大規(guī)模、異構(gòu)網(wǎng)絡(luò)的互聯(lián)互通;二是分割頂層網(wǎng)絡(luò)應(yīng)用和底層網(wǎng)絡(luò)技術(shù)之間的耦合關(guān)系,以利于兩者的獨(dú)立發(fā)展。根據(jù)端到端的設(shè)計(jì)原則,IP只為主機(jī)提供一種無(wú)連接、不可靠的、盡力而為的數(shù)據(jù)包傳輸服務(wù)。
鏈路層協(xié)議
PPP協(xié)議
點(diǎn)對(duì)點(diǎn)協(xié)議(Point to Point Protocol,PPP)為在點(diǎn)對(duì)點(diǎn)連接上傳輸多協(xié)議數(shù)據(jù)包提供了一個(gè)標(biāo)準(zhǔn)方法。PPP 最初設(shè)計(jì)是為兩個(gè)對(duì)等節(jié)點(diǎn)之間的 IP 流量傳輸提供一種封裝協(xié)議。在 TCP-IP 協(xié)議集中它是一種用來(lái)同步調(diào)制連接的數(shù)據(jù)鏈路層協(xié)議(OSI模式中的第二層),替代了原來(lái)非標(biāo)準(zhǔn)的第二層協(xié)議,即 SLIP。除了 IP 以外 PPP 還可以攜帶其它協(xié)議,包括 DECnet 和 Novell 的 Internet 網(wǎng)包交換協(xié)議(IPX)。
每層協(xié)議之間的關(guān)系
??
發(fā)送端的流程
1.發(fā)送端將用戶數(shù)據(jù)拋給RPC層時(shí),RPC協(xié)議將用戶的數(shù)據(jù)(消息體)加上RPC頭部,然后拋給下一層“傳輸層“
2.”傳輸層”收到“應(yīng)用層”的數(shù)據(jù)后,不會(huì)考慮上一次的協(xié)議是啥,它會(huì)將整個(gè)傳遞進(jìn)來(lái)的數(shù)據(jù)作為‘消息體’,加上TCP頭部后繼續(xù)向下一層“網(wǎng)路層”拋。
3.”網(wǎng)絡(luò)層“收到數(shù)據(jù)后,也不會(huì)考慮上一次的協(xié)議是啥,會(huì)將整個(gè)傳遞進(jìn)來(lái)的數(shù)據(jù)作為‘消息體’并加上IP頭部,繼續(xù)繼續(xù)拋向下一層”數(shù)據(jù)鏈路層“。
4.”數(shù)據(jù)鏈路層“同樣加上MAC頭部,最后由物理層通過(guò)光電信號(hào)傳輸?shù)浇邮斩恕?/p>
接收端的流程
1.接受端收到數(shù)據(jù)后,”數(shù)據(jù)鏈路層“開(kāi)始解析,識(shí)別以太網(wǎng)頭部,取出數(shù)據(jù)后向上拋給”網(wǎng)絡(luò)層“。
2.”網(wǎng)絡(luò)層“識(shí)別IP頭部后,取出數(shù)據(jù),向上拋給”傳輸層“。
3.”傳輸層“收到數(shù)據(jù)后,識(shí)別TCP頭部,取出數(shù)據(jù)后繼續(xù)向上拋給”應(yīng)用層“。
4.”應(yīng)用層“識(shí)別RPC協(xié)議頭部,最終取出發(fā)送端的用戶數(shù)據(jù)。
每層協(xié)議的設(shè)計(jì)
TCP協(xié)議
設(shè)計(jì)的目的
在網(wǎng)絡(luò)發(fā)展的過(guò)程中,IP協(xié)議提供了讓彼此相連的主機(jī)之間能夠進(jìn)行數(shù)據(jù)傳送。但是IP協(xié)議無(wú)法讓接收信息的主機(jī)知道從遠(yuǎn)處傳送來(lái)的數(shù)據(jù)究竟要給到哪一個(gè)進(jìn)程進(jìn)行處理。TCP(傳輸控制協(xié)議)就是為了解決進(jìn)程間的通信問(wèn)題而發(fā)展出來(lái)的協(xié)議。
1.源端口號(hào)和目標(biāo)端口號(hào):沒(méi)有這兩個(gè)端口號(hào)。數(shù)據(jù)就不知道應(yīng)該發(fā)給哪個(gè)應(yīng)用。
2.包的序列號(hào):為什么要給包編號(hào)呢?是為了解決亂序的問(wèn)題。不編好號(hào)怎么確認(rèn)哪個(gè)應(yīng)該先來(lái),哪個(gè)應(yīng)該后到呢。
3.確認(rèn)序列號(hào):發(fā)出去的包應(yīng)該有確認(rèn),要不然我怎么知道對(duì)方有沒(méi)有收到呢?如果沒(méi)有收到就應(yīng)該重新發(fā)送,直到送達(dá)。這個(gè)可以解決不丟包的問(wèn)題。
4.狀態(tài)位:SYN 是發(fā)起一個(gè)連接,ACK 是回復(fù),RST 是重新連接,F(xiàn)IN 是結(jié)束連接等。TCP 是面向連接的,因而雙方要維護(hù)連接的狀態(tài),這些帶狀態(tài)位的包的發(fā)送,會(huì)引起雙方的狀態(tài)變更。
5.窗口大小:TCP 要做流量控制,通信雙方各聲明一個(gè)窗口,標(biāo)識(shí)自己當(dāng)前能夠的處理能力,發(fā)的太快處理不過(guò)來(lái),發(fā)的太慢就會(huì)有空閑,使用窗口大小來(lái)達(dá)到一個(gè)最佳的處理水平。?