【计算机网络】IP协议第一讲(协议格式介绍)

2023-09-14 14:30:00

0


首先明确一个概念:TCP/IP协议是配合使用的,TCP负责可靠传输策略,IP则是负责传输,TCP协议是位于传输层提供的是策略解决可靠性问题,IP 协议在网络层,提供的是网络传输服务,实现A主机到B主机的跨网络通信服务,并不管可不可靠,TCP+IP公共配合:可靠地将A主机数据传给B主机。

1.协议头格式

0001

1.1 概念介绍

  • 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.
  • 4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.
  • 8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0).
  • 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.
  • 16位总长度(total length): IP数据报整体占多少个字节.
  • 16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的.
  • 3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话,最后一个分片置为1, 其他是0. 类似于一个结束标记.
  • 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).
  • 8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL-= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
  • 8位协议: 表示上层协议的类型
  • 16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
  • 32位源地址和32位目标地址: 表示发送端和接收端.

1.2补充说明

16位标识+3位标记+13位片偏移:
相关博客1: 点击跳转
相关博客2: 点击跳转

1.2.1 8位生存时间—TTL

TTL(Time To Live)是IPv4和IPv6网络通信中的一个重要字段,用于控制数据包在网络中的生存时间。TTL的作用是防止数据包在网络中无限制地循环传输,从而防止网络中的数据包永远无法被丢弃,占用网络资源。

TTL的工作原理如下:

发送方创建一个数据包,并在数据包的IP头部中设置TTL的初始值。
数据包被发送到目标设备。
每当数据包经过一个路由器或网络设备时,TTL的值就会减少1。
当TTL的值达到零时,路由器或网络设备会丢弃数据包,并向发送方发送一个ICMP时间超过(Time Exceeded)消息,告知发送方数据包已经超过了生存时间限制。
通过TTL,网络可以防止数据包在网络中永无止境地传递,从而避免网络拥塞和资源浪费。TTL的典型单位是跳数(hops),每经过一个路由器或网络设备,TTL的值减少1,直到达到零。

以下是一个TTL的简单示例:

假设有一台计算机A发送一个数据包到计算机B,数据包经过3个路由器,然后到达计算机B。

计算机A将TTL设置为8,并发送数据包。
数据包到达第一个路由器,TTL减少为7。
数据包到达第二个路由器,TTL减少为6。
数据包到达第三个路由器,TTL减少为5。
数据包到达计算机B。
如果TTL的初始值太小,数据包可能在达到目的地之前被丢弃。因此,设置TTL的初始值是一个重要的网络配置参数,通常需要根据网络的复杂性和跳数来调整。

1.2.2 16位首部检验和

16位首部校验和(Header Checksum)是在IPv4协议中用于检测IP首部完整性的一种机制。IPv4首部校验和涉及到首部字段的校验,而不包括数据部分(通常是传输层报文的部分)。它用于确保在IP数据包传输过程中首部信息没有被损坏或篡改。

IPv4首部校验和的计算过程如下:

将IPv4首部的各个字段划分为多个16位字(两个字节)。
对这些16位字进行二进制求和。
将上述二进制求和的结果进行溢出回卷操作,即将高16位与低16位相加。
将结果取反得到校验和值,然后将其填充到IPv4首部的校验和字段中。
当数据包在传输过程中经过路由器或网络设备时,这个校验和字段会被用来检验首部是否受损。如果首部在传输过程中发生了任何变化,校验和将无法正确匹配,这时数据包会被丢弃。

注意以下几点:

IPv4首部校验和仅检查IPv4首部字段的完整性,不涉及数据部分(负载)。
IPv4首部校验和是端到端的校验,只有源和目标主机才会执行校验和的计算和验证。
IPv4首部校验和是可选的,IPv6协议已经废弃了这个字段。
国际互联网
总之,IPv4首部校验和是一项用于保证IP首部完整性的重要机制,有助于检测传输过程中可能发生的首部损坏或篡改。

相关博客推荐:网络层协议 ——— IP协议

更多推荐

机器学习西瓜书+南瓜书吃瓜教程学习笔记第四章决策树

1、算法原理从逻辑角度,一堆ifelse语句的组合从集合角度,根据某种准则划分特征空间最终目的:将样本越分越“纯”决策树是基于树结构来进行决策的例如,我们对“这是好瓜吗?”这样的问题进行决策时,通常会进行一系列的判断或“子决策”:我们先看“它是什么颜色?”,如果是“青绿色”,则我们再看“它的根蒂是什么形态?”,如果是“

Linux C 网络基础

为什么需要网络通信?进程间通信解决的是本机内通信网络通信解决的是任意不同机器的通信实现网络通信需要哪些支持1.通信设备:网卡(PC机自带);路由器和交换机;光纤、电缆和基站2.通信协议:2.1.操作系统自带协议栈(Linux的特点:丰富的网络协议)2.2.裸机开发需要独立的协议栈3.简单网络通信只需要学会系统APITC

Java基础(三)

前言:前面主要涉及到java的基本语法,接下来本篇博客主要记录Java中Collections类、泛型、以及File类、IO流的学习。目录数据结构泛型集合分类Collection的分类collection常用方法collection遍历方式迭代器for循环Lambda表达式List集合特点增删改查List集合的遍历方式

爬虫 — Scrapy 框架(一)

目录一、介绍1、同步与异步2、阻塞与非阻塞二、工作流程三、项目结构1、安装2、项目文件夹2.1、方式一2.2、方式二3、创建项目4、项目文件组成4.1、piders/__init__.py4.2、spiders/demo.py4.3、__init__.py4.4、items.py4.5、middlewares.py4.

npm安装心得(依赖库Python及node-sass依赖环境)

在使用vue的开发环境过程中,总会遇到这样哪样的安装或者打包错误,vue运行或打包常见错误如下:1.npminstall时node-sassnpmERRcommandfailed(可能是node.js的版本和node-sass的版本不符,就是卸掉原来的node.js,下载一个符合node-sass版本的node.js)

Go - 【字符串,数组,哈希表】常用操作

一.字符串字符串长度:s:="hello"l:=len(s)fmt.Println(l)//输出5遍历字符串:s:="hello"fori,c:=ranges{fmt.Printf("%d:%c",i,c)}//输出:0:h1:e2:l3:l4:ofori:=0;i<len(s);i++{fmt.Printf("%s"

Go基础-文件、字符

文件创建导入“os”包,创建文件,读写文件的函数都在改包。指定创建的文件存放路径以及文件名。执行Create()函数,进行文件创建。关闭文件。packagemainimport("fmt""os")funcmain(){//创建文件,需要指定文件的存放路径以及文件名称//file为文件指针file,err:=os.Cr

C#控制台程序中使用log4.net来输出日志

Apachelog4net库是一个帮助程序员将日志语句输出到各种输出目标的工具。log4net是优秀的Apachelog4j™框架到Microsoft®.NE​​T运行时的端口。我喜欢他可以自定义输出,区分等级等特点。导入库我们在工程里添加NuGet的包。输入名称log4net,导入包。创建配置文件然后我们在项目根创建

北邮22级信通院数电:Verilog-FPGA(3)实验“跑通第一个例程”modelsim仿真及遇到的问题汇总(持续更新中)

北邮22信通一枚~跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章持续关注作者迎接数电实验学习~获取更多文章,请访问专栏:北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客注意:本篇文章所有绝对路径的展示都来自上一篇博客北邮22级信通院数电:Verilog-FPGA(2)modelsim北邮信通专属下

蓝蓝设计提供气象行业软件设计

北京蓝蓝设计在气象行业软件界面设计方面具有成功的案例和丰富的经验。蓝蓝与多家气象行业软件开发商合作,为其设计了一系列优秀的界面,得到了客户的高度认可和好评。我们的设计作品不仅满足了客户的需求,还提升了软件的品牌形象和竞争力。北京蓝蓝设计还致力于学习和应用最新的设计技术和工具。我们紧跟行业发展的脚步,不断更新自己的设计理

JMeter 设置请求头信息的详细步骤

在使用JMeter的过程中,我们会遇到需要设置请求头信息的场景。比如:POST传过去的Body数据是json格式的。需要填添加头信息:Content-Type:application/json。在header中用token来传用户的认证信息。下面,来具体介绍下JMeter设置HTTP请求头的方法。1添加请求头右击HTT

热文推荐