1. 程式人生 > >tcp/iP協議族——IP工作原理及例項詳解(下)

tcp/iP協議族——IP工作原理及例項詳解(下)



IP協議詳解

上一篇文章文章主要介紹了IP服務的特點,IPv4頭部結構IP分片,並用tcpdump抓取資料包,來觀察IP資料報傳送過程中IP的格式,以及分片的過程。本文主要介紹IP路由,IP轉發,重定向和IPv6頭部結構。

IP路由

IP協議的一個核心任務是資料報的路由,即決定傳送資料報到目標機器的路徑。為了理解IP路由過程,我們先簡要分析IP模組的基本流程。

IP模組工作流程

從右往左分析上圖,它首先對該資料報的頭部做CRC校驗,確認無誤之後就分析其頭部的具體資訊。

如果該IP資料報的頭部設定了源站選路選項,則IP模組呼叫資料報來轉發子模組來處理該資料包。如果該IP資料報的頭部目標IP地址是本地的某個IP地址,或者是廣播地址,即該資料是傳送給本機的,則IP模組就根據資料報頭部中的協議欄位來決定將它派發給哪個上層應用(分用)。如果IP模組發現這個資料報不是傳送給本機的,則也呼叫資料報轉發子模組來處理該資料報。

資料報轉發子模組將首先檢測系統是否允許轉發,如果不允許,IP模組就將資料報丟棄。如果允許,資料報轉發子模組將對該資料報執行一些操作,然後將它交給IP資料報輸出子模組。

IP資料報應該傳送至哪一下一跳路由,以及經過哪個網絡卡來發送,就是IP路由過程,即圖中“計算下一跳路由”子模組。IP模組實現資料報路由的核心資料結構是路由表。這個表按照資料報的目標IP地址分類,同一型別的IP資料報將被髮往相同的下一跳路由器。

IP輸出佇列中存放的是所有等待發送的IP資料報,其中除了需要轉發的IP資料報之外,還包括封裝了本機上層資料(ICMP報文,TCP報文和UDP報文)的IP資料報。

圖中的虛線箭頭顯示了路由表更新的過程。這一過程是指通過路由協議或者route命令調整路由表,使之更新最新的網路拓撲結構,成為IP路由策略。

路由機制

我們可以使用route命令或netstat命令檢視路由表。在chen123上執行route命令,輸出內容如下:

Kernel IP routing table

Destination    Gateway        Genmask        Flags Metric Ref   Use Iface

default        192.168.73.2   0.0.0.0        UG   0     0       0 eth0

192.168.73.0   *              255.255.255.0  U    1     0       0 eth0

該路由表包含兩項,每一項都包含8個欄位。

第一項的目標地址是default,即所謂的預設路由項。該項包含一個“G”標誌,說明路由下一跳目標是網管,其地址是192.168.73.2。另一個路由項的目標地址是192.168.73.0,它指的是本地區域網。該路遊項的網管地址為*,說明不需要路由中轉,可以直接傳送給目標機器。

IP路由機制分為三個步驟:

  1. 查詢路由表中和資料報的目標IP地址完全匹配的主機IP地址。如果找到,就是用該路由項,沒找到則轉步驟2.

  2. 查詢路由表中和資料報的目標IP地址具有相同網路IP的網路IP地址。如果找到,就使用該路由項(即上面路由表中的第二項);沒找到轉步驟3.

  3. 選擇預設路由選項,這通常意味著資料報的下一跳路由是閘道器。

路由表更新

route命令可以修改路由表,舉例如下:

[email protected]:~$ sudo route add -host 192.168.73.130dev eth0

[email protected]:~$ sudo route del -net 192.168.73.0netmask 255.255.255.0

[email protected]:~$ sudo route del default

[email protected]:~$ sudo route add default gw192.168.73.130

第一行新增主機192.168.73.130對應的路由項,這樣設定之後,所有從chen123傳送li123的資料報將通過網絡卡eth0直接傳送到目標機器的接收網絡卡。第二行表示刪除網路192.168.70.0對應的路由項。第三行刪除預設路由項,這樣做的後果是無法訪問因特網。第四行表示重新設定預設路由項,不過這次其閘道器li123。經過修改,其輸出如下

[email protected]:~$ route

Kernel IP routingtable

Destination    Gateway        Genmask      Flags Metric Ref      UseIface

default        192.168.73.130  0.0.0.0         UG   0     0       0 eth0

192.168.73.130 *              255.255.255.255 UH   0     0       0 eth0

這個路由表中,第一個路由項是主機路由項,所以他被設定了“H”標誌。

通過route或其他工具手動修改路由表是靜態的路由更改方式。對於大型的路由器,通常通過BGP、RIP、OSPF等協議來發現路徑,並更新自己的路由表,這種方式是動態的,自動的。

IP轉發

主機一般只發送和接收資料報,這是因為主機/proc/sys/net/ipv4/ip_forward核心引數預設被設定為0,我們可以通過修改它來使主機有資料轉發功能。舉例如下:

在li123上以root身份執行

[email protected]:/home/li123# sudo echo 1 > /proc/sys/net/ipv4/ip_forward

在上面命令執行前,在chen123上執行如下命令

[email protected]:/home/chen123# pingwww.baidu.com

輸出

修改ip_forward後,結果輸出

PING www.a.shifen.com (115.239.211.110) 56(84) bytesof data.

From 192.168.73.130: icmp_seq=1 Redirect Host(Newnexthop: 192.168.73.130)

64 bytes from 192.168.73.130: icmp_seq=1 ttl=128time=12.4 ms

64 bytes from 192.168.73.130: icmp_seq=2 ttl=128time=21.7 ms

64 bytes from 192.168.73.130: icmp_seq=3 ttl=128time=23.7 ms

對於IP資料報轉發的系統(主機或路由器),資料報轉發子模組對期望轉發的資料報執行如下操作:

  1. 檢查資料報頭部的TTL值。如果TTL值已經是0,則丟棄該資料報

  2. 檢視資料報的嚴格源路由選擇選項。如果該選項被設定,則檢測資料報的目標地址是否是本機的某個IP地址。如果不是,則傳送一個ICMP源站選路失敗報文給傳送端。

  3. 如果有必要,則給源端傳送一個ICMP重定向報文,以告訴它一個更合理的下一跳路由器

  4. 將TTL值減1

  5. 處理IP頭部選項

  6. 如果有必要,則執行IP分片操作

重定向

ICMP重定向報文的資料部分含義很明確,它給接收方提供瞭如下兩個資訊:

1.引起重定向的IP資料報的源端IP地址

2.應發使用的路由器的IP地址

接收主機根據這兩個資訊就可以判定引起重定向的IP資料報應該使用哪個路由器來轉發,並且以此更新路由表。

/proc/sys/net/ipv4/conf/all/accept_redirects核心引數指定是否允許傳送ICMP重定向報文,而/proc/sys/net/ipv4/conf/all/send_redirects核心引數指定是否允許接收ICMP重定向報文。

IPv6頭部結構

IPv6用128位來表示IP地址,是的IP地址總量達到了2的128次方個。IPv6地址用十六進位制字串表示,如FE80:0000:0000:0000:1234:5678:0000:0012

參考Linux高效能伺服器程式設計

轉載請註明出處,謝謝~~

相關推薦

tcp/iP協議——IP工作原理例項

 IP協議詳解 上一篇文章文章主要介紹了IP服務的特點,IPv4頭部結構IP分片,並用tcpdump抓取資料包,來觀察IP資料報傳送過程中IP的格式,以及分片的過程。本文主要介紹IP路由,IP轉發,重定向和IPv6頭部結構。 IP路由 IP協議的一個核心任務是資料

TCP/IP協議——IP工作原理例項

 IP協議詳解         本文主要介紹了IP服務特點,頭部結構,IP分片知識,並用tcpdump抓取資料包,來觀察IP資料報傳送過程中IP的格式,以及分片的過程。 IP頭部資訊:IP頭部資訊出現在每個IP資料報中,用於指定IP通訊的源端IP地址、目的端IP地址

Python3.5——裝飾器應用

1、裝飾器應用——模擬網站登入頁面,訪問需要認證登入頁面 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #模

TCP/IP協議》:超網合併

一、超網的概念 超網(Supernetting)是與子網類似的概念,IP地址根據子網掩碼被分為獨立的網路地址和主機地址。超網,也稱無類別域間路由選擇(CIDR),它是集合多個同類網際網路地址的一種方法。 與子網劃分(把大網路分成若干小網路)相反,它是把一些小網路組合成一個大網路,就是超網。

晶振工作原理引數

晶振工作原理及引數詳解(最透徹) 晶振是石英晶體諧振器(quartz crystal oscillator)的簡稱,也稱有源晶振,它能夠產生中央處理器(CPU)執行指令所必須的時鐘頻率訊號,CPU一切指令的執行都是建立在這個基礎上的,時鐘訊號頻率越高,通常CPU的執行速度也就越快。 只要是包

Node Js 基本工作原理流程

1,專案前期準備: 以express 框架為例 npm i express-generator -g //全域性安裝express框架 express -e //生成express應用骨架 npm i //安裝依賴 npm start //在3000埠監聽 拓展

batchnorm原理程式碼筆記2

Batchnorm原理詳解 前言:Batchnorm是深度網路中經常用到的加速神經網路訓練,加速收斂速度及穩定性的演算法,可以說是目前深度網路必不可少的一部分。 本文旨在用通俗易懂的語言,對深度學習的常用演算法–batchnorm的原理及其程式碼實現做一個詳細的解讀。本文主要包括以下幾個

【Java多執行緒】執行緒池的工作原理

接著上篇文章,我接下來繼續介紹執行緒池的工作原理,如果你還沒有看上篇,我建議最好瀏覽一下:執行緒池的工作原理詳解(上) Executors 工具類 1.定義 Executors是java執行緒池的工廠類,通過它可以快速初始化一個符合業務需求的執行緒池。

Intellij IDEA 安裝lombok使用轉載

最近專案中用到了 IDEA 的 Lombok 外掛,這裡做一個記錄。      Lombok 官方說明文件:http://plugins.jetbrains.com/plugin/6317-lombok-plugin 轉載原文地址:

FTS資料庫優化Android原理與應用1

在Android的官方開發文件上,有建議在使用文字類的資料庫全文搜尋(full-text search)時,使用FTS優化查詢速度。有關FTS的介紹文章不多,本文調研整理一下有關知識,供在Android上使用FTS之前參考。 1.什麼是FTS? FTS,即full te

word2vec 中的數學原理背景知識1

word2vec 是 Google 於 2013 年開源推出的一個用於獲取 word vector 的工具包,它簡單、高效,因此引起了很多人的關注。由於 word2vec 的作者 Tomas Mikolov 在兩篇相關的論文 [3,4] 中並沒有談及太多演算法細節

Python3.5——裝飾器應用

1、裝飾器: (1)本質:裝飾器的本質是函式,其基本語法都是用關鍵字def去定義的。 (2)功能:裝飾其他函式,即:為其他函式新增附加功能。 (3)原則:不能修改被裝飾的函式的原始碼,不能修改被裝飾的函式的呼叫方式。即:裝飾器對待被修飾的函式是完全透明的。 (4)簡單應用:

Java日期工具類DateUtils日期轉CalendarTimeZone

public static Calendar toCalendar(Date date) 說明:將一個日期Date型別轉換為Calendar型別; 引數:date-轉換為Calendar的日期; 返回值:建立的Calendar物件; 丟擲異常:NullPoi

Tomcat安裝配置

導讀 Tomcat 伺服器是一個免費的開放原始碼的Web 應用伺服器,Tomcat是Apache

HTTP協議報文、工作原理Java中的HTTP通信技術

tor 報文 buffered mod protoc 禁止 ans 請求報文 客戶端 博客園 首頁 新隨筆 聯系 管理 訂閱

HTTP協議報文、工作原理Java中的HTTP通訊技術

一、web及網路基礎       1、HTTP的歷史            1.1、HTTP的概念:         &nb

TCP/IP---ICMP:Internet控制報文協議

基本概念 ICMP(Internet Control Message Protocol,網路控制報文協議),屬於OSI七層模型中的網路層,與IP/UDP同屬一層,可以將其看成IP、UDP協議功能的一個補充,因為以前說過,IP協議是不可靠的,其可靠性需藉

TCP/IP---UDP:使用者資料報協議

什麼是UDP? UDP(User Datagram Protocol),即使用者資料報協議。工作在OSI七層模型的傳輸層,不同於TCP提供可靠的端到端連線,UDP不可靠,無需在客戶和伺服器之間建立一個連線,且沒有超時重發等機制,QQ訊息就是一種顯著的U

TCP/IP --Internet地址結構

IP地址用於識別和定位整個Internet系統(單播地址)中裝置的網路介面。也用於識別多個介面(組播、廣播和任播地址)。 一、IP地址表示 IPv4 32位,點位法 0.0.0.0 二進位制00000000 00000000 00000000 00000000

WebService 工作原理例項教程

一、WebService到底是什麼? 先來看下標準的定義:Web Service也叫XML Web Service WebService是一種可以接收從Internet或者Intranet上的其它系統中傳遞過來的請求,輕量級的獨立的通訊技術。是:通過SOAP在Web上提