Unix網路程式設計 傳輸層 TCP和UDP

2021-06-14 03:28:19 字數 2984 閱讀 8915

第二章、傳輸層:tcp、udp和sctp

1、使用者資料報協議(udp)

1)描述

應用程式往乙個udp套接字寫入一條訊息,該訊息隨後被封裝到乙個udp資料報,又被封裝到乙個ip資料報,然後發往目的地

2)特點

①缺乏可靠性

資料報到達目的地,但是檢驗和檢測有錯誤,或者該資料報在網路傳輸被丟棄,不會自動重傳。不會保證先後順序,不保證資料重複處理

②無連線

客戶與伺服器不存在長期的關係。客戶可以建立套接字並傳送資料報到給定伺服器,然後立即用同一套接字傳送另乙個資料報給另乙個伺服器

2、傳輸控制協議(tcp)

1)特點

①面向連線

提供客戶與伺服器之間的連線。先建立連線,跨連線交換資料,終止連線

②可靠性

當tcp向另一端傳送資料時,它要求另一端返回乙個確認。如果沒有收到確認,tcp自動重傳資料並等待一段時間。數次重傳失敗,tcp才放棄

注:tcp並不保證資料一定被對方端點接受。提供的是資料的可靠遞送或故障的可靠通知

含有動態估算客戶和伺服器之前的往返時間的演算法(rtt)

通過給其中每個位元組關聯乙個序列號對所傳送的資料進行排序

③流量控制

滑動視窗:通知對端在任何時刻能夠接受多少位元組的資料

在任何時刻,該視窗指出接受緩衝區中當前可用的空間量,確保不會發生溢位

④全雙工

乙個連線在兩個方向傳送資料和接收資料

3、tcp連線的建立和終止

1)三路握手

①伺服器準備好接受客戶的連線。通過呼叫socket、bind和listen完成工作,稱為被動開啟

②客戶呼叫connect發起主動連線,導致客戶tcp傳送乙個syn分節,告訴伺服器在連線中傳送資料的初始序列號。通常不帶資料

③伺服器必須確認(ack)客戶的syn,同時傳送乙個syn分節,含有伺服器在同一連線中傳送資料的初始序列號。

④客戶必須確認伺服器的syn

ack確認號是傳送這個ack的一端所期待的下乙個序列號,每個fin(表示結束)的ack的確認號同樣加1

2)tcp連線終止

①某個應用程序呼叫close,稱為執行主動關閉。傳送乙個fin分節,表示資料傳送完畢

②接受到這個fin的對端執行被動關閉。它的接受作為乙個檔案結束符,因為fin的接受意味著再無額外資料可接收

③一段時間,接收到檔案結束符的應用程序呼叫close關閉它的套接字。導致它的tcp傳送乙個fin

④接收到這個最終fin的原傳送端tcp確認這個fin

3)tcp狀態轉換圖

①建立連線

主動:close——syn_sent——established

被動:close——listen——syn_rcvd——established

②斷開連線

主動:established——fin_wait_1——fin_wait_2——time_wait

被動:established——close_wait——last_ack

4、time_wait狀態

msl:最長分節生命期。任何ip資料報能夠在網際網路中存活的最長時間

重複的分組:分組在網路中迷途。某個路由器損壞導致路由迴圈,傳送端tcp超時重傳,修復後迷失的分組也被送到目的地

time_wait停留在這個狀態的持續時間是2msl

存在理由:

1)可靠地實現tcp全雙工連線的終止

2)允許老的重複分節在網路中消逝

5、埠號

埠號:16位整數

伺服器一般採用眾所周知的埠號,客戶使用臨時埠號,只需確保唯一性

劃分:1)眾所周知的埠為0-1023

2)已登記的埠為1024-49151

3)動態或私用的埠為49152-65535

套接字對:乙個tcp連線的兩個端點的四元組

6、tcp埠號與併發伺服器

併發伺服器:主伺服器迴圈通過fork派生乙個子程序來處理每個新的連線

多宿主機:乙個機器有多個ip

1)監聽套接字

伺服器在某個或任意本地介面的埠等待連線請求,外地ip位址和埠沒有指定

例: *星號表示萬用字元,通配的位址表示任意,套接字位址ip位址字段設定為inaddr_any

2)已連線套接字

使用與監聽套接字相同的本地埠。連線一旦建立,已連線套接字的本地位址隨即填入

tcp必須通過套接字對的所有4個元素才能確定由哪個端點接受某個到達的分節

7、緩衝區大小及限制

1)tcp輸出

①當應用程序呼叫write,核心從應用程序的緩衝區複製所有資料到所寫套接字的傳送緩衝區

②如果緩衝區空間不夠,則應用程序被投入睡眠。

③核心不從write系統呼叫返回,直到應用程序緩衝區中所有資料都複製到套接字傳送緩衝區

注:成功返回僅僅代表可重新使用應用程序緩衝區,不表明對端tcp或應用程序已接收到資料

④對端必須確認收到的資料,收到對段的ack,本端tcp才能從套接字傳送緩衝區丟棄已確認的資料(之前必須保留資料的副本,直到被確認)

⑤本端tcp以mss大小或更小的塊把資料傳遞給ip,同時每個資料安上乙個tcp首部構成tcp分節

注:mss或是由對端通告的值,或是536。536是ipv4最小重組緩衝區位元組數576減去ip首部位元組數20和tcp首部位元組數20的結果

8、常見網際網路應用的協議使用

UNIX 網路程式設計 chapter 2 傳輸層

udp 全雙工 無連線 不可靠的資料報協議 tcp 全雙工 面向連線 可靠的位元組流協議 icmp 網際控制訊息協議 處理在路由器和主機之間流通的錯誤和控制訊息 應用 traceroute ping arp 位址解析協議 將乙個ipv4位址對映成乙個乙太網位址 mac位址 rtt round tri...

傳輸層TCP和UDP程式設計模型

最近接觸了基於這個程式設計模型的程式設計,基礎程式設計再次熟悉了一下 一 tcp程式設計 伺服器端 1 建立serversocket物件,繫結埠 2 通過accept 監聽客戶端請求 3 建立連線後,通過輸入輸出流進行讀寫操作 4 關閉相關資源 客戶端 1 建立socket物件,指定服務端的位址和埠...

網路層 和 傳輸層

網路層只是負責傳輸,把資料交給指定的目標,傳輸層用來把收到的資料,根據協議分發給各個應用 tsap 埠 nsap ip資料報的協議號字段 埠 資料傳送時,向下交付給傳輸層 接收資料時,向上交付給應用層 套接字 五元組用來標識通訊雙方唯一的連線,埠在tcp 或者 udp上 ip位址和傳輸協議取自ip資...