我們的世界越來越數(shù)字化和互聯(lián)。作為這個(gè)新社會(huì)的公民,了解底層系統(tǒng)是有意義的。
作為軟件開發(fā)人員,了解這一點(diǎn)至關(guān)重要。在今天的文章中,讓我們更深入地了解底層協(xié)議。
查找收件人:IP 地址
在我上一篇文章中,我談到了大規(guī)模網(wǎng)絡(luò)以及它們是如何連接的。
但是計(jì)算機(jī)如何在如此龐大的網(wǎng)絡(luò)上發(fā)現(xiàn)彼此呢?如果有適當(dāng)?shù)臋?quán)限,我可以將我的計(jì)算機(jī)連接到您的計(jì)算機(jī)嗎?
答案是肯定的。
當(dāng)計(jì)算機(jī)連接到互聯(lián)網(wǎng)時(shí),它會(huì)收到一個(gè)“互聯(lián)網(wǎng)協(xié)議 (IP) 地址。”
計(jì)算機(jī)的 IP 地址就像您家的地址。您可以從該地址發(fā)送消息,也可以在該地址接收消息。
IP 地址允許 Internet 上的計(jì)算機(jī)相互識(shí)別、連接和發(fā)送消息。
當(dāng)您連接到一個(gè)網(wǎng)站時(shí),您實(shí)際上只是連接到另一臺(tái)計(jì)算機(jī)——該網(wǎng)站的“服務(wù)器”。
該服務(wù)器也有一個(gè) IP 地址。因此,連接只是在這兩個(gè)唯一地址之間路由信息包的問題。
您的計(jì)算機(jī)現(xiàn)在有一個(gè) IP 地址。好奇它是什么?
人性化的地址別名:域名
20.205.243.166
很難記住。記住github.com
要容易得多。
當(dāng)我打字時(shí),我的電腦如何知道要去哪里github.com
?
域名系統(tǒng)是另一項(xiàng)互聯(lián)網(wǎng)創(chuàng)新。它允許您的計(jì)算機(jī)查找github.com
的關(guān)聯(lián) IP 地址
DNS 背后的復(fù)雜性要高得多。它允許網(wǎng)站圍繞用戶如何連接到域來設(shè)置各種規(guī)則和重定向。
但歸根結(jié)底,DNS 是一項(xiàng)解決難題的簡(jiǎn)單技術(shù):解決整個(gè) Web 上的記錄,具有高可擴(kuò)展性、復(fù)制性和記錄之間的最終一致性。
計(jì)算機(jī)之間的通信規(guī)則:TCP/IP
到目前為止,我的電腦有:
在 DNS 中查找 github.com
找到 GitHub 的 IP 地址
20.205.243.166
接下來,我們需要建立連接并開始交換信息!
這是怎么發(fā)生的?
早期的互聯(lián)網(wǎng)先驅(qū)們想出了一些關(guān)于計(jì)算機(jī)應(yīng)該如何在互聯(lián)網(wǎng)上相互連接和交談的重要規(guī)則。所有在線計(jì)算機(jī)都遵循這些規(guī)則,因此存在共同語言。
這些通信規(guī)則稱為傳輸控制協(xié)議/Internet 協(xié)議 (TCP/IP)。
TCP/IP 的細(xì)節(jié)可以寫滿整篇文章。為簡(jiǎn)潔起見,我們只說 TCP/IP 涉及將數(shù)據(jù)分成小的信息“數(shù)據(jù)包”。當(dāng)您想通過 Internet 發(fā)送文件時(shí),您的計(jì)算機(jī)會(huì)遵循特定規(guī)則將該文件分成多個(gè)較小的數(shù)據(jù)包。
這些單獨(dú)的數(shù)據(jù)包可以通過不同的路由到達(dá)目標(biāo) IP 地址。它們可能以不同的順序到達(dá)、重復(fù)或根本沒有到達(dá)。
當(dāng)它們被接收時(shí),接收方將確認(rèn)發(fā)送回發(fā)送方。基本上,他們收到的是數(shù)據(jù)的數(shù)據(jù)包。如果一個(gè)數(shù)據(jù)包沒有到達(dá),發(fā)送方將重新發(fā)送丟失的數(shù)據(jù)包。
最終,TCP 保證所有數(shù)據(jù)包都將到達(dá)。當(dāng)他們這樣做時(shí),協(xié)議指定了接收方可以重組數(shù)據(jù)包,以從發(fā)送方分割文件的方式。
HTTP
具體來說,當(dāng)您瀏覽網(wǎng)頁時(shí),您可能正在使用超文本傳輸協(xié)議 (HTTP)。這是專為網(wǎng)頁和豐富格式設(shè)計(jì)的 TCP/IP 子集。
超文本文件可以鏈接在一起并包含嵌入其中的媒體。當(dāng)您在 Web 上查看超文本標(biāo)記語言 (HTML) 頁面時(shí),您的瀏覽器正在使用 HTTP 與網(wǎng)站服務(wù)器進(jìn)行通信。
瀏覽器是允許您的計(jì)算機(jī)呈現(xiàn)這些 HTML 頁面和瀏覽網(wǎng)絡(luò)的軟件。
互聯(lián)網(wǎng) != 網(wǎng)絡(luò)
這一切都把我們帶到了一個(gè)重要的點(diǎn)。
盡管我們?cè)趯?duì)話中可以互換使用它們,但網(wǎng)絡(luò)和互聯(lián)網(wǎng)并不是一回事。
互聯(lián)網(wǎng)是指世界上所有連接設(shè)備的網(wǎng)絡(luò)協(xié)議。IP 地址和數(shù)據(jù)包路由是計(jì)算機(jī)之間所有連接通信的基礎(chǔ)。互聯(lián)網(wǎng)協(xié)議的前身自 1970 年代就已存在。
萬維網(wǎng)是 Tim Berners-Lee 在 1980 年代和 90 年代發(fā)明的。它是以 HTML 呈現(xiàn)并通過 HTTP 規(guī)則進(jìn)行通信的網(wǎng)站。網(wǎng)絡(luò)建立在互聯(lián)網(wǎng)之上,它只是互聯(lián)網(wǎng)功能的一個(gè)子集。
把它們放在一起
那么,我的電腦如何連接到github.com
?
我的電腦和 GitHub 的服務(wù)器都有互聯(lián)網(wǎng)協(xié)議地址
我的電腦在域名系統(tǒng)中查找GitHub的IP地址
兩臺(tái)計(jì)算機(jī)使用傳輸控制協(xié)議建立連接
使用 TCP,我們以數(shù)據(jù)包的形式來回發(fā)送數(shù)據(jù),在數(shù)據(jù)包到達(dá)時(shí)確認(rèn)收到數(shù)據(jù)包
具體來說,我們的計(jì)算機(jī)遵循 TCP/IP 規(guī)則的子集,稱為超文本傳輸協(xié)議,允許我們交換豐富的網(wǎng)頁信息
GitHub 的響應(yīng)包括超文本標(biāo)記語言 (HTML),我計(jì)算機(jī)上的瀏覽器軟件知道如何呈現(xiàn)
在圖片中
將數(shù)據(jù)包發(fā)送到 GitHub。
具體來說,請(qǐng)求是獲取主頁。
DNS 查找 IP 地址,TCP/IP 幫助將請(qǐng)求路由到正確的目的地。
GitHub 確認(rèn)該請(qǐng)求,并且其服務(wù)器生成回復(fù)給我。
響應(yīng)使用超文本傳輸協(xié)議,并包括超文本標(biāo)記語言。
數(shù)據(jù)包以各種方式路由回我的計(jì)算機(jī),同樣使用 TCP。
總結(jié)
所有這一切還有更多的方法。這篇文章是一個(gè)簡(jiǎn)化的、快樂的路徑示例,說明如何通過 Internet 進(jìn)行連接。
如果你喜歡我的文章,點(diǎn)贊,關(guān)注,轉(zhuǎn)發(fā)!