linux OSI七層模型、TCP/IP協議棧及每層結構大揭秘


 學習Linux,就算是像小編我這樣的小萌新,也知道OSI模型。什么?!你不知道!!! 好吧,這篇秘籍拿走,不謝~~~

 

兩個協議

1)OSI 協議模型(7層)國際協議    PDU:協議數據單元對等層次之間傳遞的數據單位

OSI協議(7層

國際協議

PDU

單位

功能

實例

7   應用層

application

message

為應用程序進程(例:mail、終端防偽)提供網絡服務;提供用戶訪問界面

提供用戶身份驗證

HTTP

Telnet

6   表示層

presention

message

確保接受系統可以讀出該數據

格式化數據;編碼

構建數據、提供加密解密壓縮解壓縮

協商用於應用層的數據傳輸語法

ASCLL、EBCDIC

JPEG

5   會話層

session

消息

message

建立、管理和終止在應用程序之間的會話session

操作系統

應用讀取

4   傳輸層

transport

數據網

segment

終端對終端;確保數據傳輸的可靠性

建立、維護和終止虛擬電路

通過錯誤檢測和恢復

信息流控制來保障可靠性

TCP、UDP

3   網絡層

network

數據包

packet/package

支持邏輯尋址和路徑選擇

路由選擇

選擇傳遞數據和路徑選擇

IP

2  數據鏈路層

data link

幀frame

MAC(物理)地址訪問媒介、錯誤檢測和修正

802.3/802.2

HDLC

1   物理層

physical

數據位

byte

二進制傳輸;為啟動、維護和關閉物理鏈路定義了電器規范、機械規范、過程規范和功能規范

EIA/TIA-232

V.35

運作模型:

 

2TCP/IP 協議棧(4層),既是局域網又是互聯網的默認主流協議

cat /etc/protocols  查詢系統上存在的協議(linux)

 

 

(3)相同點

  兩者都是以協議棧的概念為基礎

  協議棧中的協議彼此相互獨立

  下層對上層提供服務,每層都有區分上層類型的標簽

不同點

  OSI是先有模型;TCP/IP是先有協議,后有模型

  OSI適用於各種協議棧;TCP/IP只適用於TCP/IP網絡

  層次數量不同

(4)每層有自己的結構,下面會詳解,下表是個簡例

數據鏈路層    幀

Internet   IP協議

傳輸層    TCP協議

應用層

目標mac

地址

源 mac

地址

源IP

地址

目標IP

地址

源端口

目標端口

app

數據

date

 

 

 

二、數據鏈路層 幀

1Ethernet Frame以太網幀,IEEE定了國際標准

 

(2)Ethernet Frame 以太網幀結構(EthernetII 和 802.3的區別)(數據鏈路層)

 以太網長度:72-1526(抓包為60-1514除去前8最后4字節)

                EthernetII

8

6

6

2

46-1500

4

序言

Preamble

目標物理

mac)地址

mac地址

Type

上層類型

Data (包含上層協議頭部信息)

FCS  檢查數據包故障

                IEEE 802.3

7

1

6

6

2

46-1500

4

序言

Preamble

S

O

F

目標物理

mac)地址

mac地址

Length

長度

Data (包含上層協議頭部信息)

FCS  檢查數據包故障

EthernetII 有標識Type上層文件類型,IEEE 802.3沒有(存在問題)

 

(3)抓包實例

 

 

(4)mac地址(48位)   不同地方不同的意思,媒體訪問控制media access control MAC

  48全為1(12個F):廣播

 

 

 

三、傳輸層,TCP和UDP協議

(1)TCP可靠性  和  UDP高效性  區別

區別

TCP可靠性

UDP高效性

Connection Type

面向連接

connection-oriented

非面向連接

connectionless

序列化

Sequencing

yes

no

 

Uses

E-mail

File sharing

Downloading...

voice streaming

video streaming

 

(2)TCP

1.特性

  工作在傳輸層面向連接協議

  全雙工協議

  半關閉(分手的時候)

  錯誤檢查

  將數據打包成段,排序,序列號

  確認機制

  數據恢復,重傳

  流量控制,滑動窗口

  擁塞控制,慢啟動和擁塞避免算法(慢啟動)

2.TCP包頭(20固定[+40可選項])

 

① 源端口、目標端口:計算機上的進程要和其他進程通信是要通過計算機端口的,而一個計算機端口某個時刻只能被一個進程占用,所以通過指定源端口和目標端口,就可以知道是哪兩個進程需要通信。源端口、目標端口是用16 位表示的,可推算計算機的端口個數為0-65535(2^16)個,服務器的端口固定的;客戶端的端口隨機的

cat /etc/services 查詢常見服務器端口號,常見的端口號

http  80/tcp  https 443/tcp  ssh   22/tcp  ftp   21/tcp 文件傳輸協議  tftp  69/utp  smtp  25/tcp 郵件  

pops  110/tcp  dns   53/tcp/udp  dhcp  udp 67 68 自動獲取IP  telnet  23/tcp 遠程主機  mysql 3306/tcp 數據庫  

oracle 1521/tcp  sql server 1433/tcp  smb 445 139 137 138/udp windows共享  snmp 161udp 監控管理

② 序列號:表示本報文段所發送數據的第一個字節的編號。在TCP 連接中所傳送的字節流的每一個字節都會按順序編號。由於序列號由32位表示,所以每2^32個字節,就會出現序列號回繞,再次從0開始

③ 確認號:表示接收方期望收到發送方下一個報文段的第一個字節數據的編號。也就是告訴發送方:我希望你(指發送方)下次發送的數據的第一個字節數據的編號是這個確認號

④ 數據偏移:表示TCP 報文段的首部長度,共4位,由於TCP 首部包含一個長度可變的選項部分,需要指定這個TCP 報文段到底有多長。它指出TCP 離報文段的數據起始處距離 TCP 報文段的起始處有多遠。該字段的單位是32 位( 即4 個字節為計算單位),4 位二進制最大表示15,所以數據偏移也就是TCP首部最大60字節

⑤ 標記位 :(下篇講到三次握手、四次揮手中很重要)

  URG :表示本報文段中發送的數據是否包含緊急數據。后面的緊急指針字段(urgent pointer )只有當URG=1 時才有效,URG=0無效

  ACK :表示是否前面的確認號字段是否有效。ACK=1 ,表示有效。只有當ACK=1時,前面的確認號字段才有效。TCP 規定,連接建立后,ACK 必須為1, 帶ACK 標志的TCP 報文段稱為確認報文段

  PSH :提示接收端應用程序應該立即從TCP 接收緩沖區中讀走數據,為接收后續數據騰出空間。如果為1 ,則表示對方應當立即把數據提交給上層應用,而不是緩存起來,如果應用程序不將接收到的數據讀走,就會一直停留在TCP 接收緩沖區中

  RST :如果收到一個RST=1 的報文,說明與主機的連接出現了嚴重錯誤(如主機崩潰),必須釋放連接,然后再重新建立連接。或者說明上次發送給主機的數據有問題,主機拒絕響應,帶RST 標志的TCP 報文段稱為復位報文段

  SYN :在建立連接時使用,用來同步序號。當SYN=1 ,ACK=0 時,表示這是一個請求建立連接的報文段;當SYN=1 ,ACK=1 時,表示對方同意建立連接。SYN=1,說明這是一個請求建立連接或同意建立連接的報文。只有在前兩次握手中SYN才置為1,帶SYN 標志的TCP 報文段稱為同步報文段

  FIN :表示通知對方本端要關閉連接了,標記數據是否發送完畢。如果FIN=1 ,即告訴對方:“我的數據已經發送完畢,你可以釋放連接了”,帶FIN 標志的TCP報文段稱為結束報文段

⑥ 窗口大小:表示現在充許對方發送的數據量,也就是告訴對方,從本報文段的確認號開始允許對方發送的數據量

⑦ 校驗和:提供額外的可靠性

⑧ 緊急指針:標記緊急數據在數據字段中的位置

⑨ 選項部分:其最大長度可根據TCP 首部長度進行推算。TCP首部長度用4位表示,選項部分最長為:(2^4-1)*4-20=40 字節

常見選項:

  最大報文段長度:Maxium Segment Size ,MSS

  窗口擴大:Windows Scaling

  時間戳: Timestamps

 

3.TCP 協議PORT

傳輸層通過port號,確定應用層協議

IANA:互聯網數字分配機構(負責域名,數字資源,協議分配)

  0-1023 :系統端口或特權端口( 僅管理員可用)  ,眾所周知,永久的分配給固定的系統應用使用,22/tcp(ssh), 80/tcp(http), 443/tcp(https)

  1024-49151 :用戶端口或注冊端口,但要求並不嚴格,分配給程序注冊為某應用使用,1433/tcp(SqlServer) ,1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp (memcached)

  49152-65535:動態端口或私有端口,客戶端程序隨機使用的端口

  cat /proc/sys/net/ipv4/ip_local_port_range 查詢動態端口或私有端口范圍(linux)

 

4.TCP 超時重傳

異常網絡狀況下(開始出現超時或丟包),TCP 控制數據傳輸以保證其承諾的可靠服務

與TCP 超時重傳相關的兩個內核參數:

  /proc/sys/net/ipv4/tcp_retries1 ,指定在底層IP 接管之前TCP 最少執行的重傳次數,默認值是3

  /proc/sys/net/ipv4/tcp_retries2 ,指定連接放棄前TCP最 最多可以執行的重傳次數,默認值15 (一般對應13 ~30min)

 

5.TCP固定窗口:知道window size,sender固定發送n,receiver回復ACK n+1

    滑動窗口:不知道window size,例如sender發送4個,receiver回復ACK 3,代表只收到2個,window size=2,下次sender只發送2個

 

6.擁塞控制:TCP 為提高網絡利用率,降低丟包率,並保證網絡資源對每條數據流的公平性

       慢啟動、擁塞避免、快速重傳、快速恢復

/proc/sys/net/ipv4/tcp_congestion_control 查看當前所使用的擁塞控制算法

 

(3)UDP特性

1.特征

  工作在傳輸層

  提供不可靠的網絡訪問

  非面向連接協議

  有限的錯誤檢查

  傳輸性能高

  無數據恢復特性

2.包頭

 

 

四、Internet 層

Internet 層的協議:ICMP、ARP、RARP、IP 等協議

(1)ICMP協議, 在Internet相對較外層

① 用於在IP主機、路由器之間傳遞控制消息,多用於檢查狀態

② 經典命令:ping命令

③ ICMP協議本身的特點決定了它非常容易被用於攻擊網絡上的路由器和主機。向目標主機長時間、連續、大量地發送ICMP數據包,會最終使系統癱瘓。大量的ICMP數據包會形成“ICMP風暴”,使得目標主機耗費大量的CPU資源處理,疲於奔命,例如 可以大量的ping一個地址。

  echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all   禁止ping,不回復別人的ping請求(默認是0)

④ 抓包工具查看時,8代表是發送、0代表是返回

 

 

(2)ARP 地址解析協議

① 根據IP地址,利用廣播,請求網絡上的所有主機,並接收返回消息,以此確定目標的物理mac地址。也就是:有IP地址,得到mac地址。

② 用途:重啟,重啟網絡服務時,避免IP地址沖突;查詢mac地址

③ ARP表  查詢命令:ip neigh  /   arp -n

 

 

④ arp命令:

  arp -n   查看IP地址和mac地址的關系(linux),有動態、靜態、永久三種關系

  arp -d   刪出一條對應關系

  arp -s IP mac  手動加一條(永久)

  arping -I ensX IP地址   查看IP地址對應的mac地址

  arp -a   查看IP地址和mac地址的關系(windows)

⑤ 也可以被攻擊,攻擊者就可以向某一主機發送偽ARP應答報文,使其發送的信息無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙

 

(3)RARP 反向ARP協議

  有mac地址,得到IP地址

例:無盤工作站(銀行,確保數據安全)

 

(4)IP協議

1.特征

  運行於 OSI  網絡層

  面向無連接的協議

  獨立處理數據包

  分層編址

  盡力而為傳輸

  無數據恢復功能

2.包頭

 

版本: 占4 位,IP  協議的版本目前的IP 協議版本號為4,Ipv4

② 首部長度: 占4 位, 可表示的最大數值是15 個單位,一個單位為4 字節,因此IP  的首部長度的最大值是60 字節

③ 區分服務: 占8 位, 用來獲得更好的服務, 在舊標准中叫做服務類型,但實際上一直未被使用過. 后改名為區分服務. 只有在使用區分服務(DiffServ) 時, 這個字段才起作用. 一般的情況下都不使用

④ 總長度: 占16 位, 指首部和數據之和的長度, 單位為字節, 因此數據報的為最大長度為 65535  字節,總長度必須不超過最大傳送單元 MTU

⑤ 標識: 占16 位, 它是一個計數器, 通常,每發送一個報文,改值會加1,也用於數據包分片,在同一個包的若干分片中,該值是相同的

標志(flag): 占3 位, 目前只有后兩位有意義

  DF:Don‘t Fragment當 ,中間的一位,只有當 DF=0  時才允許分片

  MF:More Fragment ,最高位,MF=1 表示后面還有分片。MF=0表示最后一個分片  

⑦ 片偏移: 占12 位, 指較長的分組在分片后,該分片在原分組中的相對位置. 片偏移以8 個字節為偏移單位

⑧ 生存時間: 占8 位, 記為TTL (Time To Live)  數據報在網絡中可通過的路由器數的最大值,TTL  字段是由發送端初始設置一個8 bit 字段. 推薦的初始值由分配數字 RFC  指定, 當前值為64,發送 ICMP應答時經常把 TTL 設為最大值 255

linux 默認為64        windows 默認為128

  cat /proc/sys/net/ipv4/ip_default_ttl 查詢本機的TTL

  echo 128 >  /proc/sys/net/ipv4/ip_default_ttl 修改自動ttl,偽裝為windows

⑨ 協議: 占8 位, 指出此數據報攜帶的數據使用何種協議以便目的主機的IP 層將數據部分上交給哪個處理過程, 1表示為 ICMP協議, 2表示為 IGMP  協議, 6表示為 TCP 協議, 17表示為UDP協議

⑩ 首部檢驗和: 占16 位, 只檢驗數據報的首部不檢驗數據部分.這里不采用 CRC  檢驗碼而采用簡單的計算方法

⑪ 源地址和目的地址: 都各占4 字節, 分別記錄源地址和目的地址

 

3.在抓包后顯示信息

 

 

 好了,感覺內容有點多哈,大家慢慢消化吧,如果有什么不太懂的,可以評論,大家一起探討~~~ 這篇就到這里了。。。

 


免責聲明!

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



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