1. 程式人生 > >TCP與應用層協議

TCP與應用層協議

TCP層與UDP層建立在IP之上,以IP層為基礎進行資料傳輸,也就是說TCP與UDP還是通過一個個的IP包來進行傳輸的,雖然IP層只關心一個數據包(基本單位)的傳輸過程,但IP並不能保證資料包能安全的被送達,一旦丟失IP也無能為力,TCP在IP的基礎上加上了對傳輸過程進行流控制,增加了一系列保證傳輸可靠的機制。

1、給每個IP包分配序號sep,同時,保證接收端在接收到序號為seq的IP包時回覆ACK訊息(ACK為其期望收到的下個IP包的序號,即成功收到的序號為seq + 1的包),如果傳送端在合理的往返延時內未收到回覆的ACK訊息,傳送端將重傳,接收端收到序號一致的包將丟棄,如果傳送端接收到接收端回覆的ACK訊息,將繼續傳送下一IP包,(即超時重傳,捎帶確認機制)這樣就保證了傳輸的有序與可靠

2、TCP提供校驗和函式檢驗資料是否錯誤,傳送接收時都會計算校驗和,同時使用MD5認證對資料加密,以此保證資料正確與合法

3、滑動視窗技術會進行流量控制,不會出現傳送的資料長度大於輸入緩衝的情況,並實現TCP面向流的可靠性

參考部落格:     http://blog.csdn.net/ljlstart/article/details/51340829

TCP套接字內部有I/O緩衝區(每個套接字都有自己獨立的輸入/輸出緩衝),只要緩衝區不滿,一次全部讀完,或者分幾次讀完是沒有關係的,緩衝區一般大於單個IP包的位元組數,因此會將緩衝區內的資料包分成一個個小包,IP層封裝每一個小包並以IP包的形式向接收方傳送(以接收IP層來說),接收方IP層解包並將一個個資料包放入接套接字的緩衝區,並組合成一個完整的資料包,一個個的IP包不停的、連續的從傳送方到接收方,就好像流一樣;

以一個個IP包的連續傳送的方式,再加上網路環境複雜,IP包的旅途恐怕不會那麼一帆風順,因此接收端在呼叫read函式讀取緩衝區時可能並不能完全讀取傳送端意圖傳送的所有資料(read函式在讀取套接字緩衝區時預設阻塞,直到接收到資料為止,緩衝中有多少讀多少,將有的讀完則返回,被讀取後的資料將會被清除,正是這些原因,下面使用迴圈的方式呼叫read) (好比你去餐館吃飯,你點了5個菜,一般情況下並不是5盤菜直接就在桌子上等著你吃,而是菜再做好了之後會被一盤一盤的端上來,沒有菜的時候肯定就要等著,而且你也不會吃了一個菜就走吧?肯定要吃夠5個菜才行,不然你幹嘛點5個菜呢???);

也是由於有緩衝區的原因,呼叫write”傳送”(write實際只是寫緩衝區,只要將資料寫入緩衝區便會返回,資料的傳送由TCP保證)一次資料也不意味著資料肯定被立即傳送出去了,有可能後續傳送的資料和之前傳送的資料都在緩衝區後隨後被一起傳送出去了,這就是傳送端的粘包;

同樣也因為緩衝區的原因,如果沒有及時read讀取緩衝區中的資料,後續到達的資料會繼續存放到緩衝區中,也就是兩次傳送端傳送的資料同時存在了接收端的接收緩衝區中,這是接收端的粘包;

還有可能呼叫write向緩衝區填充意圖傳送的資料時,資料填充到一半緩衝區滿了直接傳送了,但實際情況是,這個資料並不是一個完整的資料,剩下的資料只有等下一次傳送的時候再補上,這是不完整的粘包。

這時候應用層協議的作用就凸顯出來了,在多次收發資料時(要是雙方的一次連線就發一次,不管分成幾個IP包,組合後依舊是一個完整的資料包,當傳送完畢後斷開連線時(無論是shutdown或者close,只要觸發EOF),肯定意味著資料傳輸完成,以EOF為依據迴圈讀取即可,即while(0 != read(客戶端套接字,buf, BUF_SIZE)) ),雙方必須統一口徑,傳送方必須事先明確告訴接收方一個數據是多少位元組,按照約定的長度讀取資料即可;

或採用”資料長度 + 實際資料的”格式傳送資料(每一幀都以此方式傳送資料),這個”資料長度”的格式是固定寬度的,事先也必須商量好,在讀取資料時,直接讀取固定寬度的”資料長度”獲取資料實際長度,再按照實際長度讀取實際資料即可;

通過這兩種方法,在知道資料長度後,一定要讀取夠資料長度之後再停止讀取,也就是必須以資料長度為判定依據迴圈讀取緩衝區的資料,次數不限,資料個數不多不少,完全讀取,如已經知道了資料長度為N位元組,即應該讀取N個位元組:

Int recvlen = 0, recvcount = 0;
While((N – recvlen) > 0)  
{
         recvcount= read(客戶端套接字, &buf[recvlen], N - recvlen);//讀取到buf[n]元素的位置
//每一次:將緩衝區內有的資料讀取上來,以buf[recvlen]元素為基本位置向後存放
         recvlen+= recvcount;
}


或者。。。。。通過建立多次連線來發送多次資料。。。。。。。

網路環境很複雜,不能避免粘包的情況發生,在接收時按照資料實際寬度拆開即可

個人理解,歡迎大家拍磚

搜了些部落格,掃了一遍,寫得挺好,於是把他們貼上來:

http://www.tuicool.com/articles/vaE3iq

http://blog.csdn.net/zhangxinrun/article/details/6721427

http://www.cnblogs.com/QG-whz/p/5537447.html

http://blog.csdn.net/my_sky2012/article/details/49486539

相關推薦

TCP應用協議

TCP層與UDP層建立在IP之上,以IP層為基礎進行資料傳輸,也就是說TCP與UDP還是通過一個個的IP包來進行傳輸的,雖然IP層只關心一個數據包(基本單位)的傳輸過程,但IP並不能保證資料包能安全的被送達,一旦丟失IP也無能為力,TCP在IP的基礎上加上了對傳輸過程進行流

TCP-IP之應用協議

傳輸協議 images gateway 1-1 大學 表示 進制 技術 dom 應用層協議是多種多樣的,比如 DNS、FTP、Telnet、SMTP、HTTP、RIP、NFS 一、DNS DNS (Domain Name Service 域名服務) 協議基於 UDP,使用

TCP/IP四協議TCPUDP的區別

轉載地址:http://www.cnblogs.com/BlueTzar/articles/811160.html http://www.cnblogs.com/bizhu/archive/2012/05/12/2497493.html TCP/IP參考模型

Unity C# 自定義TCP傳輸協議以及封包拆包、解決粘包問題(網路應用協議

本文只是初步實現了一個簡單的基於TCP的自定協議,更為複雜的協議可以根據這種方式去擴充套件。 網路應用層協議,通俗一點的講,它是一種基於socket傳輸的由傳送方和接收方事先協商好的一種訊息包組成結構,主要由訊息頭和訊息體組成。  眾所周知,基於socket的資訊互動有兩

應用協議:HTTPHTTPS協議詳解、二者的區別

http協議詳解 1、HTTP協議:超文字傳輸協議 是一種分散式、合作式、多媒體資訊系統服務,面向應用層的協議。是一種通用的,不分狀態的協議。是一種請求/應答協議。 1.1、HTTP/1.0和HTTP/1.1的比較 RFC 1945定義了HTT

1 NXP的BLE協議棧軟體架構應用程式碼分析

1 NXP的BLE協議棧軟體架構與應用層程式碼分析 本章介紹了BLE協議棧軟體架構,並重點分析了應用層的軟體程式碼。 1.1. BLE協議棧軟體架構 本文件學習KW40Z的BLE軟體開發採用流行的IAR嵌入式開發軟體。開啟frdm-kw40z-demo.eww工程專

上網行為、應用協議資料特徵流量特徵分析(招商合作)

                  現在各種網路產品裝置,都已經離不開上網行為管理或應用協議識別這一重要功能,如果您想讓您的產品更具競爭力,就要提高您的產品應用協議識別率,協議特徵庫是網路應用層流量管理產品的生命力,而具備完善的應用協議特徵庫,才能減少對應用的誤識別、漏識

TCP/IP四協議模型ISO七模型(TCP/IP系統學習(2))

首先我們應該瞭解到,像TCP/IP這樣的協議系統必須負責完成以下任務: 1. 把訊息分解為可管理的資料塊,並且這些資料塊能夠有效的通過傳輸介質。 2. 與網路介面卡硬體連線。 3. 定址,即傳送端計算機必須能夠定位到接收資料的計算機,接收計算機必須能夠識別

計算機網路第三彈——TCP協議如何保證傳輸的可靠性 TCP和UDP的區別 TCP和UDP分別對應的常見應用協議

TCP提供面向連線的、可靠的位元組流服務。面向連線意味著客戶端和伺服器在彼此交換資料之前必須先建立一個TCP連線;位元組流服務意味著兩個應用程式通過TCP連線交換8bit位元組構成的位元組流,TCP不存在位元組流中插入記錄識別符號。TCP的可靠性應該是對於UDP不可靠傳輸來說

TCP/IP協議族之應用協議(FTP、TFTP)

檔案傳送協議FTP: File Transfer Protocol     是因特網上使用得最廣泛的檔案傳送協議。提供互動式的訪問,允許客戶指明檔案的型別與格式(如指明是否使用ASCII碼),並允許檔案具有存取許可權(如訪問檔案的使用者必須經過授權,並輸入有效的口令)。

TCP和UDP的9個區別是什麼及對應應用協議

 TCP和UDP是兩個傳輸層協議,廣泛應用於網路中不同主機之間傳輸資料。對任何程式設計師來說,熟悉TCP和UDP的工作方式都是至關重要的。這就是為什麼TCP和UDP是一個流行的Java程式設計面試問題。我曾經在各種不同的Java面試中見過這個問題,尤其是對伺服器端Java開發

基於TCP/UDP的應用協議有那些

TCP支援的應用協議主要有:Telnet、FTP、SMTP等;UDP支援的應用層協議主要有:NFS(網路檔案系統)、SNMP(簡單網路管理協議)、DNS(主域名稱系統)、TFTP(通用檔案傳輸協議)等。

轉:OSI七協議TCP/IP四協議之間的比較(學習中)

OSI與TCP/IP的比較: 分層結構 OSI參考模型與TCP/IP協議都採用了分層結構,都是基於獨立的協議棧的概念。OSI參考模型有7層,而TCP/IP協議只有4層,即TCP/IP協議沒有了表示層和會話層,並且把資料鏈路層和物理層合併為網路介面層。不過,二者的分層之間

應用協議及ip地址劃分

ip地址 技術 log 1-1 應用 blog -1 應用層協議 cnblogs 1、應用層協議 2、ip地址 3、子網劃分及超網合並 應用層協議及ip地址劃分

OSI七協議和TCP/IP五協議

present div 時間 網絡層 加密 導數 進行 spf 文件服務 OSI七層模型概略: OSI 中的層 功能 TCP/IP協議族 應用層 文件傳輸,電子郵件,文件服務,虛擬終端 HTTP,SMTP,FTP,DNS 表示層 數據壓縮,解壓,數據加

實驗八 應用協議Ⅱ-FTP協議分析

erl .cn 圖片 ftp連接 ext es2017 用戶 ftp服務 發送 實驗八 應用層協議Ⅱ-FTP協議分析 一、實驗目的 1.掌握FTP協議的實現原理。 2.了解控制通道和數據通道。 二、實驗內容 用WareShark

linux 高性能讀書筆記之應用協議HTTP相關小知識

原理 連接 設置代理 客戶 代理服務 lin 不同 火墻 筆記 ####HTTP連襟:傳輸層協議默認使用TCP小知識:1.正向服務器要求客戶端自己設置代理服務器的地址。客戶端每次的請求都將直接發送到該代理服務器,並且由代理服務器來請求目標資源(常用於防火墻內的局域網機器要訪

計算機網絡相關:應用協議(二):HTTP

toc connect html文本 con 也不會 http服務 lang 代碼 保存 前言 復習下計算機網絡的知識並記錄 正文 定義:HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協

應用協議及其功能詳解

應用層應用層協議及其功能詳解 DNS: 域名服務,用於將名稱解析為IP地址,反之亦然 DNS是一個倒置的樹形結構。最頂部是根域,用英文句點(.)表示。全球有13個根域服務器,一臺主服務器在美國,9臺輔助服務器在美國,2臺在歐州,一臺在日本。 根域服務器以下是一級域(頂級域)、二級域、三級域……最多127級

傳輸協議應用協議

傳輸層協議、應用層協議傳輸層協議、應用層協議一、傳輸層協議1、傳輸層概述(1)傳輸層的作用IP層提供點到點的連接傳輸層提供端到端的連接(2)傳輸層的協議TCP(Transmission Control Protocol)傳輸控制協議可靠的、面向連接的協議;傳輸效率低UDP(User Datagram Prot