网络编程 - IP协议

news2024/9/21 19:09:31

目录

一,IP协议格式

1.1 拆包组包

1.2 8位生存空间

二,地址管理

2.1 动态分配 IP

2.2 NAT 机制(网络地址转换)

2.3 IPv6

2.4 网段划分

三,路由选择


一,IP协议格式

  • 4位版本:IPv4
  • 4位首部长度:代表IP报头的长度,报头最短是20个字节(即没有选项),最长是60个字节(即选项拉满),虽然只有 4 bit ,但是此处的单位是4个字节,所以可以表示60个字节的长度。
  • 8位服务类型:3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。
  • 16位总长度:IP数据包的长度(0~64kb),虽然IP协议也存在64kb这样的大小限制,但是IP协议自身支持 "拆包组包" 这样的功能。
  • 8位协议:描述该IP协议的载荷部分是一个UDP协议,还是一个TCP协议,要知道按照那种协议的方式来拆分。
  • 16位首部校验和:这个校验和只是校验 IP首部,不管 IP数据的载荷部分,因为UDP/TCP协议自身有校验和
  • 32位源IP地址/32位目的IP地址:本质上是一个32位整数,为了方便理解,写作点分十进制,比如:127.0.0.1

1.1 拆包组包

通过以下三个属性,来支持 IP 协议的拆包组包:

  •  16位标识:如果16位标识相同,就说明它们是由一个同一个大包拆分成的小包
  •  3位标志:有一位表示是否可以拆包,有一位表示是否是最后一个(即组包是否结束),还有一位没什么用
  • 13位片偏移:由该部分的大小表示组包时的前后顺序

1.2 8位生存空间

描述这个IP数据包,在网络上还能存活多久,TTL的单位是次数,IP数据包被构造出来的时候,会给TTL赋一个初始值(32,64....),数据在转发过程中,每转发一次,TTL就 - 1,如果这个数据包转发了TTL次之后,还没有到达对方,就会被丢弃。

虽然可能会出现TTL耗尽还没有到达目的设备的情况,但是该机制还是很有用的,假设一个数据包的目的IP写错了,实际上不存在这个IP,那么这个数据包不可能到达目标,也不可能允许在网络上一直存在。

这有点类似于"六度空间理论" —— 理论上你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过6个中间人你就能够认识任何一个陌生人。这在现实中很难做到,因为不是每个朋友都能全力以赴的执行,但是在计算机中是可以的,网络环境中包含很多的路由器,每一个路由器都会转发给相邻的设备,所以出现TTL耗尽的概率很小。

二,地址管理

IP地址,是一个32位的整数,也就是说最多就只有4294967296个地址,而到目前为止,能够上网的设备远远超过了这个数字,如何解决 IP地址不够用的问题呢?

2.1 动态分配 IP

就是如果你这个设备不上网,就把分配给你的IP地址分配给别人去使用,这个方案提高了 IP 地址的利用率,但是没有增加 IP 地址的数目,也就是治标不治本。(虽然是一个过渡方案,但目前仍然广泛使用)

2.2 NAT 机制(网络地址转换)

将IP地址分成两个大类:

  1. 内网IP(局域网IP)如果一个IP地址,是 10.* 或者 172.16.* - 172.31.* 或者 192.168.*,那么就称为内网 IP,在同一个局域网内部,内网IP是不能重复的;在不同的局域网中,内网IP是可以重复的。
  2. 外网IP(广域网IP)除了内网IP,剩下的IP就是外网IP,外网IP必须唯一

注:NAT机制的本质上就是让一个IP地址,代表一批设备。

举个例子:比如有1~100的编号,要用这些编号表示更多的人。

方案一:一个编号表示一个人,那么只能表示100个人。

方案二:1~10这几个编号,每一个都表示一个班,每一个班都能有11~100这些编号的人。那么就可以表示900个人,NAT机制就类似于这个方案。

 NAT机制是如何工作的?

 但是这里还有一个问题,如果有多台设备同时访问同一个服务器,此时返回的响应,路由器设备要返回给哪个主机?此时我们就会使用端口号来区分。

 那如果两个设备的端口号相同,路由器会主动把相同的端口,替换成不同的端口,路由器内部会记录它们的映射关系。

当前的网络环境,就是使用 NAT + 动态分配 的方式来解决 IP地址不够用的问题。NAT机制最大的优势,就是他是一个 "纯软件的方案"(只要软件一升级就可以使用),也正因为这个机制,局域网内部的设备能主动访问外网的设备,但是外网的设备无法访问内网的设备。

2.3 IPv6

IPv6使用16个字节来表示 IP 地址,也就是 2^128,这么大的数字足以给地球上的每一粒沙子都分配一个IP地址,而沙子是制造计算机的原材料,也就是说除非有一天我们走出地球,否则IP地址是不可能用完的。

2.4 网段划分

一个IP地址会分成两个部分,网络号(标识一个局域网) + 主机号(标识了局域网中的一个设备),同一个局域网中的设备,网络号必须相同,主机号可以不同,两个相邻的局域网(通过一个路由器连接),网络号不能相同。

一个IP地址,哪里是网络号,哪里是主机号是由子网掩码确定的,子网掩码也是一个32位的整数,但是它的左侧二进制位全是1,右侧全是0。而被标记成1的部分对应的IP地址就是网络号。比如:

如果一个IP地址,主机号全1,表示这个IP是一个"广播地址",不能给一个具体主机分配;如果一个IP地址,主机号全0,当前这个IP表示网络号,代表一个局域网,不能给一个具体主机分配;如果一个IP是 127 开头的,此时这个IP就是一个环回IP,最常用的127.0.0.1,表示设备自身。主要用来进行一些测试。

三,路由选择

路由选择就是描述了IP协议的转发过程,在进行IP数据报转发的时候,每一个路由器只能一些局部信息(它是和谁相连的)这就意味着IP数据在转发过程中,是一个"探索式"的过程,只能给出一个局部最优解。

一个网络层的数据报,每次到达一个路由器,就会进行"问路",每一个路由器内部都有一个数据结构叫"路由表 ",根据目的IP查询路由表,如果查到,就按照路由表给定的方向转发,如果没查到,路由表中有一个默认的表项,按照默认的表项转发即可。

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

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

相关文章

数据结构和算法(15):排序

快速排序 分治 快速排序与归并排序的分治之间的不同: 归并排序的计算量主要消耗于有序子向量的归并操作,而子向量的划分却几乎不费时间; 快速排序恰好相反,它可以在O(1)时间内,由子问题的解直接得到原问题的解&#…

rust 创建多线程web server

创建一个 http server,处理 http 请求。 创建一个单线程的 web 服务 web server 中主要的两个协议是 http 和 tcp。tcp 是底层协议,http 是构建在 tcp 之上的。 通过std::net库创建一个 tcp 连接的监听对象,监听地址为127.0.0.1:8080. us…

轻松合并多个TXT文本,实现一键文件整理!

亲爱的读者们,您是否曾经需要将多个TXT文本文件合并成一个文件,却苦于无从下手?现在,我们向您介绍一个全新的TXT文本合并工具,让您轻松实现一键文件整理! 首先,在首助编辑高手的主页面板块栏里…

数据库分库分表的原则

目录 1、数据库分库分表是什么 2、为什么要对数据库分库分表 3、何时选择分库分表 4、⭐分库分表遵循的原则 5、分库分表的方式 6、数据存放在表和库中的规则(算法) 7、分库分表的架构模式 8、分库分表的问题 小结 1、数据库分库分表是什么 数…

嵌入式学习笔记(64)指针带来的一些符号的理解

我们写的代码是给编译器看的,代码要想达到你想象的结果,就必需要编译器对你的代码的理解和你自己对代码的理解一样。编译器理解代码就是理解的符号,所以我们要正确理解C语言中的符号,才能像编译器一样思考程序、理解代码。 3.2.1…

如何入门学习黑客技术?如何选择编程语言?如何选择适合黑客的操作系统?

‘ 一 ’ 了解黑客技术的基础知识 学习黑客技术需要对网络安全和计算机系统有一定的了解。可以通过参加安全培训班、阅读专业书籍和学术论文、浏览网络安全博客和论坛等方式获取基础知识。涉及的内容包括网络协议、操作系统原理、计算机网络和编程等。 如果你对网络安全入门…

C语言 每日一题 PTA 10.28 day6

1.求奇数分之一序列前N项和 本题要求编写程序,计算序列 1 1 / 3 1 / 5 ... 的前N项之和。 输入格式 : 输入在一行中给出一个正整数N。 输出格式 : 在一行中按照“sum S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围…

基于 Python 的豆瓣电影分析、可视化系统,附源码

文章目录 1 简介2 技术栈具体实现1.设计豆瓣电影自动化爬虫程序,自动获取电影数据2.对爬取到的数据进行清洗和预处理,包括多维度数据字段清洗和扩充3.将清洗好的数据存储到MySQL数据库中 4 具体效果图5 推荐阅读 1 简介 基于Python flask 的豆瓣电影分析…

搭建产品使用说明书,方法很简单,只要这个工具

产品使用说明书,它应该既包含产品外观及内容的客观介绍,又包括对业务操作流程的详细讲解。例如:公司介绍、产品背景、使用场景、产品功能、特色、亮点、内容逻辑 ...... 使用工具搭建 当下业内很多人士都会通过类似于HelpLook这样的工具来搭…

Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】

一、创建 VUE 项目 npm create vuelatest二、安装使用 ant-design-vue 安装脚手架工具 $ npm install -g vue/cli # OR $ yarn global add vue/cli使用组件 # 安装 $ npm i --save ant-design-vue4.x全局完整注册 import { createApp } from vue; import Antd from ant-de…

CANOE 仿真+测试

仿真测试 CANoe的自动化测试系统简介Canoe TFS常用函数测试判别函数测试架构函数测试报告函数检测函数 创建自动化测试工程其他常用函数 CANoe的自动化测试系统简介 基于CANoe的自动化测试系统架构,根据ECU的测试环境和测试规范,搭建基于CANoe的测试系统…

深入了解 Elasticsearch 8.1 中的 Script 使用

一、什么是 Elasticsearch Script? Elasticsearch 中的 Script 是一种灵活的方式,允许用户在查询、聚合和更新文档时执行自定义的脚本。这些脚本可以用来动态计算字段值、修改查询行为、执行复杂的条件逻辑等等。 二、支持的脚本语言有哪些 支持多种脚本…

用已安装好的系统级别PsychoPy软件配置Python虚拟环境

原创内容,仅供参考,欢迎大家批评指正! 本人在使用PsychoPy软件开发实验系统的时候遇到一个问题:我已经在win10系统安装了PsychoPy软件,同时基于友好的图形化界面开发了大部分系统功能,但我需要在我anaconda…

FreeRTOS深入教程(任务创建的深入和任务调度机制分析)

文章目录 前言一、深入理解任务的创建二、任务的调度机制1.FreeRTOS中任务调度的策略2.FreeRTOS任务调度策略实现的核心3.FreeRTOS内部链表源码解析4.如何通过就绪链表管理任务的执行顺序 三、一个任务能够运行多久1.高优先级任务可抢占低优先级任务一直运行2.相同优先级的任务…

深入浅出排序算法之基数排序

目录 1. 前言 1.1 什么是基数排序⭐⭐⭐ 1.2 执行流程⭐⭐⭐⭐⭐ 2. 代码实现⭐⭐⭐ 3. 性能分析⭐⭐ 3.1 时间复杂度 3.2 空间复杂度 1. 前言 一个算法,只有理解算法的思路才是真正地认识该算法,不能单纯记住某个算法的实现代码! 1.…

黑盒测试、白盒测试详解

前言 对于很多刚开始学习软件测试的小伙伴来说,如果能尽早将黑盒、白盒测试弄明白,掌握两种测试的结论和基本原理,将对自己后期的学习有较好的帮助。今天,我们就来聊聊黑盒、白盒测试的相关话题。 同时,我也为大家准备…

SparkSQL综合案例-省份维度的销售情况统计分析

一、项目背景 二、项目需求 (1)需求 ①各省销售指标,每个省份的销售额统计 ②TOP3销售省份中,有多少家店铺日均销售额1000 ③TOP3省份中,各个省份的平均单价 ④TOP3省份中,各个省份的支付类型比例 &#x…

基于jquery+html开发的json格式校验工具

json简介 JSON是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族…

打破信息孤岛,如何从API、数据中台突围

“烟囱”林立,零售企业“数据孤岛”现象突出 所谓数据孤岛,是指零售企业不同组织机构之间、不同部门之间或不同软件之间的数据无法连接互动,数据信息不能共享,设计、管理、生产的数据不能相互交流,数据出现脱节的现象…

tomcat必要的配置

tomcat要配置两个,不然访问不了localhost:8080 名:CATALINA_HOME 值:D:\software\computer_software\Tomcat\tomcat8.5.66