1. 理解:窗口和滑動窗口
TCP的流量控制
鏈接創建時,各端分配一塊緩衝區用來存儲接收的數據,並將緩衝區的尺寸發送給另外一端編程
接收方發送的確認信息中包含了本身剩餘的緩衝區尺寸網絡
剩餘緩衝區空間的數量叫作窗口tcp
2. TCP的流控過程(滑動窗口)模塊化
2. TCP 與UDP的區別 spa
不少文章都說TCP協議可靠,UDP協議不可靠!爲何前者可靠,後者不可靠呢?既然UDP協議不可靠,爲何還要使用它呢?所謂的TCP協議是面向鏈接的協議,面向鏈接是什麼呢?
TCP和UDP都是傳輸層的協議!從編程的角度看,就是兩個模塊(模塊就是代碼的集合,一系列代碼的組合提供相應的功能!模塊化最終目的就是:分工協做!模塊化好處:便於擴展開發以及維護!)。
先說TCP協議:
這個協議,是面向的鏈接!面向鏈接這個概念,咱們要從物理層看起。你們都知道,由於「信道複用技術」的迅猛發展,才促使了計算機網絡的發展!若是沒有「信道複用技術」,那麼單條線路上(這裏的線路指物理傳輸介質,例如:雙絞線、光纖、電話線)單位時間內只能供一臺計算機使用!仍是舉例說明:就拿你本身的計算機來講,你跟同窗「小明」聊天的時候,就不能跟另一位同窗「小強」聊天,若是你想同時跟兩位同窗聊天,那麼你就得裝兩條線路!那麼同時與第三位、第四位同窗。。。第N位同窗聊天的時候,你須要裝幾根線路?全世界人民聊天的時候,又須要裝幾根線路?
「信道複用技術」實現了,在同一條線路上,單位時間內可供X臺計算機同時通訊!Toad知道如下幾種複用技術:
一、頻分複用 二、時分複用 三、波分複用 四、碼分複用 五、空分複用 六、統計複用 七、極化波複用
關於「信道複用技術」更深層次的問題,須要你本身去研究!
上面咱們提到了「信道複用技術」!知道了這一點,咱們就很容易明白「物理信道」上的「虛擬信道」概念了!不一樣的信道複用技術,使用不一樣的複用技術,目的就是建立「虛擬信道」。
一個TCP協議鏈接其實就是在物理線路上建立的一條「虛擬信道」。這條「虛擬信道」創建後,在TCP協議發出FIN包以前(兩個終端都會向對方發送一個FIN包),是不會釋放的。正由於這一點,TCP協議被稱爲面向鏈接的協議! 計算機網絡
UDP協議,同樣會在物理線路上建立一條「虛擬信道」,不然UDP協議沒法傳輸數據!可是,當UDP協議傳完數據後,這條「虛擬信道」就被當即註銷了!所以,稱UDP是不面向鏈接的協議! 3d
TCP協議和UDP協議爲何會共存?視頻
1. 你們要知道,一種物理線路,單位時間內,可以建立的「虛擬信道」是有限的!blog
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:25UDP:DNS:53, TFTP:69, SNMP:161, RIP:520https:http:80