學習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 |
運作模型:
(2)TCP/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 |
二、數據鏈路層 幀
(1)Ethernet 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 |
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.在抓包後顯示信息
好了,感覺內容有點多哈,大家慢慢消化吧,如果有什麼不太懂的,可以評論,大家一起探討~~~ 這篇就到這裡了。。。