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