天天看點

(1) tcp、udp與sctp概述

說明: 此系列文檔根據閱讀《Unix網絡程式設計卷1:套接字聯網API》書籍而記錄的相關技術知識,記錄下相關技術知識主要是友善後續使用查閱,如有侵權與不恰當之處,請随時聯系本人整改。

一、術語說明

IPv4:網際協定版本4 (Internet Protocol version 4)。IPv4(通常稱之為IP)自20世紀80年代早期以來一直是網際協定族的主力協定。它使用32位位址。IPv4給TCP、UDP、SCTP、ICMP和IGMP提供分組遞送服務。

IPv6:網際協定版本6 (Internet Protocol version 6)。IPv6是在20世紀90年代中期作為IPv4的一個替代品設計的。其主要變化是使用128位更大位址以應對20世紀90年代網際網路的爆發性增長。IPv6給TCP、UDP、SCTP和ICMPv6提供分組遞送服務。

當無需差別IPv4和IPv6時,我們經常把“IP”一詞作為形容詞使用,如IP層、IP位址等

TCP:傳輸控制協定 (Transmission Control Protocol)。TCP是一個面向連接配接的協定,為使用者程序提供可靠的全雙工位元組流。TCP套接字是一種流套接字。TCP關心确認、逾時和重傳之類的細節。大多數英特網應用程式使用TCP。注意,TCP既可以使用IPv4,也可以使用IPv6。

UDP:使用者資料報協定 (User Datagram Protocol)。UDP是一個無連接配接協定。UDP套接字是一種資料包套接字(datagram socket)。UDP資料包不能保證最終到達它們的目的地。與TCP一樣,UDP既可以使用IPv4,也可以使用IPv6。

SCTP:流控制傳輸協定 (Stream Control Transmission Protocol)。SCTP是一個提供可靠全雙工關聯的面向連接配接的協定,使用“關聯”一詞來指稱SCTP中的連接配接,因為SCTP是多宿的,進而每個關聯的兩端均涉及一組IP位址和一個端口号。SCTP提供消息服務,也就是維護來自應用層的記錄邊界。與TCP和UDP一樣,SCTP既可以使用IPv4,也可以使用IPv6,而且能夠在同一個關聯中同時使用它們。

ICMP:網際控制消息協定 (Internet Control Message Protocol)。ICMP處理在路由器和主機之間流通的錯誤和控制消息。這些消息通常由TCP/IP網絡支援軟體本身(而不是使用者程序)産生和處理,不過總結概述圖中展示的ping和traceroute程式同樣使用ICMP。有時我們稱這個協定為ICMPv4,以便與ICMPv6相差別。

IGMP:網際組管理協定 (Internet Group Management Protocol)。IGMP用于多點傳播,它在IPv4中是可選的。

ARP:位址解析協定 (Address Resolution Protocol)。ARP把一個IPv4位址映射成一個硬體位址(如以太網位址)。ARP通常用于諸如以太網、令牌環網和FDDI等廣播網絡,在點到點網絡上并不需要。

RARP:反向位址解析協定 (Reverse Address resolution Protocol)。RARP把一個硬體位址映射成一個IPv4位址。他有時用于無盤節點的引導。

ICMPv6:網際控制消息協定版本6 (Internet Control Message Protocol version 6)。ICMPv6綜合了ICMPv4、IGMP和ARP的功能。

BPF:BSD分組過濾器 (BSD packet filter)。該接口提供對于資料鍊路層的通路能力,通常可以在源自Berkeley的核心中找到。

DLPI:資料鍊路提供者接口 (datalink provider interface)。該接口也提供對于資料鍊路層的通路能力,通常随SVR4核心提供。

說明1:所有網際協定由一個或多個稱為請求标注 (Request for Comments, RFC)的文檔定義,這些RFC就是它們的正式規範。

說明2:使用術語“IPv4/IPc6主機”或“雙棧主機”表示同時支援IPv4和IPv6的主機。

說明3:TCP/IP協定的其它細節參見TCPv1。TCP/IP在4.4BSD上的實作參見TCPv2。

二、協定詳述

2.1 UDP

2.1.1 UDP資料封裝

UDP:使用者資料報協定,是一個簡單的傳輸層協定,在RFC 768[Postel 1980]中有詳細說明。應用程式往一個UDP套接字寫入一個消息,該消息随後被封裝(encapsulating)到一個UDP資料報,該UDP資料報進而又被封裝到一個IP資料報,然後發送到目的地。

2.1.2 UDP特點
  1. UDP是無連接配接的、不可靠的
  2. UDP不保證UDP資料報會到達其最終目的地
  3. UDP不保證各個資料報的先後順序跨網絡後保持不變
  4. UDP也不保證每個資料報隻到達一次
  5. UDP不提供流量控制
  6. UDP也可以是全雙工的

不可靠的說明:如果一個資料報到達了其最終目的地,但是校驗和檢測發現有錯誤,或者該資料報在網絡傳輸中被丢棄了,它就無法被投遞給UDP套接字,也不會被源端自動重傳。假如想要確定一個資料報到達其目的地,可以往應用程式中添置一大堆的特性:來自對端的确認、本端的逾時與重傳等。

無連接配接的說明:UDP客戶與伺服器之間不必存在任何長期的關系。例如,一個UDP用戶端可以建立一個套接字并發送一個資料報給一個給定的伺服器,然後立即用同一個套接字發送另一個資料報給另一個伺服器。同樣的,一個UDP伺服器可以用同一個UDP套接字從若幹個不同的用戶端接收資料報,每個用戶端一個資料報。

2.2 TCP

TCP在RFC 793[Poste1]中有詳細說明,然後由RFC 1323[Jacobson,Braden,and Borman 1992]、RFC 2581[Allman,Paxson,and Stevens 1999]、RFC 2988[Paxson,and Allman 2000]和RFC 3390[Allman,Floyd,and Partridge 2002]加以更新。

2.2.1 TCP特點
  1. 首先,TCP提供客戶與伺服器之間的連接配接(connection)。TCP客戶先與某個給定伺服器建立一個連接配接,再跨該連接配接與那個伺服器交換資料,然後終止這個連接配接。
  2. 其次,TCP還提供了可靠性(reliability)。當TCP向另一端發送資料時,它要求對端傳回一個人确認。如果沒有收到确認,TCP就自動重傳資料并等待更長時間。在數次重傳失敗後,TCP才放棄,如此在嘗試發送資料上所花的總時間一般為4~10分鐘(依賴于具體實作)。
  3. TCP含有用于動态估算客人和伺服器之間的往返時間(round-trip time,RTT)的算法,以便它知道等待一個确認需要多少時間。
  4. TCP通過給其中每個位元組關聯一個序列号對所發送的資料進行排序(sequencing)。
  5. 再次,TCP提供流量控制(flow control)。TCP總是告知對端在任何時刻它一次能夠從對端接收多少位元組的資料,這稱為通告視窗(advertised window,也稱接收視窗)。
  6. 最後,TCP連接配接是全雙工的(full-duplex)。

可靠性注意:TCP并不保證資料一定會被對方端點接收,因為這是不可能做到的。如果有可能,TCP就把資料遞送到對方端點,否則就(通過放棄重傳并中斷連接配接這一手段)通知使用者。這樣的話,TCP也不能被描述成是100%可靠的協定,它提供的是資料的可靠遞送或故障的可靠通知。

排序注意:假設一個應用寫2048位元組到一個TCP套接字,導緻TCP發送2個分節:第一個分節所含資料的序列号為1~1024, 第二個分節所含資料的序列号為 1025~2048。(分節 是TCP傳遞給IP的資料單元)。

  • 如果這些分節非順序到達,接收端TCP将先根據它們的序列号重新排序,再把結果資料傳遞給接收應用。
  • 如果接收端TCP接收到來自對端的重複資料(假設對端認為一個分節已丢失并是以重傳,而這個分節并沒有真正丢失,隻是網絡通信過于擁擠),它可以根據序列号判定資料是否重複的,進而丢棄重複資料。

通告視窗注意:在任何時刻,該視窗指出接收緩沖區中目前可用的空間量,進而確定發送端發送的資料不會使接收緩沖區溢出。

  • 通告視窗時刻動态變化:當接收到來自發送端的資料時,視窗就減小,但是當接收端應用從緩沖區中讀取資料時,視窗大小就增大。
  • 通告視窗大小減小到0是有可能的:當TCP對應某個套接字的接收緩沖區已滿,導緻它必須等待應用從該緩沖區讀取資料時,方可從對端再接收資料。

2.3 SCTP

流控制傳輸協定:SCTP提供的服務與UDP和TCP提供的類似。SCTP在RFC 2960[Stewart et al.2000]中詳細說明,并由RFC 3309[Stone,Stewart,and Otis 2002]加以更新。

SCTP在客戶和伺服器之間提供關聯(association),并向TCP那樣給應用提供可靠性、排序、流量控制以及全雙工的資料傳送。

SCTP中使用”關聯“一詞取代”連接配接“是為了避免這樣的内涵:一個連接配接隻涉及兩個IP位址之間的通信。一個關聯指代兩個系統之間的一詞通信,它可能因為SCTP支援多宿而涉及不止兩個位址。

2.3.1 SCTP特點

與TCP不同的是,SCTP是面向消息的(message-oriented)。

SCTP提供各個記錄的按序遞送服務。

與UDP一樣,由發送端寫入的每條記錄的長度随資料一道傳遞給接收端應用。

SCTP能夠在所連接配接的端點之間提供多個流,每個流各自可靠的按序遞送消息。一個流上某個消息的丢失不會阻塞同一關聯其他流上消息的投遞。這種做法與TCP正好相反,就TCP而言,在單一位元組流中任何位置的位元組丢失都将阻塞該連接配接上其後所有資料的遞送,直到該丢失被修複為止。

SCTP還提供多宿特性,使得單個SCTP端點能夠支援多個IP位址。該特性可以增強應對網絡故障的健壯性。一個端點可能有多個備援的網絡連接配接,每個網絡連接配接又可能有各自接入網際網路基礎設施的連接配接。當該端點與另一個端點建立一個關聯後,如果它的某個網絡或某個跨越網際網路的通路發生故障,SCTP就可以通過切換到使用已與該關聯相關的另一個位址來規避所發生的故障。

繼續閱讀