TCP/IP

文章推薦指數: 80 %
投票人數:10人

IP 封包表頭格式 TCP/IP IP封包表頭格式 Version InternetHeaderLength TypeofService TotalLength Identification Flag FragmentOffset TimeToLive Protocol HeaderChecksum SourceIPAddress DestinationIPAddress SOptions&Padding 若說起歷史,TCP/IP也算得上是個冷戰時代的產物,它是應美國國防部的戰爭考量而提出開發的。

TCP/IP當初是用來配合ARPANET(AdvancedResearchProjectsAgencyNetwork)來處理不同硬體之間的連接問題的,比如Sun系統和Mainframe、Mainframe和個人電腦之間的連接。

事實上,TCP/IP所指的是一整套龐大的通訊協定家族,其中以TransmissionControlProtocol(TCP)及InternetProtocol(IP)這兩套協定最具代表性。

IP協定工作於網路層(以後會繼續和大家探討OSI的網路層級),它提供了一套標準讓不同的網路有規則可循。

當然,前提是您想使用IP從一個網路將封包路由到另一個網路。

IP在設計上可用來在LAN-LAN及PC-PC之間進行傳輸的。

您可以把IP看成是游戲規則,而TCP則用來詮釋這些規則的。

雖然TCP/IP原先是專門為幾所大學和機構的使用而設計的,但現在TCP/IP已經成為最流行的通訊協定了,我們使用的Internet就是用TCP/IP來傳送封包的了。

下面就讓我們看看TCP/IP是怎樣工作的: 假如您的公司在好些地方都有分公司,各自都有著自己的本地網路(LAN),在總公司跑的是PC網路,但分公司大部份都是用麥金塔電腦。

當Mac有數據要傳送給PC的時候將會如何呢? 首先,TCP會在這兩個平臺建立起一個可以提供全雙工檢錯(對雙向的數據都進行錯誤檢測)的連接。

接著,IP制定好Mac和PC之間的溝通規則,TCP與上層協定制定用以連接的埠(port)。

到這裡為止,Mac端已經準備好數據了,如果數據太大,就將之分拆成幾份較小的封包,並且在封包上面加上一個新的header(內含轉送位址),確保封包會被正確傳送。

TCP/IP還會加上標籤說明數據的種類及其長度。

再下來,IP協定將負責將封包傳送給PC。

最後,在PC上面的TCP將封包解碼並翻譯成PC能夠懂的格式,也就是它自己所使用的網路協定。

IP封包表頭格式 Version(4) InternetHeaderLength(4) TypeofService(8) TotalLength(16) Identification(16) Flags(3) FragmentOffset(13) TimeToLive(8) Protocol(8) Headerchecksum(16) SourceAddress(32) DestinationAddress(32) Options(Variable) Padding(0-24)   Data 。







在上圖中,括號之內的數字就是各部件的長度(bit),如果您夠細心,就會計算得出每一行的總長度都是32bit。

事實上,真正的封包是有連續的位元依序排列在一起的,之所以分行,完全是因為排版的關係。

下面,我們分別對各部件名稱解釋一下 Version 版本(VER)。

表示的是IP規格版本,目前的IP規格多為版本4(version4),所以這裡的數值通常為0x4(注意:封包使用的數字通常都是十六進位的)。

InternetHeaderLength 標頭長度(IHL)。

我們從IP封包規格中看到前面的6行為header,如果Options和Padding沒有設定的話,也就只有5行的長度﹔我們知道每行有32bit,也就是4byte﹔那麼,5列就是20byte了。

20這個數值換成16進位就成了0x14,所以,當封包標頭長度為最短的時候,這裡數值會被換算為0x14。

TypeofService 服務類型(TOS)。

這裡指的是IP封包在傳送過程中要求的服務類型,其中一共由8個bit組成,每組bit組合分別代表不同的意思: TotalLength 封包總長(TL)。

通常以byte做單位來表示該封包的總長度,此數值包括標頭和數據的總和。

Identification 識別碼(ID)。

每一個IP封包都有一個16bit的唯一識別碼。

我們從OSI和TCP/IP的網路層級知識裡面知道:當程式產生的數據要通過網路傳送時,都會在傳送層被拆散成封包形式發送,當封包要進行重組的時候,這個ID就是依據了。

Flag 旗標(FL)。

這是當封包在傳輸過程中進行最佳組合時使用的3個bit的識別記號。

FragmentOffset 分割定位(FO)。

當一個大封包在經過一些傳輸單位(MTU)較小的路徑時,會被被切割成碎片(fragment)再進行傳送(這個切割和傳送層的打包有所不同,它是由網路層決定的)。

由於網路情況或其它因素影響,其抵達順序並不會和當初切割順序一至的。

所以當封包進行切割的時候,會為各片段做好定位記錄,所以在重組的時候,就能夠依號入座了。

如果封包沒有被切割,那麼FO的值為“0”。

TimeToLive 存活時間(TTL)。

這個TTL的概念,在許多網路協定中都會碰到。

當一個封包被賦予TTL值(以秒或跳站數目(hop)為單位),之後就會進行倒數計時。

在IP協定中,TTL是以hop為單位,每經過一個router就減一),如果封包TTL值被降為0的時候,就會被丟棄。

這樣,當封包在傳遞過程中由於某些原因而未能抵達目的地的時候,就可以避免其一直充斥在網路上面。

有隻叫做traceroute的程式,就是一個上佳的TTL利用實作,我們會在後面的章節裡面討論。

Protocol 協定(PROT)。

這裡指的是該封包所使用的網路協定類型,例如:ICMP或TCP/UDP等等。

HeaderChecksum 標頭檢驗值(HC)。

這個數值主要用來檢錯用的,用以確保封包被正確無誤的接收到。

當封包開始進行傳送後,接收端主機會利用這個檢驗值會來檢驗餘下的封包,如果一切看來無誤,就會發出確認信息,表示接收正常。

SourceIPAddress 來源位址(SA)。

相信這個不用多解釋了,就是發送端的IP位址是也,長度為32bit。

DestinationIPAddress 目的地位址(SA)。

也就是接收端的IP位址,長度為32bit。

Options&Padding 這兩個選項甚少使用,只有某些特殊的封包需要特定的控制,才會利用到。

Copyright©2003byTWNIC.Allrightsbereserved.



請為這篇文章評分?