一文教你了解TCP/IP協(xié)議
又到了金三銀四的時(shí)間,阿粉也是有點(diǎn)蠢蠢欲動(dòng),想要準(zhǔn)備面試一下,檢驗(yàn)一下自己的工作水平了,于是阿粉就開始了改改簡歷,然后想著準(zhǔn)備面試一下,結(jié)果在面試的第一家就遭遇了滑鐵盧,直接是涼涼收尾。為什么呢?那就是面試官按著協(xié)議就開始懟,HTTP協(xié)議、TCP/IP協(xié)議、SSL協(xié)議、MQTT協(xié)議,反正就是各種懟,導(dǎo)致阿粉就不得不好好看看這些協(xié)議的內(nèi)容。阿粉今天就給大家分析一下這個(gè)TCP協(xié)議。
什么是TCP/IP協(xié)議
TCP/IP協(xié)議,中文名傳輸控制協(xié)議。是指能夠在多個(gè)不同網(wǎng)絡(luò)間實(shí)現(xiàn)信息傳輸?shù)膮f(xié)議簇。
如果你覺得 TCP/IP 協(xié)議只是指的TCP和IP鞋油的話,那么阿粉就得給你安排一下了,TCP/IP 協(xié)議不僅僅指的是 TCP 和 IP 兩個(gè)協(xié)議,而是指一個(gè)由 FTP、SMTP、TCP、UDP、IP 等協(xié)議構(gòu)成的協(xié)議簇, 只是因?yàn)樵?TCP/IP 協(xié)議中 TCP 協(xié)議和IP協(xié)議最具代表性,所以被稱為 TCP/IP 協(xié)議。
也就是說,TCP/IP 協(xié)議是由很多構(gòu)成的,而不僅僅是 TCP 和 IP 這兩塊的內(nèi)容。
TCP/IP協(xié)議的組成
在上面阿粉已經(jīng)把圖給大家放到了上面,實(shí)際上圖中已經(jīng)給大家畫出來這個(gè)TCP協(xié)議的分層了,實(shí)際上TCP/IP傳輸協(xié)議是嚴(yán)格來說是一個(gè)四層的體系結(jié)構(gòu),應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層都包含其中。
而根據(jù)OSI參考模型的分類,又有很多人稱他為七層,而不同的層級(jí)又分別對(duì)應(yīng)不同的內(nèi)容。
實(shí)際上OSI七層模型中 應(yīng)用層,表示層,會(huì)話層,對(duì)應(yīng)的都是四層模型中的應(yīng)用層,因?yàn)閼?yīng)用層、表示層、會(huì)話層三個(gè)層次提供的服務(wù)相差不是很大,所以都給他合并了。
而數(shù)據(jù)鏈路層和物理層都是歸屬于網(wǎng)絡(luò)接口層,又稱之為鏈路層。這是因?yàn)閿?shù)據(jù)鏈路層和物理層的內(nèi)容相差不多,所以在TCP/IP協(xié)議中它們被歸并在網(wǎng)絡(luò)接口層(鏈路層)一個(gè)層次里。
TCP/IP協(xié)議分層介紹
分層既然都是四層了,我們就來分別的介紹一下這四層都是代表了什么,以及他們主要完成的功能情況。
自上而下:
1. 應(yīng)用層
應(yīng)用層是TCP/IP協(xié)議的第一層,是直接為應(yīng)用進(jìn)程提供服務(wù)的。
- 加密、解密、格式化數(shù)據(jù).
- 可以建立或解除與其他節(jié)點(diǎn)的聯(lián)系,這樣可以充分節(jié)省網(wǎng)絡(luò)資源.
- 對(duì)不同種類的應(yīng)用程序它們會(huì)根據(jù)自己的需要來使用應(yīng)用層的不同協(xié)議,郵件傳輸應(yīng)用使用了SMTP協(xié)議、萬維網(wǎng)應(yīng)用使用了HTTP協(xié)議、遠(yuǎn)程登錄服務(wù)應(yīng)用使用了有TELNET協(xié)議.
2. 運(yùn)輸層
運(yùn)輸層也有人喜歡稱之為傳輸層,實(shí)際上就是提供了進(jìn)程間的邏輯通信,運(yùn)輸層向高層用戶屏蔽了下面網(wǎng)絡(luò)層的核心細(xì)節(jié),使應(yīng)用程序看起來像是在兩個(gè)運(yùn)輸層實(shí)體之間有一條端到端的邏輯通信信道。
而傳輸層包含了兩部分的協(xié)議:
- TCP(傳輸控制協(xié)議):應(yīng)用程序之間通信
- UDP(用戶數(shù)據(jù)報(bào)協(xié)議):應(yīng)用程序之間的簡單通信
作用都是用來在程序之間通信的,但是 UDP 相對(duì)于 TCP 來說,是不具備可靠性的。
UDP只是做了運(yùn)輸協(xié)議能夠做的最少工作,除了復(fù)用/分解功能及少數(shù)的差錯(cuò)檢驗(yàn)外,它幾乎沒有對(duì)ip增加別的東西。
既然說 TCP 相對(duì)于 UDP 協(xié)議來說,他是具備可靠性的,那么為什么他是可靠的呢?
TCP可靠性來自于:
- 當(dāng)TCP發(fā)送一個(gè)段之后,啟動(dòng)一個(gè)定時(shí)器,等待目的點(diǎn)確認(rèn)收到報(bào)文,如果不能及時(shí)收到一個(gè)確認(rèn),將重發(fā)這個(gè)報(bào)文。
- 當(dāng)TCP收到連接端發(fā)來的數(shù)據(jù),就會(huì)推遲幾分之一秒發(fā)送一個(gè)確認(rèn)。
- TCP將保持它首部和數(shù)據(jù)的檢驗(yàn)和,這是一個(gè)端對(duì)端的檢驗(yàn)和,目的在于檢測數(shù)據(jù)在傳輸過程中是否發(fā)生變化。(有錯(cuò)誤,就不確認(rèn),發(fā)送端就會(huì)重發(fā))
- TCP是以IP報(bào)文來傳送,IP數(shù)據(jù)是無序的,TCP收到所有數(shù)據(jù)后進(jìn)行排序,再交給應(yīng)用層
- IP數(shù)據(jù)報(bào)會(huì)重復(fù),所以TCP會(huì)去重
- TCP能提供流量控制,TCP連接的每一個(gè)地方都有固定的緩沖空間。TCP的接收端只允許另一端發(fā)送緩存區(qū)能接納的數(shù)據(jù)。
而 UDP 不可靠的因素則是:
- 不保證消息交付:不確認(rèn),不重傳,無超時(shí)
- 不保證交付順序:不設(shè)置包序號(hào),不重排,不會(huì)發(fā)生隊(duì)首阻塞
- 不跟蹤連接狀態(tài):不必建立連接或重啟狀態(tài)機(jī)
- 不需要擁塞控制:不內(nèi)置客戶端或網(wǎng)絡(luò)反饋機(jī)制
既然 UDP 都是不可靠的了,那么為什么還有人是用呢?
其實(shí)最主要的原因有幾點(diǎn):
第一,UDP 協(xié)議簡單,在使用 TCP 協(xié)議傳輸數(shù)據(jù)時(shí),如果一個(gè)數(shù)據(jù)段丟失或者接收端對(duì)某個(gè)數(shù)據(jù)段沒有確認(rèn),發(fā)送端會(huì)重新發(fā)送該數(shù)據(jù)段,而 TCP 重新發(fā)送數(shù)據(jù)會(huì)帶來傳輸延遲和重復(fù)數(shù)據(jù),降低了用戶的體驗(yàn),而 UDP 協(xié)議雖然不能保證這個(gè)數(shù)據(jù)傳輸?shù)拇_認(rèn),但是他能數(shù)據(jù)丟失呀(強(qiáng)行解釋他的low,阿粉都有點(diǎn)無地自容),實(shí)際上就是這樣,因?yàn)橛脩舻捏w驗(yàn),結(jié)果只能犧牲掉消息可靠性了,丟了就丟了,我為了用戶體驗(yàn),我不要了,這種方式切記,寫代碼的時(shí)候絕對(duì)不可取。
第二,UDP適合于實(shí)時(shí)數(shù)據(jù)傳輸,如語音和視頻通信,因?yàn)樗鼈兗词古紶杹G失一兩個(gè)數(shù)據(jù)包,也不會(huì)對(duì)接收結(jié)果產(chǎn)生太大影響,就比如早期的QQ,是用的就是 UDP 的協(xié)議。
3. 網(wǎng)絡(luò)層
網(wǎng)絡(luò)層在TCP/IP協(xié)議中的位于第三層。在TCP/IP協(xié)議中網(wǎng)絡(luò)層可以進(jìn)行網(wǎng)絡(luò)連接的建立和終止以及IP地址的尋找等功能。實(shí)際上網(wǎng)絡(luò)層是為運(yùn)輸層提供服務(wù)的,傳送的協(xié)議數(shù)據(jù)單元稱為數(shù)據(jù)包或分組。
(1) 而網(wǎng)絡(luò)層協(xié)議的代表包括:IP、IPX、RIP、OSPF等
我們以經(jīng)典的 IP 協(xié)議為例:
- 規(guī)定網(wǎng)絡(luò)地址的協(xié)議叫ip協(xié)議,它定義的地址稱之為ip地址,廣泛采用的v4版本即ipv4,它規(guī)定網(wǎng)絡(luò)地址由32位2進(jìn)制表示
- 范圍0.0.0.0-255.255.255.255
- 一個(gè)ip地址通常寫成四段十進(jìn)制數(shù),例:172.16.10.1
(2) IP地址分類
IP地址根據(jù)網(wǎng)絡(luò)ID的不同分為5種類型,A類地址、B類地址、C類地址、D類地址和E類地址。
- A類IP地址 地址范圍從1.0.0.0 到126.0.0.0
- B類IP地址 地址范圍從128.0.0.0到191.255.255.255
- C類IP地址 范圍從192.0.0.0到223.255.255.255
- D類地址用于多點(diǎn)廣播(Multicast)
一般這些內(nèi)容都是在我們學(xué)計(jì)算機(jī)基礎(chǔ)的時(shí)候就學(xué)到的 IP 協(xié)議的地址取值范圍。
而 IP 地址的主要作用就是:
- 尋址與路由
- 分段與重組
4. 網(wǎng)絡(luò)接口層
網(wǎng)絡(luò)接口層在 TCP/IP 協(xié)議中,網(wǎng)絡(luò)接口層位于第四層。由于網(wǎng)絡(luò)接口層兼并了物理層和數(shù)據(jù)鏈路層所以,網(wǎng)絡(luò)接口層既是傳輸數(shù)據(jù)的物理媒介,也可以為網(wǎng)絡(luò)層提供一條準(zhǔn)確無誤的線路。
網(wǎng)絡(luò)接口層在發(fā)送端將上層的IP數(shù)據(jù)報(bào)封裝成幀后發(fā)送到網(wǎng)絡(luò)上;數(shù)據(jù)幀通過網(wǎng)絡(luò)到達(dá)接收端時(shí),該結(jié)點(diǎn)的網(wǎng)絡(luò)接口層對(duì)數(shù)據(jù)幀拆封,并檢查幀中包含的MAC地址。如果該地址就是本機(jī)的MAC地址或者是廣播地址,則上傳到網(wǎng)絡(luò)層,否則丟棄該幀。
其實(shí)阿粉覺得網(wǎng)絡(luò)接口層實(shí)際上就是相當(dāng)于一個(gè)網(wǎng)卡的功能,數(shù)據(jù)包從一個(gè)網(wǎng)卡到另一個(gè)網(wǎng)卡一樣。
而這些協(xié)議,其實(shí)往往都是靠個(gè)人理解,有些人喜歡交數(shù)據(jù)鏈路層,有些人喜歡叫網(wǎng)絡(luò)接口層,只能說個(gè)人喜好吧,到時(shí)候面試的時(shí)候,就看你的表現(xiàn)了。