1. 理解:窗口和滑動窗口
TCP的流量控制
連接建立時,各端分配一塊緩沖區用來存儲接收的數據,並將緩沖區的尺寸發送給另一端
接收方發送的確認信息中包含了自己剩余的緩沖區尺寸
剩余緩沖區空間的數量叫做窗口
2. TCP的流控過程(滑動窗口)
2. TCP 與UDP的區別
很多文章都說TCP協議可靠,UDP協議不可靠!為什么前者可靠,后者不可靠呢?既然UDP協議不可靠,為什么還要使用它呢?所謂的TCP協議是面向連接的協議,面向連接是什么呢?
TCP和UDP都是傳輸層的協議!從編程的角度看,就是兩個模塊(模塊就是代碼的集合,一系列代碼的組合提供相應的功能!模塊化最終目的就是:分工協作!模塊化好處:便於擴展開發以及維護!)。
先說TCP協議:
這個協議,是面向的連接!面向連接這個概念,我們要從物理層看起。大家都知道,因為“信道復用技術”的迅猛發展,才促使了計算機網絡的發展!如果沒有“信道復用技術”,那么單條線路上(這里的線路指物理傳輸介質,例如:雙絞線、光纖、電話線)單位時間內只能供一台計算機使用!還是舉例說明:就拿你自己的計算機來說,你跟同學“小明”聊天的時候,就不能跟另外一位同學“小強”聊天,如果你想同時跟兩位同學聊天,那么你就得裝兩條線路!那么同時與第三位、第四位同學。。。第N位同學聊天的時候,你需要裝幾根線路?全世界人民聊天的時候,又需要裝幾根線路?
“信道復用技術”實現了,在同一條線路上,單位時間內可供X台計算機同時通信!Toad知道以下幾種復用技術:
1、頻分復用 2、時分復用 3、波分復用 4、碼分復用 5、空分復用 6、統計復用 7、極化波復用
關於“信道復用技術”更深層次的問題,需要你自己去研究!
上面我們提到了“信道復用技術”!知道了這一點,我們就很容易明白“物理信道”上的“虛擬信道”概念了!不同的信道復用技術,使用不同的復用技術,目的就是創建“虛擬信道”。
一個TCP協議連接其實就是在物理線路上創建的一條“虛擬信道”。這條“虛擬信道”建立后,在TCP協議發出FIN包之前(兩個終端都會向對方發送一個FIN包),是不會釋放的。正因為這一點,TCP協議被稱為面向連接的協議!
UDP協議,一樣會在物理線路上創建一條“虛擬信道”,否則UDP協議無法傳輸數據!但是,當UDP協議傳完數據后,這條“虛擬信道”就被立即注銷了!因此,稱UDP是不面向連接的協議!
TCP協議和UDP協議為什么會共存?
1. 大家要知道,一種物理線路,單位時間內,能夠創建的“虛擬信道”是有限的!
2. 使用TCP協議傳輸數據,當數據從A端傳到B端后,B端會發送一個確認包(ACK包)給A端,告知A端數據我已收到!UDP協議就沒有這種確認機制!這就是為什么說TCP協議可靠,UDP協議不可靠.
QQ普通會員就是使用的UDP協議進行傳輸數據!既然UDP協議自身沒有確認機制,這個工作可以交給應用層的進程來完成(QQ)!大家使用QQ的時候,感覺出錯的幾率還是非常小吧!當然,把這個確認工作完全交給QQ自身來做,就直接導致了,QQ軟件體積增大!
有些應用,對數據傳輸可靠性要求非常高,例如大家瀏覽網頁,通過網頁注冊帳號、轉帳等服務,這是不容許出錯的,使用TCP協議能把出錯的可能性降到最低(當然,網絡自身很糟糕,TCP協議也沒辦法)。但是,提供這種可靠服務,會加大網絡帶寬的開銷,因為“虛擬信道”是持續存在的,同時網絡中還會出現大量的ACK和FIN包!
因此,魚和熊掌不可兼得,需根據實際情況選擇傳輸協議.TCP協議提供了可靠的數據傳輸,但是其擁塞控制、數據校驗、重傳機制的網絡開銷很大,不適合實時通信,所以選擇開銷很小的UDP協議來傳輸數據。
UDP 協議是無連接的數據傳輸協議並且無重傳機制,會發生丟包、收到重復包、亂序等情況。而對於數據精確性要求不高的狀態數據以及視頻數據,丟包的影響不大。因為會不斷收到新的包,丟失的個別包會有新的包來覆蓋,所以只需在遠程控制系統的通信部分自行處理亂序及重復包的問題,而對於丟包的問題一般不作處理。 但對於命令包這種需要精確收發的數據, 可在程序的開發中加入丟包重發和超時丟棄的處理。 當然,如果開發的是對於實時性要求不高的事件型控制命令的傳輸,不希望發生指令的丟失也可以直接采用TCP協議。TCP的重傳機制正好適合這種情況。
非面向連接的傳輸協議在數據傳輸之前不建立連接,而是在每個中間節點對非面向連接的包和數據包進行路由。沒有點到點的連接,非面向連接的協議,如UDP,是不可靠的連接。當一個UDP數據包在網絡中移動時,發送過程並不知道它是否到達了目的地,除非應用層已經確認了它已到達的事實。非面向連接的協議也不能探測重復的和亂序的包。標准的專業術語用“不可靠”來描述UDP。在現代網絡中,UDP並不易於導致傳輸失敗,但是你也不能肯定地說它是可靠的
TCP和UDP都是傳輸層的協議!
應用層 (QQ)
物理連接層
各自協議使用的常用端口:如http, https, tcp, udp, ftp等等
TCP:
FTP:21, Telnet:23, SMTP:25
UDP:
DNS:53, TFTP:69, SNMP:161, RIP:520
https:
http:80