【计算机网络】IP协议

目录

 1. 协议头格式

2. 网段划分 

3. 特殊的IP

 4. 公网IP && 内网IP

总结


在这里插入图片描述

网络层的IP协议主要解决的是什么问题?——将数据包从B主机发送给C主机;传输层协议tcp提供可靠的策略;网络层IP协议提供数据数据传输的能力;

 发送报文时,传输路径的选择;想要去一个景点要怎么去?所在城市 + 景点;IP地址也是如此,IP地址就包含了:目标网络,目标主机的信息;IP =  网络号 + 主机号;

 任何一台主机一定在某一个局域网(子网)中;

  • 主机:配有IP地址, 但是不进行路由控制的设备;
  • 路由器:即配有IP地址, 又能进行路由控制; 
  • 节点:主机和路由器的统 称;  

 1. 协议头格式

4位版本号:指定IP协议的版本,对于IPv4来说,就是4;

关于IPv4和IPv6:

  • IPv4:4字节IP地址(32位,大约42亿个IP地址)随着网络的发展(智能家电、手机、电脑...),4字节IP面临着不够用的问题;
  • IPv6:16字节ip地址128位,可表示的主机数量2的128次方,数量比4位IP大的多,目前并没有被广泛使用(国内使用较多主要原因:IPv4和IPv6不兼容);

4位首部长度:0000,4位bit位可表示[0~15],单位也是4字节,可表示范围[0~60]字节;标准报头长度是20字节(不包含选项);

16位总长度:属于自描述字段,报头(含选项)+有效载荷的长度;

8位服务类型:3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)
4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本;

这四者相互冲突,只能选择一个,对于 ssh / telnet 这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要;

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

3位标志字段:第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁 止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后一个分片置为1, 其他是0. 类似于一个结束标记;

13位分片偏移: 是分片相对于原始IP报文开始处的偏移;其实就是在表示当前分片 在原报文中处在哪个位置;实际偏移的字节数是这个值 * 8 得到的.;因此, 除了最后一个报文之外, 其他报 文的长度必须是8的整数倍(否则报文就不连续了);13位 * 8本质是为了补位到16位;

第二行(16位标识、3位标志字段、13位分片偏移)涉及到数据分片:

背景: MTU的限制,MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制,限制最大为1500字节,最小为46字节;也就是说发送的每个数据包大小不能超过1500字节,超过了就需要分包发送;

 举例示例中就不再 * 8;

比如:这有一个要发送的数据包,大小是3000字节;

 受到MTU的限制,需要对数据包进行分包:

 分成三个包进行划分;接收方收到数据包后,需要进行装片:

如何知道标识(16位标识)的报文分片了?

  • 收到分片,更多分片是1,就证明分片了
  • 如果更多分片位(第三位)是0,看片偏移是否为0,(为0表示没有分片,不为0表示是分片的最后一片)

如何保证分片收全?

  • 3位标志和13位偏移可以确保收到开头(开头偏移是0);
  • 3位标志可和13位偏移以确保收到结尾(偏移不为0,标志位为0);
  • 按照 片偏移进行升序排序,然后进行计算(根据偏移量判断),确保中间是否收到;

如何正确组装?

  • 根据片偏移进行排序,然后去掉后续的报头,进行组装;

8位生存时间(Time To Live, TTL):数据报到达目的地的最大报文跳数,一般是64,每次经过一个路由, TTL -= 1, 一直减到0还没到达,那么就丢弃; 这个字段主要是用来防止出现路由循环;如下图的情况:

 8位协议:表示上层协议的类型,由发送方填充,接收方识别;如果是TCP协议,8位协议就填充为TCP,对方接收到报文,网络层解析报文,通过协议号区分,向上交付时是交给TCP还是UDP;

 16位头部校验和:使用CRC进行校验, 来鉴别头部是否损坏;

IP地址:访问服务时:./tcp_client 192.1.1.1 8888;IP被填充在报头的32位目的IP地址中,端口号被填充在TCP报头中的目的端口中;

2. 网段划分 

         知道了它的协议格式,那如何做到数据发送呢?虽然协议中有8位生存时间,但是依然没有路由选择的策略啊?比如:从一个路由器转发给另一个路由器该如何选择?选择的策略需要根据网段进行选择;在此之前需要了解网段的划分;

IP地址分为两个部分,网络号和主机号;

  • 网络号:用于标识网络的唯一性,标识特定的网络或子网,保证相互连接的两个网段具有不同的标识;
  • 主机号:表示网络中设备的唯一性,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号; 

         一个路由器通常至少需要连接到两个局域网;一个路由器集连两个网络,那就要有两个IP、两个网卡、两个不同的网络物理接口;

比如:在家里连网线,都会有一个路由器,路由器在安装时都会连接网线,这个网线来自于运营商提供的宽带网络线路(电信、移动、联通)通过线路可以连接到运营商的网络;联网之后在家就可以使用局域网上网了;使用手机或电脑发送消息时,就是先发给家中的路由器,然后路由器再将信息发送给运营商,由运营商替你发送请求;由此也可以知道,路由器也有构建子网的功能;这里的路由器就集连了两个局域网,一个家中的局域网,一个运行商的局域网;

路由器构建子网,同时也可以对局域网内的IP地址进行管理;

DHCP服务(应用层):能够自动的给子网内新增主机节点分配IP地址,避免了手动管理IP的不便,一般的路由器都带有DHCP功能,因此路由器也可以看做一个DHCP服务器;现在的路由器,主要工作是在网络层,但不仅仅只工作在网络层,比如:DHCP、http它都可以支持,http访问路由器ip,修改用户名密码等功能;

五种IP地址:

  •  A类 0.0.0.0到127.255.255.255
  • B类 128.0.0.0到191.255.255.255
  • C类 192.0.0.0到223.255.255.255
  • D类 224.0.0.0到239.255.255.255
  • E类 240.0.0.0到247.255.255.255

这种分配方法有很大的问题:
一个B类地址,理论上一个子网内能允许6万5千多个主机;A类地址的子网内的主机数更多;然而实际网络架设中,不会存在一个子网内有这么多的情况。大多数情况下很多的IP地址都被浪费掉了;

大多数组织都申请B类网络地址,导致B类地址很快就分配完了B类只能分配1万6千多个子网,
C类8位主机号,只能允许有256台主机,不满足需求;针对这种情况提出了新的划分方案,称为CIDR(ClasslessInterdomain Routing):

引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;子网掩码也是一个32位的正整数,由一串 "0”来结尾;将IP地址和子网掩码进行"按位与”操作,得到的结果就是网络号;网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;

子网掩码的作用:左边全为1,右边全为0;可以动态的调整划分;

示例:比如一个B类IP(通常是16位网络号,16位主机号),在实际情况下,16位主机号可能就只用了(低)8位;此时就可使用子网划分,划分出多个不同的子网,怎么划分子网?——通过子网掩码调整网络号;

 比如:这个B类的IP,主机号在实际使用中可能只用了后8位(红色部分);前8位(紫色部分)并没有使用,那么就可以使用子网掩码来动态调整,将没有使用的前8位主机号转化成网络号;

 子网掩码:255 . 255 . 255 . 0;

前16位标识的路由器下可以继续组建子网:

这些路由器前16位都是一样的,中间的8位作为网络号的一部分,用来区分这些路由器;
因此:可以划分给256个路由器;当然,这些路由器也都可以构建自己的子网;

 划分网络号有什么用?提高定位和查找主机的效率;

举个例子:

 比如:计算机学院的张三,捡到了一张学生证(李四丢失),张三想要把学生证还给李四,因此他就需要找到李四;怎么找?

在教学楼门口,来一个学生问一下学号,是否与学生证上的学号相同吗?这样等于是遍历全校所有的学生,这样效率大慢了,那怎么找呢?——根据学号,学号有院号和个人编号,根据学号的前几位找到李四所在的院系,张三通过自己院系的学生会主席,找到音乐学院的学生会主席(假设学生会主席知道学院所有的学生),然后学生会主席去通知李四,这样就把学生证交到了李四手中;

网络传输也是如此,只不过是把院系换成一个一个的子网;

 

3. 特殊的IP

  • 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;
  • 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;
  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1;

 4. 公网IP && 内网IP

  • 10.*,前8位是网络号,共16,777,216个地址
  • 172.16.到172.31.前12位是网络号,共1,048,576个地址
  • 192.168.*,前16位是网络号,共65,536个地址

包含在这些范围中的,都属于私有IP,其余的则称为全局IP(或公网IP); 通常情况下,我们手机电脑使用的都是私有IP(内网IP);

 家用路由器内使用的都是内网IP,通过上图可以发现,在不同的家用局域网中,存在相同的IP;主要原因是因为子网的私有IP不会出现在公网中,大大缓解了IP地址不足的问题;

比如:在家用路由器中,使用手机请求某音的短视频(公网),手机把发送请求发送给家用路由器,路由器识别到网络编号不属于自己的子网,就会把请求交给自己所在的子网路由器(运营商路由器),然后通过运营商路由器发送请求访问公网中的某音服务器;

        现在有新的问题,如何把响应报文从公网中返回回来?任何一个内网路由器,在转发报文的时候,都要将源IP,替换成路由器的WAN口IP;

举个例子:使用手机发送请求给家用路由器,家用路由器发送给运营商路由器时,就会将源IP(手机IP)替换成自己的(路由器的)WAN口IP,运营商路由器发送请求也是如此;这样在返回时,公网的服务器起码知道,要返回的下一级IP是哪个——这种计算就是NAT技术;

其实家用路由器发送请求时,也是将请求到一个更大的子网中,在学校使用校园网也是一样;手机发送请求,先发给学校的路由器(机房),然后机房再将请求发送给运营商路由器(更大的子网,上边可能还有),最终就可以请求到公网的服务器;

 拓展

运行商在网络中扮演什么样的角色?

 不仅仅我们是运营商的客户,互联网公司也是运营商的客户,也要有机房宽带;

家用路由器中拥有两套密码:

  • 局域网名、密码
  • 账号:手机号、密码:XXXX 

举个例子:比如家里的无线局域网,一般都会有一个关联的电话号,只要电话不欠费,就可以一直上网,电话号的话费(网费);手机号账户的密码一般只有运营商知道,发送数据时,会连带着手机号的账号一起发送给运营商;运营商记录着账户的费用,如果发现账户欠费,那就直接将报文丢弃
欠费时运营商可以拦截,如果访问的是非法网址(外网),运营商也可以拦截;

 而我们日常上网所使用的网络,也基本都是运营商组建的局域网;

        IP地址(IPv4)是一个4字节32位的正整数,那么一共只有 2的32次方个IP地址,大概是43亿左右;而TCP/IP,协议规定,每个主机都需要有一个IP地址,这意味着,一共只有43亿台主机能接入网络么?

        实际上,由于一些特殊的IP地址的存在(192.168.限定的内外IP),IP的实际数量远不足43亿;另外IP地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个IP地址;

CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率,减少了浪费,但是IP地址的绝对上限并没有增加),仍然不是很够用,这时候有三种方式来解决:

  • 动态分配IP地址:只给接入网络的设备分配IP地址,因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址不一定是相同的;
  • NAT技术:(允许子网中IP地址的重复)
  • IPv6:IPv6并不是IPv4的简单升级版,这是互不相干的两个协议,彼此并不兼容;IPv6用16字节128位来表示一个IP地址;但是目前IPv6还没有普及;

 关于NAT技术:

一个路由器可以配置两个IP地址,一个是WAN口IP(对外),一个是LAN口IP(对内)(子网IP);

路由器LAN口连接的主机,都从属于当前这个路由器的子网中;

        不同的路由器,子网IP一般都是一样的(通常都是192.168.1.1);子网内的主机IP地址不能重复。内网可以使用相同的IP;
        每一个家用路由器,其实又作为运营商路由器的子网中的一个节点。这样的运营商路由器可能会有很多级,最外层的运营商路由器的WAN口IP就是一个公网IP了;

        子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(替换成自己的WAN口IP),这样逐级替换,最终数据包中的IP地址成为一个公网IP。这种技术称为NAT(Network Address Translation,网络地址转换);
        如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网IP的服务器上、这样的服务器可以在阿里云/腾讯云上进行购买;

 使用命令查看路由表:route

示例:

  1. 路由表匹配:当数据包到达路由器时,路由器会查看路由表,尝试找到一个匹配的路由条目(通常是目的IP地址)。如果找到了匹配的路由条目,路由器会将数据包转发到指定的下一跳地址及其对应的发送接口。

  2. 缺省路由:如果路由器未能找到与目的IP地址匹配的条目(即目的地址不在任何已知的子网中),则路由器会使用缺省路由(通常是一个“0.0.0.0/0”条目)将数据包转发到指定的下一跳地址(通常是上级局域网)。缺省路由用于处理所有未处理的流量。

  3. 同一子网中的路由:路由表可以包含同级路由器的地址以及同一子网中的其他入口或出口。这便于局域网内设备之间的通信,也有助于确保流量能够根据最佳路径转发

怎么理解网络结构?

IP在划分时首先根据国家进行划分,全球国家组成一个巨大的广域网;

国内根据省份再次划分IP,组建以省份为单位的广域网;然后再到市级,地区...;

比如:郑州市的子网路由器的路由表中就有其他市区的路由信息(其他子网的入口),同样也有河南省省级局域网路由器(网关)的地址(自己所处子网的出口);


总结

        以上便是本文的全部内容,希望对你有所帮助,感谢阅读!

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

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

相关文章

YOLOv12 ——基于卷积神经网络的快速推理速度与注意力机制带来的增强性能结合

概述 实时目标检测对于许多实际应用来说已经变得至关重要,而Ultralytics公司开发的YOLO(You Only Look Once,只看一次)系列一直是最先进的模型系列,在速度和准确性之间提供了稳健的平衡。注意力机制的低效阻碍了它们在…

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题6)-网络部分解析-附详细代码

目录 附录1:拓扑图 附录2:地址规划表 1.SW1 2.SW2 3.SW3 4.SW4 5.VSU 6.SW7 7.R1 8.R2 9.R3 10.AC1 11.AC2 12.EG1 13.EG2 附录1:拓扑图 附录2:地址规划表

C#实现本地Deepseek模型及其他模型的对话

前言 1、C#实现本地AI聊天功能 WPFOllamaSharpe实现本地聊天功能,可以选择使用Deepseek 及其他模型。 2、此程序默认你已经安装好了Ollama。 在运行前需要线安装好Ollama,如何安装请自行搜索 Ollama下载地址: https://ollama.org.cn Ollama模型下载地址&#xf…

突破“第一崇拜“:五维心理重构之路

一、视频介绍 在这个崇尚"第一"的时代,我们如何找到自己的独特价值?本视频将带您踏上五维心理重构之旅,从诗意人生的角度探讨如何突破"圣人之下皆蝼蚁"的局限。我们将穿越人生的不同阶段,从青春的意气风发到…

SpringWeb

目录 一.SpringWeb 1.SpringWeb 概述 2.SpringWEB 特点 3.SpringWeb 运行流程 4.SpringWEB 组件 二.搭建SpringWeb 1.在pom.xml中导包 2.配置DispatcherServlet 3.开启SpringWEB注解 4.测试 三.接收请求 1.定义地址、请求方式 2.获取请求数据 1)使用r…

性能测试的方案编写与执行步骤

性能测试计划书 在测试过程中我们如果编写一份性能测试计划书,需要一下几个背景板块及要点 性能测试的流程: 确认需求(确认正确的需求) —>编写测试方案(准备怎么动手)测试环节—>(尽量与生成配置一…

[AI]从零开始的树莓派运行DeepSeek模型教程

一、前言 在前面的教程中,教了大家如何在windows中使用llama.cpp来运行DeepSeek模型。根据前面的教程中,我们也了解到了,我们只需要编译好llama.cpp就可以运行DeepSeek以及类似的LLM模型。那么本次教程就来教大家如何使用树莓派来运行大模型。…

03_pyqt5 + vlc 实现视频播放器

1.功能需求如图 按钮: 播放/暂停, 前进/后退, 视频上一个/下一个, 打开视频进度条: 视频进度条显示, 进度条拖拽, 音量控制按键控制: 1,2,3,4缩放画面大小, 2.方案选择 开发语言: python UI界面: pyqt5 qt_designed 设计ui布局 视频编码: python-vlc 方案说明: 视频解码可…

Linux——高级IO(select后续poll,epoll)

目录 一、poll函数 1.函数原型 2.参数说明 3.struct pollfd 结构体 4.返回值 5.使用步骤 6.与 select 的对比 7.适用场景 8.缺点 9.总结 二、epoll函数 1.核心思想 2.核心函数 1. epoll_create - 创建 epoll 实例 2. epoll_ctl - 管理 epoll 事件表 3. epoll_w…

基于 ‌MySQL 数据库‌对三级视图(用户视图、DBA视图、内部视图)的详细解释

基于 ‌MySQL 数据库‌对三级视图(用户视图、DBA视图、内部视图)的详细解释,结合理论与实际操作说明: 一、三级视图核心概念 数据库的三级视图是 ANSI/SPARC 体系结构的核心思想,MySQL 的实现逻辑如下: …

突破性能极限:DeepSeek开源FlashMLA解码内核技术解析

引言:大模型时代的推理加速革命 在生成式AI大行其道的今天,如何提升大语言模型的推理效率已成为行业焦点。DeepSeek团队最新开源的FlashMLA项目凭借其惊人的性能表现引发关注——在H800 GPU上实现580 TFLOPS计算性能,这正是大模型推理优化的…

ROS ur10机械臂添加140夹爪全流程记录

ROS ur10机械臂添加140夹爪 系统版本:Ubuntu20.04 Ros版本:noetic Moveit版本:moveit-noetic 参考博客: ur3robotiq ft sensorrobotiq 2f 140配置rviz仿真环境_有末端力传感器的仿真环境-CSDN博客 UR5机械臂仿真实例&#xf…

Redis速成(1)VMware虚拟机安装Redis+Session验证登录注册+MybatisPlus

课程:黑马程序员Redis入门到实战教程,深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目_哔哩哔哩_bilibili Mybatis与MybatisPlus: 参考springboot,需要额外写mapper.class,在方法上Select等 在ssm中,…

thinkphp下的Job队列处理

需要think-queue扩展,没有的请composer安装一下 "require": {"php": ">7.2.5","topthink/framework": "^6.1","topthink/think-orm": "^2.0","topthink/think-multi-app": &qu…

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(五)

2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(五) 第一部分:网络平台搭建与设备安全防护任务书第二部分:网络安全事件响应、数字取证调查、应用程序安全任务书任务 1:应急响应&…

JSON Schema 入门指南:如何定义和验证 JSON 数据结构

文章目录 一、引言二、什么是 JSON Schema?三、JSON Schema 的基本结构3.1 基本关键字3.2 对象属性3.3 数组元素3.4 字符串约束3.5 数值约束 四、示例:定义一个简单的 JSON Schema五、使用 JSON Schema 进行验证六、实战效果6.1 如何使用 七、总结 一、引…

VMware虚拟机Mac版安装Win10系统

介绍 Windows 10是由美国微软公司开发的应用于计算机和平板电脑的操作系统,于2015年7月29日发布正式版。系统有生物识别技术、Cortana搜索功能、平板模式、桌面应用、多桌面、开始菜单进化、任务切换器、任务栏的微调、贴靠辅助、通知中心、命令提示符窗口升级、文…

计算机网络:ICMP协议(Internet控制消息协议)介绍

目录 一、简介 二、为什么要有ICMP协议? 三、ICMP协议报文格式 四、ICMP报文的类型 4.1 差错报文 4.2 查询报文 五、ICMP报文的实际案例 5.1 Ping命令 5.2 Traceroute命令 总结 今天和大家聊聊ICMP协议相关的知识,感兴趣的可以一起了解一下! 一、简介 ICMP(Inte…

python读取sqlite温度数据,并画出折线图

需求: 在Windows下请用python画出折线图,x轴是时间,y轴是温度temperature 和体感温度feels_like_temperature 。可以选择县市近1小时,近1天,近1个月的。sqlite文件weather_data.db当前目录下,建表结构如下…

window下kafka安装

kafka下载 下载好,直接解压即可 默认是带有zookeeper(注册中心) 需要先启动zookeeper zookeeper配置 先配置下zookeeper 这个data文件夹是自定建的 随意建在哪里 注意 这里斜杠用和linux一样 启动zookeeper 进入bin/windows目录 启动zookeeper zookeeper-server-start.ba…