前言:TCP/IP協(xié)議并不是單純的倆個(gè)協(xié)議,而是一個(gè)很大的協(xié)議棧的總稱。TCP/IP 協(xié)議棧是構(gòu)成網(wǎng)絡(luò)通信的核心骨架,它定義了電子設(shè)備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間進(jìn)行傳輸。TCP/IP 協(xié)議采用4層結(jié)構(gòu),分別是應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和鏈路層,每一層都呼叫它的下一層所提供的協(xié)議來(lái)完成自己的需求。下面我們來(lái)看TCP/IP的四層結(jié)構(gòu)。網(wǎng)絡(luò)協(xié)議有OSI七層協(xié)議和TCP/IP四層協(xié)議,還有一個(gè)五層協(xié)議,其實(shí)四層協(xié)議可以看做是七層協(xié)議的簡(jiǎn)化版。 一、TCP/IP整體概念1.1物理介質(zhì)物理介質(zhì)就是把電腦連接起來(lái)的物理手段,常見的有光纖、雙絞線,以及無(wú)線電波,它決定了電信號(hào)(0和1)的傳輸方式,物理介質(zhì)的不同決定了電信號(hào)的傳輸帶寬、速率、傳輸距離以及抗干擾性等等。TCP/IP協(xié)議棧分為四層,每一層都由特定的協(xié)議與對(duì)方進(jìn)行通信,而協(xié)議之間的通信最終都要轉(zhuǎn)化為 0 和 1 的電信號(hào),通過(guò)物理介質(zhì)進(jìn)行傳輸才能到達(dá)對(duì)方的電腦,因此物理介質(zhì)是網(wǎng)絡(luò)通信的基石。 下面我們先通過(guò)一張圖先來(lái)大概了解一下TCP/IP協(xié)議的基本框架以及數(shù)據(jù)的處理流程: 當(dāng)通過(guò)http發(fā)起一個(gè)請(qǐng)求時(shí),應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和鏈路層的相關(guān)協(xié)議依次對(duì)該請(qǐng)求進(jìn)行包裝并攜帶對(duì)應(yīng)的首部,最終在鏈路層生成以太網(wǎng)數(shù)據(jù)包,以太網(wǎng)數(shù)據(jù)包通過(guò)物理介質(zhì)傳輸給對(duì)方主機(jī),對(duì)方接收到數(shù)據(jù)包以后,然后再一層一層采用對(duì)應(yīng)的協(xié)議進(jìn)行拆包,最后把應(yīng)用層數(shù)據(jù)交給應(yīng)用程序處理。 網(wǎng)絡(luò)通信就好比送快遞,商品外面的一層層包裹就是各種協(xié)議,協(xié)議包含了商品信息、收貨地址、收件人、聯(lián)系方式等,然后還需要配送車、配送站、快遞員,商品才能最終到達(dá)用戶手中。 一般情況下,快遞是不能直達(dá)的,需要先轉(zhuǎn)發(fā)到對(duì)應(yīng)的配送站,然后由配送站再進(jìn)行派件。 配送車就是物理介質(zhì),配送站就是網(wǎng)關(guān), 快遞員就是路由器,收貨地址就是IP地址,聯(lián)系方式就是MAC地址。 快遞員負(fù)責(zé)把包裹轉(zhuǎn)發(fā)到各個(gè)配送站,配送站根據(jù)收獲地址里的省市區(qū),確認(rèn)是否需要繼續(xù)轉(zhuǎn)發(fā)到其他配送站,當(dāng)包裹到達(dá)了目標(biāo)配送站以后,配送站再根據(jù)聯(lián)系方式找到收件人進(jìn)行派件。 1.2鏈路層網(wǎng)絡(luò)通信就是把有特定意義的數(shù)據(jù)通過(guò)物理介質(zhì)傳送給對(duì)方,單純的發(fā)送 0 和 1 是沒有意義的,要傳輸有意義的數(shù)據(jù),就需要以字節(jié)為單位對(duì) 0 和 1 進(jìn)行分組,并且要標(biāo)識(shí)好每一組電信號(hào)的信息特征,然后按照分組的順序依次發(fā)送。以太網(wǎng)規(guī)定一組電信號(hào)就是一個(gè)數(shù)據(jù)包,一個(gè)數(shù)據(jù)包被稱為一幀, 制定這個(gè)規(guī)則的協(xié)議就是以太網(wǎng)協(xié)議。 以太網(wǎng)規(guī)協(xié)議定,接入網(wǎng)絡(luò)的設(shè)備都必須安裝網(wǎng)絡(luò)適配器,即網(wǎng)卡, 數(shù)據(jù)包必須是從一塊網(wǎng)卡傳送到另一塊網(wǎng)卡。而網(wǎng)卡地址就是數(shù)據(jù)包的發(fā)送地址和接收地址,也就是幀首部所包含的MAC地址,MAC地址是每塊網(wǎng)卡的身份標(biāo)識(shí),就如同我們身份證上的身份證號(hào)碼,具有全球唯一性。 有了MAC地址以后,以太網(wǎng)采用廣播形式,把數(shù)據(jù)包發(fā)給該子網(wǎng)內(nèi)所有主機(jī),子網(wǎng)內(nèi)每臺(tái)主機(jī)在接收到這個(gè)包以后,都會(huì)讀取首部里的目標(biāo)MAC地址,然后和自己的MAC地址進(jìn)行對(duì)比,如果相同就做下一步處理,如果不同,就丟棄這個(gè)包。 所以鏈路層的主要工作就是對(duì)電信號(hào)進(jìn)行分組并形成具有特定意義的數(shù)據(jù)幀,然后以廣播的形式通過(guò)物理介質(zhì)發(fā)送給接收方。 1.3網(wǎng)絡(luò)層對(duì)于上面的過(guò)程,肯定會(huì)產(chǎn)生下面幾個(gè)疑問(wèn):
為了解決這些問(wèn)題,網(wǎng)絡(luò)層引入了三個(gè)協(xié)議,分別是IP協(xié)議、ARP協(xié)議、路由協(xié)議。IP協(xié)議制定了IP地址來(lái)判斷倆個(gè)主機(jī)是否屬于同一個(gè)子網(wǎng)。ARP協(xié)議根據(jù)IP地址獲取MAC地址。路由協(xié)議根據(jù)信道情況,選擇并設(shè)定路由,以最佳路徑來(lái)轉(zhuǎn)發(fā)數(shù)據(jù)包。 所以,網(wǎng)絡(luò)層的主要工作是定義網(wǎng)絡(luò)地址,區(qū)分網(wǎng)段,子網(wǎng)內(nèi)MAC尋址,對(duì)于不同子網(wǎng)的數(shù)據(jù)包進(jìn)行路由。 1.4傳輸層鏈路層定義了主機(jī)的身份,即MAC地址, 而網(wǎng)絡(luò)層定義了IP地址,明確了主機(jī)所在的網(wǎng)段,有了這兩個(gè)地址,數(shù)據(jù)包就從可以從一個(gè)主機(jī)發(fā)送到另一臺(tái)主機(jī)。但實(shí)際上數(shù)據(jù)包是從一個(gè)主機(jī)的某個(gè)應(yīng)用程序發(fā)出,然后由對(duì)方主機(jī)的應(yīng)用程序(進(jìn)程)接收。而每臺(tái)電腦都有可能同時(shí)運(yùn)行著很多個(gè)應(yīng)用程序(進(jìn)程),所以當(dāng)數(shù)據(jù)包被發(fā)送到主機(jī)上以后,是無(wú)法確定哪個(gè)應(yīng)用程序(進(jìn)程)要接收這個(gè)包。傳輸層提供了進(jìn)程間的邏輯通信,傳輸層向高層用戶屏蔽了下面網(wǎng)絡(luò)層的核心細(xì)節(jié),使應(yīng)用程序看起來(lái)像是在兩個(gè)傳輸層實(shí)體之間有一條端到端的邏輯通信信道。 1.5應(yīng)用層理論上講,有了以上三層協(xié)議的支持,數(shù)據(jù)已經(jīng)可以從一個(gè)主機(jī)上的應(yīng)用程序傳輸?shù)搅硪慌_(tái)主機(jī)的應(yīng)用程序了,但此時(shí)傳過(guò)來(lái)的數(shù)據(jù)是字節(jié)流,不能很好的被程序識(shí)別,操作性差。因此,應(yīng)用層定義了各種各樣的協(xié)議來(lái)規(guī)范數(shù)據(jù)格式,常見的有 HTTP、FTP、SMTP 等。 1.6四層協(xié)議整體流程鏈路層:對(duì)0和1進(jìn)行分組,定義數(shù)據(jù)幀,確認(rèn)主機(jī)的物理地址,傳輸數(shù)據(jù);網(wǎng)絡(luò)層:定義IP地址,確認(rèn)主機(jī)所在的網(wǎng)絡(luò)位置,并通過(guò)IP進(jìn)行MAC尋址,對(duì)外網(wǎng)數(shù)據(jù)包進(jìn)行路由轉(zhuǎn)發(fā);傳輸層:定義端口,確認(rèn)主機(jī)上應(yīng)用程序的身份,并將數(shù)據(jù)包交給對(duì)應(yīng)的應(yīng)用程序;應(yīng)用層:定義數(shù)據(jù)格式,并按照對(duì)應(yīng)的格式解讀數(shù)據(jù)。 用一句話來(lái)概括就是:當(dāng)你輸入一個(gè)網(wǎng)址并按下回車鍵的時(shí)候,首先,應(yīng)用層協(xié)議對(duì)該請(qǐng)求包做了格式定義;緊接著傳輸層協(xié)議加上了雙方的端口號(hào),確認(rèn)了雙方通信的應(yīng)用程序;然后網(wǎng)絡(luò)協(xié)議加上了雙方的IP地址,確認(rèn)了雙方的網(wǎng)絡(luò)位置;最后鏈路層協(xié)議加上了雙方的MAC地址,確認(rèn)了雙方的物理位置,同時(shí)將數(shù)據(jù)進(jìn)行分組,形成數(shù)據(jù)幀,采用廣播方式,通過(guò)傳輸介質(zhì)發(fā)送給對(duì)方主機(jī)。而對(duì)于不同網(wǎng)段,該數(shù)據(jù)包首先會(huì)轉(zhuǎn)發(fā)給網(wǎng)關(guān)路由器,經(jīng)過(guò)多次轉(zhuǎn)發(fā)后,最終被發(fā)送到目標(biāo)主機(jī)。目標(biāo)機(jī)接收到數(shù)據(jù)包后,采用對(duì)應(yīng)的協(xié)議,對(duì)幀數(shù)據(jù)進(jìn)行組裝,然后再通過(guò)一層一層的協(xié)議進(jìn)行解析,最終被應(yīng)用層的協(xié)議解析并交給服務(wù)器處理。 二、傳輸層傳輸層(Transport Layer)是ISO OSI協(xié)議的第四層協(xié)議,實(shí)現(xiàn)端到端的數(shù)據(jù)傳輸。該層是兩臺(tái)計(jì)算機(jī)經(jīng)過(guò)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)通信時(shí),第一個(gè)端到端的層次,具有緩沖作用。當(dāng)網(wǎng)絡(luò)層服務(wù)質(zhì)量不能滿足要求時(shí),它將服務(wù)加以提高,以滿足高層的要求;當(dāng)網(wǎng)絡(luò)層服務(wù)質(zhì)量較好時(shí),它只用很少的工作。傳輸層還可進(jìn)行復(fù)用,即在一個(gè)網(wǎng)絡(luò)連接上創(chuàng)建多個(gè)邏輯連接。 傳輸層在終端用戶之間提供透明的數(shù)據(jù)傳輸,向上層提供可靠的數(shù)據(jù)傳輸服務(wù)。傳輸層在給定的鏈路上通過(guò)流量控、分段/重組和差錯(cuò)控制。一些協(xié)議是面向鏈接的。這就意味著傳輸層能保持對(duì)分段的跟蹤,并且重傳那些失敗的分段。
多路分解與復(fù)用
2.1用戶數(shù)據(jù)報(bào)協(xié)議UDP端到端的、盡力而為的、無(wú)連接的數(shù)據(jù)報(bào)傳輸服務(wù) 1.無(wú)連接的 2.盡最大努力交付,即不保證可靠交付 3.面向報(bào)文的(在IP的功能上簡(jiǎn)單擴(kuò)展了端到端) 4.沒有擁塞控制 5.支持一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多的交互通信(需要組播的通信都是建立在UDP之上) 2.2傳輸控制協(xié)議TCP端到端的、可靠的、面向連接的字節(jié)流服務(wù) a).面向連接:先建立邏輯連接,進(jìn)行雙向數(shù)據(jù)流傳輸,通信結(jié)束后撤銷連接 b).面向字節(jié)流 c).點(diǎn)對(duì)點(diǎn)的全雙工通信 d).可靠傳輸:對(duì)一個(gè)連接上傳輸?shù)拿總€(gè)字節(jié)編號(hào),通過(guò)接收確認(rèn)和重傳來(lái)保證可靠傳輸 c).流量控制:防止發(fā)送方發(fā)出的數(shù)據(jù)超出接收方的接收能力。 多路復(fù)用:源、目的端口 連接管理:序號(hào)、確認(rèn)號(hào)、SYN、FIN 可靠傳輸:序號(hào)、確認(rèn)號(hào) 流量控制:接收窗口 擁塞控制:未在TCP首部中體現(xiàn)(序號(hào)、確認(rèn)號(hào)、接收窗口)。 2.3連接管理
1)TCP連接建立的目的 ①使通信雙方確知對(duì)方的存在 ②雙方確定自己的初始序列號(hào),并通知對(duì)方 ③允許雙方協(xié)商一些參數(shù)(最大報(bào)文長(zhǎng)度、窗口大小等) ④對(duì)傳輸實(shí)體資源進(jìn)行分配 2)TCP連接建立的方式 采用客戶端服務(wù)器方式(C/S),主動(dòng)發(fā)起連接建立的應(yīng)用進(jìn)程叫做客戶端,被動(dòng)等待連接建立的叫服務(wù)器端。 3)連接建立(三次握手) ①服務(wù)器進(jìn)程B被動(dòng)打開連接,進(jìn)入LISTEN(收聽)狀態(tài),等待客戶端發(fā)出請(qǐng)求 ②客戶進(jìn)程A主動(dòng)打開連接,向B發(fā)送連接請(qǐng)求報(bào)文段(報(bào)文段不挾帶數(shù)據(jù)),SYN=1,序號(hào)=x,進(jìn)入SYN-SENT(同步已發(fā)送)狀態(tài) ③服務(wù)器進(jìn)程B收到請(qǐng)求后,向A發(fā)送確認(rèn)報(bào)文段(報(bào)文段不挾帶數(shù)據(jù)),SYN=1,ACK=1,確認(rèn)號(hào)=x+1,序號(hào)=y,進(jìn)入SYN-RCVD(同步收到)狀態(tài) ④客戶進(jìn)程A收到確認(rèn)后,向B發(fā)送確認(rèn)報(bào)文段(報(bào)文段可以攜帶數(shù)據(jù),不攜帶數(shù)據(jù)時(shí)不消耗序號(hào),下一個(gè)序號(hào)依然是x+1),ACK=1,確認(rèn)號(hào)=y+1,序號(hào)=x+1,進(jìn)入ESTABLISHED(已建立連接)狀態(tài),B收到確認(rèn)后,也進(jìn)入ESTABLISHED狀態(tài) 為什么A需要向B發(fā)送最后一個(gè)確認(rèn)報(bào)文段:為了防止“已失效的連接請(qǐng)求報(bào)文段”突然又傳到B發(fā)生錯(cuò)誤,以至于B一直等待A發(fā)送數(shù)據(jù),B的資源被浪費(fèi)。 4)連接釋放(四次揮手) ①A,B都處于ESTABLISHED狀態(tài); ②客戶進(jìn)程A主動(dòng)關(guān)閉連接,向B發(fā)送連接釋放請(qǐng)求報(bào)文段(報(bào)文段不挾帶數(shù)據(jù)),F(xiàn)IN=1,序列號(hào)=u,進(jìn)入FIN-WAIT-1(終止等待1)狀態(tài); ③B收到A的連接釋放報(bào)文段后,應(yīng)答確認(rèn),ACK=1,確認(rèn)號(hào)=u+1,序號(hào)=v,進(jìn)入CLOSE-WAIT (關(guān)閉等待)狀態(tài),B仍然可以向A發(fā)送數(shù)據(jù),A進(jìn)入FIN-WAIT-2(終止等待2)狀態(tài); ④若B已經(jīng)沒有向A的數(shù)據(jù),其應(yīng)用進(jìn)程通知TCP連接釋放,B向A發(fā)送連接釋放報(bào)文段,F(xiàn)IN=1,ACK=1,確認(rèn)號(hào)=u+1,序號(hào)=w,進(jìn)入LAST-ACK(最后確認(rèn))狀態(tài); ⑤A收到B的鏈接釋放報(bào)文段后,應(yīng)答確認(rèn),ACK=1,確認(rèn)號(hào)=w+1,序號(hào)=u+1,進(jìn)入TIME-TIME-WAIT(時(shí)間等待)狀態(tài),B收到A的確認(rèn)后,進(jìn)入CLOSED狀態(tài) A必須經(jīng)過(guò)時(shí)間等待計(jì)時(shí)器設(shè)置的時(shí)間2MSL(默認(rèn)2分鐘)后,進(jìn)入CLOSED狀態(tài):確保A發(fā)送的最后一個(gè)ACK報(bào)文段能夠到達(dá)B;防止“已失效的連接請(qǐng)求報(bào)文段”出現(xiàn)在本連接中。 【文章福利】小編推薦自己的Linux C++技術(shù)交流群:【1106675687】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!??! 資料領(lǐng)取直通車:https://docs.qq.com/doc/DTlhVekRrZUdDUEpy Linux服務(wù)器學(xué)習(xí)網(wǎng)站:https://ke.qq.com/course/417774?flowToken=1028592 可靠傳輸
流量控制 目的:為了防止發(fā)送方給慢接收方發(fā)數(shù)據(jù)造成接受崩潰,緩沖區(qū)溢出 原理:接收方通知發(fā)送方自己的接受窗口大小,發(fā)送方的發(fā)送窗口≤接收方的接受窗口 解決:TCP為每一個(gè)連接設(shè)置一個(gè)持續(xù)計(jì)時(shí)器,只要TCP鏈接一方收到零窗口通知,就啟動(dòng)持續(xù)計(jì)時(shí)器,計(jì)時(shí)器到期,發(fā)送零窗口探測(cè)報(bào)文段,而對(duì)方就在確認(rèn)這個(gè)探測(cè)報(bào)文段時(shí)給出現(xiàn)在的窗口值,①如果窗口仍然是零,那么重新設(shè)置持續(xù)計(jì)時(shí)器;②否則死鎖的僵局就可以打破。 2.4自適應(yīng)重傳1)超時(shí)重傳 報(bào)文段的往返時(shí)間:RTT 加權(quán)平均往返時(shí)間:RTTS RTT的偏差加權(quán)平均值:RTTD 超時(shí)重傳時(shí)間:RTO RTTS = (1 - α) * RTTS + α * 新的RTT樣本值 (α一般為1/8) RTTD = (1 - β) * RTTD + β * | RTTS - 新的RTT樣本值 | (β一般為1/4) RTO = RTTS + 4 * RTTD Karn算法:①每次超時(shí)重傳一個(gè)報(bào)文段時(shí),停止計(jì)算新RTT樣本值 ②每次超時(shí)重傳一個(gè)報(bào)文段時(shí),就把超時(shí)重傳時(shí)間RTO增大y倍(一般為2倍) ③當(dāng)不發(fā)生報(bào)文段重傳時(shí),才計(jì)算RTTS和超時(shí)重傳時(shí)間RTO 2)快速重傳 原因:超時(shí)重傳作為TCP最基本的重傳機(jī)制,效率較低。 超時(shí)的粗粒度實(shí)現(xiàn)方法導(dǎo)致連接在等待一個(gè)定時(shí)器超時(shí)時(shí),很長(zhǎng)一段時(shí)間連接無(wú)效。 基本思想:①接收方:當(dāng)報(bào)文段到達(dá),立刻回復(fù)ACK,即使該序號(hào)已被確認(rèn)過(guò) ②發(fā)送方:收到一個(gè)重復(fù)ACK(同一個(gè)確認(rèn)的再一次重傳稱為重復(fù)確認(rèn)),就知道接收方必定收到亂序到達(dá)的報(bào)文段,表明其前面的分組可能丟失。收到3個(gè)重復(fù)ACK時(shí),立刻觸發(fā)重傳。 2.5擁塞控制1)窗口大小 MaxWindow = min (cwnd, AdvertisedWindow) 擁塞窗口cwnd (Congestion Windows):擁塞控制算法決定,可以同時(shí)發(fā)出的最大字節(jié)數(shù)以防止造成網(wǎng)絡(luò)擁塞 通知窗口 (AdvertisedWindow):接收方?jīng)Q定,可以同時(shí)發(fā)出的最大字節(jié)數(shù)以防止超出接收方的接收能力。 2)擁塞控制算法 ①慢啟動(dòng) 把初始擁塞窗口 cwnd 設(shè)置為不超過(guò)2至4個(gè)SMSS(最大報(bào)文段長(zhǎng)度),在每收到一個(gè)對(duì)新的報(bào)文段的確認(rèn)后,把cwnd增加1個(gè) SMSS 的數(shù)值數(shù)(每經(jīng)過(guò)一個(gè)傳輸輪次,cwnd就加倍) 設(shè)置一個(gè)慢開始門限ssthresh 當(dāng)cwnd < ssthresh時(shí),使用慢開始算法 當(dāng)cwnd ≥ ssthresh時(shí),使用擁塞避免算法。 ②擁塞避免(加法增大):每經(jīng)過(guò)一個(gè)往返時(shí)間RTT把發(fā)送方的cwnd加1,使得cwnd慢性增加 ③快重傳(乘法減?。菏盏?個(gè)重復(fù)ACK立即觸發(fā)重傳 ④快恢復(fù)(在快重傳之后)
三、應(yīng)用層3.1概念5層因特網(wǎng)協(xié)議棧:應(yīng)用層 -> 傳輸層 -> 網(wǎng)絡(luò)層 -> 數(shù)據(jù)鏈路層 -> 物理層 7層OSI參考模型:應(yīng)用層 ->表示層 -> 會(huì)話層 -> 傳輸層 -> 網(wǎng)絡(luò)層 -> 數(shù)據(jù)鏈路層 -> 物理層 為什么我們要在計(jì)算機(jī)網(wǎng)絡(luò)中分層次? 因?yàn)槿绻麅膳_(tái)計(jì)算機(jī)能夠相互通信的話,實(shí)際實(shí)現(xiàn)起來(lái)是非常困難操作的。我們分層的目的就是為了將困難的問(wèn)題簡(jiǎn)單化,并且如果我們分層了,我們?cè)谑褂玫臅r(shí)候就可以僅僅關(guān)注我們需要關(guān)注的層次,而不用理會(huì)其他層 如果需要改動(dòng)設(shè)計(jì)的時(shí)候,我們只需要把變動(dòng)的層替換即可,并不用涉及到其他的層次。這與我們程序設(shè)計(jì)中的低耦合是一個(gè)概念。 每層作用如下:
每一層的協(xié)議如下:
3.2DNS域名系統(tǒng)NS(Domain Name System)提供了什么服務(wù)?
分布式、層次數(shù)據(jù)庫(kù):
域名解析過(guò)程: 假設(shè)我們(主機(jī)是http://a.xyz.com)獲取http://www.baidu.com的IP地址,同時(shí)本地DNS服務(wù)器為http://dns.xyz.com。首先我們的主機(jī)向本地DNS服務(wù)器發(fā)送一個(gè)DNS查詢報(bào)文(報(bào)文包含被查詢的主機(jī)名),然后本地DNS服務(wù)器將該報(bào)文轉(zhuǎn)發(fā)到根DNS服務(wù)器,根DNS服務(wù)器發(fā)現(xiàn)了com前綴,然后向本地DNS服務(wù)器返回com的頂級(jí)域(TLD)DNS服務(wù)器的IP地址列表。本地DNS服務(wù)區(qū)再向這些TLD服務(wù)器發(fā)送查詢報(bào)文,TLD服務(wù)器注意到了http://baidu.com前綴,然后將負(fù)責(zé)http://www.baidu.com的權(quán)威DNS服務(wù)器的IP地址返回給本地DNS服務(wù)器,最后,本地DNS服務(wù)器向該IP地址進(jìn)行發(fā)送報(bào)文查詢,權(quán)威DNS服務(wù)器返回了http://www.baidu.com的IP地址給本地DNS服務(wù)器,本地DNS服務(wù)器再將該DNS發(fā)送到我們主機(jī),我們開始訪問(wèn)該IP地址。 遞歸查詢過(guò)程如下: 迭代查詢過(guò)程如下: 理論上來(lái)講,任何DNS查詢既可以是遞歸也可以是迭代的。在實(shí)踐中,查詢通常是從請(qǐng)求主機(jī)到本地DNS服務(wù)器的查詢時(shí)遞歸的,其余查詢時(shí)迭代的
3.3FTP協(xié)議以及端口文件傳輸協(xié)議FTP(File Transfer Protocol)是世界上使用最廣泛的文件傳輸協(xié)議。FTP 提供交互式的訪問(wèn),允許客戶指明文件的類型與格式,并允許文件具有存取權(quán)限 網(wǎng)絡(luò)環(huán)境下復(fù)制文件的復(fù)雜性:
因此,F(xiàn)TP協(xié)議出現(xiàn)了。 FTP協(xié)議連接過(guò)程:
FTP是使用了兩個(gè)TCP連接的:
3.4DHCP動(dòng)態(tài)主機(jī)配置協(xié)議DHCP:DHCP(動(dòng)態(tài)主機(jī)配置協(xié)議)是一個(gè)局域網(wǎng)的網(wǎng)絡(luò)協(xié)議。指的是由服務(wù)器控制一段IP地址范圍,客戶機(jī)登錄服務(wù)器時(shí)就可以自動(dòng)獲得服務(wù)器分配的IP地址和子網(wǎng)掩碼?;ヂ?lián)網(wǎng)廣泛使用的動(dòng)態(tài)主機(jī)配置協(xié)議 DHCP (Dynamic Host Configuration Protocol) 提供了即插即用連網(wǎng) (plug-and-play networking) 的機(jī)制。 DHCP是使用UDP協(xié)議工作,他的用途如下:
并不是每個(gè)網(wǎng)絡(luò)上都有DHCP服務(wù)器,這樣會(huì)使得DHCP服務(wù)器的數(shù)量太多了?,F(xiàn)在是每個(gè)網(wǎng)絡(luò)至少有一個(gè)DHCP中繼代理,他配置了DHCP服務(wù)器的IP地址信息 在生活中,DHCP必不可少,為我們帶來(lái)了便利,當(dāng)通過(guò)WiFi連上一個(gè)陌生的子網(wǎng),但是我們并沒有做重新為主機(jī)配置IP地址的工作,這樣子就可直接上網(wǎng)!假如沒有DHCP協(xié)議的幫助: 而在DHCP協(xié)議的支持下: DHCP工作流程:
3.5簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議SNMP簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議SNMP(Simple Net Manage Protocol)是TCP/IP協(xié)議簇的一個(gè)應(yīng)用層協(xié)議,網(wǎng)絡(luò)管理包括對(duì)硬件、軟件和人力的使用、綜合與協(xié)調(diào),以便對(duì)網(wǎng)絡(luò)資源進(jìn)行監(jiān)視、測(cè)試、配置、分析、評(píng)價(jià)和控制,這樣就能以合理的價(jià)格滿足網(wǎng)絡(luò)的一些需求,如實(shí)時(shí)運(yùn)行性能,服務(wù)質(zhì)量等。網(wǎng)絡(luò)管理常簡(jiǎn)稱為網(wǎng)管。 含義:
CS模式:
功能:
過(guò)程:
3.6電子郵件協(xié)議SMTP、POP3、IMAPSMTP是因特網(wǎng)電子郵件中主要的應(yīng)用層協(xié)議,只用TCP可靠數(shù)據(jù)傳輸服務(wù),SMTP的端口號(hào)是25號(hào)。因特網(wǎng)電子郵件的主要組成部分:
郵件發(fā)送過(guò)程:從發(fā)送的用戶代理開始,傳輸郵件到發(fā)送方的郵件服務(wù)器,再傳輸?shù)浇邮辗降泥]件服務(wù)器,然后在這里被分發(fā)到接收方的郵箱中。如果用戶要讀取該郵件時(shí),使用用戶名和口令來(lái)鑒別用戶。 POP3(第三版的郵局協(xié)議Post Office Protocol - Version 3):
IMAP(因特網(wǎng)郵件訪問(wèn)協(xié)議Internet Mail Access Protocol):
注意:
四、網(wǎng)絡(luò)層協(xié)議IP協(xié)議屬于網(wǎng)絡(luò)層協(xié)議,所有的TCP, UDP, ICMP, IGMP數(shù)據(jù)都通過(guò)IP數(shù)據(jù)報(bào)傳輸。IP提供了一種不可靠,無(wú)連接的數(shù)據(jù)包交付服務(wù)。依賴其他層的協(xié)議進(jìn)行差錯(cuò)控制。不可靠: IP數(shù)據(jù)報(bào)不保證能成功的到達(dá)目的地,如果出現(xiàn)錯(cuò)誤則選擇丟棄該數(shù)據(jù),然后發(fā)送ICMP消息報(bào)給信源端 無(wú)連接: IP不提供任何后續(xù)數(shù)據(jù)報(bào)的狀態(tài)信息,每個(gè)數(shù)據(jù)報(bào)處理都是獨(dú)立的。如果一個(gè)信源發(fā)送了連續(xù)的兩個(gè)數(shù)據(jù)報(bào),每個(gè)數(shù)據(jù)報(bào)選擇獨(dú)立的路由,兩個(gè)數(shù)據(jù)可能不同時(shí)到達(dá)。IP通信雙方都不長(zhǎng)久地維持對(duì)方的任何信息。這樣上層協(xié)議每次發(fā)送數(shù)據(jù)的時(shí)候,都必須明確指定對(duì)方的IP地址。 4.1ipv4數(shù)據(jù)報(bào)1.版本號(hào):占四位,就是IP協(xié)議的版本,通信雙方的IP協(xié)議必須要達(dá)到一致,IPv4的版本就是4. 2.首部長(zhǎng)度:占四位,因?yàn)殚L(zhǎng)度為四比特,所以首部長(zhǎng)度的最大值為1111,15,又因?yàn)槭撞块L(zhǎng)度代表的單位長(zhǎng)度為32個(gè)字(也就是4個(gè)字節(jié)),所以首部長(zhǎng)度的最小值就是0101,當(dāng)然,也確實(shí)如此,大部分的ip頭部中首部字節(jié)都是0101.也就是5*4=20個(gè)字節(jié),如果是最大值15的話,ip首部的最大值就是60個(gè)字節(jié),所以記好了,ipv4首部長(zhǎng)度的最大值就是60,當(dāng)然當(dāng)中我們又能發(fā)現(xiàn),IPv4的首段長(zhǎng)度一定是4字節(jié)的整數(shù)倍,要是不是怎么辦呢?別急,后面的填充字段會(huì)自動(dòng)填充補(bǔ)齊到4字節(jié)的整數(shù)倍的。 3.區(qū)分服務(wù):這個(gè)沒有什么用處,也沒有什么好講的了,只要自動(dòng)這玩意占八位,一個(gè)字節(jié)就可以了。 4.總長(zhǎng)度:占16位,這個(gè)的意思就是ip數(shù)據(jù)報(bào)中首部和數(shù)據(jù)的總和的長(zhǎng)度,因?yàn)檎?6位,所以很好理解,總長(zhǎng)度的最大值就是2的16次方減一,65535,這玩意也對(duì)應(yīng)著還有一個(gè)很簡(jiǎn)單的概念,最大傳輸單元mtu,意味著一個(gè)IP數(shù)據(jù)報(bào)的最大長(zhǎng)度就只能裝下65535個(gè)字節(jié),要是傳輸?shù)拈L(zhǎng)度超過(guò)這個(gè)怎么辦,很簡(jiǎn)單,分片。 5.標(biāo)識(shí):占16位,標(biāo)識(shí)這玩意很好理解,IP在存儲(chǔ)器中維持一個(gè)計(jì)數(shù)器,每產(chǎn)生一個(gè) 數(shù)據(jù)報(bào),計(jì)數(shù)器就加1,并將此值賦給標(biāo)識(shí)字段。但這個(gè)標(biāo)識(shí)并不是平常的序號(hào),因?yàn)镮P是 無(wú)連接服務(wù),數(shù)據(jù)報(bào)不存在按序接收的問(wèn)題。當(dāng)數(shù)據(jù)報(bào)由于長(zhǎng)度超過(guò)網(wǎng)絡(luò)的MTU而必須分 片時(shí),這個(gè)標(biāo)識(shí)字段的值就被復(fù)制到所有的數(shù)據(jù)報(bào)片的標(biāo)識(shí)字段中,等到重組的時(shí)候,相同標(biāo)識(shí)符的值的數(shù)據(jù)報(bào)就會(huì)被重新組裝成一個(gè)數(shù)據(jù)報(bào)。 6.標(biāo)志:占三位,一般有用的是前兩位, 最低位叫做MF,MF=1表示后面還有若干個(gè)數(shù)據(jù)報(bào),MF=0表示這已經(jīng)是最后一個(gè)數(shù)據(jù)報(bào)了。中間位叫做DF,DF表示不能進(jìn)行分片,DF=0才可以進(jìn)行分片操作。 7.片偏移:占13位,片偏移就是,在原來(lái)的數(shù)據(jù)報(bào)分片以后,該片在原分組中的相對(duì)位置,片偏移中的基本單位是8字節(jié),所以,也就是說(shuō),只要是分片,每個(gè)分片的長(zhǎng)度都是8字節(jié)的整數(shù)倍,最后一個(gè)分片不夠八字節(jié)的一樣是填充。 8.生存時(shí)間ttl:占8位,(time to live),表明數(shù)據(jù)報(bào)在網(wǎng)絡(luò)中的壽命,這個(gè)值被設(shè)定成跳數(shù),顧名思義,就是這個(gè)數(shù)據(jù)報(bào)可以經(jīng)過(guò)多少個(gè)路由器的數(shù)量,每經(jīng)過(guò)一個(gè)路由器,該值就減一,減到為零的時(shí)候就被拋棄,顯而易見,這個(gè)跳數(shù)的最大值就是2的8次方減一,255. 9.協(xié)議:就是用來(lái)指明數(shù)據(jù)報(bào)攜帶了哪種協(xié)議,占8位。 10.首部效驗(yàn)和:占16位,這個(gè)字段用來(lái)效驗(yàn)數(shù)據(jù)報(bào)首段,下面給出簡(jiǎn)單的計(jì)算方法: 首先在發(fā)送端的時(shí)候,將效驗(yàn)和全部置為0,然后把數(shù)據(jù)報(bào)首段數(shù)據(jù)全部進(jìn)行反碼相加,得到的值為效驗(yàn)和,放入首段效驗(yàn)和里面,然后接收端將數(shù)據(jù)報(bào)首段數(shù)據(jù)和效驗(yàn)和一起全部反碼相加,最后若是得到零,則保留,若是不為零,則說(shuō)明數(shù)據(jù)報(bào)在傳輸?shù)倪^(guò)程中發(fā)生了改變,則丟棄該數(shù)據(jù)報(bào)。 11.IP源地址:占32位,將IP地址看作是32位數(shù)值則需要將網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)化位主機(jī)字節(jié)順序。轉(zhuǎn)化的方法是:將每4個(gè)字節(jié)首尾互換,將2、3字節(jié)互換。 12.目的地址:也占32位,轉(zhuǎn)換方法和來(lái)源IP地址一樣。 13.選項(xiàng):可變長(zhǎng)的可選信息,最多包含40字節(jié)。選項(xiàng)字段很少被使用??捎玫腎P可選項(xiàng)有:a. 記錄路由: 記錄數(shù)據(jù)包途徑的所有路由的IP,這樣可以追蹤數(shù)據(jù)包的傳遞路徑 b. 時(shí)間戳: 記錄每個(gè)路由器數(shù)據(jù)報(bào)被轉(zhuǎn)發(fā)的時(shí)間或者時(shí)間與IP地址對(duì),這樣就可以測(cè)量途徑路由之間數(shù)據(jù)報(bào)的傳輸?shù)臅r(shí)間 c. 松散路由選擇: 指定路由器的IP地址列表數(shù)據(jù)發(fā)送過(guò)程中必須經(jīng)過(guò)所有的路由器 d. 嚴(yán)格路由選擇: 數(shù)據(jù)包只能經(jīng)過(guò)被指定的IP地址列表的路由器 e. 上層協(xié)議(如TCP/UDP)的頭部信息 13.到了可變部分IPv4的頭部基本上就已經(jīng)講完了,增加頭部的可變選項(xiàng)實(shí)際上就是增加了數(shù)據(jù)報(bào)的功能,可變選項(xiàng)在實(shí)際上是很少用到的。 4.2分片當(dāng)IP數(shù)據(jù)報(bào)的長(zhǎng)度超過(guò)幀的MTU時(shí),它將被分片傳輸。分片可能發(fā)生在發(fā)送端,也可能發(fā)生在中轉(zhuǎn)路由器上,而且可能在傳輸過(guò)程中多次分片,但只有在最終的目標(biāo)機(jī)器上,這些分片才會(huì)被內(nèi)核中的IP模塊重新組裝。IP頭部中的如下三個(gè)字段給IP的分片和重組提供了足夠的信息:數(shù)據(jù)報(bào)標(biāo)識(shí)、標(biāo)志和片偏移。一個(gè)IP數(shù)據(jù)報(bào)的每個(gè)分片都具有自己的IP頭部,它們具有相同的標(biāo)識(shí)值,但具有不同的片偏移。并且除了最后一個(gè)分片外,其他分片都將設(shè)置MF標(biāo)志。此外,每個(gè)分片的IP頭部的總長(zhǎng)度字段將被設(shè)置位該分片的長(zhǎng)度。 4.3IP路由路由是什么:我們知道,IP地址是網(wǎng)絡(luò)世界里的門牌號(hào)。你可以通過(guò)IP地址訪問(wèn)遠(yuǎn)在天邊的網(wǎng)站,那么數(shù)據(jù)是如何到達(dá)網(wǎng)站的呢?靠的就是路徑上每個(gè)節(jié)點(diǎn)的路由。路由,簡(jiǎn)單的說(shuō)就是指導(dǎo)IP報(bào)文該去哪的指示牌。 一般說(shuō)來(lái),主機(jī)會(huì)在以下兩個(gè)時(shí)機(jī)進(jìn)行路由查詢
路由表長(zhǎng)什么樣 以一個(gè)典型的主機(jī)為例,tristan有一個(gè)外部網(wǎng)卡enp1s0和一個(gè)內(nèi)部還回網(wǎng)卡lo。 通過(guò)route -n我們可以看到主機(jī)上簡(jiǎn)要的路由表信息(當(dāng)然通過(guò)ip route也可以),那么上面的路由信息中的每一表項(xiàng)代表什么意思呢?
4.4IP轉(zhuǎn)發(fā)當(dāng)主機(jī)收到一個(gè)數(shù)據(jù)報(bào)時(shí),首先檢查目的地址:
轉(zhuǎn)發(fā)不會(huì)改變數(shù)據(jù)報(bào)的IP地址,只是通過(guò)設(shè)置鏈路層地址來(lái)完成交付的過(guò)程:
4.5IP地址介紹ip地址組成 : IP地址由4部分?jǐn)?shù)字組成,每部分?jǐn)?shù)字對(duì)應(yīng)于8位二進(jìn)制數(shù)字,各部分之間用小數(shù)點(diǎn)分開 這是點(diǎn)分2進(jìn)制 如果換算為10進(jìn)制我們稱為點(diǎn)分10進(jìn)制.每個(gè)ip地址由兩部分組成網(wǎng)絡(luò)地址(NetID)和主機(jī)地址(HostID).網(wǎng)絡(luò)地址表示其屬于互聯(lián)網(wǎng)中的哪一個(gè)網(wǎng)絡(luò),而主機(jī)地址則表示其屬于該網(wǎng)絡(luò)中的哪一臺(tái)主機(jī)。 A類地址:范圍從0-127,0是保留的并且表示所有IP地址,而127也是保留的地址,并且是用于測(cè)試環(huán)回用的。因此 A類地址的范圍其實(shí)是從1-126之間?! ∪纾?0.0.0.1,第一段號(hào)碼為網(wǎng)絡(luò)號(hào)碼,剩下的三段號(hào)碼為本地計(jì)算機(jī)的號(hào)碼。轉(zhuǎn)換為2進(jìn)制來(lái)說(shuō),一個(gè)A類IP地址由1字節(jié)的網(wǎng)絡(luò)地址和3字節(jié)主機(jī)地址組成,網(wǎng)絡(luò)地址的最高位必須是“0”, 地址范圍從1.0.0.1 到126.0.0.0??捎玫腁類網(wǎng)絡(luò)有126個(gè),每個(gè)網(wǎng)絡(luò)能容納1千多萬(wàn)個(gè)主機(jī)(2的24次方的-2主機(jī)數(shù)目)。以子網(wǎng)掩碼來(lái)進(jìn)行區(qū)別::255.0.0.0 127.0.0.0到127.255.255.255是保留地址,用做循環(huán)測(cè)試用的 B類地址:范圍從128-191,如172.168.1.1,第一和第二段號(hào)碼為網(wǎng)絡(luò)號(hào)碼,剩下的2段號(hào)碼為本地計(jì)算機(jī)的號(hào)碼。轉(zhuǎn)換為2進(jìn)制來(lái)說(shuō),一個(gè)B類IP地址由2個(gè)字節(jié)的網(wǎng)絡(luò)地址和2個(gè)字節(jié)的主機(jī)地址組成,網(wǎng)絡(luò)地址的最高位必須是“10”,地址范圍從128.0.0.0到191.255.255.255??捎玫腂類網(wǎng)絡(luò)有16382個(gè),每個(gè)網(wǎng)絡(luò)能容納6萬(wàn)多個(gè)主機(jī) 。(2的16次方-2) 以子網(wǎng)掩碼來(lái)進(jìn)行區(qū)別:255.255.0.0 169.254.0.0到169.254.255.255是保留地址。如果你的IP地址是自動(dòng)獲取IP地址,而你在網(wǎng)絡(luò)上又沒有找到可用的DHCP服務(wù)器,這時(shí)你將會(huì)從169.254.0.0到169.254.255.255中臨時(shí)獲得一個(gè)IP地址。 C類地址:范圍從192-223,如192.168.1.1,第一,第二,第三段號(hào)碼為網(wǎng)絡(luò)號(hào)碼,剩下的最后一段號(hào)碼為本地計(jì)算機(jī)的號(hào)碼。轉(zhuǎn)換為2進(jìn)制來(lái)說(shuō),一個(gè)C類IP地址由3字節(jié)的網(wǎng)絡(luò)地址和1字節(jié)的主機(jī)地址組成,網(wǎng)絡(luò)地址的最高位必須是“110”。范圍從192.0.0.0到223.255.255.255。C類網(wǎng)絡(luò)可達(dá)209萬(wàn)余個(gè),每個(gè)網(wǎng)絡(luò)能容納254個(gè)主機(jī)。(2的8次方-2) 以子網(wǎng)掩碼來(lái)進(jìn)行區(qū)別:255.255.255.0 D類地址:范圍從224-239,D類IP地址第一個(gè)字節(jié)以“1110”開始,它是一個(gè)專門保留的地址。它并不指向特定的網(wǎng)絡(luò),目前這一類地址被用在多點(diǎn)廣播(Multicast)中。多點(diǎn)廣播地址用來(lái)一次尋址一組計(jì)算機(jī),它標(biāo)識(shí)共享同一協(xié)議的一組計(jì)算機(jī)。224.0.0.0-239.255.255.255 組播地址 E類地址:范圍從240-254,以“11110”開始,為將來(lái)使用保留。全零(“0.0.0.0”)地址對(duì)應(yīng)于當(dāng)前主機(jī)。全“1”的IP地址(“255.255.255.255”)是當(dāng)前子網(wǎng)的廣播地址。240.0.0.0-255.255.255.254 保留地址 子網(wǎng)掩碼就是為了區(qū)分ip地址的中的網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)的。 私有地址 所謂的私有地址就是在互聯(lián)網(wǎng)上不使用,而被用在局域網(wǎng)絡(luò)中的地址 在A類地址中,10.0.0.0到10.255.255.255是私有地址 在B類地址中,172.16.0.0到172.31.255.255是私有地址。在C類地址中,192.168.0.0到192.168.255.255是私有地址。 五、手寫TCP/IP用戶態(tài)協(xié)議棧(純C語(yǔ)言)手寫3000行代碼,讓你掌握網(wǎng)絡(luò)通信核心技術(shù)。 最后: 給校招的小伙伴一句話:第一份工作不亞于一次高考,珍惜校招,社招的競(jìng)爭(zhēng)是你目前想象不到的。能去大廠覺不妥協(xié),IT行業(yè)第一份工作背景越好,起點(diǎn)越高,后續(xù)發(fā)展空間越好! 給那些1-3年的安于現(xiàn)狀的伙伴一句話: 不要抱怨市場(chǎng),不要安于現(xiàn)狀,在低端,往中端領(lǐng)域看,在中端往高端領(lǐng)域看。認(rèn)知以及對(duì)自身的要求,都會(huì)有所改變。 給那些擔(dān)心35歲的伙伴一句話: 決定上限的不是年紀(jì),而是技術(shù)。最后:希望學(xué)習(xí)路線對(duì)你有所幫助,希望碼農(nóng)的我們?cè)絹?lái)越好! |
|