




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、TCP-IP協議與UDP-IP協議的區別TCP-IP協議與UDP-IP協議的區別29/29TCP-IP協議與UDP-IP協議的區別 HYPERLINK /a199228/article/details/7020884 TCP/IP協議與UDP/IP協議的區別 TCP(Transmission Control Protocol,傳輸控制協議)是面向連接的協議, 也就是說,在收發數據前,必須和對方建立可靠的連接。一個TCP連接必須要經過三次“對話”才能建立起來,其中的過程非常復雜,只簡單的描述下這三次對話的簡單過程:A B/主機A向主機B發出連接請求數據包:“我想給你發數據,可以嗎?”,這是第一次
2、對話;A B/主機A再發出一個數據包確認主機B的要求同步:“我現在就發,你接著吧!”,這是第三次對話。三次“對話”的目的是使數據包的發送和接收同步,經過三次“對話”之后,主機A才向主機B正式發送數據。詳細點說就是:TCP接通連接要進行3次握手過程1 主機A通過向主機B 發送一個含有同步序列號的標志位的數據段給主機B ,向主機B 請求建立連接,通過這個數據段,主機A告訴主機B 兩件事:我想要和你通信;你可以用哪個序列號作為起始數據段來回應我.2 主機B 收到主機A的請求后,用一個帶有確認應答(ACK)和同步序列號(SYN)標志位的數據段響應主機A,也告訴主機A兩件事:我已經收到你的請求了,你可以
3、傳輸數據了;你要用哪佧序列號作為起始數據段來回應我3 主機A收到這個數據段后,再發送一個確認應答,確認已收到主機B 的數據段:我已收到回復,我現在要開始傳輸實際數據了這樣3次握手就完成了,主機A和主機B 就可以傳輸數據了.3次握手的特點沒有應用層的數據SYN這個標志位只有在TCP建產連接時才會被置1握手完成后SYN標志位被置0TCP斷開連接要進行4次1 當主機A完成數據傳輸后,將控制位FIN置1,提出停止TCP連接的請求2 主機B收到FIN后對其作出響應,確認這一方向上的TCP連接將關閉,將ACK置13 由B 端再提出反方向的關閉請求,將FIN置14 主機A對主機B的請求進行確認,將ACK置1
4、,雙方向的關閉結束.由TCP的三次握手和四次斷開可以看出,TCP使用面向連接的通信方式,大大提高了數據通信的可靠性,使發送數據端和接收端在數據正式傳輸前就有了交互,為數據正式傳輸打下了可靠的基礎名詞解釋ACK TCP報頭的控制位之一,對數據進行確認.確認由目的端發出,用它來告訴發送端這個序列號之前的數據段都收到了.比如,確認號為X,則表示前X-1個數據段都收到了,只有當ACK=1時,確認號才有效,當ACK=0時,確認號無效,這時會要求重傳數據,保證數據的完整性.SYN 同步序列號,TCP建立連接時將這個位置1FIN 發送端完成發送任務位,當TCP完成數據傳輸需要斷開時,提出斷開連接的一方將這位
5、置1UDP(User Data Protocol,用戶數據報協議)(1) UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,并盡可能快地把它扔到網絡上。在發送端,UDP傳送數據的速度僅僅是受應用程序生成數據的速度、計算機的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。(2)由于傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務機可同時向多個客戶機傳輸相同的消息。(3) UDP信息包的標題很短,只有8個字節,相對于TCP的20個字節信息包的額外開銷很小。(4)吞吐量
6、不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。(5)UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持復雜的鏈接狀態表(這里面有許多參數)。(6)UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部后就向下交付給IP層。既不拆分,也不合并,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。我們經常使用“ping”命令來測試兩臺主機之間TCP/IP通信是否正常,其實“ping”命令的原理就是向對方主機發送UDP數據包,然后對方主機確認收到數據包,如果數據包是否到達的消息及時反饋回來,那么網絡就是通的。小結TCP與U
7、DP的區別:1.基于連接與無連接;2.對系統資源的要求(TCP較多,UDP少);3.UDP程序結構較簡單;4.流模式與數據報模式 ;5.TCP保證數據正確性,UDP可能丟包,TCP保證數據順序,UDP不保證。更多TCP和UPD的資料:TCP傳輸控制協議,提供的是面向連接、可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間建立一個TCP連接,之后才能傳輸數據。TCP提供超時重發,丟棄重復數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端。UDP用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,但是并不能保證它
8、們能到達目的地。由于UDP在傳輸數據報前不用在客戶和服務器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快。UDP 與 TCP 的主要區別在于 UDP 不一定提供可靠的數據傳輸。事實上,該協議不能保證數據準確無誤地到達目的地。UDP 在許多方面非常有效。當某個程序的目標是盡快地傳輸盡可能多的信息時(其中任意給定數據的重要性相對較低),可使用 UDP。ICQ 短消息使用 UDP 協議發送消息。許多程序將使用單獨的TCP連接和單獨的UDP連接。重要的狀態信息隨可靠的TCP連接發送,而主數據流通過UDP發送。TCP的目的是提供可靠的數據傳輸,并在相互進行通信的設備或服務之間保持一個虛擬連接。
9、TCP在數據包接收無序、丟失或在交付期間被破壞時,負責數據恢復。它通過為其發送的每個數據包提供一個序號來完成此恢復。記住,較低的網絡層會將每個數據包視為一個獨立的單元,因此,數據包可以沿完全不同的路徑發送,即使它們都是同一消息的組成部分。這種路由與網絡層處理分段和重新組裝數據包的方式非常相似,只是級別更高而已。為確保正確地接收數據,TCP要求在目標計算機成功收到數據時發回一個確認(即 ACK)。如果在某個時限內未收到相應的 ACK,將重新傳送數據包。如果網絡擁塞,這種重新傳送將導致發送的數據包重復。但是,接收計算機可使用數據包的序號來確定它是否為重復數據包,并在必要時丟棄它。TCP與UDP的選
10、擇如果比較UDP包和TCP包的結構,很明顯UDP包不具備TCP包復雜的可靠性與控制機制。與TCP協議相同,UDP的源端口數和目的端口數也都支持一臺主機上的多個應用。一個16位的UDP包包含了一個字節長的頭部和數據的長度,校驗碼域使其可以進行整體校驗。(許多應用只支持UDP,如:多媒體數據流,不產生任何額外的數據,即使知道有破壞的包也不進行重發。)很明顯,當數據傳輸的性能必須讓位于數據傳輸的完整性、可控制性和可靠性時,TCP協議是當然的選擇。當強調傳輸性能而不是傳輸的完整性時,如:音頻和多媒體應用,UDP是最好的選擇。在數據傳輸時間很短,以至于此前的連接過程成為整個流量主體的情況下,UDP也是一
11、個好的選擇,如:DNS交換。把 SNMP建立在UDP上的部分原因是設計者認為當發生網絡阻塞時,UDP較低的開銷使其有更好的機會去傳送管理數據。TCP豐富的功能有時會導致不可預料的性能低下,但是我們相信在不遠的將來,TCP可靠的點對點連接將會用于絕大多數的網絡應用。FTP協議即文件傳輸協議,它是一個標準協議,FTP協議也是應用TCP/IP協議的應用協議標準,它是在計算機和網絡之間交換文件的最簡單的方法。 TCP與UDP區別TCP傳輸控制協議,提供的是面向連接、可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間建立一個TCP連接,之后才能傳輸數據。TCP提供超時重發,丟棄重復數據,檢
12、驗數據,流量控制等功能,保證數據能從一端傳到另一端。UDP用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,但是并不能保證它們能到達目的地。由于UDP在傳輸數據報前不用在客戶和服務器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快OverviewTCP (Transmission Control Protocol) is the most commonly used protocol on the Internet. The reason for this is because TCP offers error corr
13、ection. When the TCP protocol is used there is a guaranteed delivery. This is due largely in part to a method called flow control. Flow control determines when data needs to be re-sent, and stops the flow of data until previous packets are successfully transferred. This works because if a packet of
14、data is sent, a collision may occur. When this happens, the client re-requests the packet from the server until the whole packet is complete and is identical to its original.UDP (User Datagram Protocol) is anther commonly used protocol on the Internet. However, UDP is never used to send important da
15、ta such as webpages, database information, etc; UDP is commonly used for streaming audio and video. Streaming media such as Windows Media audio files (.WMA) , Real Player (.RM), and others use UDP because it offers speed! The reason UDP is faster than TCP is because there is no form of flow control
16、or error correction. The data sent over the Internet is affected by collisions, and errors will be present. Remember that UDP is only concerned with speed. This is the main reason why streaming media is not high quality.On the contrary, UDP has been implemented among some trojan horse viruses. Hacke
17、rs develop scripts and trojans to run over UDP in order to mask their activities. UDP packets are also used in DoS (Denial of Service) attacks. It is important to know the difference between TCP port 80 and UDP port 80. If you dont know what ports are go HYPERLINK /ports.php here.Frame StructureAs d
18、ata moves along a network, various attributes are added to the file to create a frame. This process is called encapsulation. There are different methods of encapsulation depending on which protocol and HYPERLINK /ntoplogy.php topology are being used. As a result, the frame structure of these packets
19、 differ as well. The images below show both the TCP and UDP frame structures.TCP FRAME STRUCTUREUDP FRAME STRUCTUREThe payload field contains the actually data. Notice that TCP has a more complex frame structure. This is largely due to the fact the TCP is a connection-oriented protocol. The extra fi
20、elds are need to ensure the guaranteed delivery offered by TCP.UDPUDP 與 TCP 的主要區別在于 UDP 不一定提供可靠的數據傳輸。事實上,該協議不能保證數據準確無誤地到達目的地。UDP 在許多方面非常有效。當某個程序的目標是盡快地傳輸盡可能多的信息時(其中任意給定數據的重要性相對較低),可使用 UDP。ICQ 短消息使用 UDP 協議發送消息。許多程序將使用單獨的TCP連接和單獨的UDP連接。重要的狀態信息隨可靠的TCP連接發送,而主數據流通過UDP發送。TCPTCP的目的是提供可靠的數據傳輸,并在相互進行通信的設備或服務
21、之間保持一個虛擬連接。TCP在數據包接收無序、丟失或在交付期間被破壞時,負責數據恢復。它通過為其發送的每個數據包提供一個序號來完成此恢復。記住,較低的網絡層會將每個數據包視為一個獨立的單元,因此,數據包可以沿完全不同的路徑發送,即使它們都是同一消息的組成部分。這種路由與網絡層處理分段和重新組裝數據包的方式非常相似,只是級別更高而已。為確保正確地接收數據,TCP要求在目標計算機成功收到數據時發回一個確認(即 ACK)。如果在某個時限內未收到相應的 ACK,將重新傳送數據包。如果網絡擁塞,這種重新傳送將導致發送的數據包重復。但是,接收計算機可使用數據包的序號來確定它是否為重復數據包,并在必要時丟棄
22、它。TCP與UDP的選擇如果比較UDP包和TCP包的結構,很明顯UDP包不具備TCP包復雜的可靠性與控制機制。與TCP協議相同,UDP的源端口數和目的端口數也都支持一臺主機上的多個應用。一個16位的UDP包包含了一個字節長的頭部和數據的長度,校驗碼域使其可以進行整體校驗。(許多應用只支持UDP,如:多媒體數據流,不產生任何額外的數據,即使知道有破壞的包也不進行重發。)很明顯,當數據傳輸的性能必須讓位于數據傳輸的完整性、可控制性和可靠性時,TCP協議是當然的選擇。當強調傳輸性能而不是傳輸的完整性時,如:音頻和多媒體應用,UDP是最好的選擇。在數據傳輸時間很短,以至于此前的連接過程成為整個流量主體
23、的情況下,UDP也是一個好的選擇,如:DNS交換。把SNMP建立在UDP上的部分原因是設計者認為當發生網絡阻塞時,UDP較低的開銷使其有更好的機會去傳送管理數據。TCP豐富的功能有時會導致不可預料的性能低下,但是我們相信在不遠的將來,TCP可靠的點對點連接將會用于絕大多數的網絡應用。 HYPERLINK /Jessy/p/3536163.html TCP與UDP的區別 1. 理解:窗口和滑動窗口TCP的流量控制TCP使用窗口機制進行流量控制什么是窗口?連接建立時,各端分配一塊緩沖區用來存儲接收的數據,并將緩沖區的尺寸發送給另一端接收方發送的確認信息中包含了自己剩余的緩沖區尺寸剩余緩沖區空間的數
24、量叫做窗口2. TCP的流控過程(滑動窗口)2.TCP與UDP的區別很多文章都說TCP協議可靠,UDP協議不可靠!為什么前者可靠,后者不可靠呢?既然UDP協議不可靠,為什么還要使用它呢?所謂的TCP協議是面向連接的協議,面向連接是什么呢?TCP和UDP都是傳輸層的協議!從編程的角度看,就是兩個模塊(模塊就是代碼的集合,一系列代碼的組合提供相應的功能!模塊化最終目的就是:分工協作!模塊化好處:便于擴展開發以及維護!)。先說TCP協議:這個協議,是面向的連接!面向連接這個概念,我們要從物理層看起。大家都知道,因為“信道復用技術”的迅猛發展,才促使了計算機網絡的發展!如果沒有“信道復用技術”,那么單
25、條線路上(這里的線路指物理傳輸介質,例如:雙絞線、光纖、電話線)單位時間內只能供一臺計算機使用!還是舉例說明:就拿你自己的計算機來說,你跟同學“小明”聊天的時候,就不能跟另外一位同學“小強”聊天,如果你想同時跟兩位同學聊天,那么你就得裝兩條線路!那么同時與第三位、第四位同學。第N位同學聊天的時候,你需要裝幾根線路?全世界人民聊天的時候,又需要裝幾根線路?“信道復用技術”實現了,在同一條線路上,單位時間內可供X臺計算機同時通信!Toad知道以下幾種復用技術:1、頻分復用2、時分復用3、波分復用4、碼分復用5、空分復用6、統計復用7、極化波復用關于“信道復用技術”更深層次的問題,需要你自己去研究!
26、上面我們提到了“信道復用技術”!知道了這一點,我們就很容易明白“物理信道”上的“虛擬信道”概念了!不同的信道復用技術,使用不同的復用技術,目的就是創建“虛擬信道”。一個TCP協議連接其實就是在物理線路上創建的一條“虛擬信道”。這條“虛擬信道”建立后,在TCP協議發出FIN包之前(兩個終端都會向對方發送一個FIN包),是不會釋放的。正因為這一點,TCP協議被稱為面向連接的協議!UDP協議,一樣會在物理線路上創建一條“虛擬信道”,否則UDP協議無法傳輸數據!但是,當UDP協議傳完數據后,這條“虛擬信道”就被立即注銷了!因此,稱UDP是不面向連接的協議!TCP協議和UDP協議為什么會共存?1. 大家
27、要知道,一種物理線路,單位時間內,能夠創建的“虛擬信道”是有限的!2. 使用TCP協議傳輸數據,當數據從A端傳到B端后,B端會發送一個確認包(ACK包)給A端,告知A端數據我已收到!UDP協議就沒有這種確認機制!這就是為什么說TCP協議可靠,UDP協議不可靠.QQ普通會員就是使用的UDP協議進行傳輸數據!既然UDP協議自身沒有確認機制,這個工作可以交給應用層的進程來完成(QQ)!大家使用QQ的時候,感覺出錯的幾率還是非常小吧!當然,把這個確認工作完全交給QQ自身來做,就直接導致了,QQ軟件體積增大! 有些應用,對數據傳輸可靠性要求非常高,例如大家瀏覽網頁,通過網頁注冊帳號、轉帳等服務,這是不容
28、許出錯的,使用TCP協議能把出錯的可能性降到最低(當然,網絡自身很糟糕,TCP協議也沒辦法)。但是,提供這種可靠服務,會加大網絡帶寬的開銷,因為“虛擬信道”是持續存在的,同時網絡中還會出現大量的ACK和FIN包! 因此,魚和熊掌不可兼得,需根據實際情況選擇傳輸協議.TCP協議提供了可靠的數據傳輸,但是其擁塞控制、數據校驗、重傳機制的網絡開銷很大,不適合實時通信,所以選擇開銷很小的UDP協議來傳輸數據。 UDP 協議是無連接的數據傳輸協議并且無重傳機制,會發生丟包、收到重復包、亂序等情況。而對于數據精確性要求不高的狀態數據以及視頻數據,丟包的影響不大。因為會不斷收到新的包,丟失的個別包會有新的包
29、來覆蓋,所以只需在遠程控制系統的通信部分自行處理亂序及重復包的問題,而對于丟包的問題一般不作處理。 但對于命令包這種需要精確收發的數據, 可在程序的開發中加入丟包重發和超時丟棄的處理。 當然,如果開發的是對于實時性要求不高的事件型控制命令的傳輸,不希望發生指令的丟失也可以直接采用TCP協議。TCP的重傳機制正好適合這種情況。 非面向連接的傳輸協議在數據傳輸之前不建立連接,而是在每個中間節點對非面向連接的包和數據包進行路由。沒有點到點的連接,非面向連接的協議,如UDP,是不可靠的連接。當一個UDP數據包在網絡中移動時,發送過程并不知道它是否到達了目的地,除非應用層已經確認了它已到達的事實。非面向
30、連接的協議也不能探測重復的和亂序的包。標準的專業術語用“不可靠”來描述UDP。在現代網絡中,UDP并不易于導致傳輸失敗,但是你也不能肯定地說它是可靠的 HYPERLINK /Jessy/p/3535612.html TCP的三次握手(建立連接)和四次揮手(關閉連接) 參照:/CSTD/Linux/reference/files/018.PDF/raycomer/item/944d23d9b502d13be3108f61建立連接:理解:窗口和滑動窗口TCP的流量控制TCP使用窗口機制進行流量控制什么是窗口?連接建立時,各端分配一塊緩沖區用來存儲接收的數據,并將緩沖區的尺寸發送給另一端接收方發送的
31、確認信息中包含了自己剩余的緩沖區尺寸剩余緩沖區空間的數量叫做窗口2. TCP的流控過程(滑動窗口)TCP(Transmission Control Protocol)傳輸控制協議三次握手TCP是主機對主機層的傳輸控制協議,提供可靠的連接服務,采用三次握手確認建立一個連接:位碼即tcp標志位,有6種標示:SYN(synchronous建立聯機)ACK(acknowledgement 確認)PSH(push傳送)FIN(finish結束)RST(reset重置)URG(urgent緊急)Sequence number(順序號碼)Acknowledge number(確認號碼)客戶端TCP狀態遷移:
32、CLOSED-SYN_SENT-ESTABLISHED-FIN_WAIT_1-FIN_WAIT_2-TIME_WAIT-CLOSED服務器TCP狀態遷移:CLOSED-LISTEN-SYN收到-ESTABLISHED-CLOSE_WAIT-LAST_ACK-CLOSED各個狀態的意義如下:LISTEN - 偵聽來自遠方TCP端口的連接請求;SYN-SENT -在發送連接請求后等待匹配的連接請求;SYN-RECEIVED - 在收到和發送一個連接請求后等待對連接請求的確認;ESTABLISHED- 代表一個打開的連接,數據可以傳送給用戶;FIN-WAIT-1 - 等待遠程TCP的連接中斷請求,或
33、先前的連接中斷請求的確認;FIN-WAIT-2 - 從遠程TCP等待連接中斷請求;CLOSE-WAIT - 等待從本地用戶發來的連接中斷請求;CLOSING -等待遠程TCP對連接中斷的確認;LAST-ACK - 等待原來發向遠程TCP的連接中斷請求的確認;TIME-WAIT -等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認;CLOSED - 沒有任何連接狀態;TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接,如圖1所示。(1)第一次握手:建立連接時,客戶端A發送SYN包(SYN=j)到服務器B,并進入SYN_SEND狀態,等待服務器B確認。(2)第二次握手:
34、服務器B收到SYN包,必須確認客戶A的SYN(ACK=j+1),同時自己也發送一個SYN包(SYN=k),即SYN+ACK包,此時服務器B進入SYN_RECV狀態。(3)第三次握手:客戶端A收到服務器B的SYNACK包,向服務器B發送確認包ACK(ACK=k+1),此包發送完畢,客戶端A和服務器B進入ESTABLISHED狀態,完成三次握手。完成三次握手,客戶端與服務器開始傳送數據。確認號:其數值等于發送方的發送序號 +1(即接收方期望接收的下一個序列號)。圖1TCP三次握手建立連接TCP的包頭結構:源端口 16位目標端口 16位序列號 32位回應序號 32位TCP頭長度 4位reserved
35、 6位控制代碼 6位窗口大小 16位偏移量 16位校驗和 16位選項32位(可選)這樣我們得出了TCP包頭的最小長度,為20字節第一次握手:客戶端發送一個TCP的SYN標志位置1的包指明客戶打算連接的服務器的端口,以及初始序號X,保存在包頭的序列號(Sequence Number)字段里。第二次握手:服務器發回確認包(ACK)應答。即SYN標志位和ACK標志位均為1同時,將確認序號(Acknowledgement Number)設置為客戶的I S N加1以.即X+1。第三次握手.客戶端再次發送確認包(ACK) SYN標志位為0,ACK標志位為1.并且把服務器發來ACK的序號字段+1,放在確定字
36、段中發送給對方.并且在數據段放寫ISN的+1下面是具體的例子截圖:1.此圖包含兩部分信息:TCP的三次握手(方框中的內容) (SYN, (SYN+ACK), ACK)2. TCP的數據傳輸 (TCP segment of a reassembled PUD)可以看出,server是將數據TCP層對消息包進行分片傳輸(1)Server端收到HTTP請求如GET之后,構造響應消息,其中攜帶網頁內容,在server端的HTTP層發送消息200 OK-server端的TCP層;(2)server端的TCP層對消息包進行分片傳輸;(3)client端的TCP層對接收到的各個消息包分片回送響應;(4)cl
37、ient端的TCP層每次收到一部分都會用ACK確認,之后server繼續傳輸,client繼續確認,直到完成響應消息的所有分片之后,Server發送組合HTTP響應包 200 OK,此時在client端的消息跟蹤中才可以顯示HTTP 200 OK的消息包關閉連接:由于TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的數據發送任務后就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN后仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。CP的連接的拆除需要發送四個包,因此稱為四次揮手(f
38、our-way handshake)。客戶端或服務器均可主動發起揮手動作,在socket編程中,任何一方執行close()操作即可產生揮手操作。(1)客戶端A發送一個FIN,用來關閉客戶A到服務器B的數據傳送。(2)服務器B收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。(3)服務器B關閉與客戶端A的連接,發送一個FIN給客戶端A。(4)客戶端A發回ACK報文確認,并將確認序號設置為收到序號加1。TCP采用四次揮手關閉連接如圖2所示。圖2TCP四次揮手關閉連接參見wireshark抓包,實測的抓包結果并沒有嚴格按揮手時序。我估計是時間間隔太短
39、造成。深入理解TCP連接的釋放:由于TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務后就能發送一個FIN來終止這個方向的連接。收到一個 FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN后仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。TCP協議的連接是全雙工連接,一個TCP連接存在雙向的讀寫通道。簡單說來是 “先關讀,后關寫”,一共需要四個階段。以客戶機發起關閉連接為例:1.服務器讀通道關閉2.客戶機寫通道關閉3.客戶機讀通道關閉4.服務器寫通道關閉關閉行為是在發起方數據發送完畢之后,給對方發出一個FIN(fin
40、ish)數據段。直到接收到對方發送的FIN,且對方收到了接收確認ACK之后,雙方的數據通信完全結束,過程中每次接收都需要返回確認數據段ACK。詳細過程:第一階段 客戶機發送完數據之后,向服務器發送一個FIN數據段,序列號為i; 1.服務器收到FIN(i)后,返回確認段ACK,序列號為i+1,關閉服務器讀通道; 2.客戶機收到ACK(i+1)后,關閉客戶機寫通道;(此時,客戶機仍能通過讀通道讀取服務器的數據,服務器仍能通過寫通道寫數據)第二階段服務器發送完數據之后,向客戶機發送一個FIN數據段,序列號為j; 3.客戶機收到FIN(j)后,返回確認段ACK,序列號為j+1,關閉客戶機讀通道; 4.
41、服務器收到ACK(j+1)后,關閉服務器寫通道。這是標準的TCP關閉兩個階段,服務器和客戶機都可以發起關閉,完全對稱。FIN標識是通過發送最后一塊數據時設置的,標準的例子中,服務器還在發送數據,所以要等到發送完的時候,設置FIN(此時可稱為TCP連接處于半關閉狀態,因為數據仍可從被動關閉一方向主動關閉方傳送)。如果在服務器收到FIN(i)時,已經沒有數據需要發送,可以在返回ACK(i+1)的時候就設置FIN(j)標識,這樣就相當于可以合并第二步和第三步。讀Linux網絡編程關閉TCP連接章節,作以下筆記:“先關讀,后關寫”這句話大神是有別的理解嗎?按道理來說,發送方不寫,接受方收到發送方不寫后
42、不讀。這樣才更好保證,已發的都能收到,不發的之后不再發。我理解來應該是先關寫后關讀才對。而且對于樓主的那個http請求的抓包實驗,我想到的一點拙見:對于tcp的兩端而言,我關我的寫端,你關你的寫端。http協議的一般特殊性,一請求一應答。所以服務端收到客戶端請求之后,已經決定不再有后續通信,所以寫完的回復之后立即關閉。客戶端收到服務器回復后也幾乎同時收到了服務端作為發送方時的關閉寫端。這才表現出了這個tcp的關閉時序跟你解釋的有出入。關閉寫端也是需要發送的tcp數據。感覺有幾個地方說的太誤導人。其一:客戶機發起關閉連接為例,為什么不是客戶端先關閉寫通道,服務器后關閉讀通道?其二:對于CLOSE
43、_WAIT狀態的描述是錯的。原文說“被動關閉的server收到FIN后,但未發出ACK的TCP狀態是CLOSE_WAIT”。應該是被動關閉端未發出FIN的TCP狀態是CLOASE_WAIT。通常服務器收到FIN消息,不管什么情況都會立馬發送ACK確認的。如果按原文說的未發出ACK是CLOSE_WAIT狀態。那么相信CLOSE_WAIT狀態將很少看到TCP的TIME_WAIT和Close_Wait狀態面試時看到應聘者簡歷中寫精通網絡,TCP編程,我常問一個問題,TCP建立連接需要幾次握手?95%以上的應聘者都能答對是3次。問TCP斷開連接需要幾次握手,70%的應聘者能答對是4次通訊。再問CLOS
44、E_WAIT,TIME_WAIT是什么狀態,怎么產生的,對服務有什么影響,如何消除?有一部分同學就回答不上來。不是我扣細節,而是在通訊為主的前端服務器上,必須有能力處理各種TCP狀態。比如統計在本廠的一臺前端機上高峰時間TCP連接的情況,統計命令:Linux shell代碼netstat-n|awk/tcp/+S$NFENDfor(ainS)printa,Sa結果:除了ESTABLISHED,可以看到連接數比較多的幾個狀態是:FIN_WAIT1, TIME_WAIT, CLOSE_WAIT, SYN_RECV和LAST_ACK;下面的文章就這幾個狀態的產生條件、對系統的影響以及處理方式進行簡單
45、描述。TCP狀態TCP狀態如下圖所示:可能有點眼花繚亂?再看看這個時序圖下面看下大家一般比較關心的三種TCP狀態SYN_RECV服務端收到建立連接的SYN沒有收到ACK包的時候處在SYN_RECV狀態。有兩個相關系統配置:1,net.ipv4.tcp_synack_retries :INTEGER默認值是5對于遠端的連接請求SYN,內核會發送SYN ACK數據報,以確認收到上一個 SYN連接請求包。這是所謂的三次握手( threeway handshake)機制的第二個步驟。這里決定內核在放棄連接之前所送出的 SYN+ACK 數目。不應該大于255,默認值是5,對應于180秒左右時間。通常我們
46、不對這個值進行修改,因為我們希望TCP連接不要因為偶爾的丟包而無法建立。2,net.ipv4.tcp_syncookies一般服務器都會設置net.ipv4.tcp_syncookies=1來防止SYN Flood攻擊。假設一個用戶向服務器發送了SYN報文后突然死機或掉線,那么服務器在發出SYN+ACK應答報文后是無法收到客戶端的ACK報文的(第三次握手無法完成),這種情況下服務器端一般會重試(再次發送SYN+ACK給客戶端)并等待一段時間后丟棄這個未完成的連接,這段時間的長度我們稱為SYN Timeout,一般來說這個時間是分鐘的數量級(大約為30秒-2分鐘)。這些處在SYNC_RECV的T
47、CP連接稱為半連接,并存儲在內核的半連接隊列中,在內核收到對端發送的ack包時會查找半連接隊列,并將符合的requst_sock信息存儲到完成三次握手的連接的隊列中,然后刪除此半連接。大量SYNC_RECV的TCP連接會導致半連接隊列溢出,這樣后續的連接建立請求會被內核直接丟棄,這就是SYN Flood攻擊。能夠有效防范SYN Flood攻擊的手段之一,就是SYN Cookie。SYN Cookie原理由D. J. Bernstain和 Eric Schenk發明。SYN Cookie是對TCP服務器端的三次握手協議作一些修改,專門用來防范SYN Flood攻擊的一種手段。它的原理是,在TCP
48、服務器收到TCP SYN包并返回TCP SYN+ACK包時,不分配一個專門的數據區,而是根據這個SYN包計算出一個cookie值。在收到TCP ACK包時,TCP服務器在根據那個cookie值檢查這個TCP ACK包的合法性。如果合法,再分配專門的數據區進行處理未來的TCP連接。觀測服務上SYN_RECV連接個數為:7314,對于一個高并發連接的通訊服務器,這個數字比較正常。CLOSE_WAIT發起TCP連接關閉的一方稱為client,被動關閉的一方稱為server。被動關閉的server收到FIN后,但未發出ACK的TCP狀態是CLOSE_WAIT。出現這種狀況一般都是由于server端代碼
49、的問題,如果你的服務器上出現大量CLOSE_WAIT,應該要考慮檢查代碼。TIME_WAIT根據TCP協議定義的3次握手斷開連接規定,發起socket主動關閉的一方 socket將進入TIME_WAIT狀態。TIME_WAIT狀態將持續2個MSL(Max Segment Lifetime),在Windows下默認為4分鐘,即240秒。TIME_WAIT狀態下的socket不能被回收使用. 具體現象是對于一個處理大量短連接的服務器,如果是由服務器主動關閉客戶端的連接,將導致服務器端存在大量的處于TIME_WAIT狀態的socket, 甚至比處于Established狀態下的socket多的多,嚴
50、重影響服務器的處理能力,甚至耗盡可用的socket,停止服務。為什么需要TIME_WAIT?TIME_WAIT是TCP協議用以保證被重新分配的socket不會受到之前殘留的延遲重發報文影響的機制,是必要的邏輯保證。和TIME_WAIT狀態有關的系統參數有一般由3個,本廠設置如下:net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_fin_timeout,默認60s,減小fin_timeout,減少TIME_WAIT連接數量。net.ipv4.tcp_tw_re
51、use = 1表示開啟重用。允許將TIME-WAIT sockets重新用于新的TCP連接,默認為0,表示關閉;net.ipv4.tcp_tw_recycle = 1表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。為了方便描述,我給這個TCP連接的一端起名為Client,給另外一端起名為Server。上圖描述的是Client主動關閉的過程,FTP協議中就這樣的。如果要描述Server主動關閉的過程,只要交換描述過程中的Server和Client就可以了,HTTP協議就是這樣的。描述過程:Client調用close()函數,給Server發送FIN,請求關閉連接;Server收到FIN之后給Client返回確認
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CNFAGS 15-2024綠色合成氨分級標準(試行)
- T/CCS 038-2023無人快速定量智能裝車系統技術規范
- 正規勞動合同書電子版6篇
- 租房合同家私家電補充協議7篇
- 上海核酸檢測試題及答案
- 中投集合資金信托合同3篇
- 【7語期末】渦陽縣2023-2024學年七年級下學期期末考試語文試題
- 房屋交易資金代收代付協議與房屋使用權轉讓合同3篇
- 大道十字段建設項目勞務作業合同5篇
- 民族建筑裝飾設計與應用
- 中醫科常見病診療指南及操作規范
- 中文版 冷軋不銹鋼板材、薄板和帶材
- 醫療廢物管理PPT演示課件
- 裝車前后車載供氫系統氣密性檢測報告編寫格式
- 物流托運單模板
- 高等代數課件(北大版)第九章 歐式空間§9.1.1
- 陪診師資格考試復習題庫寶典(含答案)
- 宮腔粘連臨床路徑
- 2023年全國統一高考歷史試卷(新課標)(含解析)
- 國開(中央電大)本科《中國當代文學專題》網上形考(任務二至六)試題及答案
- 2023學年完整公開課版破十法
評論
0/150
提交評論