UNIX网络编程——TCP/IP简介
一、ISO/OSI參考模型
? ? ? ?OSI(open system interconnection)開放系統(tǒng)互聯(lián)模型是由ISO(International Organization for Standardization)國(guó)際標(biāo)準(zhǔn)化組織定義的網(wǎng)絡(luò)分層模型,共七層,如下圖:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?物理層(Physical Layer):物理層定義了所有電子及物理設(shè)備的規(guī)范,為上層的傳輸提供了一個(gè)物理介質(zhì),本層中數(shù)據(jù)傳輸?shù)膯挝粸?span style="color:rgb(255,0,0);">比特(bit)。屬于本層定義的規(guī)范有EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等,實(shí)際使用中的設(shè)備如網(wǎng)卡等屬于本層。
? ? ? ?數(shù)據(jù)鏈路層(Data Link Layer):對(duì)物理層收到的比特流進(jìn)行數(shù)據(jù)成幀。提供可靠的數(shù)據(jù)傳輸服務(wù),實(shí)現(xiàn)無差錯(cuò)數(shù)據(jù)傳輸。在數(shù)據(jù)鏈路層中數(shù)據(jù)的單位為幀(frame)。屬于本層定義的規(guī)范有SDLC、HDLC、PPP、STP、幀中繼等,實(shí)際使用中的設(shè)備如switch交換機(jī)屬于本層。
? ? ? ?網(wǎng)絡(luò)層(Network Layer):網(wǎng)絡(luò)層負(fù)責(zé)將各個(gè)子網(wǎng)之間的數(shù)據(jù)進(jìn)行路由選擇,分組與重組。本層中數(shù)據(jù)傳輸?shù)膯挝粸?span style="color:rgb(255,0,0);">數(shù)據(jù)包(packet)。屬于本層定義的規(guī)范有IP、IPX、RIP、OSPF、ICMP、IGMP等。實(shí)際使用中的設(shè)備如路由器屬于本層。
? ? ? ?傳輸層(Transport Layer):提供可靠的數(shù)據(jù)傳輸服務(wù),它檢測(cè)路由器丟棄的包,然后產(chǎn)生一個(gè)重傳請(qǐng)求,能夠?qū)y序收到的數(shù)據(jù)包重新排序。在傳輸層數(shù)據(jù)的傳輸單位是段(segment)。
? ? ? ?會(huì)話層(Session Layer):管理主機(jī)之間會(huì)話過程,包括會(huì)話建立、終止和會(huì)話過程中的管理。
? ? ? ?表示層(Presentation Layer):表示層對(duì)網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)進(jìn)行變換,使得多個(gè)主機(jī)之間傳送的信息能夠互相理解,包括數(shù)據(jù)的壓縮、加密、格式轉(zhuǎn)換等。
? ? ? ?應(yīng)用層(Application Layer):應(yīng)用層與應(yīng)用程序界面溝通,以達(dá)至展示給用戶的目的。 在此常見的協(xié)定有: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等
二、TCP/IP協(xié)議四層模型
? ? ? ?TCP/IP網(wǎng)絡(luò)協(xié)議棧分為應(yīng)用層(Application)、傳輸層(Transport)、網(wǎng)絡(luò)層(Network)和鏈路層(Link)四層。如下圖所示,如果沒有特別說明,一般引用的圖都出自《TCP/IP詳解》。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?兩臺(tái)計(jì)算機(jī)通過TCP/IP協(xié)議通訊的過程如下所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ?傳輸層及其以下的機(jī)制由內(nèi)核提供,應(yīng)用層由用戶進(jìn)程提供,應(yīng)用程序?qū)νㄓ崝?shù)據(jù)的含義進(jìn)行解釋,而傳輸層及其以下處理通訊的細(xì)節(jié),將數(shù)據(jù)從一臺(tái)計(jì)算機(jī)通過一定的路徑發(fā)送到另一臺(tái)計(jì)算機(jī)。應(yīng)用層數(shù)據(jù)通過協(xié)議棧發(fā)到網(wǎng)絡(luò)上時(shí),每層協(xié)議都要加上一個(gè)數(shù)據(jù)首部(header),稱為封裝(Encapsulation),如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?不同的協(xié)議層對(duì)數(shù)據(jù)包有不同的稱謂,在傳輸層叫做段(segment),在網(wǎng)絡(luò)層叫做數(shù)據(jù)報(bào)(datagram),在鏈路層叫做幀(frame)。數(shù)據(jù)封裝成幀后發(fā)到傳輸介質(zhì)上,到達(dá)目的主機(jī)后每層協(xié)議再剝掉相應(yīng)的首部,最后將應(yīng)用層數(shù)據(jù)交給應(yīng)用程序處理。
? ? ? ?上圖對(duì)應(yīng)兩臺(tái)計(jì)算機(jī)在同一網(wǎng)段中的情況,如果兩臺(tái)計(jì)算機(jī)在不同的網(wǎng)段中,那么數(shù)據(jù)從一臺(tái)計(jì)算機(jī)到另一臺(tái)計(jì)算機(jī)傳輸過程中要經(jīng)過一個(gè)或多個(gè)路由器,如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ?其實(shí)在鏈路層之下還有物理層,指的是電信號(hào)的傳遞方式,比如現(xiàn)在以太網(wǎng)通用的網(wǎng)線(雙絞線)、早期以太網(wǎng)采用的的同軸電纜(現(xiàn)在主要用于有線電視)、光纖等都屬于物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等。集線器(Hub)是工作在物理層的網(wǎng)絡(luò)設(shè)備,用于雙絞線的連接和信號(hào)中繼(將已衰減的信號(hào)再次放大使之傳得更遠(yuǎn))。
? ? ? ?鏈路層有以太網(wǎng)、令牌環(huán)網(wǎng)等標(biāo)準(zhǔn),鏈路層負(fù)責(zé)網(wǎng)卡設(shè)備的驅(qū)動(dòng)、幀同步(就是說從網(wǎng)線上檢測(cè)到什么信號(hào)算作新幀的開始)、沖突檢測(cè)(如果檢測(cè)到?jīng)_突就自動(dòng)重發(fā))、數(shù)據(jù)差錯(cuò)校驗(yàn)等工作。交換機(jī)是工作在鏈路層的網(wǎng)絡(luò)設(shè)備,可以在不同的鏈路層網(wǎng)絡(luò)之間轉(zhuǎn)發(fā)數(shù)據(jù)幀(比如十兆以太網(wǎng)和百兆以太網(wǎng)之間、以太網(wǎng)和令牌環(huán)網(wǎng)之間),由于不同鏈路層的幀格式不同,交換機(jī)要將進(jìn)來的數(shù)據(jù)包拆掉鏈路層首部重新封裝之后再轉(zhuǎn)發(fā)。
? ? ? ?網(wǎng)絡(luò)層的IP協(xié)議是構(gòu)成Internet的基礎(chǔ)。Internet上的主機(jī)通過IP地址來標(biāo)識(shí),Internet上有大量路由器負(fù)責(zé)根據(jù)IP地址選擇合適的路徑轉(zhuǎn)發(fā)數(shù)據(jù)包,數(shù)據(jù)包從Internet上的源主機(jī)到目的主機(jī)往往要經(jīng)過十多個(gè)路由器。路由器是工作在第三層的網(wǎng)絡(luò)設(shè)備,同時(shí)兼有交換機(jī)的功能,可以在不同的鏈路層接口之間轉(zhuǎn)發(fā)數(shù)據(jù)包,因此路由器需要將進(jìn)來的數(shù)據(jù)包拆掉網(wǎng)絡(luò)層和鏈路層兩層首部并重新封裝。IP協(xié)議不保證傳輸?shù)目煽啃?/span>,數(shù)據(jù)包在傳輸過程中可能丟失,可靠性可以在上層協(xié)議或應(yīng)用程序中提供支持。
? ? ? ?網(wǎng)絡(luò)層負(fù)責(zé)點(diǎn)到點(diǎn)(point-to-point)的傳輸(這里的“點(diǎn)”指主機(jī)或路由器),而傳輸層負(fù)責(zé)端到端(end-to-end)的傳輸(這里的“端”指源主機(jī)和目的主機(jī))。傳輸層可選擇TCP或UDP協(xié)議。TCP是一種面向連接的、可靠的協(xié)議,有點(diǎn)像打電話,雙方拿起電話互通身份之后就建立了連接,然后說話就行了,這邊說的話那邊保證聽得到,并且是按說話的順序聽到的,說完話掛機(jī)斷開連接。也就是說TCP傳輸?shù)碾p方需要首先建立連接,之后由TCP協(xié)議保證數(shù)據(jù)收發(fā)的可靠性,丟失的數(shù)據(jù)包自動(dòng)重發(fā),上層應(yīng)用程序收到的總是可靠的數(shù)據(jù)流,通訊之后關(guān)閉連接。UDP協(xié)議不面向連接,也不保證可靠性,有點(diǎn)像寄信,寫好信放到郵筒里,既不能保證信件在郵遞過程中不會(huì)丟失,也不能保證信件是按順序寄到目的地的。使用UDP協(xié)議的應(yīng)用程序需要自己完成丟包重發(fā)、消息排序等工作。
? ? ? ?目的主機(jī)收到數(shù)據(jù)包后,如何經(jīng)過各層協(xié)議棧最后到達(dá)應(yīng)用程序呢?整個(gè)過程如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?以太網(wǎng)驅(qū)動(dòng)程序首先根據(jù)以太網(wǎng)首部中的“上層協(xié)議”字段確定該數(shù)據(jù)幀的有效載荷(payload,指除去協(xié)議首部之外實(shí)際傳輸?shù)臄?shù)據(jù))是IP、ARP還是RARP協(xié)議的數(shù)據(jù)報(bào),然后交給相應(yīng)的協(xié)議處理。假如是IP數(shù)據(jù)報(bào),IP協(xié)議再根據(jù)IP首部中的“上層協(xié)議”字段確定該數(shù)據(jù)報(bào)的有效載荷是TCP、UDP、ICMP還是IGMP,然后交給相應(yīng)的協(xié)議處理。假如是TCP段或UDP段,TCP或UDP協(xié)議再根據(jù)TCP首部或UDP首部的“端口號(hào)”字段確定應(yīng)該將應(yīng)用層數(shù)據(jù)交給哪個(gè)用戶進(jìn)程。IP地址是標(biāo)識(shí)網(wǎng)絡(luò)中不同主機(jī)的地址,而端口號(hào)就是同一臺(tái)主機(jī)上標(biāo)識(shí)不同進(jìn)程的地址,IP地址和端口號(hào)合起來標(biāo)識(shí)網(wǎng)絡(luò)中唯一的進(jìn)程。
? ? ? ?注意,雖然IP、ARP和RARP數(shù)據(jù)報(bào)都需要以太網(wǎng)驅(qū)動(dòng)程序來封裝成幀,但是從功能上劃分,ARP和RARP屬于鏈路層,IP屬于網(wǎng)絡(luò)層。雖然ICMP、IGMP、TCP、UDP的數(shù)據(jù)都需要IP協(xié)議來封裝成數(shù)據(jù)報(bào),但是從功能上劃分,ICMP、IGMP與IP同屬于網(wǎng)絡(luò)層,TCP和UDP屬于傳輸層。
轉(zhuǎn)載于:https://www.cnblogs.com/hehehaha/p/6332622.html
總結(jié)
以上是生活随笔為你收集整理的UNIX网络编程——TCP/IP简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Column store index 列
- 下一篇: 不支持 设备,