国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

tcp的認知和應用

chanthuang / 3501人閱讀

摘要:表示首部的長度為字節除掉和剛好字節。差錯控制,校驗和的計算包括首部數據和其它填充字節。如果兩次校驗和一致說明數據是正確的,否則將認為數據被破壞,接收端將丟棄該數據。此時包的序號被設定為收到的確認號,而響應號則為。

什么是tcp tcp定義

tcp是網絡七層模型當中傳輸層的協議,由IETF的RFC 793定義,是面向連接的、可靠的、基于字節流的通信協議。而傳輸層位于七層模型的中間,下面是網絡層,上面的話有應用層,承上啟下,地位還是很重要的。在傳輸層中還有一種協議udp(無連接、不保證可靠性)。相比來說tcp有以下特點

傳輸可靠,數據丟失有重傳機制

數據分段打包傳輸,對每個數據編號,控制順序

流量控制,避免擁塞,因為TCP連接雙方有固定大小緩沖空間。TCP的接收端只允許另一端發送接收端緩沖區所能接納的數據。

tcp數據包格式


針對上面圖中的結構劃分,下面進行下解釋

source port 和 destination port 都是16位,計算機端口識別訪問那個服務, 其中source port 是隨機的,而destination port決定接受方由那個程序來接受并且因為是16位,所以說程序的最大端口號65535

sequence Number 是發送數據包中的第一個字節的序列號,假設當前的序列號為 s,發送數據長度為 l,則下次發送數據時的序列號為 s + l。在建立連接時通常由計算機生成一個隨機數作為序列號的初始值

Acknowledgment Number 它等于下一次應該接收到的數據的序列號。可以認為這個位置以前所有的數據都已被正常接收。
header length TCP 首部的長度,單位為 4 字節。如果沒有可選字段,那么這里的值就是 5。表示 TCP 首部的長度為 20 字節(除掉data和option,剛好20字節)。
reserved

URG表示Urgent Pointer字段有意義

ACK表示Acknowledgment Number字段有意義

PSH表示有 DATA數據傳輸

RST表示復位TCP連接

SYN表示SYN報文(在建立TCP連接的時候使用)

FIN表示沒有數據需要發送了(在關閉TCP連接的時候使用)

Windows 表示接收緩沖區的空閑空間,16位,用來告訴TCP連接另一端自己能夠接收的最大數據長度,流量控制的機制就基于此。
Checksum 差錯控制,TCP校驗和的計算包括TCP首部、數據和其它填充字節。在發送TCP數據段時,由發送端計算校驗和,當到達目的地時又進行一次檢驗和計算。如果兩次校驗和一致說明數據是正確的,否則將認為數據被破壞,接收端將丟棄該數據。
Urgent 是緊急指針,16位,只有URG標志位被設置時該字段才有意義,表示緊急數據相對序列號(Sequence Number字段的值)的偏移。

tcp三次握手


說明 上面是一個我寫的測試demo,是一個普通的http請求,下面我們抓包分析一下tcp三次握手的細節


說明 第一次握手client通過發送一個SYN標識位和Sequence Numbers(同步序列號)的數據段給server請求連接,通過該數據段告訴server希望建立連接

說明 第二次握手是server用一個確認應答ACK標志位和Acknowledgment Number告訴client收到了數據段,同時自己也發送一個syn包(syn標志位和Sequence Numbers)。

說明 第三次客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK,此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。
說明 三次握手完畢,鏈接通道建立成功,下面開始正式數據傳輸

針對上面整個過程下面再來一幅圖詳細總結說明下

客戶端通過向服務器端發送一個SYN來表明希望建立連接,作為三次握手的一部分。客戶端把這段連接的序號設定為隨機數c。

服務器端應當為一個合法的SYN回送一個SYN/ACK。ACK的確認碼應為c+1,SYN/ACK包本身又有一個隨機產生的序號s。

最后,客戶端再發送一個ACK。當服務端收到這個ACK的時候,就完成了三次握手,并進入了連接創建狀態。此時包的序號被設定為收到的確認號c+1,而響應號則為s+1。

tcp四次斷開


下面描述下整個過程,過程和三次握手機制一樣,也是用一些標志位來實現斷開的過程,詳細步驟過程不在圖形化,因為需要四幅步驟圖,太占篇幅了,下面根據上面的流程圖大致解釋說明一下。

client發送FIN標志位,表示出要斷開連接的請求的含義

server進行響應,發送ack標識,表示確認收到斷開連接請求

server 發送FIN標志位,提出反方向的關閉要求

client 發送ack標志位,標識確認收到的主機B的關閉連接請求

tcp應用場景

適合對傳輸數據要求比較可靠的地方,例如常見的ftp,http,https,smtp等等這些應用層的協議都是基于tcp的封裝;還有實戰中常見套接字編程,可以用來開發瀏覽器通信模塊,以及p2p的下載工具等等,這些底層都是都是基于tcp協議。

如何使用tcp

協議只是一個規范,實現形式有多種,具體而言在node當中使用的話如下形式

let net = require("net");
let path = require("path");
let ws = require("fs").createWriteStream(path.join(__dirname, "msg.txt"));
let server = net.createServer(function (socket) {
    socket.pipe(ws, { end: false });

});
server.listen(8080);
創建一個tcp服務器監聽8080端口,并將接受的數據存儲到msg.txt文件中,上面的socket是一個雙工流,既可寫又可以讀,下面是測試的輸出結果


說明 上面只是一個簡單的實例,更多用法,可以參考node當中net模塊

參考鏈接
https://zh.wikipedia.org/wiki...
http://nodejs.cn/api/
http://www.freebuf.com/column...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107392.html

相關文章

  • HTTP1.1 Keep-Alive到底算不算長連接?

    摘要:在基礎架構部沉浸了半年,有一些認知刷新想和童靴們交代一下,不一定全面,僅代表此時的認知,也歡迎筒靴們提出看法。本文聊一聊口嗨用語長連接短連接,文章會按照下面的思維導圖來講述在基礎架構部沉浸了半年,有一些認知刷新想和童靴們交代一下, 不一定全面,僅代表此時的認知, 也歡迎筒靴們提出看法。本文聊一聊口嗨用語:長連接、短連接, 文章會按照下面的思維導圖來講述:

    shleyZ 評論0 收藏0
  • Easyswoole 源碼學習個人解析 目錄

    摘要:易用穩定,本次想通過對的學習和個人解析,吸收框架的思想和設計知識,加強自己對的認知和理解。當然,筆者能力水平有限,后續的文章如有錯誤,還請指出和諒解。目錄如下后續添加文章都會記錄在此服務啟動過程以及主體設計流程源碼解析 前言 swoole是什么?官網的原話介紹是這樣的: Swoole 使用純 C 語言編寫,提供了 PHP 語言的異步多線程服務器,異步 TCP/UDP 網絡客戶端,異步 ...

    CoXie 評論0 收藏0
  • 阿里之路+Java面經考點

    摘要:我的是忙碌的一年,從年初備戰實習春招,年三十都在死磕源碼,三月份經歷了阿里五次面試,四月順利收到實習。因為我心理很清楚,我的目標是阿里。所以在收到阿里之后的那晚,我重新規劃了接下來的學習計劃,將我的短期目標更新成拿下阿里轉正。 我的2017是忙碌的一年,從年初備戰實習春招,年三十都在死磕JDK源碼,三月份經歷了阿里五次面試,四月順利收到實習offer。然后五月懷著忐忑的心情開始了螞蟻金...

    姘擱『 評論0 收藏0
  • Node.js 是什么?我為什么選擇它?

    摘要:單線程使用單線程來運行,而不是向之類的其它服務器,每個請求將生產一個線程,這種方法避免了上下文切換和內存中的大量執行堆棧,這也是和其它服務器為解決上一個年,著名的并發連接問題而采用的方法。 showImg(https://segmentfault.com/img/remote/1460000019968794?w=1080&h=675);當我們學習一項新的事物的時候,我們首先要知道它來...

    Joyven 評論0 收藏0

發表評論

0條評論

chanthuang

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<