這幾天一直看不下書啊,也沒有學習的動力,閒着無聊,還是總結下unp前面幾章的知識。
1、簡介
PDU:協議數據單元,在網絡各層中交換的信息單元就叫PDU。例如TCP層的PDU就是tcp分節。
應用層實體之間交換的PDU爲應用數據。
對TCP應用進程來說,交換的是沒有長度限制的單個雙向字節流。TCP層會自己把收到的字節流(從應用層收到的)進行分割,這功能由TCP自己實現。
對UDP應用進程來說,交換的是其長度不超過UDP發送緩衝區大小的單個記錄。UDP層有多少就收多少。
Stevens很注意錯誤處理,這是個優點!!!
UNIX errno值,一般來說,系統調用出錯,在返回出錯值得同時會置errno的值,所以通過查看errno的值可以確定具體錯誤。
可以直接使用IP層、數據鏈路層進行應用編程。
標準的統一 :POSIX與開放團體組織走向一起。乾脆就叫POSIX標準。
2、TCP、UDP
SCTP就先不管了
TCP是字節流協議,沒有任何記錄邊界!!!沒有記錄邊界!
TCP終止連接的TIME_WAIT狀態。
3、套接字編程簡介
地址結構
值結果參數 內核到用戶進程
字節序
4、基本TCP套接字編程
各個函數的瞭解
socket:返回描述符,它具有和其他UNIX描述符一樣的特性。進程調用socket,內核會創建一個相應的數據結構,即在進程表表項的一個數組的下標。(有點繞口,書上這麼說的)file結構、socket結構和inpcb結構是一起分配和連接起來。
connect:調用connect指的是連接到某某地址去吧。如果調用前沒有綁定地址,內核會自己確定源IP和源端口。如果是TCP的話,激發三次握手過程。如果是UDP,會記錄外部地址。
bind:
listen:是非阻塞函數,執行成功就返回0,成功並不是指有連接來,而是開始監聽,所以該函數是非阻塞的。
accept:返回內核自動生成的全新套接字,如果已連接的隊列爲空,則進程投入睡眠(假定套接字爲默認的阻塞方式)。