itsad
tcp/ip協議資料報,一般由應用層、傳輸層、網路層、資料鏈路層封裝而成。
四層協議各自的作用:
資料鏈路層實現了網絡卡介面的驅動程式。
網路層實現了資料報的選路和**。
傳輸層為兩台主機上的應用程式提供端到端(end to end)的通訊。
應用層負責處理應用程式的邏輯。
#1、先封裝的協議頭是傳輸層,傳輸層有tcp、udp、tls 、dccp 、sctp 、rsvp 、pptp,常用的有tcp,udp
tcp頭的結構(tcp頭總長度為 20個位元組+options可選選項)
(3)序列號(sequence number):32位 tcp連線傳送方向接收方的封包順序號。
(4)確認序號(acknowledge number):32位 接收方回發的應答順序號。
(5)頭長度(header length):偏移量(4bit)和保留(4bit)總共8位 。 表示tcp頭的雙四位元組數,如果轉化為位元組個數需要乘以4。
(6)保留(2bit)和標記(6bit)總共8位。
標記位:
urg:是否使用緊急指標,0為不使用,1為使用。
ack:請求/應答狀態。0為請求,1為應答。
psh:以最快的速度傳輸資料。
rst:連線復位,首先斷開連線,然後重建。
syn:同步連線序號,用來建立連線。
fin:結束連線。如果fin為0是結束連線請求,fin為1表示結束連線。
(7)視窗大小(window):16位 目的機使用16位的域告訴源主機,它想收到的每個tcp資料段大小。
(8)校驗和(check sum):16位 這個校驗和和ip的校驗和有所不同,不僅對頭資料進行校驗還對封包內容校驗。
(9)緊急指標(urgent pointer):16位 當urg為1的時候才有效。tcp的緊急方式是傳送緊急資料的一種方式。
(10)可選選項(options)24位,類似ip,是可選選項。填充8位,使選項湊足32位。
udp頭的結構
源埠(2位元組)
目的埠(2位元組)
封報長度(2位元組)
校驗和(2位元組)
資料(3)封包長度(length):16位 udp頭和資料的總長度。
(4)校驗和(check sum): 16位 和tcp和校驗和一樣,不僅對頭資料進行校驗,還對包的內容進行校驗。
#2、然後封裝的是網路層,網路層主要是ip協議,還有icmp協議,igmp協議等
ip協議頭(ip頭總長度根據ip頭的頭長來計算。一般ip沒有可選選項,長度為20位元組,也就是對應頭長等於5):
1-1.版本4位,表示版本號,目前最廣泛的是4=b1000,即常說的ipv4;相信ipv6以後會廣泛應用,它能給世界上每個鈕扣都分配
乙個ip位址。
1-2.頭長4位,資料報頭部長度。它表示資料報頭部包括多少個32位長整型,也就是多少個4位元組的資料。無選項則為5(紅色部分)。
這個字段表示了ip頭部的總長度,但它不是直接表示,因為它只佔了4位元,最大也就15,實際的ip頭部長度等於首部長度字段表示的 值乘以4,單位是位元組,也就是首部最長為15×4=60位元組,一般ip資料報首部都沒有選擇項,長度為20位元組,也就是對應頭長等於5。
1-3.服務型別,包括8個二進位制位,每個位的意義如下:
過程字段:3位,設定了資料報的重要性,取值越大資料越重要,取值範圍為:0(正常)~ 7(網路控制)
延遲字段:1位,取值:0(正常)、1(期特低的延遲)
流量字段:1位,取值:0(正常)、1(期特高的流量)
可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)
成本字段:1位,取值:0(正常)、1(期特最小成本)
保留字段:1位 ,未使用
1-4.包裹總長16位,當前資料報的總長度,單位是位元組。當然最大只能是65535,及64kb。
2-1.重組標識16位,傳送主機賦予的標識,以便接收方進行分片重組。
2-2.標誌3位,他們各自的意義如下:
保留段位(2):1位,未使用
不分段位(1):1位,取值:0(允許資料報分段)、1(資料報不能分段)
2-3.段偏移量13位,與更多段位組合,幫助接收方組合分段的報文,以位元組為單位。
3-1.生存時間8位,經常ping命令看到的ttl(time to live)就是這個,每經過乙個路由器,該值就減一,到零丟棄。
3-2.協議**8位,表明使用該包裹的上層協議,如tcp=6,icmp=1,udp=17等。
3-3.頭檢驗和16位,是ipv4資料報頭部的校驗和。由傳送端填充,接收端對其使用crc演算法檢驗ip資料報頭部在傳輸過程中是否損壞。
4-1.源始位址,32位4位元組,我們常看到的ip是將每個位元組用點(.)分開,如此而已。
5-1.目的位址,32位,同上。
6-1.可選選項,主要是給一些特殊的情況使用,往往安全路由會當作攻擊而過濾掉,普聯(tp_link)的tl-er5110路由就能這麼做。
icmp協議頭
icmp報文就像是ip報文的小弟,總頂著ip報文的名頭出來混。因為icmp報文是在ip報文內部的:
icmp所有報文的前4個位元組都是一樣的,但是剩下的其他位元組不相同。
前四個位元組統一的格式:型別(8位),**(8位),校驗和(16位)
型別和**決定了icmp報文的型別。常見的有:
型別8, **0 ==> 表示回顯請求(ping請求)
型別0, **0 ==> 表示回顯應答(ping應答)
型別11,**0 ==> 超時
檢驗和字段:包括資料在內的整個icmp資料報的檢驗和;其計算方法和ip頭部檢驗和的計算方法一樣的。
icmp報文具體分為查詢報文和差錯報文(對icmp差錯報文有時需要做特殊處理,因此要對其進行區分。如:對icmp差錯報文進行響應時,永遠不會生成另乙份icmp差錯報文,否則會出現死迴圈)
#3、最後封裝的是資料鏈路層,即乙太網頭和fcs
乙太網頭(總長度為14個位元組)是由 6位元組的目的mac位址 + 6位元組的源mac位址 + 2位元組的型別 組成。
以太的各種型別:
以太型別
協議
0x0800
internet協議版本4(ipv4)
0x0806
位址解析協議(arp)
0x8035
反向位址解析協議(rarp)
三個數值
0x80f3
為0x8100
ieee 802.1q標籤幀
三個數值
novell ipx(alt)
0x8138
novell公司
0x86dd
internet協議版本6(ipv6)
0x8819
cobranet技術
0x88a8
提供商橋接(ieee 802.1ad)
0x8847
mpls單播
0x8848
mpls多播
0x8863
pppoe發現階段
0x8864
pppoe會話階段
0x888e
eap over lan(ieee 802.1x)
0x889a
hyperscsi(乙太網scsi)
0x88a2
乙太網ata
0x88a4
ethercat協議
0x88cd
sercos-iii
0x88d8
乙太網電路**服務(mef-8)
0x88e5
mac安全(ieee 802.1ae)
0x8906
乙太網光纖通道
0x8914
fcoe初始化協議
0x9100
q-in-q的
0xcafe
veritas低延遲傳輸(llt)
在不定長的資料字段(乙太網頭後面的資料)後是4個位元組的幀校驗序列(fcs)
分類: 網路程式設計
python 解析網路資料報
1 問題描述 網路資料報,我已經使用mitmproxy 抓取了,但是,資料報有些資料是gzip進行編碼的,那麼怎麼還原成原始報文呢?使用的語言是python。2 網上資料 使用的方法,網上有zlib和gzip。使用gzip.decompress這個函式可以直接解密,可惜我的版本不支援。然後網上說的g...
mysql資料庫搬磚總結
內連線 表中的行相互連線。結果集中的行數等於每個表滿足連線條件的行數的乘積,參與連線的表是平等的。select 屬性或表示式列表 from 表名 inner join 表名 on 連線條件 where 限定條件 select bb.answertag,count bb.answertag count...
資料報解析
從專業的角度來說,網路協議 osi就是乙個開放的通訊系統互聯參考模型,也是乙個定義的很好的協議規範。osi模型有7層結構,每層都可以有幾個子層。osi的7層從下到上分別是7 應用層 6 表示層 5 會話層 4 傳輸層 3 網路層 2 資料鏈路層 1 物理層。物理層 是參考模型的最低層。該層是網路通訊...