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