840 likes | 991 Views
第九章 UDP 與 TCP. 不論是在 OSI 的七層或是 DoD 的四層,傳輸層都佔有一席之地,顯示其重要性,無法與其它層合併 傳輸層負責管理連接埠、流量控制、資料重送及錯誤處理等,傳輸層中最重要的就是 UDP 與 TCP ,他們的運作主要靠連接埠. 9-1 連接埠. 封包在網路上傳輸,送達目的端時,會送至對應的層去處理 但是送至應用層的應用程式時,該給哪一個程式處理? 若同時有多個相同程式在執行,該給哪一個處理才對? 這個時候就需要連接埠( Port )的幫忙了!. 當你到銀行辦事情的時候,是不是有過抽號碼牌等待的經驗?
E N D
不論是在OSI 的七層或是DoD 的四層,傳輸層都佔有一席之地,顯示其重要性,無法與其它層合併 • 傳輸層負責管理連接埠、流量控制、資料重送及錯誤處理等,傳輸層中最重要的就是UDP 與TCP,他們的運作主要靠連接埠
9-1連接埠 • 封包在網路上傳輸,送達目的端時,會送至對應的層去處理 • 但是送至應用層的應用程式時,該給哪一個程式處理? • 若同時有多個相同程式在執行,該給哪一個處理才對? • 這個時候就需要連接埠(Port)的幫忙了!
當你到銀行辦事情的時候,是不是有過抽號碼牌等待的經驗?當你到銀行辦事情的時候,是不是有過抽號碼牌等待的經驗? • 提供服務者會提出一個對口號碼,客戶也會有一個編號,以編號的對應將服務與客戶結合起來 • 電腦上的連接埠也就是以類似的概念來提供服務窗口與客戶之間的連接
連接埠是屬於一種邏輯上的觀念,使用網路的電腦中,被賦予了許許多多的連接埠;電腦中的應用程式,當需要使用網路時,便以連接埠編號來識別連接埠是屬於一種邏輯上的觀念,使用網路的電腦中,被賦予了許許多多的連接埠;電腦中的應用程式,當需要使用網路時,便以連接埠編號來識別 • 透過連接埠編號,接收封包時便可知要將封包交給哪個應用程式處理 • 一般會將IP位址加上連接埠合併來定義出目的端的應用程式,稱為Socket Address,或簡稱Socket
連接埠是一個長度為16 Bits 的數字 • 因此編號可自0 到65535 • 要使用連接埠來識別應用程式不是隨便選取就可以,而是必須遵從IANA 所制定的規則 • IANA 將連接埠分為三大類 • 眾所皆知的(Well-Known) • 註冊過的(Registered) • 動態選取的(Dynamic)
眾所皆知的(Well-Known) • 編號從0 到1023 • 屬於一般提供網路服務,廣為人知的程式所使用,如:DNS、HTTP 等伺服器的服務程式 • 常見的如表9-1所示
註冊過的(Registered) • 編號從1024到49151 • 軟體公司在設計出新的軟體後,需要使用的特定的網路連接埠,可申請註冊,使用固定連接埠為其軟體專屬連接埠,以避免與其他軟體相衝突 • 如:MSN Messenger 使用編號1863 的TCP連接埠,Shockwave 使用編號1626 的TCP 連接埠
動態選取的(Dynamic) • 編號從49152 到65535 • 當使用者透過網路連線存取資源時,為了識別所運用的應用程式,使用者電腦可自行隨機分配的連接埠編號
因為伺服器提供服務給廣大使用者,利用固定的連接埠編號可以簡化使用者的連線需求因為伺服器提供服務給廣大使用者,利用固定的連接埠編號可以簡化使用者的連線需求 • 而且利用指定的連接埠便可知道是哪一個網路服務,提高網路服務程式的辨識度,也容易記憶 • 就像日常生活中,電話號碼110 就是報警、119 就是消防隊,這是一樣的道理
當使用者在電腦上使用瀏覽器(例如:Internet Explorer)連接上一台網頁伺服器(HTTP Server)時 • 電腦會自動分配一個連接埠編號給這個瀏覽器,放在封包內容的來源連接埠,目的連接埠就是編號80 • 如果使用者又另外開啟一個瀏覽器,同樣連接上這一台網頁伺服器,電腦會自動分配另一個連接埠編號給這個瀏覽器,放在封包內容的來源連接埠,目的連接埠也是編號80
當網頁伺服器回傳資料時 • 就將封包的來源連接埠設為編號80,目的連接埠設定為原來瀏覽器所使用的連接埠編號,分別回傳資料給兩個瀏覽器 • 因為有連接埠的識別,回傳的資料就不會送錯對象
有時為了讓架設的伺服器不隨便讓任何人都能使用,只提供服務給特定的人,會變更所使用的連接埠,並讓這些特定人士知道這個更改後的連接埠編號有時為了讓架設的伺服器不隨便讓任何人都能使用,只提供服務給特定的人,會變更所使用的連接埠,並讓這些特定人士知道這個更改後的連接埠編號 • 若要連接使用這些網路服務時,就一定要指定連接埠才能順利連接 • 如某些網頁代理伺服器(Proxy Server)便會將預設的連接埠編號80 改掉,多數習慣上會改為3128 或是8080
9-2 UDP • 使用者資料元協定(User Datagram Protocol,UDP)屬於比較簡易的傳輸協定,提供最基本的應用連接埠傳輸方式,依靠來源連接埠與目的連接埠的幫助,讓資料可以傳遞給正確的應用程式 • UDP 最顯著的特色,就是它屬於非連接式(Connectionless)的傳輸 • 也就是UDP 只負責資料的傳送 • 不管中間是否有差錯 • 也不管是否安全抵達 • 沒有確認與重送的機制 • 因此可靠性較差
雖然沒有提供可靠的傳輸,但在許多方面,仍會有需要使用到UDP 的地方,主要著眼點就在於UDP 簡便的傳送機制,可以符合以下幾點需求 • 上層已經具備完善的可靠性機制 • 利用上層的機制便可做到可靠性的檢查與補救措施,如:資料確認與資料重送,不需傳輸層提供此類服務
傳遞非重要的資料 • 資料在傳送中遺失或是缺漏並不影響整體的運作,如:週期性的訊息,這次有問題,等下一週期再傳送便可 • 減少電腦資源的耗用 • 當處理資料量大而頻繁時,希望在傳輸上能盡量降低電腦資源的需求,便可利用UDP • 需要做廣播或是多點傳播時 • 連接式的傳輸只能提供一對一的傳送,所以要做廣播或是多點傳播時,便需使用非連接式的傳輸方式
需要用到UDP 的情況,常見於下面幾種資料傳輸類型 • 對內資料蒐集 • 包括定期的資料取樣、安全或網路設備自動產生的自我測試報告等,在即時監控環境,偶而流失片段的資料並無大礙,因為馬上又有新的資料會進來 • 對外資料傳播 • 包括對網路使用者的廣播訊息,新節點的宣告、服務位址的改變等
請求與回應 • 一般的伺服器會提供服務給很多使用者,在溝通之間常會有一堆的請求與回應的訊息, 若是提供太複雜的連線傳輸則會耗費太多資源 • 即時性的應用程式 • 如聲音、影像等,即時程式講求時效性,需要盡量減少資源與時間的耗費 • UDP 最大的特色就在於它的簡易與快速。若是考慮以反應速度為主要訴求,又不必顧慮安全性或是可靠性的問題,UDP 通常會是最佳選擇
9-2-1 UDP 封包 • UDP 的封包分為UDP 表頭及UDP 資料 • 資料部份來自於上層,封裝後會成為IP 的Payload 部分
來源連接埠(Source Port) • 長度為16 Bits,記錄來源端所使用的應用程式對應的連接埠編號 • 所以目的端接收到封包後,便知道該回應的是哪一個連接埠編號 • 在產生回應封包時,將其置於回應封包的目的連接埠欄位中 • 目地連接埠(Destination Port) • 長度為16 Bits,記錄目的端所使用的應用程式或網路服務對應的連接埠 • 通常就是表9-1 所示的常見服務連接埠編號 • 從目的連接埠編號,目的端在接收到封包時,便知道要給哪一個網路服務或是應用程式去處理 • 在產生回應封包時,也就使用這個連接埠編號作為回應封包的來源連接埠欄位的值
長度(Length) • 長度為16 Bits,以Bytes 為單位,記錄整個UDP 封包的長度 • 若是沒有搭載UDP 資料,則欄位值為8 • 由於UDP 不做切割與重組,UDP 封包最大只能等於IP 封包Payload 的長度 • 錯誤檢查碼(Checksum): • 長度為16 Bits,記錄UDP 封包傳送前所計算出的錯誤檢查碼 • 有時為了避免電腦資源的耗用,會省略錯誤檢查碼的計算,便將本欄位填上0
9-3 TCP • 傳輸控制協定(Transmission Control Protocol,TCP) • 同樣依靠來源連接埠與目的連接埠的幫助,讓資料可以傳遞給正確的應用程式 • 屬於比UDP 複雜的傳輸協定 • 提供較可靠的應用連接埠的傳輸方式 • TCP 使用連接導向式(Connection-Oriented)的傳輸 • 應用程式在資料傳輸之前,會先建立起TCP 的連線,透過相關參數的設定,提供可靠性的資料傳輸
所謂的可靠性,來自於TCP 的以下幾個特性 • 連線導向 • 資料確認與重送 • 流量控制
9-3-1 連線導向 • TCP 在提供傳輸之前,必須先建立起傳輸的連線,建立連線的動作含有以下幾個目的 • 讓連線的雙方確認彼此的存在 • 讓連線的雙方協議出共通的傳輸參數 • 讓連線的雙方預先配置傳送所需使用的資源
在介紹TCP 連線的建立之前,先說明幾個在後面會遇到的名詞 • 初始序號(Initial Sequence Number,ISN) • 序號(Sequence Number) • 回應號碼(Acknowledgement Number) • 滑窗大小(Window Size)
初始序號(Initial Sequence Number,ISN) • 開始建立連線時,電腦會隨機產生的一個號碼,用來編排後續的順序 • 之後的封包便以ISN 為基礎往上加 • 以Byte 為計算單位 • 序號(Sequence Number) • 記錄資料傳輸時,封包的順序號碼 • 這個順序號碼指的是封包中Payload 的第1 個Byte 的編號 • 例如:第一個封包的編號為ISN+1,若是Payload 長度為100 Bytes,則第二個封包的序號便是ISN+101
回應號碼(Acknowledgement Number) • 指下一個接收到的封包,其序號應該是多少 • 例如:接收到的封包,序號為1001,Payload 長度為200 • 可以計算出下一個封包的序號應該是1201 • 因此回應號碼的欄位號碼就是1201 • 滑窗大小(Window Size) • 滑窗(Sliding Window)可用來控制資料的傳輸量,用來做流量控制(詳情請見9-3-3) • 滑窗大小標示著用來控制的滑窗所定義的量
建立連線 • 連線導向的傳輸連線建立,就好像在打籃球時,要將球傳給隊友前,若是出其不意的將球丟給隊友,常容易導致隊友在沒有準備的情形下漏接 • 為了確保球能準確的傳給隊友,傳球前應該先跟隊友打聲招呼,讓隊友有所準備,球才能準確的被隊友接住
要建立連線時,會先由一方提出連線請求 • 提出建立連線請求的一方稱為主動端(Active) • 另外一端則稱為被動端(Passive) • 當傳輸結束,需要中斷連線時 • 則由主動端或是被動端都可主動提出中斷連線請求 • 建立連線的過程稱為三向交握(3-way Handshaking) • 代表人們見面時握手問好的禮貌性問候,包含3 個動作 • 如圖9-7 所示,先跟接收端打聲招呼,讓接收端預先做好準備,當3 個動作完成,才將資料送出
TCP 是雙向傳輸的協定 • 建立連線後,主動端可傳送資料給被動端,被動端也可傳輸資料給主動端 • 所以資料傳輸時,封包當中的訊息就同時包含兩個方向的資料
三向交握的步驟 • 要求同步 • 主動端送出一個同步(Synchronize,SYN)封包,指定雙方的連接埠編號,還有序號、回應號碼與滑窗大小
回應同步 • 被動端接收到SYN 封包時,會產生SYN-ACK 封包以回應 • 一方面對SYN 封包的同步要求做回應 • 一方面啟動自己的同步要求 • 同樣會指定雙方的連接埠編號,還加上表9-4 的資料
回應 • 主動端接收到SYN-ACK 封包後,會再產生回應封包,以回應SYNACK • 除了指定雙方的連接埠編號,還加上表9-5 的資料
連線建立完成後,接著便開始傳送資料封包,資料封包的序號欄位與回應號碼欄位會逐次遞增1,以標示封包傳輸的順序連線建立完成後,接著便開始傳送資料封包,資料封包的序號欄位與回應號碼欄位會逐次遞增1,以標示封包傳輸的順序
中斷連線 • TCP 連線在傳輸之前預先建立起連線,以配置相關資源,讓資料能順利傳輸 • 當傳輸完畢,也要有中斷連線的動作,以釋放之前所配置的資源 • 資料的傳輸是雙向的,某一方向的資料傳輸完畢,可能另一方向的資料還正在進行傳輸,所以連線的中斷需分兩個方向個別進行 • 每個方向的連線中斷會包含2 個動作:要求中斷與回應中斷,因此整個中斷將進行4 個動作
假設由主動端傳送給被動端的資料已經傳輸完畢,而被動端傳送給主動端的資料仍在傳輸中假設由主動端傳送給被動端的資料已經傳輸完畢,而被動端傳送給主動端的資料仍在傳輸中
中斷連線的4 個動作 • Step 1.主動端要求中斷 • 因為資料傳輸完畢,主動端會產生一個完成(Finish,FIN)封包並傳送給被動端,告知要中斷主動端往被動端方向的連線 • 封包資料內容除了指定雙方的連接埠編號,還加上表9-6 的資料
Step 2.被動端對主動端的中斷回應 • 被動端接收到主動端的FIN 封包,會產生ACK 封包回應其中斷要求 • 封包資料內容除了指定雙方的連接埠編號,還加上表9-7 的資料
當ACK 封包成功傳到主動端,則表示主動端往被動端方向的傳輸連線已經中斷 • 此時被動端往主動端的方向仍在傳輸 • 等傳輸完畢,被動端便會送出要求中斷的封包