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

TCP/IP協議族——IP工作原理及例項詳解(上)



IP協議詳解

        本文主要介紹了IP服務特點,頭部結構,IP分片知識,並用tcpdump抓取資料包,來觀察IP資料報傳送過程中IP的格式,以及分片的過程。

IP頭部資訊:IP頭部資訊出現在每個IP資料報中,用於指定IP通訊的源端IP地址、目的端IP地址,指導IP分片和重組。

IP資料報的路由和轉發:IP資料報的路由和轉發發生在出目標機器之外的所有主機和路由器上。他們決定資料報是否應該轉發以及如何轉發。

IP服務的特點

IP協議是TCP/IP協議族的動力,它為上層協議提供無狀態、無連線、不可靠的服務。

無狀態是指IP通訊雙方不同步傳輸資料的狀態資訊,因此所有IP資料報的傳送、傳輸和接收都是相互獨立、沒有上下文關係的。這種服務最大的缺點是無法處理亂序和重複的IP資料報。

無連線是指IP通訊雙方都不長久的維持對方的任何資訊。這樣,上層協議每次傳送資料時,都必須明確指定對方的IP地址。

不可靠是指IP協議不能保證IP資料報準確的達到接收端。

IPv4頭部結構

4位版本號指定IP協議的版本

4位頭部長度表示IP有多少個32bit字(4位元組)

8為服務型別(Type OfService)包括一個3為優先欄位,4位的TOS欄位和1位保留欄位(必須置0)。4位的TOS欄位分別表示:最小延遲,最大吞吐量,最高可靠性和最小費用。其中最多有一個能置為1。

16位總長度是指整個IP資料報的長度,以位元組為單位。由於MTU的限制,長度超過MTU的資料豆漿杯分片傳輸。

16位標識唯一標識主機發送的每一個數據報,同一個資料報的所有分片具有相同標識值。

3位標誌欄位第一位保留,第二位表示“禁止分片”,第三位表示更多分片,除了資料報最後一個分片外,其他分片都要把她置1.

13位分片偏移是分片對原始IP資料報開始出的偏移。

8位生存時間(Time ToLive,TTL)是資料報到達目的地之前允許經過的路由器跳數。每經過一個路由,該值減1.

8位協議用來區分上層協議,其中ICMP是1,TCP是6,UDP是17.

16位頭部校驗和檢驗IP資料頭部在傳輸過程中是否損壞。

32位源端IP地址和目的端IP地址用來標識傳送端和接收端。

使用tcpdump觀察IPv4頭部結構

[email protected]:~$ sudo tcpdump -ntx -i lo

[email protected]:~$ telnet 127.0.0.1

IP 127.0.0.1.47513> 127.0.0.1.23: Flags [.], ack 90, win 342, options [nop,nop,TS val 5091357ecr 5091357], length 0

     0x0000: 4510 0034 52b6 4000 4006 e9fb 7f00 0001

     0x0010: 7f00 0001 b999 0017 a304 e30f 5c98 cfa6

     0x0020: 8010 0156 fe28 0000 0101 080a 004d b01d

     0x0030: 004d b01d

IPv4頭部各個欄位詳解:

十六進位制

十進位制

IP頭部資訊

0X4

4

IP版本號

0X5

5

頭部長度為5個32位

0x10

TOS選項中最小延遲被開啟

0x0034

52

資料報總長度,52位元組

0x52b6

資料報標識

0X4

設定禁止分片標誌

0x000

0

分片偏移

0x40

64

TTL被設為64

0x06

6

協議欄位為6,表示上層協議TCP協議

0xe9fb

IP頭部校驗碼

0X7f000001

32位源端IP地址127.0.0.1

0X7f000001

32位目的端IP地址127.0.0.1

IP分片

當IP資料報的長度超過幀的MTU時,將被分片傳輸。分片可能發生在傳送端,也可能發生在路由器上,而且可能在傳輸過程中被多次分片。但只有在最終目標機器上,這些分片才會被核心中的IP模組重新組裝。

IP頭部中的如下三個欄位給IP的分片和重組提供了足夠的資訊:資料報標識、標誌和片偏移。一個IP資料報的每個分片都具有自己的IP頭部,他們具有相同的標識值,但具有不同的片偏移。並且除了最後一個分片外,其他分片都將設定MF標誌。此外,每個分片的IP頭部的總長度將被設定為該分片的長度

乙太網的MTU(關於MTU概念見http://blog.csdn.net/walkerkalr/article/details/34410937封裝部分)是1500位元組,因此它攜帶的IP資料報的資料部分最多是1480位元組(IP頭部佔用20位元組)。考慮用IP資料報封裝一個長度為1481位元組的ICMP報文(包括8位元組的ICMP,所以其資料部分長度為1473位元組),則該資料報在使用乙太網幀傳輸室必須分片。

需要指出的是,ICMP報文的頭部長度取決於報文型別,下面的例子使用ping程式,而ping程式使用的ICMP回顯與應答報文的頭部長度是8位元組。為了看清楚IP分片的具體過程,考慮從chen123(關於在一臺主機上搭建的測試網路見http://blog.csdn.net/walkerkalr/article/details/34420041)來ping機器li123,每次傳送1473個位元組以強制引起IP分片,並用tcpdump抓取這一過程中雙方的資料報。具體操作如下:

[email protected]:~$sudo tcpdump -ntv -i eth0 icmp #只抓取ICMP包

[email protected]:~$ping 192.168.73.130 -s 1473 #用-s選項指定每次傳送1473位元組的資料

如下是在敲入tcpdump命令終端上的輸出:

1. IP(tos 0x0, ttl 64, id 21061, offset 0, flags [+], proto ICMP (1), length 1500)

   192.168.73.130 > 192.168.73.129: ICMPecho reply, id 4311, seq 11, length 1480

2. IP(tos 0x0, ttl 64, id 21061, offset 1480, flags [none], proto ICMP (1), length21)

   192.168.73.130 > 192.168.73.129:ip-proto-1

這兩個IP的表示值都是21061,說明它們是同一個IP資料報的分片。第一個分片的片偏移是0,第二個是1480。很顯然,第二個分片的片偏移實際上是第一個分片的ICMP報文的長度。第一個分片設定了MF標識表示還有後續分片,所以tcpdump輸出”flags[+]”。而第二個分片則沒有設定任何標識,所以tcpdump輸出“flags[none]”。因為我們傳送1473個位元組,加上8位元組的ICMP頭部長度和20位元組的IP頭部長度,則最終長度1501位元組大於MTU值,需要被分片。也就是,第一個IP分片長度為1500,第二個為21,每個分片都有自己的IP頭部(20位元組)。

相關推薦

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

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

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

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

Python3.5——裝飾器應用

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

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的原理及其程式碼實現做一個詳細的解讀。本文主要包括以下幾個

heartbeat高可用原理

heartbeat linux 1.heartbeat的作用 通過heartbeat,可以將資源(IP及程序服務等資源)從一臺已經故障的計算機快速轉移到另一臺正常運轉的機器上繼續提供服務,一般稱之為高可用服務。在實際生產中mkeepalived有很多相同之處。在生產實際的業務應用也是有區別的

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

NIO元件Selector工作機制

在使用Java進行相關網路程式的的設計時,出身C/C++的人,首先想到的框架就是多路複用,想到多路複用,Unix/Linux下馬上就能讓從想到select, poll, epoll系統呼叫。於是,在看到Java的NIO中的Selector類時必然會倍感親切。稍加查閱一下SDK手冊以及相關例程,不一會兒,一個

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

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

Python3.5——裝飾器應用

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

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