計(jì)算機(jī)網(wǎng)絡(luò)理論把這整個(gè)過程定義成一個(gè)分層服務(wù)體系。在國(guó)際標(biāo)準(zhǔn)組織(ISO)的著名標(biāo)準(zhǔn)開放式系統(tǒng)互聯(lián)參考模型(OSI)里,這個(gè)復(fù)雜的體系依次有應(yīng)用層、表示層、會(huì)話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層,稱為ISO七層模型。ISO七層模型如下圖:
在數(shù)據(jù)的實(shí)際傳輸中,發(fā)送方將數(shù)據(jù)送到自己的應(yīng)用層,加上該層的控制信息后傳給表示層;表示層也將數(shù)據(jù)加上自己的標(biāo)識(shí)傳給會(huì)話層;以此類推,每一層都在收到的數(shù)據(jù)上加上本層的控制信息并傳給下一層;最后到達(dá)物理層時(shí),數(shù)據(jù)通過實(shí)際的物理媒體傳到接收方。接收端則執(zhí)行與發(fā)送端相反的操作,由下往上,將逐層標(biāo)識(shí)去掉,重新還原成最初的數(shù)據(jù)。由此可見,數(shù)據(jù)通訊雙方在對(duì)等層必須采用相同的協(xié)議,定義同一種數(shù)據(jù)標(biāo)識(shí)格式,這樣才可能保證數(shù)據(jù)的正確傳輸。
實(shí)際使用的協(xié)議是否嚴(yán)格按照這七層來(lái)定義呢?
并非如此,OSI七層模型是一個(gè)理論模型,實(shí)際應(yīng)用則千變?nèi)f化,因此更多把它作為分析、評(píng)判各種網(wǎng)絡(luò)技術(shù)的依據(jù);對(duì)大多數(shù)應(yīng)用來(lái)說,只將它的協(xié)議族(即協(xié)議堆棧)與七層模型作大致的對(duì)應(yīng),看看實(shí)際用到的特定協(xié)議是屬于七層中某個(gè)子層,還是包括了上下多層的功能.
第一篇,先說最基礎(chǔ)的東西,就是OSI七層模型。
最初,各個(gè)廠商的設(shè)備,系統(tǒng),各有各的一套,彼此之間很難互相通信,要建立一個(gè)網(wǎng)絡(luò),就只能選一家廠商的設(shè)備,比如說全I(xiàn)BM的,或全DECnet的,用一種系統(tǒng),那時(shí)UNIX大行其道。后來(lái)用Windows的網(wǎng)絡(luò)也慢慢多了起來(lái),基于將不同網(wǎng)絡(luò)互連的迫切要求,國(guó)際標(biāo)準(zhǔn)化組織ISO于上世紀(jì)70年代發(fā)布了OSI七層網(wǎng)路模型,以規(guī)范化網(wǎng)絡(luò)設(shè)計(jì)。那為什么要分層呢?是因?yàn)槌鲇趯?shù)據(jù)處理分步的考慮。總結(jié)來(lái)說,OSI網(wǎng)七層絡(luò)模型的用處如下:
1.使不同廠商在開發(fā)設(shè)備的時(shí)候有個(gè)公共的標(biāo)準(zhǔn),讓不同廠商開發(fā)出來(lái)的設(shè)備能夠互相通信。
2.使不同系統(tǒng)之間能夠互相通信,如UNIX、Winsows和Mac。
3.分層使數(shù)據(jù)處理分步,互相之間不造成影響。
OSI七層網(wǎng)絡(luò)模型由下至上為1至7層,分別為物理層(Physical layer),數(shù)據(jù)鏈路層(Data link layer),網(wǎng)絡(luò)層(Network layer),傳輸層(Transport layer),會(huì)話層(Session layer),表示層(Presentation layer),應(yīng)用層(Application layer)。其中上三層稱之為高層,定義應(yīng)用程序之間的通信和人機(jī)界面。什么意思呢,就是上三層負(fù)責(zé)把電腦能看懂的東西轉(zhuǎn)化為你能看懂的東西,或把你能看懂的東西轉(zhuǎn)化為電腦能看懂的東西。下四層稱之為底層,定義的是數(shù)據(jù)如何端到端的傳輸(end-to-end),物理規(guī)范以及數(shù)據(jù)與光電信號(hào)間的轉(zhuǎn)換。先面一層一層的來(lái)說明。從上層說起。
應(yīng)用層,很簡(jiǎn)單,就是應(yīng)用程序。這一層負(fù)責(zé)確定通信對(duì)象,并確保由足夠的資源用于通信,這些當(dāng)然都是想要通信的應(yīng)用程序干的事情。
表示層,負(fù)責(zé)數(shù)據(jù)的編碼、轉(zhuǎn)化,確保應(yīng)用層的正常工作。這一層,是將我們看到的界面與二進(jìn)制間互相轉(zhuǎn)化的地方,就是我們的語(yǔ)言與機(jī)器語(yǔ)言間的轉(zhuǎn)化。數(shù)據(jù)的壓縮、解壓,加密、解密都發(fā)生在這一層。這一層根據(jù)不同的應(yīng)用目的將數(shù)據(jù)處理為不同的格式,表現(xiàn)出來(lái)就是我們看到的各種各樣的文件擴(kuò)展名。
會(huì)話層,負(fù)責(zé)建立、維護(hù)、控制會(huì)話,區(qū)分不同的會(huì)話,以及提供單工(Simplex)、半雙工(Half duplex)、全雙工(Full duplex)三種通信模式的服務(wù)。我們平時(shí)所知的NFS,RPC,X Windows等都工作在這一層。
傳輸層,負(fù)責(zé)分割、組合數(shù)據(jù),實(shí)現(xiàn)端到端的邏輯連接。數(shù)據(jù)在上三層是整體的,到了這一層開始被分割,這一層分割后的數(shù)據(jù)被稱為段(Segment)。三次握手(Three-way handshake),面向連接(Connection-Oriented)或非面向連接(Connectionless-Oriented)的服務(wù),流控(Flow control)等都發(fā)生在這一層。
網(wǎng)絡(luò)層,負(fù)責(zé)管理網(wǎng)絡(luò)地址,定位設(shè)備,決定路由。我們所熟知的IP地址和路由器就是工作在這一層。上層的數(shù)據(jù)段在這一層被分割,封裝后叫做包(Packet),包有兩種,一種叫做用戶數(shù)據(jù)包(Data packets),是上層傳下來(lái)的用戶數(shù)據(jù);另一種叫路由更新包(Route update packets),是直接由路由器發(fā)出來(lái)的,用來(lái)和其他路由器進(jìn)行路由信息的交換。
數(shù)據(jù)鏈路層,負(fù)責(zé)準(zhǔn)備物理傳輸,CRC校驗(yàn),錯(cuò)誤通知,網(wǎng)絡(luò)拓?fù)洌骺氐。我們所熟知的MAC地址和交換機(jī)都工作在這一層。上層傳下來(lái)的包在這一層被分割封裝后叫做幀(Frame)。
物理層,就是實(shí)實(shí)在在的物理鏈路,負(fù)責(zé)將數(shù)據(jù)以比特流的方式發(fā)送,接收,就不多說了。
TCP/IP四層協(xié)議 應(yīng)用層 表示層 會(huì)話層 傳輸層 網(wǎng)絡(luò)層 數(shù)據(jù)鏈路層 物理層 網(wǎng)絡(luò)接口層
TCP/IP的多數(shù)應(yīng)用協(xié)議將OSI應(yīng)用層、表示層、會(huì)話層的功能合在一起,組成應(yīng)用層,典型協(xié)議有:HTTP、FTP、TELNET等;TCP/UDP協(xié)議對(duì)應(yīng)OSI的傳輸層,提供上層數(shù)據(jù)傳輸保障;IP協(xié)議對(duì)應(yīng)OSI的網(wǎng)絡(luò)層;TCP/IP的最底層功能由網(wǎng)絡(luò)接口層實(shí)現(xiàn),相當(dāng)于OSI的物理層和數(shù)據(jù)鏈路層,TCP/IP應(yīng)用已有的底層網(wǎng)絡(luò)實(shí)現(xiàn)傳輸,對(duì)該層并未作嚴(yán)格定義。
淺談TCP/IP
TCP/IP由上至下分為應(yīng)用層(Application layer),傳輸層(Transport layer)——其實(shí)應(yīng)稱為:主機(jī)對(duì)主機(jī)傳輸層(Host-Host Transport layer),網(wǎng)際層(Internet layer),網(wǎng)絡(luò)存取層(Network Access layer)——其實(shí)就是我們說的物理層。
1 Network Access layer
有關(guān)物理層的東西都是一些專家級(jí)的東西,有興趣的可以參看
RFC826 地址解析協(xié)議(Address Resolution Protocal ARP)
rfc 894 以太網(wǎng)的IP數(shù)據(jù)報(bào)傳送標(biāo)準(zhǔn)。
2 Internet layer
主要功能:
a 定義數(shù)據(jù)報(bào),它是Internet中的基本傳送單位
b 定義Internet的尋址方式
c 在Network Access layer和Host-Host Transport layer間移動(dòng)數(shù)據(jù)
d 決定數(shù)據(jù)報(bào)到遠(yuǎn)程主機(jī)的路由
e 執(zhí)行數(shù)據(jù)報(bào)的分解(fragmenting)及重組
這層中最重要的是ICMP(Internet Control Message Protocal
網(wǎng)際控制報(bào)文協(xié)議).有關(guān)RFC792定義可以看。
3 Host-Host Transport layer
這層中我只想說一點(diǎn),這也是方便大家看掃描原理的理解.
在說之前先說一個(gè)定義:握手:在數(shù)據(jù)傳輸之前,兩端點(diǎn)間交換控制信息以建立連接的過程叫"握手",在掃描器原理中大家一定?吹疥P(guān)于TCP的掃描原理,這其中有一個(gè)"三次握手"的說法.個(gè)人認(rèn)為實(shí)在不妥.為什么?請(qǐng)看握手的定義.看了這么多人的文章,只有霧中鳥前輩的說法較準(zhǔn)確.個(gè)人認(rèn)為叫"三段式握手"更好.現(xiàn)在來(lái)詳細(xì)說一下這個(gè)過程.首先,發(fā)起方A主機(jī)給B主機(jī)一個(gè)數(shù)據(jù)段,其中設(shè)置了同步序號(hào)(Synchronize
sequence number
SYN)位.這個(gè)數(shù)據(jù)段告訴B主機(jī),A希望建立連接以及A將使用的數(shù)據(jù)段起始序號(hào).B主機(jī)用設(shè)置了ACK(ackonwledement)以及SYN位的數(shù)據(jù)段回應(yīng)A.B的數(shù)據(jù)段向A確認(rèn),收到A的數(shù)據(jù)段.同時(shí)也告訴A,B將使用的起始序號(hào).最后A再傳送一個(gè)數(shù)據(jù)段給B,通知收到數(shù)據(jù)段.到此完成整個(gè)"三段式握手".從這以后才開始數(shù)據(jù)的傳輸.在數(shù)據(jù)傳輸完畢以后再來(lái)一次"三段式握手"來(lái)結(jié)束連接.
在傳輸層里除了TCP還有一個(gè)重要的協(xié)議是UDP.這個(gè)協(xié)議相信大家對(duì)他最熟悉的是提供"不可靠的連接"那么這個(gè)不可靠連接是指什么能?它只是指不提供驗(yàn)證數(shù)據(jù)正確到達(dá)網(wǎng)絡(luò)彼端的技術(shù).UDP利用報(bào)文頭中的第一字中的"源端口"(source
port)和"矢端口"(destination port)號(hào)碼,將數(shù)據(jù)傳輸給正確的應(yīng)用程序。
傳輸層就簡(jiǎn)單的說這么多。
4 Application layer
這個(gè)是大家常用的東東,網(wǎng)上很多有關(guān)TCP/IP的教材說的也夠清楚了.這里就簡(jiǎn)短的說一下.這層主要包括:telnet
FTP,SMTP,HTTP,DNS(Domain Name Service域名服務(wù)協(xié)議),OSPF(Open Short
Path First 開放式最短路由優(yōu)先協(xié)議),NTS這些協(xié)議。
最后補(bǔ)充一些TCP/IP對(duì)不同層次使用的數(shù)據(jù)的不同名稱.方便以后大家在看文章的時(shí)候理解使用的是何種協(xié)議.使用TCP的應(yīng)用程序稱數(shù)據(jù)為"流"(stream),使用UDP的應(yīng)用程序稱數(shù)據(jù)為"報(bào)文"(message).TCP把數(shù)據(jù)叫做"數(shù)據(jù)段"(segment),UDP稱它的數(shù)據(jù)結(jié)構(gòu)為"分組包"(packet).網(wǎng)際層將所有的數(shù)據(jù)視為區(qū)塊.
稱為"數(shù)據(jù)報(bào)"(datagram),低層網(wǎng)絡(luò)傳送的數(shù)據(jù)一般稱為"分組包"或"幀"(frame)。