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

来源:http://www.cnblogs.com/along21/archive/2017/08/31/7454982.html
-Advertisement-
Play Games

學習Linux,就算是像小編我這樣的小萌新,也知道OSI模型。什麼?!你不知道!!! 好吧,這篇秘籍拿走,不謝~~~ 一、兩個協議 (1)OSI 協議模型(7層)國際協議 PDU:協議數據單元對等層次之間傳遞的數據單位 OSI協議(7層) 國際協議 PDU 單位 功能 實例 7 應用層 applic ...


 學習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.在抓包後顯示信息

 

 

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 環境:ubuntu16.04 方法:通過socks5代理並且使用http鏈接 步驟: 1.設置全局使用socks5代理,並且使用http傳輸 git config --global http.proxy socks5://localhost:1080 (1080是設置的本地socks5埠,根據自己 ...
  • 我的無線網卡是博通的B43xx系列,大家都知道博通對於其Wifi卡在 GNU/Linux 上的支持不好可謂是臭名昭著。 查看了下網路介面,發現沒有無線網路的介面,於是就想應該是沒驅動支持 (註:關於ip和ifconfig請看這篇文章: https://linux.cn/article-4326-1. ...
  • 1.部署步驟 1.1.啟動安裝程式 在啟動頁面上選擇Installation,然後按Enter鍵,這將載入SUSE Linux伺服器安裝程式並以普通模式安裝。 1.2.選擇安裝語言 Language和KeyboardLayout都選擇為English(US),並勾選I Agree to the Li ...
  • 一、問題 今天在windows7系統下安裝virtualbox報錯:VirtualBox COM獲取對象失敗,應用程式將被中斷。上網查了下,發現瞭解決辦法。 環境:windows7、VirtualBox 5.1.26、CentOS-6.7-x86_64-bin-DVD1。 二、解決 修改註冊表兩個值 ...
  • 分析過程 windows下的Notepad記事本軟體在另存的時候可以選擇保存的編碼方式。 我們可以在記事本中輸入同樣的文本,如“a嚴”。 ANSI方式我們用UtralEdit查看二進位信息可以看到: 這裡 對應的ANSI編碼為 , 對應的ANSI編碼為 。 Unicode BE編碼下的二進位信息: ...
  • 1、Linux下目錄複製:本機->遠程伺服器 2、Linux下目錄複製:遠程伺服器->本機 3、Linux下文件複製:遠程伺服器->本機 -a 儘可能將檔案狀態、許可權等資料都照原狀予以複製。 -r 若 source 中含有目錄名,則將目錄下之檔案亦皆依序拷貝至目的地。 -f 若目的地已經有相同檔名的 ...
  • 繼上一篇文章: http://www.cnblogs.com/linhaostudy/p/7428971.html 四、file結構體 文件對象:註意文件對象描述的是進程已經打開的文件。因為一個文件可以被多個進程打開,所以一個文件可以存在多個文件對象。但是由於文件是唯一的,那麼inode就是唯一的, ...
  • Win10系統VMWare虛擬機無法連接網路的解決技巧: 第一步、打開VMWare虛擬機:依次點擊“編輯”,”虛擬網路編輯器”,“恢復預設設置” (期間要求賦予修改配置許可權、要求關閉已啟動的虛擬機),之後網路能用了。其實就是因為網路驅動有變化才導致不能用的,重裝下VMWare的網路模塊就好,正好恢復 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...