ADVERTISEMENT
傳輸層
傳輸層負責打包由應用層傳來的資料,或是拆解由網路層傳來的東西,協定不若應用層那麼多,甚至可以說是網路4層模型中最少的,絕大多數僅使用其中2種傳輸協定:TCP和UDP。
UDP
使用者資料電報協定(User Datagram Protocol)的表頭格式相當簡單,僅包含4個部分:來源連接埠、目的連接埠、資料長度、校驗,全部只有8 Byte的長度。
當使用者的電腦使用許多網路應用程式時,便需要連接埠的幫忙,每個單一的連接埠負責服務單一應用程式,讓資料不混淆。由於埠的欄位有2 Byte,數值可從0~65535,其中有幾個埠是大家公認,提供給特定服務的專用埠,如DNS服務的53、網路時間協定的123……。當然,這只是公認,並非絕對,你想要使用這些埠也可以,但若發生連線問題可就怨不得人。
資料長度就是此份UDP資料的大小,最小8 Byte(僅有UDP標頭),校驗碼負責檢查所攜帶的資料是否正確。UDP和TCP的校驗計算中,有使用到「虛擬表頭」的功能,也就是將有關IP位址的資訊也加入計算之中,但實際上這些資訊並不隨UDP和TCP傳送,而是由更下1層的網路層獲得。
▲UDP的表頭欄位定義
TCP
傳輸控制協定(Transmission Control Protocol)是現今網路主要的傳輸協定,重要性甚至與下1層的IP協定共稱為TCP/IP,想要網路產品順暢傳輸資料,選擇這2種協定就對了。
TCP的表頭比起UDP複雜得多,因為TCP擁有更多控制以及復原功能,包含確認連線的3方交握程序、回傳確認封包(ACK)、限制流量的視窗大小。TCP也有公認埠號的存在,FTP資料埠20、FTP控制埠21、SMTP的25、HTTP的80等。
首先是來源埠與目的地埠,原理和UDP相同。sequence number在傳送方首次連線時會設定隨機亂數,之後會逐漸加上已傳輸的資料量(以位元組為單位)。acknowledge number主要是給接收方使用,將sequence number和接收位元組相加,傳回給發送方。以上的流程操作確認了TCP不會有遺失封包的情形發生,因為當發送方在一定時間內沒有收到接收方回傳的ACK,就判斷封包傳送有問題無法送達,會將資料再傳送1次。
data offset標明資料的起始處在哪裡,因為受到TCP表頭尾端有個option欄位,長度不固定所致。reservation欄目保留未使用,而code bit長度僅6 bit,但每個bit都有其實際意義。
code bit的第一個bit為UGR,此值設為1時,將中斷目前的資料傳輸,優先傳輸此資料。第二個bit為ACK,表示acknowledge number有效。第三個為PSH,一般來說,TCP的資料會先進入傳送緩衝區,累積到一定的量時才傳送,但當PSH設為1時,緩衝區內的資料就會立即送出。第四個為RST,可要求立即中斷連線,不經過確認斷線步驟。第五、第六個分別為SYN和FIN,分別在請求連線和請求斷線時設定為1。
window可告知目前的接收緩衝區還有多少的空間,對方傳送資料時便不會送出超過此數值的資料,避免緩衝區溢位導致資料流失需要重傳,浪費頻寬。checksum用來檢查資料是否正確,也有使用虛擬表頭的功能,將其它的資訊一同放入運算。urgent pointer在UGR設定為1時,標出緊急資料的位置。option則是選用欄位,可表示接收方能夠支援的最大資料區段大小,如果選用欄位的資料長度不是32 bit的整數時,會在其後填入0,對齊邊界。
▲TCP的表頭欄位定義
網路層(Internet Layer)
在網路層中,應用最廣的就是IP協定,然而IP協定存在著許多版本,目前世界上應用最廣的是第四版,第六版也已制定完成、實作,由於IPv4位址在可預見的未來中一定會配發完畢,各地也已開始佈建支援IPv6的硬體設施和軟體服務。
IPv4
IPv4的表頭最小為20 Byte,其中包含了IP位址、服務類型、存活時間等重要參數。首先由4 bit的version開頭,由於是IPv4版本,所以填入的值為4。IHL標出表頭大小,由於有option欄位,數值從5~15不定。DSField欄位一開始為type of service,但在RFC 2474中重新定義,前6 bit為DSCP,標出這個資料的優先權,後2 bit目前保留未使用。total length為IP封包長度(含標頭),identification提供1個序列號,讓接收端能夠依照號碼,重組出原始的資料。flag提供封包是否分段的訊息,而fragment offset就是用來指出目前這個資料分段在原始資料中的位置。
TTL控制此封包能夠經過的網路節點數,每經過網路節點此值就減1,數值為0時,網路裝置就捨棄此封包。protocol指出需要由何種傳輸層協定處理,如TCP就設定為6,UDP設定為17。header checksum負責檢查IP表頭部分有沒有問題,若檢驗不合,此封包會被直接丟棄。source address和destination address如同字面解釋,分別填入來源位址和目的地位址。最後的選項欄位並不一定要存在,但長度一定是32 bit的整數倍,不足的部分填入0。
▲IPv4的表頭欄位定義
鏈結層(Link Layer)
終於到了最後1層,鏈結層終於要把資料,實際在媒體上傳輸、存取。下面這個例子就是目前比較常用的Ethernet範例:
Ethernet的表頭相當簡單,只有目的地位址、來源位址、網路協定型態。目的地位址來源位址的長度都是6 Byte,裡面放的是實際網路介面卡的MAC位址。type指的是後面跟著的資料為何種網路協定,一般採用TCP/IP的協定,此欄就填入2048,此外像是Apple Talk協定,就填入32923。
最前端有個preamble的部分,主要是給接收端使用,讓接收端和發送端能夠同步。前7 Byte為10101010,最後1Byte為10101011。鏈結層也是唯一一層在資料尾端加入額外資訊,Ethernet在尾端加入4 Byte CRC檢查碼。
▲Ethernet的欄位定義
▲MAC(媒體存取控制,media access control)位址,每個網路介面都會有的獨立編號
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!