以下知識點來均來自steven先生所著unp卷一(version3),剛開始學習網路程式設計,如有不正確之處請大家多多指正。
1、tcp是乙個提供面向連線、可靠、無差錯、不丟失、不重複、按序到達的資料流傳輸協議。頭部開銷為20位元組。全雙工邏輯通道。支援的上層應用協議為telnet、ftp、smtp、http。
2、udp是乙個不面向連線,不可靠的資料報傳輸協議,盡最大努力交付。頭部開銷為8位元組,支援一對
一、一對多、多對
一、多對多互動通訊。支援的上層應用協議有nfs、snmp、dns。同時大多數即時通訊也採用udp協議。
3、sctp是乙個可靠、全雙工、關聯面向連線的協議。sctp在客戶和伺服器之間提供關聯,並像tcp那樣給應用提供可靠性、排序、流量控制以及全雙工的資料傳送。sctp是多宿,從而每個關聯的兩端均涉及一組ip位址和乙個埠號,含來自應用動的記錄邊界(與tcp區別)。四次握手建立連線,見書上p38。三次揮手終止關聯,sctp通過放置驗證標記值避免了tcp在time_wait狀態下保持整個連線的做法,見p39。
4、埠號
0~1023由iana分配和控制
1024~49151為已登記埠
49152~65535是動態或私用埠(臨時埠)
5、套接字對
本地ip/本地tcp埠號、外地ip/外地tcp埠號。
6、tcp埠號與併發伺服器,此處主要涉及監聽套接字listenfd及fork函式(具體在第四章詳解)
7、緩衝區大小及限制
a、ipv4,最大大小65535byte;ipv6,最大大小65535+40=65575byte;
b、mtu(最大傳輸單元),乙太網設為1500byte;針對乙太網,ipv4的mtu為68~1500byte,ipv6的mtu為1280~1500byte;
c、path mtu是兩主機間路徑最小的mtu,往返的mtu時常不一致;
d、是否需要分片,看ip資料報是否超過相應鏈路的mtu;
e、ipv4首部若設定df,則ip報文超過mtu也不會分片,此時將產生icmpv4「destination unreachable fragmention needed but df bit set」出錯訊息;
f、ipv4最小重組緩衝區大小為576byte,ipv6最小重組緩衝區大小為1500byte;
g、tcp的mss(最大分片尺寸)=mtu-ip首部大小-tcp首部大小;
h、sctp選擇基於到對端所有位址發現的最小路徑mtu保持乙個分片點。
8、tcp輸出
每個tcp的socket都有乙個傳送緩衝區,可利用so_sndbuf修改,write功能即將應用程序緩衝區的內容複製到套接字的傳送緩衝區,write呼叫成功返回僅僅表示我們可以生新使用原來的應用程序緩衝區,並不表時對端的tcp或應用程序已接收到資料。tcp提取套接字傳送緩衝區中的資料並傳送給對端tcp,其過程基於tcp資料傳送的所有規則。對端tcp必須確認收到的資料,伴隨來自對端的ack的不斷到達,本端tcp至些才能從套接字傳送緩衝區中丟棄已確認的資料。tcp必須為已傳送的資料保留乙個副本,直到它被對端確認為止。
9、udp輸出
任何udp套接字都有傳送緩衝區大小,但它僅僅是可寫到該套接字的udp資料報的大小上限。如果乙個應用程序寫乙個大於套接字傳送緩衝區大小的資料報,核心將返回該程序乙個emsgsize錯誤。從寫乙個送套接字的write呼叫成功返回表示所寫的資料報或其所有片段已被加入資料鏈路層的輸出佇列。(與tcp有很大區別)
10、sctp輸出
其緩衝區設定及write呼叫與tcp一致。本端sctp必須等待sack,在累積確認點超過已傳送的資料後,才可以從套接字緩衝區中刪除該資料。
UNP卷一chapter20 廣播
型別ipv4 ipv6 tcpudp 所標識介面數 遞送到介面數單播y yyy乙個 乙個任播 y 尚沒有y 一組一組中的乙個 多播可選yy 一組一組中的全體廣播y y全體全體表中要點 i 多播支援在ipv4中是可選的,在ipv6中卻是必需的 ii ipv6不支援廣播。使用廣播的任何ipv4應用程式一...
UNP卷一chapter8 基本UDP套接字程式設計
以下知識點來均來自steven先生所著unp卷一 version3 剛開始學習網路程式設計,如有不正確之處請大家多多指正。需要注意的是,udp不面向連線,故不需要使用connect函式,但使用connect也是可以的,只是作用不再是三次握手建立連線,其作用表現在檢測非同步錯誤 asychronous...
UNP卷一chapter16 非阻塞式I O
阻塞套接字意味著當發出乙個不能立即完成的套接字呼叫時,其程序將投入睡眠,等待相應操作完成。非阻塞套接字,如果輸入操作不能被滿足 對於tcp套接字即至少有乙個位元組的資料可讀,對於udp套接字即有乙個完整的資料報可讀 相應呼叫將立即返回乙個ewouldblock錯誤。注意 selectc通常結合非阻塞...