一、概述
1、什么是TCP
傳輸控制協議(英語:Transmission Control Protocol,縮寫:TCP)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議,由IETF的RFC 793定義。在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能。用戶數據報協議(UDP)是同一層內另一個重要的傳輸協議。
當應用層給TCP層傳送大數據包時,通常受數據鏈路層最大傳輸單元MTU的限制,TCP會將包分片,並編號傳送給IP層。等接收方收到數據包后,即會返回確認信息。另外會有校驗數據是否准確
2、什么時候用TCP
對通信質量有要求,:整個數據要准確無誤的傳送給接收方。比如:qq傳送文件,POP3等郵件協議時
3、怎么用TCP
案例: http協議底層就是使用的TCP協議
在java中可以通過socket編程(即ServerSocket等)來實現TCP連接
4、TCP的特點
TCP 是面向連接的運輸層協議。即傳輸數據前需先建立連接確保網絡通暢。
每一條 TCP 連接只能有兩個端點(endpoint),每一條 TCP 連接只能是點對點的(一對一,一個發一個收)。
TCP 提供可靠交付的服務。
TCP 提供全雙工通信,A與B通信,A發數據給B,B要給A發送返饋信息,表示數據是否收到。
面向字節流。
- 什么是面向字節流?
過程說明:
1、發送端讀取文件內容到TCP緩存中
2、再從緩存中讀取要傳輸的內容 加上 首部傳輸給接收方
3、接收方先把數據放到緩存中,再從緩存中讀取字節
5、TCP存在的問題
1、TCP粘包問題(TCP是基於字節流的,說包可能不太確切)
-
產生原因
1、發送端:發送端的Nagle算法,如果發送數據包太小,會把較小的數據包合並
2、接收端:由於接收端會先把數據包放在緩沖區中,如果數據沒有及時被進程取走,那么緩沖區可能同時存在多次發送的數據。然后被一次取走多個數據包。產生粘包現象
值的注意的是: 粘包並不都有問題。如果是不帶結構的連續流(比如文件傳輸),那么就不需要分包
-
解決方法
一、發送端
1、通過編程。數據發送時,強制push,不用等緩沖區滿了才發送==》關閉了優化算法,性能會降低
2、在數據包后加分隔符。 之后再通過分隔符進行分包
二、接收端
1、通過優化程序設計、精簡接收進程工作量、提高接收進程優先級等措施,使其及時接收數據,從而盡量避免出現粘包現象...
參考鏈接:
https://zh.wikipedia.org/wiki/傳輸控制協議
https://www.codenong.com/cs105953441/
如果本篇博客有任何錯誤和建議,歡迎大佬們批評指正
我是知逆,我們下期見
Peace