IP协议介绍

article/2025/9/12 22:22:53

文章目录

    • 定义
    • 特点
    • 作用
      • 寻址和路由:
      • 分片与重组:
    • ①TCP分段与IP分片的区别?
        • TCP分段
        • IP分片
        • 什么是MSS?
          • 滑动窗口与MSS的区别?
        • 什么是MTU?
        • MSS与MTU的关系
        • 疑问
          • UDP是否会进行分段?
          • TCP分段后会进行IP分片吗?
        • 总结:
    • ②IP协议报头
      • 第一行
      • 第二行
      • 第三行
      • 第四行
      • 第五行
      • 第六行
      • 第七行及以后

定义

IP 协议(Internet Protocol)又称互联网协议,是支持网间互联的数据包协议。该协议工作在网络层,主要目的就是为了提高网络的可扩展性,和传输层 TCP 相比,IP 协议提供一种无连接/不可靠、尽力而为的数据包传输服务,其与TCP协议(传输控制协议)一起构成了TCP/IP 协议族的核心。

特点

  • 无连接,不可靠
  • 与TCP协议(传输控制协议)一起 构成了TCP/IP协议簇的核心

作用

寻址和路由:

  • 在IP 数据包中会携带源 IP 地址和目的 IP 地址来标识该数据包的源主机和目的主机。IP 数据报在传输过程中,每个中间节点(IP 网关、路由器)只根据网络地址进行转发,如果中间节点是路由器,则路由器会根据路由表选择合适的路径。IP 协议根据路由选择协议提供的路由信息对 IP 数据报进行转发,直至抵达目的主机。

分片与重组:

  • IP 数据包在传输过程中可能会经过不同的网络,在不同的网络中数据包的最大长度限制是不同的,IP 协议通过给每个 IP 数据包分配一个标识符以及分段与组装的相关信息,使得数据包在不同的网络中能够传输,被分段后的 IP 数据报可以独立地在网络中进行转发,在到达目的主机后由目的主机完成重组工作,恢复出原来的 IP 数据包。

①TCP分段与IP分片的区别?

TCP分段

  • 数据传输到传输层时受MSS限制,对数据进行分段,每一段分别添加TCP首部。
  • **注意: **TCP分段仅发生在发送端,这是因为在传输过程中,TCP分段是先被封装成IP数据报,再封装在以太网帧中被链路所传输的,并且在端到端路径上通常不会有工作在三层以上,即传输层的设备,故TCP分段不会发生在传输路径中间的某个设备中,在发送端TCP传输层分段后,在接收端TCP传输层重组。

IP分片

  • 网络层下发到数据链路层的数据不能超过MTU。如果超过了就需要在网络层分片,切成小于MTU的IP数据包。

注意:

  • 分段特指发生在使用TCP协议的传输层中的数据切分行为
  • 分片特指发生在使用IPv4协议的网络IP层中的数据切分行为

什么是MSS?

  • **TCP最大报文长度,**为TCP传输层的最大载荷上限(即应用层数据最大长度),不包含 TCP Header 和 TCP Option,只包含 TCP Payload ,MSS 是 TCP 用来限制应用层最大的发送字节数。
  • TCP会进行三次握手,而MSS会在三次握手的过程中传递给对方,MSS只出现在来syn报文段中,用于通知对端本地最大可以接收的TCP报文数据大小(不包含TCP和IP报文首部)。
  • 一般来说,MSS的值在不分段的情况会越大越好,比如一个外出接口的MSS值是MTU减去IP和TCP首部长度。
滑动窗口与MSS的区别?
  • 窗自口大小是个动态的值,因为TCP是用的滑zd动窗口协议,传输数据的速率都是根据窗口大小来调整的。可以把窗口理解为一个缓存,而且窗口大小跟MSS是没有任何关系的。
  • 窗口是为了控制传输过程中的速度。而MSS只是控制TCP报文段大小。

什么是MTU?

  • 最大传输单元(Maximum Transmission Unit),即MTU,为数据链路层的最大载荷上限(即IP数据报最大长度),每段链路的MTU可能都不相同,一条端到端路径的MTU由这条路径上MTU最小的那段链路的MTU决定。
  • 所谓的MTU,是二层协议的一个限制,对不同的二层协议可能有不同的值,只有二层协议为以太网(Ethernet)时,MTU一般才取1500字节,注意它不是物理链路介质的限制,只有工作在二层的设备才需要指定MTU的值,如网卡、转发设备端口(统称为网络接口)等,通过同一段线缆直连的通信端口或网卡,其MTU值一定相同。

MSS与MTU的关系

在这里插入图片描述

MTU的换算关系为:
MTU = MSS + TCP首部长度 + IP首部长度
故在以太网中(网络层以IPv4为例):
MSS = 以太网MTU - TCP首部长度 - IPv4首部长度 = 1500 - 20 - 20 = 1460字节

疑问

UDP是否会进行分段?
  • 不会,UDP是简单至极的传输协议,就是在IP协议基础上增加了些无关痛痒的特性以实现端到端的数据传输服务,因此UDP提供的是类似IP的“尽力而为”的传输服务,是不可靠的。而由于UDP协议并不会自行分段,故MSS的限制对其没有作用,因此最终的IP数据报的长度超过了MTU时,网络层会负责执行IP分片。同样,(没有分段功能的)ICMP数据在网络层中同样会出现IP分片的情况。
TCP分段后会进行IP分片吗?
  • 发送端进行TCP分段后就一定不会在IP层进行分片,因为MSS本身就是基于MTU推导而来,TCP层分段满足了MSS限制,也就满足了MTU的物理限制。但在TCP分段发生后仍然可能发生IP分片,这是因为TCP分段仅满足了通信两端的MTU要求,传输路径上如经过MTU值比该MTU值更小的链路,那么在转发分片到该条链路的设备中仍会以更小的MTU值作为依据再次分片。当然如果两个通信主机直连,那么TCP连接协商得到的MTU值(两者网卡MTU较小值)就是端到端的路径MTU值,故发送端只要做了TCP分段,则在整个通信过程中一定不会发生IP分片。

总结:

  • TCP分段的原因是因为TCP报文段大小受MSS限制
  • IP分片的原因则是因为IP数据报大小受MTU限制
  • UDP不会分段,由IP来分片
  • 发送端进行TCP分段后就一定不会在IP层进行分片,但是在TCP分段发生后到达其传输路径仍然可能发生IP分片

②IP协议报头

在这里插入图片描述
在这里插入图片描述

IP 报头的最小长度为 20 字节,上图中每个字段的含义如下:

第一行

  1. 版本(version)
    占 4 位,表示 IP 协议的版本。通信双方使用的 IP 协议版本必须一致。目前广泛使用的IP协议版本号为 4,即 IPv4。
  2. 首部长度(网际报头长度IHL)
    占 4 位,可表示的最大十进制数值是 15。这个字段所表示数的单位是 32 位字长(1 个 32 位字长是 4 字节)。因此,当 IP 的首部长度为 1111 时(即十进制的 15),首部长度就达到 60 字节。当 IP 分组的首部长度不是 4 字节的整数倍时,必须利用最后的填充字段加以填充。

数据部分永远在 4 字节的整数倍开始,这样在实现 IP 协议时较为方便。首部长度限制为 60 字节的缺点是,长度有时可能不够用,之所以限制长度为 60 字节,是希望用户尽量减少开销。最常用的首部长度就是 20 字节(即首部长度为 0101),这时不使用任何选项。

  1. 区分服务(tos)
    也被称为服务类型,占 8 位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998 年 IETF 把这个字段改名为区分服务(Differentiated Services,DS)。只有在使用区分服务时,这个字段才起作用。
  2. 总长度(totlen)
    首部和数据之和,单位为字节。总长度字段为 16 位,因此数据报的最大长度为 2^16-1=65535 字节。

第二行

  1. 标识(identification)
    用来标识数据报,占 16 位。IP 协议在存储器中维持一个计数器。每产生一个数据报,计数器就加 1,并将此值赋给标识字段。当数据报的长度超过网络的 MTU,而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。具有相同的标识字段值的分片报文会被重组成原来的数据报。
  2. 标志(flag)
    占 3 位。第一位未使用,其值为 0。第二位称为 DF(不分片),表示是否允许分片。取值为 0 时,表示允许分片;取值为 1 时,表示不允许分片。第三位称为 MF(更多分片),表示是否还有分片正在传输,设置为 0 时,表示没有更多分片需要发送,或数据报没有分片。
  3. 片偏移(offsetfrag)
    占 13 位。当报文被分片后,该字段标记该分片在原报文中的相对位置。片偏移以 8 个字节为偏移单位。所以,除了最后一个分片,其他分片的偏移值都是 8 字节(64 位)的整数倍。

第三行

  1. 生存时间(TTL)
    表示数据报在网络中的寿命,占 8 位。该字段由发出数据报的源主机设置。其目的是防止无法交付的数据报无限制地在网络中传输,从而消耗网络资源。

路由器在转发数据报之前,先把 TTL 值减 1。若 TTL 值减少到 0,则丢弃这个数据报,不再转发。因此,TTL 指明数据报在网络中最多可经过多少个路由器。TTL 的最大数值为 255。若把 TTL 的初始值设为 1,则表示这个数据报只能在本局域网中传送。

  1. 协议
    表示该数据报文所携带的数据所使用的协议类型,占 8 位。该字段可以方便目的主机的 IP 层知道按照什么协议来处理数据部分。不同的协议有专门不同的协议号。

例如,TCP 的协议号为 6,UDP 的协议号为 17,ICMP 的协议号为 1。

  1. 首部检验和(checksum)
    用于校验数据报的首部,占 16 位。数据报每经过一个路由器,首部的字段都可能发生变化(如TTL),所以需要重新校验。而数据部分不发生变化,所以不用重新生成校验值。

第四行

  1. 源地址
    表示数据报的源 IP 地址,占 32 位。

第五行

  1. 目的地址
    表示数据报的目的 IP 地址,占 32 位。该字段用于校验发送是否正确。

第六行

  1. 可选字段
    该字段用于一些可选的报头设置,主要用于测试、调试和安全的目的。这些选项包括严格源路由(数据报必须经过指定的路由)、网际时间戳(经过每个路由器时的时间戳记录)和安全限制。
  2. 填充
    由于可选字段中的长度不是固定的,使用若干个 0 填充该字段,可以保证整个报头的长度是 32 位的整数倍。

第七行及以后

  1. 数据部分
    表示传输层的数据,如保存 TCP、UDP、ICMP 或 IGMP 的数据。数据部分的长度不固定。

http://chatgpt.dhexx.cn/article/lRhuahk5.shtml

相关文章

华为 协议归纳总结

青出于蓝而胜于蓝 文章目录 一、路由优先级二、路由协议三、常见的永久组地址四、常用的UDP协议及端口号五、常用的TCP协议及端口号六、协议七、报文头格式 一些常用的知识点,经常用到,也很容易忘记、混淆,所以有必要去整理一下这些常用知识点…

管理距离 动态协议端口号 协议号

管理距离(Administrative Distance,简称AD ) 路由器可以通过多种途径获知路由条目∶如静态手工配置、各种动态路由协议等等。当路由器从两种不用的途径获知去往同一个目的地的两条路由,那么路由器会比较这两条路由的AD值,也就是管理距离&…

各协议的协议号和端口号

协议号与端口号详解 IP是网络层协议,IP头中的协议号用来说明IP报文中承载的是哪种协议(一般是传输层协议,比如6 TCP,17 UDP;但也可能是网络层协议,比如1 ICMP;也可能是应用层协议,比…

TCP/IP协议号

转自http://www.52rd.com/Blog/Detail_RD.Blog_liweikui_22903.html,作者:liweikui IP协议号:IP首部中有8位协议号,用于指明IP的上层协议,具体如下: 协议号 协议类型 说明 0 HOPOPT IPv6逐跳选项 1…

MATLAB APP全局变量的使用

切换到代码视图,左上角代码浏览器点击属性,有如下提示: 点击➕旁边,会出现提示: 按照提示所说,在这里就可以添加全局变量了。 点击➕,在代码中便会添加如下代码: properties (Acce…

MATLAB GUI 设全局变量的位置

如果要在控件之外定义全局变量, 则这个全局变量要设置在OutputFcn下面 如图:

matlab 全局变量(global)数据类型报错问题

今天我在做matlab的GUI界面时,其中涉及到定义一个全局的元胞变量(cell)。将其摘录下来如下: clc;clear all global a s11;s2123;s3a; a(1,1:3){s1,s2,s3}然后出现错误:从 cell 转换为 double 时出现以下错误:错误使用 double无法从 cell 转换…

matlab 全局符号变量,优化全局变量使用 - MATLAB Simulink Example - MathWorks 中国

示例模型 在模型 matlab:rtwdemo_optimize_global_ebf 中,Assignment 模块将来自 Inport 模块和 Constant 模块的值赋给输出信号。输出信号馈入 Gain 模块中。 model rtwdemo_optimize_global_ebf; load_system(rtwdemo_optimize_global_ebf) 生成代码但不进行优化…

20220117 matlab 全局变量调试

要在外部和里面都定义global才行貌似 global f1function parameter_inpu__() global f1 f11;endglobal f1 b1 f_temp test1__(); dynamic_e()function parameter_inpu__() global f1 f11;endfunction test1__() global f1 b1 b1f1;endfunction dynamic_e() global f_temp f_te…

matlab变量全局化,matlab全局变量global

matlab global定义全局变量的问题 我写了matlab的一个主函数,放在一个M文件中,然后在这个主函数中调用其可以,前提是两个函数共用变量均需用global声明 例子: 保存f.m内容如下: function f(a,b) global x y; x=a; y=b; 保存g.m内容如下: function [out]=g global x y; ou…

matlab 编程之全局变量(global)和永久变量(persistent)

一、global 官方解释: help globalglobal Define global variable.global X Y Z defines X, Y, and Z as global in scope.Ordinarily, each MATLAB function has itsown local variables, which are separate from those of other functions,and from those of th…

Matlab之全局变量

通过返回修改后的输入参数,可以实现函数内部对Matlab工作空间变量的修改。而另一种殊途同归的方法则是使用全局变量。 声明全局变量需要用到global关键词,语法格式为‘global variable’ 通过全局变量可以实现Matlab工作空间变量空间和多个函数的函数空间…

JavaScript 原型链和继承面试题

JavaScript 原型链和继承问题 JavaScript 中没有类的概念的,主要通过原型链来实现继承。通常情况下,继承意味着复制操作,然而 JavaScript默认并不会复制对象的属性,相反,JavaScript只是在两个对象之间创建一个关联&am…

11、原型链、原型继承和Class继承

11.1 原型 每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,这个对象(函数.prototype)的用途是包含可以由特定类型的所有实例共享的属性和方法 11.2 原型链 基本思想就是…

原型链和原型继承

什么是原型链? 每一个对象都有自己的原型对象,而原型对象也属于对象也会有自己的原型对象,依次类推就会形成链式结构,然后就构成了原型链,所有对象的原型链最终都会指向object.prototype,而最终object.pro…

关于原型、原型链和原型继承的理解

# 个人理解 原型: prototype首先是只作用于函数的属性,无法直接用于对象或变量。 每个函数中都自带一个__proto__属性(可以存储继承对象中的prototype属性--- p.__proto__ Person.prototype)。 在实例化对象(构造函数)时,寻找某个属性(如dem…

js原型和原型链以及原型继承

目录 一、原型 二、原型链 三、原型链继承 一、原型 原型是Javascript中的继承的基础,JavaScript的继承主要依靠原型链来实现的。 原型 ​ 在JavaScript中,我们创建一个函数A(就是声明一个函数), 就会为该函数创建一个prototype属性。而且也会在内存…

原型、原型链和原型继承

原型继承 编程中对象继承,有类继承和原型继承: 类继承形式上就是,extends 关键字,继承之后,子类就会拥有父类的属性和方法,如下: // 以下是 ES6 class 语法,语法上同类继承一样&a…

【JS继承】JS继承之原型链继承

自我介绍:大家好,我是吉帅振的网络日志;微信公众号:吉帅振的网络日志;前端开发工程师,工作4年,去过上海、北京,经历创业公司,进过大厂,现在郑州敲代码。 JS继…