网络IP协议

IP(Internet Protocol,网际协议)是TCP/IP协议族中重要的协议,主要负责将数据包发送给目标主机。IP相当于OSI(图1)的第三层网络层。网络层的主要作用是失陷终端节点之间的通信。这种终端节点之间的通信也叫点对点(point-to-point)通信。

 图1:OSI参考模型

1. IP的功能作用

1)IP寻址

作为网络层的IP,一般称为IP地址,主要用于在连接到网络中的所有主机中识别出进行通信的目标地址,因此在TCP/IP通信中所有主机(在互联网中,将那些配有IP地址的设备叫主机,严格意义上说,配有IP地址且不进行路由控制的设备叫主机,既配有IP地址又具有路由控制能力的设备叫路由器,而节点则是主机和路由器的统称。)或路由器必须设定自己的IP地址。如图2所示,连接互联网的主机需要配置IP地址,不论哪一台主机与哪种数据链路连接,其IP地址的形式都一样,以太网、无线局域网、PPP等都不会改变IP地址的形式。另外,在网桥或交换机集线器等物理层或者数据链路层数据包转发设备中,不需要设置IP地址。因为这些设备只负责将IP包转化为0、1比特流转发或对数据链路帧的数据部分进行转发,而不需要应对IP协议。

图2:主机在互联网互联需要IP地址

2)路由

路由控制(Routing)是指将分组数据发送到最终目标地址的功能。即使网络很复杂,也可以通过路由控制确定到达目标地址的通路。一旦这个路由控制的运行出现异常,分组数据极有可能“迷失”,无法到达目标地址。因此,一个数据包之所以能够成功地到达最终的目标地址,全靠路由控制。

IP包在网路中一个个跳间(一跳(1Hop)是指利用数据链路层以下分层的功能传输数据帧的一个区间。以太网等数据链路中使用MAC地址传输数据帧。此时的一跳是指从源MAC地址到目标MAC地址之间传输帧的区间。也就是说它是主机或路由器网卡不经其他路由器而能直接到达的相邻主机或路由器网卡之间的一个区间。在一跳的这个区间内,电缆可以通过网桥或交换集线器相连,不会通过路由器或网关相连)被转发,因此IP路由也叫多条路由。在每一个区间内决定着包在下一跳被转发的路径。

多跳路由是指路由器或主机在转发IP数据包时只指定下一个路由器或主机,而不是将到最终目标地址为止的所有通路全都指定出来。因为每一个区间(跳)在转发IP数据包时会分别指定下一跳的操作,直至包达到最终的目标地址。

为了将数据包发给目标主机,所有主机都维护着一张路由控制表(Routing table)。该表记录IP数据在下一步应该发给哪个路由器。IP包将根据这个路由表在各个数据链路上传输。

  图3:路由控制表

3)IP分包和组包

 IP是失陷多个数据链路之间通信的协议。数据链路根据种类的不同各有特点。对不同数据链路的特异性进行抽象化也是IP的重要作用。不同数据链路有个最大的区别,就是各自的最大传输单位(Maximum Transmission Unit,MTU)不同。以太网的MTU是1500字节,FDDI(Fiber Distributed Data Interface,光纤分布式数据接口)的MTU是4352字节,ATM(Automated Teller Machine,自动取款机)的MTU是9180字节。IP的上一层会要求传送比MTU更多字节的数据,因此必须在线路上传送比包长还要小的MTU。为解决这个问题,IP进行分片处理(IP Fragmentation)。所谓分片处理就是将较大的IP包分成多个较小的IP包。分片的包到了对端目标地址后再被组合起来传给上一层。从IP的上层看,它完全可以忽略数据包在途中的各个数据链路上的MTU,而只需要按照源地址发送的长度接收数据包。IP就实现了数据链路层的抽象,使得从上层更不容易看到底层网络构造的细节。

4)IP属于无连接型

IP面向无连接,也就是在发包之前,不需要建立与目标地址之前的连接。当数据链路层有需要发送的数据,该数据会立即被压缩成IP包发送出去。而面向有连接的情况则不同,目标主机关机或者不存在则不可能建立连接,那么也不可能发送数据过去。为什么IP要采用面向无连接呢?原因在于简化和提速。有连接型要比无连接型复杂的多,如前期需要握手,而且在处理连接过程中,需要耗费时间。   

IP提供尽力服务(Best Effort),就是尽最大努力将数据包发送到最终目标地址,然而其并不做“最终是否收到的验证”。因此IP数据包在途中可能会发生丢失、错位以及数据翻倍等问题。为了提高通信的可靠性,TCP发挥重要作用,如果说IP只负责将数据发给目标主机,那么TCP则负责保证对目标确实收到数据。为什么不让IP具有可靠传输的功能呢?原因在于如果要一种协议规定所有的功能和作用,那么该协议的具体实现和编程会变得非常复杂,无法轻易实现,而且难以维护。相比而言,按照网络分层,明确定义每层协议的作用和责任后,针对每层具体的协议进行编程会更加有利于该协议的实现。   

2.   IP地址基础知识

1)IP地址定义

在使用TCP/IP通信时,用IP地址识别主机和路由器。为了保证正常通信,有必要为每个设备正确配置IP地址。IP地址分为IPv4和IPv6。IP地址(以IPv4为例)由32位正整数来表示。TCP/IP通信要求将这样的IP地址分配给每一个参与通信的主机。IP地址在计算机内部以二进制(二进制是指用0、1表示数字的方法)方式被处理。而我们并不习惯用二进制方式计数,因而将32位的IP地址以每8位为一组,分为4组,每组以“.”隔开,再将每组数转为十进制数。以图4为例。注意在这里2进制转10进制=2^7 + 2^5 +2^3 + 2^2 = 172如图5,而10进制转2进制=10101100如图6。

 图4:IP地址数字表示

 

  图5:二进制转10进制计算方法

  图6:10进制转2进制计算方法

 将表示成IP地址的数字整体计算,最多大概允许2^32 = 4294967296台计算机连接到网络。

2)IP地址组成

IP地址由网络标识和主机标识两部分组成。例如IP地址192.168.128.10/24,“/24”表示从第一位到24位属于网络标识,在这里“192.168.128”属于网络标识也就是网络地址,而最后的“10”为主机标识也就是主机地址。网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP地址的主机标识不允许在相同的网段内重复出现。由此,可以通过设置网络地址和主机地址在相互连接的整个网络中保证每台主机的IP地址都不会相互重叠。即IP地址具有唯一性。如图7所示,IP包被转发到途中某个路由器时,正是利用目标IP地址的网络标识进行路由。路由器只要一看IP地址的网络标识就可以进行转发。

 

  图7:IP地址的网络标识

3)IP地址的分类

IP地址分为A类、B类、C类、D类四类。根据IP地址中从第1位到第4位的比特列对其网络标识和主机标识进行区分。如图8所示,A类IP地址是首位以“0”开头的地址从第1位到第8位是网络标识(去掉分类位剩下7位)。用十进制表示的话,0.0.0.0~127.0.0.0是A类的网络地址。A类地址的后24位相当于主机标识。因此一个网络内可容纳的主机地址上限为16,777,214个。B类地址是前两位为“10”的地址。从第1位到第16位是网络标识。用十进制表示的话,128.0.0.0~191.255.0.0是B类的网络地址。B类地址的后16位相当于主机标识。因此一个网络内可容纳的主机地址上限是65,534个。C类地址是前三位“110”的地址。从第1位到第24位是它的网络标识。用十进制表示的话,192.0.0.0~223.255.255.0是C类的网络地址。C类地址的后8位相当于主机标识,因此一个网络内可容纳的主机地址上限为254个。D类地址是前四位为“1110”的地址。从第1位到第32位是它的网路地址。用十进制表示的话,224.0.0.0~239.255.255.255是D类的网络地址。D类地址没有主机识别地址,常被用于多播。注意分配IP地址时,不可以全部为0或全部为1.因为全部为0在表示对应的网络地址或IP地址不可获知的情况下才使用。而全部为1的主机地址通常作为广播地址。因此C类地址的个数是2^8-2=254个。

 

  图8:IP地址的分类

 广播地址用于在同一个链路相互连接的主机之间发送数据包。将IP地址中的主机地址部分全部设置为1,就成了广播地址。在以太网中如果将MAC地址的所有位都改为1,则形成FF:FF:FF:FF:FF:FF的广播地址。因此广播的IP包以数据链路的帧的形式发送时,得通过MAC地址全为1比特的FF:FF:FF:FF:FF:FF转发。例如把172.20.0.0/16用二进制表示:10101100.00010100.00000000.00000000,将这个地址的主机部分全部改为1,则形成广播地址:10101100.00010100.11111111.11111111再将这个地址用十进制表示,则为172.20.255.255。

 广播分为本地广播和直接广播两种。在本网络内的广播叫做本地广播。例如网络地址为192.168.0.0/24的情况下,广播地址是192.168.0.255。因为这个广播地址的IP包会被路由器屏蔽,所以不会到达192.168.0.0/24以外的其他链路上。在不同网络之间的广播叫做直接广播。例如网络地址为192.168.0.0/24的主机向192.168.1.255/24的目标地址发送IP包。收到这个包的路由器,将数据转发给192.168.1.0/24,从而使得所有192.168.1.1~192.168.1.254的主机都能收到这个包,由于直接广播有一定的安全问题,所以多数情况下载路由器上设置为不转发。

2. IP数据报文格式

 图9:IPv4数据报格式

通过IP进行通信时,需要在数据的前面加入IP首部信息。IP首部中包含着用于IP协议进行发包控制时所有的必要信息。如图9所示为IPv4数据报格式。

1)IPv4首部

  • 版本(Version)

      由4比特构成,表示标识IP首部的版本号。IPv4的版本号为4,因此在这个字段上值也是4。

  • 首部长度(IHL:Internet Header Length)

      由4比特构成,表明IP首部的大小,单位为4字节(32比特)。对于没有可选项的IP包,首部长度则设为5.也就是说在没有可选项时,IP首部的长度为20字节。

  • 区分服务(TOS:Type Of Service)

      由8比特构成,用来表明服务质量。每一位的具体含义如表所示。

比特含义
0 1 2优先度
3最低延迟
4最大吞吐
5最大可靠性
6最小代价
(3~6)最大安全
7未定义

这个值通常由应用指定。而且现在也鼓励这种结合应用的特性设定TOS的方法。然而在目前,几乎所有的网络都无视这些字段。这不仅仅是因为在符合质量要求的情况下按其要求发送本身的功能实现起来十分困难,还因为若不符合质量要求就可能会产生不公平的现象。因此实现TOS控制变得极其复杂。这也导致TOS整个互联网几乎就没有被投入使用。不过已有人提出将TOS字段本身再划分为DSCP(Differentiated Services Codepoint)和ECN(Explicit Congestion Notification)两个字段的建议。在图10中DSCP和ECN分别为6比特和2比特。DSCP(Differential Services Codepoint,差分服务代码点)是TOS(Type Of Service)的一部分。现在统称为DiffServ,用来进行质量控制。ECN(Explicit Congestion  Notification,显示拥塞通告)用来报告网络拥堵情况。第6位的ECT用以通告上层TCP协议是否处理ECN。当路由器在转发ECN为1的包的过程中,如果出现网络拥堵的情况,就将CE位设置为1。

 图10:DSCP和ECN

比特简称含义
6ECTECN-Capable Transport
7CECongestion Experienced
  • 总长度(Total Length)

      表示IP首部与数据部分合起来的总字节数。该字段长16比特。因此IP包的最大长度65535(=2^16)字节。目前还不存在能够传输最大长度为65535字节的IP包的数据链路。不过由于有IP分片处理,从IP的上一层的角度看,不论底层采用哪种数据链路,都可以认为能够以IP的最大包长传输数据。

  • 标识(ID:Identification)

      由16比特构成,用于分片重组。同一个分片的标识值相同,不同分片的标识值不同。通常每发送一个IP包,它的值也逐渐递增。此外,即使ID相同,如果目的地址、源地址或协议不同的话,也会被认为是不同的分片。

  • 标志(Flags)

      由3比特构成,表示包被分片的相关信息。每一位的具体含义参考下表:

比特含义
0未使用。现在必须是0
1

指示是否进行分片(don't fragment)

0-可以分片

1-不能分片

2

包被分片的情况下,表示是否为最后一个包(more fragment)。

0-最后一个分片的包

1-分片中段的包

  • 片偏移(FO:Fragment Offset)

      由13比特构成,用来标识被分片的每一个分段相对于原始数据的位置。第一个分片对应的值为0.由于FO字段占13位,因此最多可以表示8192(=2^13)个相对位置。单位为8字节,因此最大可表示原始数据8*8192=65535字节的位置。

  • 生存时间(TTL:Time To Live)

      由8比特构成,它最初的意思是以秒为单位记录当前包在网络上应该生存的期限。然而在实际中它是指可以中转多少个路由器的意思。没经过一个路由器,TTL会减少1,直到变成0则丢弃该包。

  • 协议(Protocol)

      由8比特构成,表示的是IP包传输层的上层协议编号。目前常使用的协议如下表所示

分配编号简称协议
0HOPOPTIPv6 Hop-by-Hop Option
1ICMPInternet Control Message
2IGMPInternet Group Management
4IPIP in IP(encapsulation)
6TCPTransmission Control
8EGPExterior Gateway Protocol
9IGP any private interior gateway(Cisco IGRP)
17UDPUser Datagram
33DCCPDatagram Congestion Control Protocol
41IPv6IPv6
43IPv6-Route

Routing Header for IPv6

44IPv6-FragFragment Header for IPv6
46RSVPReservation Protocol
50ESPEncap Security Payload
51AHAuthentication Header
58IPv6-ICMPICMP for IPv6
59IPv6-NoNxtNo Next Header for IPv6
60IPv6-OptsDestination Options for IPv6
88EIGRPEIGRP
89OSPFIGPOSPF
97ETHERIPEthernet-within-IP Encapsulation
103PIMProtocol Independent Multicast
108IPComp IP Payload Compression Protocol
112VRRPVirul Router Redundancy Protocol
115L2TPLayer Two Tunneling Protocol
124ISIS over IPv4ISIS over IPv4
132SCTPStream Control Transmission Protocol
133FCFibre Channel
134RSVP-E2E-IGNORERSVP-E2E-IGNORE
135Mobility Header(IPv6)Mobility Header(IPv6)
136UDPLiteUDP-Lite
137MPLS-in-IPMPLS-in-IP

  • 首部校验和(Header Checksum)

      由16比特(2字节)构成,也叫IP首部校验和。该字段只校验数据报的首部,不校验数据部分。它主要用来确保IP数据报不被破坏。校验和的计算过程,首先要将该校验和的所有位置设置为0,然后以16比特为单位划分IP首部,并用1补数计算所有16位字的和。最后将所 得到这个和的1补数赋给首部校验和字段。

  • 源地址(Source Address)

      由32比特(4字节)构成,表示发送端IP地址

  • 目的地址(Destination Address)

      由32比特(4字节)构成,表示接收端IP地址

  • 可选项(Options)

      长度可变,通常只在进行实现或诊断时使用。该字段包含如下几点信息:

    • 安全级别
    • 源路径
    • 路径记录
    • 时间戳
  • 填充(Padding)

      也称为填充物。在有可选项的情况下,首部长度可能不是32比特的整数倍。为此,通过向字段填充0,调整为32比特的整数倍。

  • 数据(Data)

      存入数据。将IP上层协议的首部也作为数据进行处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/948019.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud源码-Ribbon

一、Spring定制化RestTemplate,预留出RestTemplate定制化扩展点 org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration 二、Ribbon定义RestTemplate Ribbon扩展点功能 org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguratio…

MySQL5.7.26-Linux-安装(2024.12)

文章目录 1.下载压缩包1.访问MySQL版本归档2.找到5.7.26并下载3.百度网盘 2.Linux安装1.卸载原来的MySQL8.0.26(如果没有则无需在意)1.查看所有mysql的包2.批量卸载3.删除残留文件**配置文件**(默认路径): 4.**验证卸载…

python修改ppt中的文字部分及插入图片

批量修改ppt中的某个模块,或者批量制作奖状等场景会用到; import os import pandas as pd from pptx import Presentation from pptx.util import Inchesfilepath/Users/kangyongqing/Documents/kangyq/202303/分析模版/批量制作/file1时段预警_副本.pp…

Ubuntu24.04.1 LTS+Win11双系统安装记录

Win11相关 1.用DiskGenius删除硬盘分区 2.关闭win11的BitLocker,否则禁用安全启动后开机时需要帐户密钥,很麻烦。 3.在设备管理器中找到独立显卡,右键禁用。等ubuntu装好显卡驱动后,再进入win启用。 Ubuntu相关 1.Ubuntu24.04在…

covid-vaccine-availability-using-flask-server

使用烧瓶服务器获得 Covid 疫苗 原文:https://www . geesforgeks . org/co vid-疫苗-可用性-使用-烧瓶-服务器/ 在本文中,我们将使用 Flask Server 构建 Covid 疫苗可用性检查器。 我们都知道,整个世界都在遭受疫情病毒的折磨,唯一能帮助我们…

机器学习笔记 - 单幅图像深度估计的最新技术

1、深度估计简述 单眼深度估计是一项计算机视觉任务,AI 模型从单个图像中预测场景的深度信息。模型估计场景中对象从一个照相机视点的距离。单目深度估计已广泛用于自动驾驶、机器人等领域。深度估计被认为是最困难的计算机视觉任务之一,因为它要求模型理解对象及其深度信息之…

MarkDown怎么转pdf;Mark Text怎么使用;

MarkDown怎么转pdf 目录 MarkDown怎么转pdf先用CSDN进行编辑,能双向看版式;标题最后直接导出pdfMark Text怎么使用一、界面介绍二、基本操作三、视图模式四、其他功能先用CSDN进行编辑,能双向看版式; 标题最后直接导出pdf Mark Text怎么使用 Mark Text是一款简洁的开源Mar…

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance)

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance) 都是交流电路中描述电流和电压之间关系的参数,但它们的含义、单位和作用不同。下面是它们的定义和区别: …

一文大白话讲清楚CSS元素的水平居中和垂直居中

文章目录 一文大白话讲清楚CSS元素的水平居中和垂直居中1.已知元素宽高的居中方案1.1 利用定位margin:auto1.2 利用定位margin负值1.3 table布局 2.未知元素宽高的居中方案2.1利用定位transform2.2 flex弹性布局2.3 grid网格布局 3. 内联元素的居中布局 一文大白话讲清楚CSS元素…

APM 3.0.2 | 聚合B站、油管和MF的音乐播放器,支持歌词匹配

APM(Azusa-Player-Mobile)是一款基于B站的第三方音频播放器,现已扩展支持YouTube Music、YouTube、本地音乐、AList和MusicFree等平台。它不仅提供视频作为音频播放,还具备排行榜、分区动态等功能。用户可以通过添加Alist地址接入…

html+css+js网页设计 美食 美食天下2个页面

htmlcssjs网页设计 美食 美食天下2个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…

TCP粘/拆包----自定义消息协议

今天是2024年12月31日,今年的最后一天,希望所有的努力在新的一年会有回报。❀ 无路可退,放弃很难,坚持很酷 TCP传输 是一种面向二进制的,流的传输。在传输过程中最大的问题是消息之间的边界不明确。而在服务端主要的…

Alist-Sync-Web 网盘自动同步,网盘备份相互备份

Alist-Sync-Web 一个基于 Web 界面的 Alist 存储同步工具,支持多任务管理、定时同步、差异处理等功能。 功能特点 📱 美观的 Web 管理界面🔄 支持多任务管理⏰ 支持 Cron 定时任务📂 支持数据同步和文件同步两种模式&#x1f5…

【C++】B2090 年龄与疾病

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式输出格式示例输入输出 💯我的初始代码实现思路分析优点缺点 💯老师的两种实现方法分析方法1:使用数组存储所有输入数据…

windows安装rsync Shell语句使用rsync

sh脚本里使用 rsync功能,需要提前布置rsync环境 第一步,下载 libxxhash-0.8.2-1-x86_64.pkg.tar 下载压缩包地址 Index of /msys/x86_64/https://repo.msys2.org/msys/x86_64/ 下载对应版本,没特殊需求下载最高版本就行了 解压缩压缩包 …

创龙3588——debian根文件系统制作

文章目录 build.sh debian 执行流程build.sh源码流程 30-rootfs.sh源码流程 mk-rootfs-bullseys.sh源码流程 mk-sysroot.sh源码流程 mk-image.sh源码流程 post-build.sh 大致流程系统制作步骤 build.sh debian 执行流程 build.sh 源码 run_hooks() {DIR"$1"shiftf…

网络安全之高防IP的实时监控精准防护

高防IP是一种网络安全设备,用于保护网络服务不受到各类攻击的影响,确保业务的持续稳定运行。它通过监控、识别和封锁恶意攻击流量,提供高级别的防护,降低业务被攻击的风险,并提升网络的稳定性和可靠性。 一、实时监控的…

aardio —— 虚表 —— 使用ownerDrawCustom列类型制作喜马拉雅播放器列表

不会自绘也能做漂亮列表,你相信吗? 看看这个例子,虚表_vlistEx_ColType_OwnerDrawCustom列类型,移植自godking.customPlus,简单好用,做漂亮列表的大杀器,玩aardio必备利器! 请更新…

JavaScript的数据类型及检测方式

目录 一、JS数据类型 1.基本数据类型 2.引用数据类型 二、堆和栈 三、数据类型检测 1.typeof 2.instanceof 3.constructor 4.Object.prototype.toString.call() JavaScript 中的数据类型主要分为两大类:原始数据类型(也称基本数据类型)和引用数据类型。 一…

高阶数据结构----布隆过滤器和位图

(一)位图 位图是用来存放某种状态的,因为一个bit上只能存0和1所以一般只有两种状态的情况下适合用位图,所以非常适合判断数据在或者不在,而且位图十分节省空间,很适合于海量数据,且容易存储&…