回覆列表
  • 1 # 嬌兒喜歡瑜伽

    什麼是TCP和UDP

    TCP和UDP是TCP/IP協議中的兩個傳輸層協議,它們使用IP路由功能把資料包傳送到目的地,從而為應用程式及應用層協議(包括:HTTP、SMTP、SNMP、FTP和Telnet)提供網路服務。TCP提供的是面向連線的、可靠的資料流傳輸,而UDP提供的是非面向連線的、不可靠的資料流傳輸。面向連線的協議在任何資料傳輸前就建立好了點到點的連線。ATM和幀中繼是面向連線的協議,但它們工作在資料鏈路層,而不是在傳輸層。普通的音訊電話也是面向連線的。

    可靠的傳輸協議可避免資料傳輸錯誤。其實現方式是:在構造資料包時在其中設定校驗碼,到達目的地後再採用一定的演算法重新計算校驗碼,透過比較二者,就可以找出被破壞了的資料。因為需要重發被破壞了的和已經丟失的資料,所以在需要重發資料時協議必須能夠使目的地給出源頭的一個確認訊號。有些資料包不一定按照順序到達,所以協議必須能夠探測出亂序的包,暫存起來,然後把它們按正確的次序送到應用層中去。另外,協議還必須能夠找出並丟棄重複傳送的資料。一組定時器可以限制針對不同確認的等待時間,這樣就可以開始重新發送或重新建立連線。

    資料流傳輸協議不支援位傳輸。TCP不能在一個包內以位元組或位為單位構造資料,它只負責傳輸未經構造的8位字串。

    非面向連線的傳輸協議在資料傳輸之前不建立連線,而是在每個中間節點對非面向連線的包和資料包進行路由。沒有點到點的連線,非面向連線的協議,如UDP,是不可靠的連線。當一個UDP資料包在網路中移動時,傳送過程並不知道它是否到達了目的地,除非應用層已經確認了它已到達的事實。非面向連線的協議也不能探測重複的和亂序的包。標準的專業術語用“不可靠”來描述UDP。在現代網路中,UDP並不易於導致傳輸失敗,但是你也不能肯定地說它是可靠的。

    TCP工作流程

    現在讓我們一起來看看TCP段的各個域,在IP包中它們緊跟在IP頭部資訊之後。第一個16位確認了源埠,第二個16位確認了目的埠。埠的劃分使IP主機之間可用單個的IP地址實現不同型別的併發連線。在絕大多數現代作業系統中,採用32位IP地址和16位埠地址的組合來確認一個介面。源介面和目的介面的組合就定義了一個連線。有216或65536個可能的埠。最低的1024個埠是常用的,它們是系統為特定的應用層協議所保留的預設設定。如:預設狀態下,HTTP使用埠80,而POP3使用埠110。其它的應用可以使用編號更高的埠。

    在接下來的兩個域中,序列號和確認號是TCP實現可靠連線的關鍵。當建立一個TCP連線時,傳送方主機發出一個隨機的初始化序列號給初始化器,初始化器將其加1後送回確認域的起始器,這意味著下一個位元組可以傳送了。一旦資料開始流動,序列號和確認號將跟蹤已傳送了那些資料,那些資料已被確認。因為每個域都是32位,總共可以有232個值,所以每個域的範圍是:0~4294967295,當超過上限時回到0。

    4位的偏移量代表TCP頭部一共有多少個32位的資訊。這個資訊是必不可少的,因為有可選的頭部區域,偏移量標識了頭部的結束和資料的開始。

    TCP的設計者保留了接下來的6位,以防萬一將來要對其進行擴充套件。實際上,自從RFC793(傳輸控制協議)1981年釋出以來,還沒人有恰當的理由使用這些位,在這一點上,JonPostel和他的同事一定是過分謹慎了。

    隨後的6位每個都是一個標誌。若UNG標誌位的值為1,意味著遠在頭部緊急指標區域的資料是有效的;若ACK標誌位的值為1,則意味著確認號區域中的資料是有效的。(注意:一個SYN包有一個有意義的序列號,但它的確認號是無意義的,因為它並不確認任何事件)PSH標誌位使資料不必等待發送和等待接收。RST標誌位將斷開一個連線。SYN(同步)標誌位意味著序列號是有效的,FIN(結束)標誌位將指出傳送方已經發完了資料。

    16位長的視窗區域表示了“滑動視窗”的大小,也就是告訴傳送方它已經準備好接收多少個字的資料。TCP透過調整視窗的大小來控制資料的流量。一個值為0的視窗意味著通告發送方:如果沒有進一步的通知,接收器已滿,不能再接收更多的資料了。大的視窗可以確保在任何給定的時間傳輸多達65536個未經確認的位元組,但是,當重發定時器超時且又沒有得到接收確認時,視窗將減半,從而有效地降低傳輸速率。

    16位的校驗碼區域保證了資料的完整性,保護了TCP頭部和IP頭部的各個區域。傳送方計算校驗值並把它插入這個區域,接收方根據收到的包重新計算該值並比較二者,如果它們是匹配的,則認為資料是完整無損的。

    當設定緊急標誌位時,緊急指標是一個16位的偏移量,它代表必須加快的最後一個字。選擇區域可以容納0或多個32位字,可擴充套件TCP的效能。大多數常用的選擇區域支援大於65536位元組的視窗,從而縮短了等待確認的時間,尤其是在高傳輸率時。

    TCP的傳輸機構有多個定時器。當一個包傳送時,重發定時器開始計數;當收到確認訊號後,重發定時器停止計數。如果超過設定時間段還沒有收到確認訊號,就重發該包。一個比較棘手的問題是如何設定該時間段。如果太長,當網路傳輸錯誤增加時將導致不必要的等待時間;如果太短,就會產生過多的重複包從而降低網路的反應時間。現代TCP協議根據實際情況對重發定時器進行動態設定。

    持續定時器對於避免死鎖是必不可少的。如果網路收到了一個大小為0的視窗確認並且丟失了隨後的重發資料的確認,持續定時器將超時併發送一個探針。探針的迴應將指出視窗的大小(也許仍為0)。保持定時器在本端沒有任何活動後,將檢查在連線的另一端是否還有執行的程序。如果沒有任何迴應,該定時器將斷開連線。

    當斷開一個連線時,斷開連線定時器將包的最大生命期加倍。該定時器在連線斷開之前確保流量最大。

    不管重發過程執行得多麼有效,很少的丟失包就能嚴重地降低TCP連線的流量。每個未收到的包或包的片段只會在重發定時器超時的時候才會丟失。在資料重發時,接收過程一直在遞送這些重發的資料,這樣就使總體的資料傳輸陷於停頓,直到丟失的資料被取代為止。這些重發過程導致基於TCP的連線有時處於不穩定狀態。

    TCP與UDP的選擇

    如果比較UDP包和TCP包的結構,很明顯UDP包不具備TCP包複雜的可靠性與控制機制。與TCP協議相同,UDP的源埠數和目的埠數也都支援一臺主機上的多個應用。一個16位的UDP包包含了一個位元組長的頭部和資料的長度,校驗碼域使其可以進行整體校驗。(許多應用只支援UDP,如:多媒體資料流,不產生任何額外的資料,即使知道有破壞的包也不進行重發。)

    很明顯,當資料傳輸的效能必須讓位於資料傳輸的完整性、可控制性和可靠性時,TCP協議是當然的選擇。當強調傳輸效能而不是傳輸的完整性時,如:音訊和多媒體應用,UDP是最好的選擇。在資料傳輸時間很短,以至於此前的連線過程成為整個流量主體的情況下,UDP也是一個好的選擇,如:DNS交換。把SNMP建立在UDP上的部分原因是設計者認為當發生網路阻塞時,UDP較低的開銷使其有更好的機會去傳送管理資料。TCP豐富的功能有時會導致不可預料的效能低下,但是我們相信在不遠的將來,TCP可靠的點對點連線將會用於絕大多數的網路應用。

  • 中秋節和大豐收的關聯?
  • dnf12增幅失敗給什麼?