网络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上层协议的首部也作为数据进行处理。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式 创建型 原型模式(Prototype Pattern)与 常见技术框架应用 解析

原型模式(Prototype Pattern)是一种创建型设计模式,其核心思想在于通过复制现有的对象(原型)来创建新的对象,而非通过传统的构造函数或类实例化方式。这种方式在需要快速创建大量相似对象时尤为高效&#x…

MySQL(二)MySQL DDL数据库定义语言

1. MySQL DDL数据库定义语言 1.1. MySQL定义语言 进入MySQL mysql -u root -p(回车后输入密码,即可进入mysq1)1.1.1. 数据库操作 (1)查看数据库 mysql>show databases;注:MySQL语句分隔符为“;”   mysql库很重要它里面有…

前端页面上传文件:解决 ERR_UPLOAD_FILE_CHANGED

文章目录 引言I 问题 ERR_UPLOAD_FILE_CHANGED问题重现步骤原因II 解决方法将文件转换为base64再转回file检测文件内容是否发生变更III 知识扩展发送一个包含文件和文本的multipart/form-data请求签名优化引言 文件上传应用场景:船舶设备的新增导入(基础信息:出厂编号)船舶…

学术写作中的各种流程图如何利用Kimi进行辅助构建?

目录 1.学术论文中的流程图 2.一些小实践 3.论文中严谨的实践流程 近期小编在思考使用AI工具制作流程图和思维导图,结果发现Kimi现在支持流程图了,Kimi在学术写作中的应用变得更加广泛和深入。随着AIGC技术的不断进步,Kimi的功能将更加强大…

竞品分析对于ASO优化的重要性

产品要想在拥有上千万款App的App Store中脱颖而出的话,要有绝对优势和运营方案,才有可能获得用户的关注。我们要分析和自身产品相似的功能,了解用户获取的途径等,从中获取对竞品有利的因素,明确自身产品的增加和优化方…

什么是485专用屏蔽线

文章目录 一,485屏蔽线基本概念二,485屏蔽线结构及工作原理1、结构2、工作原理三,485屏蔽线的应用一,485屏蔽线基本概念 485屏蔽线,顾名思义,是一种应用于RS-485通信系统的屏蔽线缆。RS_485是一种常用的有线通信协议,具有长距离、高速率、低成本等优点,广泛应用于工业自…

JavaScript BOMDOM

BOM window、document、location、navigator 和 screen等,把它们统称为BOM(Browser Object Model,浏览器对象模型) window对象 window对象位于BOM的顶层。由浏览器创建,也对应JavaScript本地对象Global &#xff1…

nginx高可用集群搭建

本文介绍nginx高可用集群的搭建。利用keepalived实时检查nginx进程是否存活、keepalived的虚拟ip技术,达到故障转移的目的。终端用户通过访问虚拟ip,感知不到实际发生的故障。架构图如下: 0、环境 Ubuntu:22.04.2 ltsnginx: 1.…

【开源】创建自动签到系统—QD框架

1. 介绍 QD是一个 基于 HAR 编辑器和 Tornado 服务端的 HTTP 定时任务自动执行 Web 框架。 主要通过抓包获取到HAR来制作任务模板,从而实现异步响应和发起HTTP请求 2. 需要环境 2.1 硬件需求 CPU:至少1核 内存:推荐 ≥ 1G 硬盘:推…

【数据结构Ⅰ复习题】

如有错误欢迎指正,题目根据教材----------严蔚敏数据结构(c语言版 第2版)人民邮电电子版 数据结构Ⅰ复习题 一、填空题1.算法应该具备的5个重要特性有___有穷性___、确定性、可行性、输入和输出。2.非空单链表L中*p是头…

python爬虫--小白篇【selenium自动爬取文件】

一、问题描述 在学习或工作中需要爬取文件资源时,由于文件数量太多,手动单个下载文件效率低,操作麻烦,采用selenium框架自动爬取文件数据是不二选择。如需要爬取下面网站中包含的全部pdf文件,并将其转为Markdown格式。…

Edge Scdn的应用场景有哪些?

酷盾安全Edge Scdn 具备强大的安全防护能力,通过多层防御机制,如防火墙、DDoS 攻击防护、入侵检测和防御、数据加密等,有效抵御各种网络攻击,包括 DDoS 攻击、CC 攻击、SQL 注入攻击、XSS 跨站脚本攻击等,保障网站和应…

TCPDump参数详解及示例

TCPDump参数详解及示例 TCPDump参数详解TCPDump -G的示例TCPDump -i any -s 2048 -G 600 -p udp -Z root -n -X -tt -w %Y_%m%d_%H%M_%S.pcap &的含义TCPDump是一款强大的网络数据包截获分析工具,可以将网络中传送的数据包的完全截获下来提供分析。它支持针对网络层、协议…

Vue2: table加载树形数据的踩坑记录

table中需要加载树形数据,如图: 官网给了两个例子,且每个例子中的tree-props都是这么写的: :tree-props="{children: children, hasChildren: hasChildren}" 给我一种错觉,以为数据结构中要同时指定children和hasChildren字段,然而,在非懒加载模式下,数据结…

SpringCloudAlibaba实战入门之Sentinel服务降级和服务熔断(十五)

一、Sentinel概述 1、Sentinel是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 一句话概括:sentinel即Hystrix的替代品,官网: https://sentinelguard.io/zh…

问题清除指南|关于num_classes与 BCELoss、BCEWithLogitsLoss 和 CrossEntropyLoss 的关系

前言:关于「 num_classes 1 」引发的探究。 2024年尾声,学弟问到一个问题:在研究工作 CNNDetection 的github开源代码 networks/trainer.py 文件的 line 27 self.model resnet50(num_classes1) 中,变量 num_classes 的值为1&…

grouped.get_group((‘B‘, ‘A‘))选择分组

1. df.groupby([team, df.name.str[0]]) df.groupby([team, df.name.str[0]]) 这一部分代码表示对 DataFrame df 按照 两个条件 进行分组: 按照 team 列(即团队)。按照 name 列的 首字母(df.name.str[0])。 df.name.s…

SQL字符串截取函数——Left()、Right()、Substring()用法详解

SQL字符串截取函数——Left()、Right()、Substring()用法详解 1. LEFT() 函数:从字符串的左侧提取指定长度的子字符串。 LEFT(string, length)string:要操作的字符串。length&#x…

C# 服务调用RFC函数获取物料信息,并输出生成Excel文件

这个例子是C#服务调用RFC函数,获取物料的信息,并生成Excel文件 上接文章:C#服务 文章目录 创建函数创建结构编写源代码创建批处理文件运行结果-成功部署服务器C#代码配置文件注意!! 创建函数 创建结构 编写源代码 创建…