1. 程式人生 > >網絡基礎知識總結(二)

網絡基礎知識總結(二)

大小 靠譜 單獨 技術分享 通信 維護 ack 環境 抓包工具

概述

在《網絡基礎總結(一)》總結了TCP建立連接和斷開連接的流程,然而TCP協議遠比我所了解的復雜得多,我所知的可以說就冰山一角,所總結的也只是紙上談兵,僅僅只能對TCP有個膚淺的認識,關於TCP協議細節可以推薦讀下《TCP/IP 詳解 卷1: 協議》,這篇隨筆就看下TCP的報文吧。

TCP報文

技術分享圖片

我們如何區分一臺電腦上的不同應用進程?就像我們區分人一樣,不同的人給標識不同的名字,偶爾還會遇到重名的,在計算機上重名的現象就禁止發生的,不同的應用進程,區分它們的是不同的端口號,有人占了這個端口運行,就不允許別人使用這個端口,所以不管是UDP協議還是TCP協議中端口號都尤為重要,源端口和目的端口都必不可少的,沒有他們計算機不知道把數據發給哪個應用進程。

源端口:源頭,發送方計算機上的端口號。

目的端口:接收一方計算機的端口號。

序號:序號,顧名思義,序號就是編號,給每個傳輸的字節編個號。老大,老二,老三,這樣TCP就知道了,哪個應該先來,哪個應該後到,就解決了亂序的問題,在寫的第一篇隨筆中,用抓包工具給大家展示的三次握手,如果大家有註意可以看到sequence Number總是為0,其實不是這樣的,seq的增加是和傳輸的字節數相關的,抓包工具為了顯示更友好,使用相對序號。

確認號:這個就更好理解了,我給你寫封信(發包),發出去總要有回信吧,確認一下信收到沒,如果沒回,我就認為信可能某種原因,丟了(包)。那我就繼續發,直到你收到為止。這就解決丟包的問題,所以我們認為TCP是靠譜協議,但對於TCP來說,他面臨的網絡環境是很復雜的,如果網絡狀況確實很差,是沒有任何有效的保證的,TCP也無能為力,唯一能做的,就是努力的重傳。

數據偏移:數據偏移還有個名稱也叫首部長度,因為TCP首部是長度可變的,這個報文段到底多長,也就是說指出TCP數據部分在整個TCP報文段的什麽位置。

接下來就是一些狀態位了,在第一篇隨筆中有提過,SYN發起聯機,ACK回復,RST重新聯機,FIN結束聯機等,前文提過TCP協議是雙工的,雙方要維護連接的狀態,這些帶狀態位包的發送,會引起雙方狀態的變化。就像現實中,人與人之間,雙方不斷發出不同信號,兩邊的關系也會不斷變化,個人認為是一個道理的。

窗口:說得專業點,告知發送端這個接收端緩存有多少,控制發送端發送數據的速率,達到流量控制。其實就是通信雙方都聲明一個窗口,標識出自己能夠處理的能力,別丫的發送太快,把接收端撐爆,也別發得太慢,浪費了處理能力。

檢驗和:這個就有點像我們常見的驗證碼了,主要是對整個TCP報文段來說,TCP首部和數據在發送端和接收端之間發生任何的改動,接收方檢驗有差錯,這個TCP段就會被直接丟棄。

緊急指針:緊急指針,就要想起我們的標誌位UGR,它要配合URG一起使用,意思就是這個緊急指針只有在URG被置位才有用。緊急,緊急,八百裏加急,它的作用很明顯,TCP知道你要發送緊急數據,TCP會將接下來數據發送中,所有TCP報文段URG標誌置位,哪怕你報文段沒有緊急數據,這個動作要持續到緊急數據被發送為止。要註意的是緊急數據並不會開辟一條新的連接通道單獨發送,依然是隨著普通數據一起發送。

選項部分:最長報文大小,接收方或發送方所能接受的最大報文段的長度。通常連接方都在通信的第一個報文段中指明這個選項。

填充:見名知義,選項部分如果不是32位的整數倍,要添加填充位,加入額外的零,保證TCP頭是32的整數倍。

數據部分 TCP 報文段中的數據部分是可選的。在一個連接建立和一個連接終止時,雙方交換的報文段僅有 TCP 首部。如果一方沒有數據要發送,也使用沒有任何數據的首部來確認收到的數據。在處理超時的許多情況中,也會發送不帶任何數據的報文段。

參考:https://www.cnblogs.com/feng9exe/p/8058891.html

======================================================

如發現錯誤,請及時留言,lz及時修改,避免誤導後來者。感謝!!!

網絡基礎知識總結(二)