hello牺弹,大家好腕侄,最近老大“生動形象”地給俺講了這個,那么就來look look订雾,它到底是個什么玩意兒肢预。
背景知識
大家最熟悉的internet是一張巨大的計算機網(wǎng)絡(luò)。家庭用戶端系統(tǒng)構(gòu)成小型家庭網(wǎng)絡(luò)洼哎,借助電話網(wǎng)絡(luò)烫映,有線電視網(wǎng)絡(luò)等接入?yún)^(qū)域或者本地ISP(服務(wù)提供商,Internet Service Provider)噩峦。企業(yè)網(wǎng)絡(luò)锭沟,校園網(wǎng)等建成一定的局域網(wǎng),再接入各區(qū)域或者本地ISP识补。
區(qū)域或本地ISP再與更大規(guī)模的國家級ISP互連族淮,國家級ISP再互連其他國家級ISP或全球性ISP,從而實現(xiàn)了全球所有ISP網(wǎng)絡(luò)的互連凭涂,進而實現(xiàn)全球性端系統(tǒng)的互連祝辣。
Internet中互相連接的端系統(tǒng),分組交換設(shè)備(它可以實現(xiàn)數(shù)據(jù)分組的接收和轉(zhuǎn)發(fā)切油,是構(gòu)成Internet的重要基礎(chǔ)蝙斜,最典型的就是路由器和交換機)或者其他的網(wǎng)絡(luò)設(shè)備在進行信息發(fā)送,接收或轉(zhuǎn)發(fā)的過程中澎胡,都會遵循一些規(guī)則或者約定孕荠,即網(wǎng)絡(luò)協(xié)議。
通信鏈路互連主機好網(wǎng)絡(luò)設(shè)備只是構(gòu)建計算機網(wǎng)絡(luò)的硬件基礎(chǔ)攻谁,僅僅有硬件還不足以完成通信實體間進行數(shù)據(jù)交換岛琼。就好像道路交通系統(tǒng),建好了路巢株,建好了路牌,綠地熙涤,這只是具備了交通系統(tǒng)的硬件條件阁苞,還必須有紅綠燈和交通標志及交通規(guī)則,路上行駛的人和車輛都需要遵循這些規(guī)則祠挫。計算機網(wǎng)絡(luò)中的實體也需要遵循一定的規(guī)則和約定那槽,即網(wǎng)絡(luò)協(xié)議。
我們經(jīng)常會聽到很多協(xié)議的技術(shù)性名詞等舔,比如http骚灸,tcp,ip慌植,udp甚牲,arp等等义郑,這些都是協(xié)議。
協(xié)議的三大要素:
(1)語法:語法定義我們之間交流交換信息的格式和結(jié)構(gòu)丈钙。
(2)語義:語義是定義我們之間交換的信息中哪些需要發(fā)送(或者包含哪些控制信息)非驮,還有這些信息的含義;以及針對不同含義的控制信息雏赦,該如何響應(yīng)劫笙。有的協(xié)議還需要進行差錯檢測,語義還可以定義采用什么差錯編碼星岗,及采取什么差錯處理機制等等填大。
(3)時序:定義了實體之間,交換信息的順序及如何匹配或者適應(yīng)對方的速度俏橘。
我抽象并實例了下:
我和另外一個人屬于不同的個體允华,我們都是獨一無二的。有一天我們需要交流:語法則定義我們該如何交流敷矫?同屬中國當(dāng)然使用chinese例获,不同國家不同人種呢,怎么交流曹仗。語義則定義了我們可以交流哪些內(nèi)容榨汤?這些內(nèi)容是什么意思?還是話里有話怎茫?我講這句話的含義是什么收壕?心情是好是壞?對方應(yīng)該怎么回復(fù)我轨蛤?比如我問你吃飯了嗎蜜宪,你可以回吃過了或者還沒吃,但是卻不能回答祥山,我在看電視圃验。我們交流的時候出現(xiàn)了問題如何解決?是什么原因?qū)е碌姆炫唬空Z言不通還是文化差異澳窑?該怎么解決?時序則定義了供常,我們交流的時候摊聋,誰先講?等等
傳輸控制協(xié)議之TCP
TCP(傳輸控制協(xié)議)是Internet的一個重要的傳輸層協(xié)議栈暇。應(yīng)用程序在使用TCP之前麻裁,必須先建立TCP連接;數(shù)據(jù)傳輸之后,必須釋放已經(jīng)建立的TCP連接煎源。TCP提供可靠的數(shù)據(jù)交付服務(wù)色迂,即通過TCP傳輸?shù)臄?shù)據(jù),是無差錯的薪夕,無丟失的脚草,無重復(fù)的且按序到達的。
TCP連接建立的“三次握手”
TCP連接建立必須經(jīng)過“三次握手”的過程原献。
當(dāng)客戶端需要去建立連接時馏慨,客戶端就會向服務(wù)器發(fā)送連接請求段。稱之為第一次握手姑隅。
一旦包含著客戶端的請求段包到達服務(wù)器端写隶,如同意連接,將發(fā)回確認報文段讲仰,稱之為第二次握手慕趴。
而在客戶端收到來自服務(wù)器的同意連接的報文段之后,會再次向服務(wù)器端發(fā)送確認報文段(第三次握手)鄙陡,這段報文是對服務(wù)器的同意連接報文段進行確認冕房。一旦完成“三次握手”,客戶端和服務(wù)器端就可以相互發(fā)送包含數(shù)據(jù)的報文段了趁矾。
到這里耙册,會有一個疑問,為什么TCP不采用二次握手建立連接毫捣,而一定要通過三次握手建立連接呢详拙?之所以是三次,是為了確保連接雙方彼此都完全清楚對方目前所處的狀態(tài)(比如初始的序列號或者接收窗口的大新)饶辙,從而保證穩(wěn)定,可靠的連接斑粱。三次握手建立連接還可以預(yù)防 過期的弃揽,失效的連接信息或者請求到達對方那之后建立了無效的連接。
因為網(wǎng)絡(luò)傳輸中存在數(shù)據(jù)的丟失则北,假如采用二次握手建立連接:在第一次連接請求到達之后蹋宦,第二次握手控制端可能丟失,這樣主動發(fā)起連接的一方就沒有收到第二次握手控制段咒锻,則無法建立連接。但是接收連接的一方可能認為連接已經(jīng)建立守屉,就會出現(xiàn)無效連接惑艇。
抽象出來理解就是:
客戶端需要和服務(wù)器連接。第一次握手則是發(fā)出連接請求,但此時客戶端并不知道服務(wù)器的初始狀態(tài)滨巴。第二次握手則是在服務(wù)器收到請求之后思灌,發(fā)出了同意信息返回給客戶端。這時如果第二次握手響應(yīng)信息控制段在傳輸?shù)倪^程中丟失(不要問為什么第一次握手不會出現(xiàn)丟失信息恭取,因為假如丟失了泰偿,后面也不會有任何故事了。蜈垮。耗跛。)假如采用二次握手連接的方式,這時第二次握手段丟失了攒发,客戶端沒有收到信息调塌,狀態(tài)隨時可能發(fā)生改變,連接時不穩(wěn)定的惠猿,服務(wù)器以為客戶端是正常的羔砾,就開始發(fā)送數(shù)據(jù),是極其不安全和不穩(wěn)定的偶妖,會出現(xiàn)差錯姜凄。而當(dāng)客戶端收到第二次握手的信息之后,知道經(jīng)過了同意可以連接趾访,并且服務(wù)器的狀態(tài)是正常的态秧,可以連接,那么此時我的狀態(tài)也是穩(wěn)定的腹缩,我需要再服務(wù)器那邊知道屿聋,我此時的狀態(tài)是穩(wěn)定的,完全可以進行數(shù)據(jù)傳輸和連接藏鹊,那么再將客戶端確認連接的通知發(fā)送給服務(wù)器端润讥,服務(wù)器端收到第三次握手的信息之后,方可進行完全的盘寡,安全的信息連接和傳輸楚殿。
今天的學(xué)習(xí)到這里結(jié)束了,只是很淺顯的進行了介紹竿痰,計算機世界的知識無窮無盡脆粥,窮其一生,也無法窺探其真實影涉。