天天看點

《分布式系統:概念與設計》一3.4.6 TCP和UDP

tcp和udp以一種對應用程式有用的形式提供了網際網路的通信能力。應用開發者可能需要其他類型的傳輸服務,如提供實時保證或安全性,但這些服務需要比ipv4更多的網絡層支援。tcp和udp忠實地反映了ipv4提供的應用程式設計級的通信設施。ipv6必然會繼續支援tcp和udp,但它包含了通過tcp和udp無法友善通路的功能。當ipv6的部署已足夠廣,進而證明了那些功能的開發是必要的,那麼可引入其他類型的傳輸服務來挖掘這些功能。

第4章從分布式程式開發者的角度描述了tcp和udp的特征。這裡我們僅描述它們給ip加入的功能。

端口的使用 第一個要注意的特征是,盡管ip協定支援兩台計算機(由ip位址辨別)之間的通信,但作為傳輸層的協定,tcp和udp必須提供程序間的通信。這通過使用端口來完成。端口号用于将消息尋址到特定計算機上的程序,它僅在此計算機上有效。端口号是一個16位整數。一旦一個ip資料包被發送到目的主機,tcp或udp層的軟體就通過該主機的特定端口将它分派到一個程序中。

udp的特點 udp基本上是ip在傳輸層的一個複制。udp資料報被封裝在一個ip資料包中,它具有一個包含了源端口号和目的端口号的短的頭部122(相應的主機位址位于ip頭部)、一個長度域和一個校驗和。udp不提供傳輸保證。我們已經注意到,ip資料包可能會由于擁塞或網絡錯誤被丢棄。除了可選的校驗和外,udp未增加任何額外的可靠性機制。如果校驗和域非零,則接收主機根據資料包内容計算出一個校驗值,與接收到的校驗和相比,若兩者不比對則資料包被丢棄。

是以,依賴ip傳輸,udp提供了一種在ip上附加最小開銷或傳輸延遲、在程序對(或者在資料報位址是ip多點傳播位址情況下,從一個程序發送到多個程序)之間傳送最長達64kb的消息的方法。它不需要任何建立開銷以及管理用的确認消息,但它隻适應于不需要可靠傳送單個或多個消息的服務和應用。

tcp的特點 tcp提供了一個更複雜的傳輸服務。它通過基于流的程式設計抽象,提供了任意長度位元組串的可靠傳輸。可靠性保證使得發送程序遞交給tcp軟體的資料傳送到接收程序時,其順序是相同的。tcp是面向連接配接的,在資料被傳送前,發送程序和接收程序必須合作,建立一個雙向的通信通道。連接配接隻是一個執行可靠資料傳輸的端到端的協定,中間結點(如路由器)并沒有關于tcp連接配接的知識,一個tcp傳輸中傳輸資料的所有ip資料包并不一定使用相同的路由。

tcp層包含額外機制(在ip之上實作)以保證可靠性。這些機制包括:

排序:tcp發送程序将流分割成資料片斷序列,然後将之作為ip資料包傳送。每個tcp片斷均有一個序号。它在該片斷的第一個位元組給出流中的位元組數。接收程式在将資料放入接收程序的輸入流前,使用序号對收到的片斷排序。隻有所有編号較小的片斷都已收到并且放入流中後,編号大的片斷才能被放入流中,是以,未按順序到達的片斷必須儲存在一個緩沖區中,直到它前面的片斷到達為止。

流控制:發送方管理不能使接收方或者中間結點過載,這通過片斷确認機制完成。當接收方成功地接收了一個片斷後,它會記錄該片斷的序号。接收方會不時地向發送方發送确認資訊,給出輸入流中片斷的最大序号以及視窗大小。如果有反向的資料流,則确認資訊被包含在正常的片斷中,否則被放在确認資料片中。确認片斷中的視窗大小域指定了在下一個确認之前允許發送方傳送的資料量。

當一個tcp連接配接用于與一個遠端互動程式通信時,會猝發産生資料,但産生的資料量可能很小。例如,利用鍵盤輸入可能每秒僅輸入幾個字元,123但字元的顯示必須足夠快,以便使用者看到自己的打字結果。這通過在本地緩沖區中設定一個逾時值t(一般是0.5s)來實作。使用這個簡單的方案,隻要資料片斷已在輸出緩沖區中停留t秒,或是緩沖區的内容到達mtu限制,就将片斷發送到接收方。該緩沖區方案不會使互動式延遲再增加t秒以上。nagle描述了另一個産生較少流量的算法,它對一些互動式應用更有效[nagle 1984]。nagle的算法已用于許多tcp實作中。大多數tcp實作是可以配置的,允許應用程式修改t值,或是在幾個緩沖區算法中選擇其一。

由于無線網絡的不可靠性,會導緻資料包丢失頻繁發生,上面的流控制機制對于無線通信不是特别适用。這是廣域移動通信使用的wap協定族采納另一種傳輸機制的原因。但對無線網絡而言,實作tcp也是很重要的,為此提出了tcp機制的修改提議[balakrishnan et al.1995,1996]。其思想是在無線基站(有線網絡和無線網絡之間的網關)實作一個tcp支援元件。該元件探聽進出無線網絡的tcp片斷,重傳任何未被移動接收方快速确認的外發片斷,并且在注意到序列号有間隔時,請求重傳接收資料。

重傳:發送方記錄它發送的片斷的序号。當它接收到一個确認消息時,它知道片斷被成功接收,并将之從外發緩沖區中清除。如果在一個指定逾時時間内,片斷并沒有得到确認,則發送方重發該片斷。

緩沖:接收方的接收緩沖區用于平衡發送方和接收方之間的流量。如果接收程序發出receive操作的速度比發送程序發出send操作的速度慢很多,那麼緩沖區中的資料量就會增加。通常情況下,資料在緩沖區滿之前被取出,但最終緩沖區會溢出,此時到達的片斷不被記錄就直接被丢棄了。是以,接收方不會給出相應的确認,而發送方将被迫重新發送片斷。

校驗和:每個片斷包含一個對頭部和片斷中資料的校驗和,如果接收到的片斷和校驗和不比對,則片斷被丢棄。

繼續閱讀