TCP概述


一、概述

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發送返饋信息,表示數據是否收到。

面向字節流

  • 什么是面向字節流?

image-20210105164912155

過程說明:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM