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