主要功能:
1. 資料分段(Segmentation) -> TCP/UDP
2. 加上來源及目的地的Port號碼 -> TCP/UDP
3. 加上序號(Seq) -> TCP
4. 加上錯誤檢查號 -> TCP/UDP
接收端:
1. Segment(區塊)重組 -> TCP
2. 依據目的地Port識別目的地的應用軟體 -> TCP/UDP
3. 錯誤檢查號碼若發現有錯誤,就會重新傳輸這個區塊 -> TCP/UDP
※送出去的Port通常就是目的地的接收Port,而它的Port來源都是隨機提供,不能猜測
----------------------
TCP、UDP協定特色比較:
TCP:
1. 連接導向
2. 傳輸消耗大,約 20 Bytes
3. 是最可靠的傳輸方式
4. 以Segment為傳輸單元
5. 有window(這可不是作業系統)識別
6. 每段Segment有標上序號,資料亂序到達目的地可作重組
UDP:
1. 非連接導向
2. 傳輸消耗低,僅 8 Bytes
3. 最不可靠的傳輸方式
4. 以Datagrams為傳輸單元
5. 無window識別
6. 沒有序號,資料亂序
兩者都有Port號碼的列表,提供的服務與Port大多不相同
0~1023 為已知(Well known)Port,這部份給應用軟體和服務
1024~49151 為註冊(Registered)Port,這部份是使用者的應用軟體程序,伺服器不用到這些Port
※但是這範圍會被隨機選用為來源Port
49152~65535 為私有(Private)Port通常在連線時動態指定給客戶端應用軟體。很少會被服務的 Port 設定
※但是部分P2P 會設定在此範圍(如FOXY,所以它特別難被抓...XD)
UDP快,但是不可靠;TCP慢,但是資料組成可靠
那麼,有沒有可能同時使用兩者的優點呢?
當然可以,部分軟體 UDP 被DNS 所使用以快速服務許多用戶端,但是在送出需求時會使用 TCP 。
如FLASHGET和Net Transport就是採用此種方式達到快速存取
應用層軟體使用 UDP 的包括:
Domain Name System (DNS)
Simple Network Management Protocol (SNMP)
Dynamic Host Configuration Protocol (DHCP)
Routing Information Protocol (RIP)
Trivial File Transfer Protocol (TFTP)
Online games(OLG)
UDP 僅依據收到的順序組裝資料並轉給應用軟體
如果資料順序對應用軟體很重要,應用軟體自己會想辦法辨別順序,決定如何處理
所以並不代表UDP完全無用,只是種低消耗的傳輸方式,剩下則由應用軟體決定
---------------------
識別網路存取:
請大家再做個LAB
開始>執行>cmd打開DOS
輸入:netstat後按下Enter
發現什麼了嗎?
你正在使用的服務會出現Port號碼以及你正在與哪些TCP服務連線
這些服務有可能是MSN之類的通訊軟體
也有可能是你正在開啟的網頁
更有可能是你被人家連線中,若你不能識別是何種來源,可以視為安全威脅的一種
網路不通時擔心是否中毒,不妨使用此指令檢查看看...˙ˇ˙
--------------------
TCP建立連線,主機會執行一個稱為三方握手( three-way handshake)的動作
目的是:
(1)確定目的地裝置是在網路上(對來源來說)
(2)核對目的地裝置的服務是活著(alive),且在目的地 Port 號上是接受用戶端使用連線的需求(對來源來說)
(3)通知目的地裝置,來源用戶端試圖在 Port 號上建立通訊的連線(對目的地來說)
建立的步驟:
1. 送出一 Segment 包含初始序號(Send Syn)
2. 伺服器回應用戶端一個segment 其包含了 ACK 號為收到的 SEQ序號加 1,及自己的 SEQ 序號
3. 用戶端會把收到的 ACK 數字當作SEQ,把收到的SEQ 加 1 後當作ACK,送回 ACK segment 給伺服器
流量控制Window Size:
Window Size 是 TCP 表頭的一個欄位,可以用來進行「遺失資料管理的」及「流量控制」
一次傳輸一個區段(segment)然後進行確認(ACK),稱為 Windowsize=1
這樣的傳輸會造成網路的浪費(overhead),可以將 Windows size 設定成較大
EX:序號由 2000 開始,每個區段 1000 個 bytes ,一次連續傳 10個區段,才進行一個確認(ACK)
因此傳回到來源端的 ACK 號為 12001 = (2000+10*1000+1)