1. 程式人生 > >UNIX網路程式設計學習筆記(Racoon)

UNIX網路程式設計學習筆記(Racoon)

最近學習了UNIX網路程式設計卷I這本書,現在做一些學習筆記供分享與回顧。
本篇主要聚焦於傳輸層,包括TCP,UDP和SCTP(stream Control Transmission Protocol,流控制傳輸協議)。絕大部分CS網路應用使用的是TCp或者UDP。SCTP是一個比較新的協議,最初設計用於跨因特網傳輸電話指令。
UDP是一個簡單的、不可靠的資料包協議,而TCP是一個複雜、可靠的位元組流協議。SCTP和TCP類似,也是一個可靠的傳輸協議,但是還提供訊息邊界、傳輸級別多宿支援和減小頭端阻塞的方法。

  1. UDP
    UDP是一個簡答的傳輸層協議,應用層往一個UDP套接字寫入一個訊息,該訊息隨後被封裝到一個UDP資料報,然後有被封裝進一個IP資料報,然後傳送的目的地,UDP不保證資料最終會到達,也不保證先後書序,也不好保證每個資料只到達一次。為了檢測可靠性,可以往應用程式中添置一大堆的特性,包括對端確認和本端的超市和重傳等。
    每個UDP資料報都有一個長度。會隨著資料一起傳遞到接收端應用程序。我們提到過TCP是一個位元組流協議,沒有任何邊界記錄,這一點與UDP不同。
    另外UDP是一個無連線服務,同一個套接字可以發不同的資料報給不同的伺服器。
  2. TCP
    TCP基於先建立連線,在可靠性方面,傳送資料時要求對端返回一次確認。如果沒有收到確認,會自動重傳資料並等待更長時間,在數次重傳失敗後才會放棄,一般為4-10分鐘。(依賴於具體實現)
    TCP含有用於動態估算客戶與伺服器之間的往返時間(round-trip time,RTT)的演算法,以便於知道等待一個連線需要多少時間。
    另外會對傳送資料進行排序,可以幫助接收端進行順序接收以及重複資料的丟棄。
    TCP提供流量控制,會告知對端在任何時刻,對方可以接收多少位元組的資料,稱之為通告視窗(advertised window)。從而保證不會使得接收端緩衝區溢位。
    最後TCP連線是全雙工的,應用層可以在任何時刻在進出兩個方向上既傳送又接收資料。建立全雙工之後可以根據需求轉化為一個單工連線。
    (UDP可以是全雙工的)
  3. SCTP
    SCTP用關聯一詞代替連線,因為支援多宿而涉及到不止兩個地址。
    與TCP不同,SCTP是面向訊息的,提供各個記錄的按序遞送服務,和UDP一樣,由傳送端寫入的每條記錄的長度隨資料一起傳遞給接收端應用。
    SCTP可以在連線的端點之間提供多個流,一個流上的某個訊息的丟失不會阻塞同一關聯下的其他流上的訊息投遞,和TCP會阻塞投遞的特性正好相反。
    SCTP多宿特性使得每個SCTP端點可以支援多個IP地址,這個特性可以增強應對網路故障的健壯性。一個端點可能有多個冗餘的網路連線,每個網路又可能有各自接入網際網路基礎裝置的連線。建立關聯後,如果某個網路或者某個跨越網際網路的通路發生故障,SCTP可以切換到使用已與該關聯相關的另一個地址來規避發生的故障。

以上就是這次學習的一些主要記錄了下次應該會設計到TCP連線建立和一些套接字狀態相關知識。