IP协议(网络层重点协议)

news2024/10/7 6:40:59

目录

一、IP协议报头格式

二、地址选择

1、IP地址

(1)格式

(2)组成

(3)分类

(4)子网掩码

三、路由选择


IP协议是网络层的协议,它主要完成两个方面的任务:

  • 1.地址选择
  • 2.路由选择 

一、IP协议报头格式

(1)4位版本号:IP协议的版本号,当前主要有两个取值:4和6,即IPv4和IPv6。

(2)4位首部长度:IP报头和TCP报头类似,都是可变的,带有选项。

     4 位的取值范围0~15,这里的单位也是 4字节。

     即如果取值是1111 -> 15,实际表示的首部长度就是 60(15 * 4)字节。

(3)TOS(8位服务类型):其实只有四位是有效的。相当于切换形态。(同一时刻,只能取一种状态)。

     4 位TOS分别表示:最小延时、最大吞吐量、最高可靠性、最小成本。

(4)16 位总长度(字节数):IP数据报整体占多少个字节。类似UDP,单个IP数据报最大的长度不能超过64K。

     如果要构造一个更长的数据报(比如搭载的载荷部分已经超过64K了):IP协议自身就实现了分包和组包这样的操作。(标识和片偏移)

(5)16 位标识:唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了(分包),那么每个片里的这个标识id都是相同的。

 (6)3 位标志字段

  • 第一位保留:保留的意思是现在不用,但是不代表以后不用。
  • 第二位为 1:表示禁止分片。 此时如果报文长度超过64K,就会直接丢弃报文。
  • 第三位“更多分片”:用于分片场景。如果分片了话,最后一片的这里置为0,其他片置为1 。类似结束标记。

(7)13 位片偏移:是分片相对于原始IP报文开始处的偏移。就是表示当前的这个分片是在原来报文中的哪个位置。用来描述这些分片谁先谁后。

    实际偏移的数不是单纯的1、2、3....,而是可以基于片偏移来算出中间差多少空间的。

(8)8  位生存时间(TTL):数据报到达目的地的最大 报文跳数。

   表示一个IP数据报,在网络上还能存在多久。一般是 64。每次经过一个路由,TTL -=1,一直减到 0 还没到达,就丢弃了。用来防止出现路由循环。(有些包里面的IP地址,可能是永远也到不了的,像这样的包,不能让其在网络上无休止的转发,这样会占用太多硬件资源)

(9)8 位协议:表示上层的协议类型。即传输层用的是哪种协议(TCP和UDP 都有不同的取值)。

(10)16 位首部校验和:使用 CRC 进行校验,来鉴别头部是否损坏。

(11)32 为源地址 和 32 位目的地址:表示发送端(的IP地址)和接收端(的IP地址)。

(12)选项字段:不定长,最多40个字节。

二、地址选择

1、IP地址

   IP地址是指互联网协议地址(网际协议地址)。

   IP地址是 IP协议 提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机都分配了一个逻辑地址。

(1)格式

   IP地址是一个 32 为的二进制数,通常被分割为4个字节。用“点分十进制”的方式来表示。

例如:100.4.5.6

(2)组成

   IP地址分为两个部分:网络号(标识网段) + 主机号(标识主机)。

  • 网络号:描述当前的网段信息(局域网的标识)。
  • 主机号:区分了局域网内的主机。

(3)分类

   过去曾经提出过一种划分的方案,把所有IP地址分为5类,如下图所示。

   其中有几个特殊的IP地址:

  • 主机号全 0 :该 IP就表示网络号,代表这个局域网。(局域网里一个正常的设备,主机号不能设为 0 )
  • 主机号全 1 (255):该 IP就表示“广播地址”,往这个广播地址上发消息,整个局域网中都能收到。
  • 127.0.0.1 :环回地址,用于本机环回测试。

   使用上述的分类,会出现一些资源浪费的问题。例如一般单位会申请 B 类网络,但是 B 类网络的最大连接主机数量是 65534,实际上连接的主机远远小于这个数字,就造成了资源浪费。

   因此就有了子网掩码。

(4)子网掩码

   IP地址有 32 bit位,那么哪些是网络号,哪些是主机号呢。其实是不固定的。子网掩码就是用来表示多少个bit位是网络号的。

   子网掩码,也是一个 32 位的点分十进制的整数。子网掩码的左侧都是1,右侧都是0 。而左边的这些 1 就表示哪些位是网络号,剩下的 0 就是表示哪些位是主机号。

例如:255.255.255.0  -> 1111 1111 1111 1111 1111 1111 0000 0000 (前 24 个bit位是网络号,后 8 个bit位是主机号)

计算方式:

   网络通信时,子网掩码结合IP地址,可以计算获得网络号及主机号。一般用于判断目的IP与本IP是否为同一个网段。

   将 IP 地址和子网掩码进行 “按位与” 操作,得到的结果就是网络号。

(5)外网IP和内网IP:

   IP地址是10开头、192.168开头、172.16~172.31开头,表示该 IP 是一个局域网内部的IP(内网IP)。除此之外,剩下的IP称为 外网IP(直接在广域网上使用的 IP)。

   要求外网IP一定是唯一的,每个外网IP都会对应到唯一的一个设备。内网IP 只是在当前局域网中时唯一的,在不同的局域网里,可以有相同的 内网IP 的设备。

其作用:

   咱们现在生活中时 IPv4协议,使用的IP地址是 32 位整数。但是随着时间推移,世界上的设备越来越多,让每一个设备都有唯一的一个IP地址就不现实了。就有如下方法了。

① 动态分配IP地址:让每个设备上网的时候才分配IP地址,不联网的时候这个IP就给别人。(不能从根本上解决问题,所以我们现实中不采用)

② NAT机制:让多个设备共用一个 IP (外网IP)。

   这个机制就是把网络分成了 内网(局域网)和 外网(广域网)。要求 外网IP 必须表示唯一的设备,同时内网中的若干设备,可以共用同一个外网IP。这个时候每个外网IP就都可能表示着几百个甚至上万个设备了,此时IP地址的压力就缓解了很多。

两个外网之间的连接,如果外网A里有多台 PC 都向 外网B 发送连接,那么外网B如何区分这两个连接谁是谁呢?靠端口号

 NAT机制也说明了:

   对于一个外网IP,可以在互联网任意位置都能访问到。

   对于一个内网IP,只能在当前局域网内部访问。局域网1 的设备,不能使用 内网IP 访问局域网2的设备。(内网IP可以重复出现,只有在当前局域网内才是唯一的)。

   现实生活中,运营商的路由器就会在这里修改IP数据报,从内网发出带有这样功能的路由器设备,也叫做 NAT设备。

NAT 设备:

   NAT 不光会将 IP 调整为外网IP。还会对端口进行调整,如果端口不一样,就罢了;如果端口一样,NAT 就会调整成不同的端口号,再转发出去。 同时 NAT 会记录这个映射关系,以此保证服务器返回的数据,可以再按照这个映射关系给还原回去。

③ IPv6:IPv6 是在报头中使用了一个更长的字段来表示 IP 地址,16 个字节,128 bit位(IPv4是 4个字节)。

   但是现在依然用的是IPv4+NAT。因为这里最大的问题就是 IPv4和IPv6是不兼容的,对于一个设备来说,支持IPv4和IPv6需要两个截然不同的机制,而现有的大量的网络设备(路由器...)很可能都是只支持IPv4,不支持IPv6的。

三、路由选择

   路由选择就是规划路径。两个设备之间,要找出一条通路能够完成传输的过程。而要想找出通道,就得先认识路。

   IP协议的路由选择也是类似的,IP数据报中的目的地址,就表示了这个包要发到哪里去。这个目的地址,如果当前的路由器直接认识,就直接告诉你路了;如果当前路由器不认识,就会告诉你大概的方向,让你走到下一个路由器的时候再来问问。就这样一次往后走,就会离目的地址越来越近,这个时候总是会遇到一个认识这个地址的路由器,于是就可以具体转发过去了。如果认识了多个路,就可以进行选择,选择一个合适的路径进行传输。

   在路由器的内部,维护了一个数据结构——路由表。路由表里面就记录了一些网段信息(网络号...)以及每个网络号对应的网络接口(对应到路由器里面的具体的端口),目的IP就在这些网络号中进行匹配。而路由表中有一个默认表项,就是当 IP地址 在路由表的所有表项中都匹配不上的时候,此时就会走这个下一跳。

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

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

相关文章

4.16--设计模式之创建型之代理模式(总复习版本)---脚踏实地,一步一个脚印

1.代理对象 定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,从而实现对真实对象的操作。 通俗的来讲代理模式就是我们生活中常见的中介。 在代理模式中,代理对象主要起到一个中介的作用,…

初识Docker并在linux完成安装

文章目录一、 初识Docker1.1 简介1.2 Docker和虚拟机的异同1.3 Docker架构二、 DockerHub三、Docker的安装一、 初识Docker 1.1 简介 Docker是一种开源的容器化平台,可以让开发者在容器中打包、发布、运行和管理应用程序。它使用轻量级的容器来隔离应用程序和它们的…

Scrapy爬虫基本使用与股票数据Scrapy爬虫

Scrapy爬虫的常用命令 scrapy命令行格式 红色是常用的三种命令 为什么Scrapy采用命令行创建和运行爬虫? 命令行(不是图形界面)更容易自动化,适合脚本控制 本质上,Scrapy是给程序员用的,功能&#xff08…

vue打包之后,可以进行修改配置后端地址、端口等信息方法

前言 用vue-cli构建的项目通常是采用前后端分离的开发模式,也就是前端与后台完全分离,此时就需要将后台接口地址打包进项目中,但是,难道我们只是改个接口地址也要重新打包吗?当然不行了,那就太麻烦了&#…

支付宝沙箱环境+SpringBoot+内网穿透整合开发

目录 1.查看沙箱账号 2.内网穿透 3.沙箱环境整合SpringBoot开发 下面我将以实际案例详细介绍如何使用沙箱环境进行支付宝支付对接的开发 1.查看沙箱账号 首先什么是沙箱账号? 沙箱账号是指在支付宝沙箱环境中创建的测试账户,用于模拟真实的支付流程…

The 2022 ICPC Asia Xian Regional Contest

题目顺序大致按照难度排序。 F. Hotel 现在酒店中有单人间和双人间,价格分别是c1,c2,现在有n个队,每队三个人,性别分别用字母表示,当两个人性别相同且在同一个队时,他们可以住在双人间中。求最…

【跑跑Github开源项目系列】基于YOLO和Streamlit的车辆识别系统demo

【跑跑Github开源项目系列】基于YOLO和Streamlit的车辆识别系统demo写在前面环境配置创建虚拟环境安装库项目运行写在前面 相信很多朋友跟我一样在github等平台上偷代码 (读书人的事怎么能叫偷呢) 的时候会发现伟大且无私的作者虽然开源了代码但是readme文件该写的没写&#x…

2023TYUT移动应用软件开发程序设计和填空

目录 程序设计 程序设计1:根据要求设计UI,补充相应布局文件,即.xml文件 程序设计2:根据要求,补充Activity.java文件 程序填空 说明: 程序设计 程序设计1:根据要求设计UI,补充相应布局文件,即.xml文件…

【C++初阶】第十篇:list模拟实现

文章目录一、list的模拟实现三个类及其成员函数接口总览结点类的模拟实现迭代器类的模拟实现迭代器类的模板参数说明迭代器operator->的重载迭代器模拟实现代码list的模拟实现无参构造函数带参构造拷贝构造函数赋值运算符重载函数析构函数begin和endinserteraselist的迭代器…

WordPress添加阿里云OSS对象云储存配置教程

背景:随着页面文章增多,内置图片存储拖连网站响应速度,这里对我来说主要是想提升速度 目的:使用第三方云存储作为图片外存储(图床),这样处理可以为服务器节省很多磁盘空间,在网站搬家的时候减少文件迁移的工…

【数据结构】堆(笔记总结)

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:数据结构 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&…

MySQL--数据库基础--0406

目录 1.什么是数据库? 2. 基本使用 2.1 连接服务器 2.2 数据库的操作在Linux中的体现 2.3 使用案例 3.服务器,数据库,表关系 4.数据逻辑存储 5.SQL的分类 6.存储引擎 1.什么是数据库? 数据库和文件 文件或者数据库&…

OK-MX93开发板-实现Web页面无线点灯

上篇文章:i.MX9352——介绍一款多核异构开发板,介绍了OK-MX9352开发板的基础硬件功能。 本篇来使用OK-MX9352开发板,通过Web界面进行点灯测试,最终的效果如下: 在进行代码编写之前,先在Ubuntu虚拟机上把这…

对比损失Contrastive Loss(CVPR 2006)原理解析

paper:http://yann.lecun.com/exdb/publis/pdf/hadsell-chopra-lecun-06.pdf 本文提出的对比损失contrastive loss被广泛应用于自监督模型中,但最初对比损失是作为一个特征降维方法而提出的。 摘要 降维是学习一种映射关系,通过这种映射关…

day10 线程池及gdb调试多线程

目录 线程池的概念 概念: 必要性: 线程池的基本结构: 线程池的实现 完整代码 线程的GDB调试 线程池的概念 概念: 通俗的讲就是一个线程的池子,可以循环的完成任务的一组线程集合; 必要性&#xff…

【软件工程】为什么要选择软件工程专业?

个人主页:【😊个人主页】 文章目录前言软件工程💻💻💻就业岗位👨‍💻👨‍💻👨‍💻就业前景🛩️🛩️🛩️工作环…

趣谈之什么是 API 货币化?

本文介绍了 API 货币化和 APISIX 实现 API 货币化方法。 作者刘维,API7.ai 技术工程师,Apache APISIX Contributor 原文链接 什么是 API 货币化 想象你开发并部署了一个服务,能够搜集你所在城市所有超市的打折和优惠信息,其他的…

C生万物 | 校招热门考点 —— 结构体内存对齐

文章目录一、前言结构体偏移量计算:offsetof二、规则介绍例题的分解与细说三、习题演练1、练习①2、练习②四、为什么存在内存对齐?1、平台原因(移植原因)2、性能原因五、如何修改默认对齐数六、实战演练✍一道百度笔试题: offsetof 宏的实现&#x1f4…

深度学习基础篇之深度神经网络(DNN)

神经网络不应该看做是一个算法,应该看做是一个特征挖掘方法。在实际的业界发展过程中,数据的作用往往大于模型,当我们把数据的隐藏特征提取出来之后,用很简单的模型也能预测的很好。 神经网络模型由生物神经中得到启发。在生物神…

【Linux】Makefile的简述

目录 前言: 一、Makefile的规则 二、Makefile的函数语法 (1)通配符pattern ​(2) 删除clean ​(3) 立即变量、延时变量 (4) Makefile常用函数 3-1.Makefile要达到…