2.5.1 包的基本知識(shí)
- 首先瑰谜,包由頭部和數(shù)據(jù)兩部分構(gòu)成,頭部包含目的地址等控制信息侈离。
- 一個(gè)完整的包包括MAC頭部试幽、IP頭部、TCP頭部卦碾、數(shù)據(jù)塊铺坞。
- 轉(zhuǎn)發(fā)設(shè)備根絕頭部的目的地址等控制信息判斷接下來(lái)發(fā)送到哪里。
- 路由器是按照IP規(guī)則傳輸包的設(shè)備洲胖,集線器康震、交換機(jī)是按照以太網(wǎng)規(guī)則傳輸包的設(shè)備。
- MAC頭部用于以太網(wǎng)協(xié)議宾濒,IP頭部用于IP協(xié)議腿短。
- IP協(xié)議先根據(jù)IP頭部找到下一個(gè)路由器的位置,然后IP協(xié)議會(huì)查找下一個(gè)路由器的MAC地址,并將這個(gè)地址寫(xiě)入MAC頭部(這樣以太網(wǎng)協(xié)議就知道包要發(fā)送到哪個(gè)路由器了)橘忱,再委托以太網(wǎng)協(xié)議傳輸包赴魁。
- 所以在每個(gè)路由器收到包的時(shí)候,MAC頭部會(huì)先被舍棄钝诚,然后再次發(fā)送的時(shí)候又會(huì)加上包含新MAC地址的新MAC頭部颖御。
- 以太網(wǎng)協(xié)議層可以被替換成無(wú)線局域網(wǎng)、ADSL凝颇、FTTH等潘拱,它們都可以幫助IP協(xié)議來(lái)傳輸網(wǎng)絡(luò)包,因此將IP和負(fù)責(zé)傳輸?shù)木W(wǎng)絡(luò)分開(kāi)拧略,可以更好地根據(jù)需要使用各種通信技術(shù)芦岂。
2.5.2 包收發(fā)操作概覽:IP模塊
- TCP模塊將TCP頭部和數(shù)據(jù)塊的整體交給IP模塊后,IP模塊負(fù)責(zé)添加IP頭部和MAC頭部垫蛆。
- IP模塊將封裝好的包交給網(wǎng)絡(luò)硬件禽最,這里統(tǒng)稱(chēng)為網(wǎng)卡。
- 網(wǎng)卡將這一串由0和1組成的數(shù)字信息轉(zhuǎn)換為電或光信號(hào)發(fā)送出去袱饭。
- 無(wú)論要收發(fā)的包是控制包還是數(shù)據(jù)包川无,IP對(duì)各種類(lèi)型的包的收發(fā)操作都是相同的。
2.5.3 生成包含接收方IP地址的IP頭部
- IP包頭部最重要的內(nèi)容就是IP地址虑乖,IP地址是由TCP模塊告知的懦趋。
- IP頭部字段:版本號(hào)、頭部長(zhǎng)度疹味、服務(wù)類(lèi)型仅叫、總長(zhǎng)度、ID號(hào)佛猛、標(biāo)志、分片偏移量坠狡、生存時(shí)間继找、協(xié)議號(hào)、頭部校驗(yàn)和逃沿、發(fā)送方IP地址婴渡、接收方IP地址、可選字段
- IP表也叫路由表凯亮,通過(guò)route print命令查看边臼。
2.5.4 生成以太網(wǎng)用的MAC頭部
- MAC頭部字段:接收方MAC地址、發(fā)送方MAC地址假消、以太類(lèi)型柠并。
- IP模塊在生成IP頭部之后,會(huì)在它前面再加上MAC頭部。
- IP模塊根據(jù)路由表gateway欄的內(nèi)容判斷應(yīng)該把包發(fā)送給誰(shuí)臼予。
2.5.5 通過(guò)ARP查詢目標(biāo)路由器的MAC地址
- ARP:Address Resolution Protocol鸣戴,地址解析協(xié)議。
- 利用ARP對(duì)子網(wǎng)內(nèi)所有設(shè)備發(fā)送廣播詢問(wèn)目標(biāo)IP地址是誰(shuí)的粘拾,請(qǐng)求返回對(duì)方的MAC地址窄锅。
- ARP利用緩存減少ARP查詢次數(shù),緩存過(guò)期時(shí)間只有幾分鐘缰雇。
2.5.6 以太網(wǎng)的基本知識(shí)
- 以太網(wǎng)是一種為多臺(tái)計(jì)算機(jī)能夠彼此自由和廉價(jià)地相互通信而設(shè)計(jì)的通信技術(shù)
- 以太網(wǎng)的三個(gè)基本性質(zhì):將包發(fā)送到MAC頭部的接收方MAC地址代表的目的地入偷,用發(fā)送方MAC地址識(shí)別發(fā)送方,用以太類(lèi)型識(shí)別包的內(nèi)容械哟。
2.5.7 將IP包轉(zhuǎn)換成電或光信號(hào)發(fā)送出去
- 網(wǎng)卡驅(qū)動(dòng)程序在計(jì)算機(jī)開(kāi)機(jī)的時(shí)候?qū)τ布M(jìn)行初始化操作疏之,包括硬件錯(cuò)誤檢查、設(shè)置MAC地址等步驟戒良。
- 網(wǎng)卡的ROM保存著全世界唯一的MAC地址体捏,這是在生產(chǎn)網(wǎng)卡時(shí)寫(xiě)入的,這個(gè)地址由網(wǎng)卡驅(qū)動(dòng)程序讀取并分配給MAC模塊糯崎。
- 網(wǎng)卡主要包括:緩沖區(qū)几缭、MAC、PHY(MAU)沃呢、RJ-45接口年栓、ROM等結(jié)構(gòu)。
2.5.8 給網(wǎng)絡(luò)包再加3個(gè)控制數(shù)據(jù)
- 首先薄霜,網(wǎng)卡的MAC模塊會(huì)將包從緩沖區(qū)中取出某抓,并在開(kāi)頭加上報(bào)頭和起始幀分界符,在末尾加上用于檢測(cè)錯(cuò)誤的幀校驗(yàn)序列FCS惰瓜。
- 報(bào)頭是一串像101010...這樣1和0交替出現(xiàn)的比特序列否副,長(zhǎng)度為56比特,它的作用是確定包的讀取時(shí)機(jī)崎坊。
- 起始幀分解符的末尾比特排列有少許變化备禀,接收方以這一變化作為標(biāo)記,從這里開(kāi)始提取網(wǎng)絡(luò)包數(shù)據(jù)奈揍。
- 末尾的FCS曲尸,用來(lái)檢查包傳輸過(guò)程中因噪聲導(dǎo)致的波形紊亂、數(shù)據(jù)錯(cuò)誤男翰,它是一串32比特的序列另患,通過(guò)一個(gè)公式對(duì)包中從頭到尾的所有內(nèi)容進(jìn)行計(jì)算得來(lái)。
2.5.9 向集線器發(fā)送網(wǎng)絡(luò)包
- 網(wǎng)卡的MAC模塊生成通用信號(hào)蛾绎,然后由PHY(MAU)模塊轉(zhuǎn)換成可在網(wǎng)線中傳輸?shù)母袷嚼セ⑼ㄟ^(guò)網(wǎng)線發(fā)送出去鸦列。
- 發(fā)送和接收同時(shí)進(jìn)行的方式叫做全雙工,相對(duì)地为严,某一時(shí)刻只能進(jìn)行發(fā)送或接收其中一種操作的叫作半雙工敛熬。
- 集線器是半雙工模式,如果同時(shí)有收發(fā)操作第股,兩組信號(hào)就會(huì)相互疊加应民,無(wú)法彼此區(qū)分出來(lái),這就是所謂的信號(hào)碰撞夕吻。當(dāng)發(fā)生碰撞時(shí)诲锹,發(fā)送操作會(huì)終止,等待重新發(fā)送涉馅。
2.5.10 接收返回包
- 首先PHY(MAU)模塊會(huì)將信號(hào)轉(zhuǎn)換成通用格式并發(fā)送給MAC模塊归园。
- MAC模塊再?gòu)念^開(kāi)始講信號(hào)轉(zhuǎn)換成數(shù)字信息并存放到緩沖區(qū)中。當(dāng)?shù)竭_(dá)信號(hào)的末尾時(shí)稚矿,還需要檢查FCS庸诱。接下來(lái)MAC模塊會(huì)檢測(cè)接收方MAC地址是否和自己的地址一致。
- 接下來(lái)晤揣,網(wǎng)卡會(huì)通過(guò)中斷機(jī)制通知計(jì)算機(jī)收到了一個(gè)包桥爽。
- 網(wǎng)卡驅(qū)動(dòng)被中斷處理程序調(diào)用后,會(huì)從網(wǎng)卡的緩沖區(qū)取出收到的包昧识,并通過(guò)MAC頭部中的以太類(lèi)型判斷協(xié)議的類(lèi)型钠四。
- 網(wǎng)卡根據(jù)以太類(lèi)型將包交給對(duì)應(yīng)的協(xié)議棧處理。
2.5.11 將服務(wù)器的響應(yīng)包從IP傳遞給TCP
- 首先IP模塊檢查IP頭部跪楞,確認(rèn)格式是否正確缀去,沒(méi)有問(wèn)題就查看接收方的IP地址。如果IP地址不是自己的地址甸祭,IP模塊會(huì)通過(guò)ICMP消息將錯(cuò)誤告知發(fā)送方缕碎。ICMP規(guī)定了各種類(lèi)型的消息。
- 如果包經(jīng)過(guò)了分片池户,所有分片的包在IP頭部都具有相同的ID咏雌,此外IP頭部還有一個(gè)分片偏移量,它表示當(dāng)前分片在整個(gè)包中所處的位置煞檩。根據(jù)這些信息处嫌,在所有分片全部收到之后栅贴,就可以將他們還原成原始的包斟湃,這個(gè)操作叫做分片重組。
- 接下來(lái)TCP模塊工作檐薯,根據(jù)收發(fā)IP地址和端口號(hào)查找套接字凝赛,然后根據(jù)套接字的通信狀態(tài)注暗,執(zhí)行響應(yīng)的操作(收發(fā)數(shù)據(jù)或連接斷開(kāi)等響應(yīng)控制)。