TCP傳輸協(xié)議中如何解決丟包問題
一、回答這個問題之前,要考慮TCP協(xié)議為什么會丟包,在什么樣的情況下會丟包。
1. TCP協(xié)議定義(Transimission Control Protocol)是以一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。
2. TCP是基于不可靠的網(wǎng)路實現(xiàn)可靠傳輸,肯定會存在丟包問題。
3. 如果在通信過程中,發(fā)現(xiàn)缺少數(shù)據(jù)或者丟包,那邊么最大的可能性是程序發(fā)送過程或者接受過程中出現(xiàn)問題。
例如:我有2臺服務器 ,A和B服務器。
A服務器發(fā)送數(shù)據(jù)給B服務器頻率過高時,B服務器來不及處理,造成數(shù)據(jù)丟包。(原因可能是程序邏輯問題,多線程同步問題,緩沖區(qū)溢出問題)
如果A服務器不對發(fā)送頻率進行控制,或者數(shù)據(jù)進行重發(fā)的話,那么B服務器收到數(shù)據(jù)就會少。就會造成丟失數(shù)據(jù)
二、TCP協(xié)議丟包后,如何解決丟包的問題
為了滿足TCP協(xié)議不丟包。TCP協(xié)議有如下規(guī)定:
1. 數(shù)據(jù)分片:發(fā)送端對數(shù)據(jù)進行分片,接受端要對數(shù)據(jù)進行重組,由TCP確定分片的大小并控制分片和重組
2. 到達確認:接收端接收到分片數(shù)據(jù)時,根據(jù)分片數(shù)據(jù)序號向發(fā)送端發(fā)送一個確認
3. 超時重發(fā):發(fā)送方在發(fā)送分片時設置超時定時器,如果在定時器超時之后沒有收到相應的確認,重發(fā)分片數(shù)據(jù)
4. 滑動窗口:TCP連接的每一方的接受緩沖空間大小固定,接收端只允許另一端發(fā)送接收端緩沖區(qū)所能接納的數(shù)據(jù),TCP在滑動窗口的基礎上提供流量控制,防止較快主機致使較慢主機的緩沖區(qū)溢出
5. 失序處理:作為IP數(shù)據(jù)報來傳輸?shù)腡CP分片到達時可能會失序,TCP將對收到的數(shù)據(jù)進行重新排序,將收到的數(shù)據(jù)以正確的順序交給應用層;
6. 重復處理:作為IP數(shù)據(jù)報來傳輸?shù)腡CP分片會發(fā)生重復,TCP的接收端必須丟棄重復的數(shù)據(jù);
7. 數(shù)據(jù)校驗:TCP將保持它首部和數(shù)據(jù)的檢驗和,這是一個端到端的檢驗和,目的是檢測數(shù)據(jù)在傳輸過程中的任何變化。如果收到分片的檢驗或有差錯,TCP將丟棄這個分片,并不確認收到此報文段導致對端超時并重發(fā)
TCP三次握手,四次釋放圖:


















 
 
 







 
 
 
 