【Java 网络编程】TCP 传输机制 ( 数据拆分 | 排序 | 顺序发送 | 顺序组装 | 超时重发 )
文章目錄
- I TCP 傳輸過程
- II TCP 傳輸示例
- III TCP 傳輸特殊情況處理
I TCP 傳輸過程
1. TCP 傳輸過程 : 排序 , 順序發(fā)送 , 順序組裝 ;
- ① 排序 : TCP 發(fā)送數(shù)據(jù)時 , 會將數(shù)據(jù)拆分成不同的片段 , 并對這些片段進行排序 ;
- ② 順序發(fā)送 : 將排序好的數(shù)據(jù)片段順序發(fā)送 ;
- ③ 順序組裝 : 在接收端按照順序?qū)?shù)據(jù)片段組裝成原數(shù)據(jù) ;
2. 超時重發(fā)機制 : 如果某個數(shù)據(jù)片沒有到達 , 或者送達時間超時 , 接收方會將相關信息反饋給發(fā)送方 , 發(fā)送方需要將該數(shù)據(jù)片重新發(fā)送 ;
3. 拆分數(shù)據(jù)作用 ( 節(jié)省流量 ) : 當數(shù)據(jù)沒有送達或者超時 , 是需要重新發(fā)送數(shù)據(jù)的 , 如果不拆分數(shù)據(jù) , 將一整包數(shù)據(jù)整體發(fā)送 , 如果發(fā)送失敗 , 需要重新發(fā)送整個數(shù)據(jù) , 這樣就非常浪費流量 ;
4. 數(shù)據(jù)重發(fā)機制 : 服務器端收到客戶端發(fā)送的數(shù)據(jù)時 , 其會定時向客戶端發(fā)送服務器端已經(jīng)收到的數(shù)據(jù) , 如果客戶端沒有收到服務器端反饋的某條數(shù)據(jù)已經(jīng)送達 , 客戶端就會認為該數(shù)據(jù)沒有送達 , 客戶端重新將該數(shù)據(jù)重新發(fā)送一遍 ;
II TCP 傳輸示例
1. A 向 B 發(fā)送 5 個數(shù)據(jù)包 :
- ① 發(fā)送第一幀數(shù)據(jù) ( 完成 ) : 首先將第一幀數(shù)據(jù)發(fā)送給 B , B 收到 1 數(shù)據(jù) , 將收到 1 數(shù)據(jù)反饋給 A , 表明已經(jīng)收到了第一幀數(shù)據(jù) ;
- ② 發(fā)送第二幀數(shù)據(jù) ( 反饋信息未送達 ) : 發(fā)送第二幀數(shù)據(jù) , 接收方收到了 2 數(shù)據(jù) , 但是反饋信息沒能發(fā)送給 A ;
- ③ 發(fā)送第三幀數(shù)據(jù) ( 沒有送達 B ) : 發(fā)送的第三幀數(shù)據(jù)沒有發(fā)送到 B , 中途丟包了 ;
- ④ 發(fā)送第四幀數(shù)據(jù) ( 反饋信息未送達 ) : 第四幀數(shù)據(jù)送達 B , 但是 B 的反饋信息沒有送達 A ;
- ⑤ 發(fā)送第五幀數(shù)據(jù) ( 完成 ) : 第五幀數(shù)據(jù)發(fā)送到 B , B 的反饋信息也送到了 A ;
2. 重發(fā)數(shù)據(jù) : 其中第三幀數(shù)據(jù)沒有送達 , 時鐘超時 , B 將相關信息發(fā)送到 A , A 重發(fā)第三幀數(shù)據(jù) ;
III TCP 傳輸特殊情況處理
1. 發(fā)送過程中沒有按順序到達 : 被拆分的數(shù)據(jù)包是按照排好的順序發(fā)送到接收端的 , 但是由于網(wǎng)絡原因 , 可能到達接收方不是原來的順序 , 接收方會重新進行排序 ;
2. 丟包情況處理 : 如果發(fā)送端在超時時間內(nèi)沒有收到接收端的某個包的反饋信息 , 就會認為該包沒有送達 , 在超時后 , 會重新發(fā)送該包數(shù)據(jù) ;
3. 連接斷開情況處理 : 如果連接傳輸中途斷開 , 需要進行重連 , 重連后再次發(fā)送數(shù)據(jù) ;
總結
以上是生活随笔為你收集整理的【Java 网络编程】TCP 传输机制 ( 数据拆分 | 排序 | 顺序发送 | 顺序组装 | 超时重发 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java 网络编程】TCP 连接 断开
- 下一篇: 【Java 网络编程】客户端 Socke