网络原理一> ip协议相关特性

news/2025/2/6 17:44:24 标签: IP协议, 网络协议

目录

  • 概述:
  • IP协议结构属性理解:
      • 4位版本:
      • 4位部首长度:
      • 8位服务类型:
      • 16位总长度字节数:
      • 8位生存时间:
      • 8位协议:
      • 16位部首检验和:
      • 32位源IP地址和32位目的IP地址:
  • IP地址不够用的解决方法:
      • 一.动态分配IP地址:
      • 二.NAT机制(当前最主要的方式):
  • IP地址组成和路由选择:
      • 组成:
      • 路由选择:

概述:

IP协议和TCP协议复杂长度差不多,这里可以大概理解一下

IP协议属于网络层的协议,主要功能有两个
1.路由选择:在两个通信节点之间,规划出一条合理的路径
2.地址管理使用IP地址这样的概念,标识网络上某个设备的位置

IP协议结构属性理解:

这里是引用

4位版本:

开发阶段IPV4,和IPV6是当下主要使用的版本
IPv4使用,4个字节最为IP地址
IPv6使用16个字节作为IP地址

4位部首长度:

IP协议报头有选项,所以是边长的结构, 4位部首长度单位是4字节,能表示的最大值为二进制的“1111”就是十进制的15,所以IP协议头部最大长度为15*4=60字节

8位服务类型:

可以让IP协议切换工作状态,在这里插入图片描述

16位总长度字节数:

**包括了IP数据报,报头+载荷的总长度,因为是16位,总长度就是2的16次方减一,就是64KB;但是在实际应用中受数据链路层的MTU限制,数据超过规定MTU,就会把数据包拆成多个IP数据包进行组装

触发后的拆包组包操作是这样的:
16位标识:把把拆出来的包,标记为相同的标识,再把相同标识的数据包组合到一起


3位标志位:描述了其中一个标志位,是否触发了拆包操作,还有一个标志位描述当前数据包是否是最后一个


13位片偏移:描述了组包的先后顺序,偏移小的放到偏移大的前面在这里插入图片描述

注意:面试如果让你设计:怎样让UDP传输超过64KB的数据?就可以根据上面的:16位标识,3位标志位,13位片偏移来设计

8位生存时间:

一个IP数据包,能在网络上传输的最大时间:
IP数据包每经过一次路由转发,TTL值就减一,TTL减到0就表示这个数据包传播到目的地的,被丢弃

8位协议:

标识传输层使用什么协议,在网络层调用下一层分用时候,把数据包交给传输层时,这个时候8位协议就起到区分的效果,效果和应用层的端口号有异曲同工之妙
在这里插入图片描述

16位部首检验和:

IP协议里面一般传输,UDP或者TCP协议时候就,这个两协议的校验和进行检验,不知道校验和的参考上一篇文章–>点击

32位源IP地址和32位目的IP地址:

IP地址最关键的部分,IP地址本质通过32位整数来表示,但是由于32位整数不方便阅读,就用点分十进制表示了–>三个点分出四个部分如下:每个部分范围0~255在这里插入图片描述

这里有个为问题?32位IP地址只够表示42亿9千万的数据,现在肯定不够的,一下我们说明一下解决方式。

IP地址不够用的解决方法:

一.动态分配IP地址:

使用就分配,不使用就不分配

二.NAT机制(当前最主要的方式):

我们知道:公网IP又叫外围IP,私网IP又叫内网IP;公网IP是唯一的不允许重复,同一局域网私网IP不可以重复


NAT机制具体就是网络地址转换,总结就是用一个外网IP,对应一堆内外设备来使用
如图:在这里插入图片描述

IP地址组成和路由选择:

组成:

IP地址由网络号+主机号组成在这里插入图片描述
特殊的IP:主机号为全1为广播,局域网中主机号不能设为0; 网络号127开头用于本机环回测试

路由选择:

路由选择就和问路是一样的,网络环境非常复杂任何一个路由器无法存储所有的网络信息,但是每个路由器可以知道自己附近网络的情况,比如和谁相连,通过层层问路,就可以找到指定路径


具体过程如下:
当数据报达到某个路由器的时候,会匹配这个路由器的路由表,路由表会存储着某个设备的周围设备的IP,以及会记录这个设备通过哪个口,转发给别的设备
如果目的IP刚好匹配到某个路由器的路由表中的记录,那么直接按照当前对应的口转发过去即可,如果没有匹配到对应的路由表信息,也没事,路由表会有一个特殊的表项“吓一跳”,直接指向这个设备的上一级路由器所在的位置,上一级路由器包含的信息更广可以在那里寻找
在这里插入图片描述


http://www.niftyadmin.cn/n/5843216.html

相关文章

Django 多数据库

django 支持项目连接多个数据库 DATABASES = {default: {ENGINE: django.db.backends.mysql,NAME: xxx,USER: root,"PASSWORD": xxxxx,HOST: xxxx,PORT: 3306,},bak: {ENGINE: django.db.backends.mysql,NAME: xxx,USER: root,"PASSWORD": xxxx,HOST: xxx…

Go学习:格式化输入输出

目录 1. 输出 2. 输入 1. 输出 常用格式: 格式说明%d整型格式%s字符串格式%c字符格式%f浮点数格式%T操作变量所属类型%v自动匹配格式输出 简单示例代码: package mainimport "fmt"func main() {a : 10b : "abc"c : ad : 3.14/…

《深度揭秘LDA:开启人工智能降维与分类优化的大门》

在当今人工智能蓬勃发展的时代,数据成为了驱动技术进步的核心要素。随着数据采集和存储技术的飞速发展,我们所面临的数据量不仅日益庞大,其维度也愈发复杂。高维数据虽然蕴含着丰富的信息,但却给机器学习算法带来了一系列严峻的挑…

Slint的学习

Slint是什么 Slint是一个跨平台的UI工具包,支持windows,linux,android,ios,web,可以用它来构建申明式UI,后端代码支持rust,c,python,nodejs等语言。 开源地址:https://github.com/slint-ui/slint 镜像地址:https://kkgithub.com/…

Vue前端开发-pinia之Actions插件

Store中的Actions部分,用于定义操作属性的方法,类似于组件中的methods部分,它与Getters都可以操作State属性,但在定义方法时,Getters是对State属性进行加工处理,再返回使用,属于内部计算;Action…

基于微信小程序的医院综合服务平台的设计与实现ssm+论文源码调试

4系统概要设计 4.1概述 本系统后台采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原…

基于SpringBoot+vue高效旅游管理系统

Spring Boot后端与Vue前端融合:构建高效旅游管理系统 目录 一、项目简介 二、开发技术与环境配置 2.1 SpringBoot框架 2.2 Java语言简介 2.3 Vue的介绍 2.4 mysql数据库介绍 2.5 B/S架构 三、系统功能实现 四、系统项目截图 登录页面 后台管理页面 用户…

为什么在springboot中使用autowired的时候它黄色警告说不建议使用字段注入

byType找到多种实现类导致报错 Autowired: 通过byType 方式进行装配, 找不到或是找到多个,都会抛出异常 我们在单元测试中无法进行字段注入 字段注入通常是 private 修饰的,Spring 容器通过反射为这些字段注入依赖。然而,在单元测试中&…