当前位置: 首页 > news >正文

IP 协议

1.IP协议报头

如下图:

版本号 代表的是当前的IP协议的版本,此处的版本一共有两个取值:v4和v6.本文着重针对v4版本进行解析.

首部长度 代表的是整个IP报头的长度,这个报头长度是可变长的,可变长的原因在于报头中的选项,这个属性是一个可有可无的属性,会改变报头长度,它的单位是32bit,比如里面存放的是1,那么整个IP报头的长度就是4个字节(32bit).

服务类型 共占8位,但是实际上只有4位是有效的,其中这4位表示当前IP协议的4种工作模式:最小延时、最大吞吐量、最高可靠性、最小成本.实际开发中可能会根据需要来选择当前的IP工作模式.

总长度 代表的是整个IP数据报的总长度(报头+载荷)

同时也说明IP数据报最多只能携载64KB的数据.但是IP协议是支持对包的拆分和组装的.

比如我要传一个100KB的数据,当传输到网络层时,网络层就会将这100KB的数据进行拆分(假设拆分成64KB和32KB),因为是拆分成了两个数据报,所以到了数据链路层就会打包成两个数据帧,以此类推......

等到接收方的数据链路层将这两个数据帧进行分用,得到两个IP数据报,再由网络层针对这两个IP数据报进行解析,将载荷合并成一个,再向后面传输.....

这一行属性都是针对数据 拆包/组包 而提供的.

标识:同一份数据的不同包里面的表示是相同的.

标志:结束标志.

片偏移:标识了拆分后每个包的顺序

生存时间 表示一个数据报在网络上传输的最大时间,这里的时间并不是以"秒"、"毫秒"这样的单位来计量的,而是以"次数"来计量.

比如有一个TTL初始值为32,此时这个数据报每经过一个路由器转发,TTL的值就会-1,当TTL的值减到0时,就会认为这份数据传输不到了,可以丢弃了.

协议 代表的是当前数据报中传输层的协议(UDP/TCP....)

首部检验和 和UDP、TCP的相同,但是此处只检验报头,因为载荷部分传输层会进行检验.

2.IP地址

这两个部分分别表示发送方的IP地址和接收方的IP地址.

在报文中是以32位的整数方式存在的,而我们日常见到的IP地址则是一串数字,比如:127.0.0.1

他们之间的转换是用点分十进制的方式转换的,也就是将32位分成4分,每一份为8位,转化为十进制0~255,中间用"."来分隔开,就得到了我们现在看到的IP地址.

这32位整数最多可以有42亿9千万中不同的变化,但是我们期望的是全世界里每台设备的IP地址都不相同,但是在生活中需要的IP地址量是非常多的,比如:智能手机、路由器、服务器、物联网等等.所以42亿9千万这个数字是远远不够的.

解决这个问题,有以下两种方法:

  1. 进行动态分配IP地址,此时虽然可以省下也配IP地址,但是总数没有增加.

  1. NAT网络地址转换.本质上是将一个地址同时给多台设备使用.可以大大提高了IP地址的利用率,在区分时也可以用端口号来区分.

在NAT背景下,IP地址可以分为两个大类:

内网IP(私有IP):以10.开头的、以172.16.~172.31.开头的、以192.168.开头的.

外网IP(共有IP):除了内网IP之外的IP地址.

内网IP是可以重复出现的,外网IP是不可以重复出现的.

如果某个私网里面的设备想访问公网里面的设备,就需要对应的NAT(路由器),将IP地址进行映射,从而完成网络访问.

公网的设备无法直接访问私网的设备,不同局域网的私网设备也无法直接互相访问.

主机与服务器之间要进行连接,则如下图:

因此,服务器能拿到的只是路由器的IP,不能拿到我电脑的内网IP,如果我的电脑不主动和服务器联系,服务器也就不知道我的端口,从而无法主动的找到我.

NAT机制虽然能够有效的解决IP不够用的问题,但是带来的副作用就是:网络环境变得更加复杂了.

而IPv6可以根本上的解决IP不够用的问题.

IPv6使用16个字节表示IP地址,也就是42亿*42亿*42亿*42亿,这个数字完全可以分配地球上的每一台设备.

但是当前实际上仍然是以 NAT+IPv4+动态分配 的方式来进行网络组建的,真正使用IPv6的地方非常少,所以不展开讨论了.

3.地址管理

一个IP地址,可以分成两个部分,一个是网络号,一个是主机号.

网络号:标识网段,保证连接的两个网段具有不同的标识.

主机号:标识主机,同一网段内,主机之间的网络号是相同的,但是主机号必须是不同的.

假如一个IP地址是:192.168.0.10

此时网络号一般为192.168.0

主机号一般为:10

那么这个网络号和主机号的分界线是怎么定的呢?

是通过子网掩码来设定的,如下图:

子网掩码也可以以一个32位的整数来表示,上图中的子网掩码换成32位整数就为:

1111 1111 1111 1111 1111 1111 0000 0000

子网掩码中,左侧都是1,右侧都是0.

其中所有的"1"位都是网络号,所有的"0"位都是主机号.

对于家用设备来说,子网掩码最常见的就是255.255.255.0了

4.一些特殊的IP地址

  1. 将IP地址中的主机地址全部设为0,就成了网络号.

  1. 将IP地址中的主机地址全部设为1,就成了广播地址,比如:192.168.0.255,使用UDP往这个地址上发送数据报,整个局域网的所有设备都能收到.

  1. 127.*的IP地址用于本机环回测试,通常为127.0.0.1.

  1. 若主机号为1(比如:192.168.0.1),通常是"网关IP"(不绝对),也就是网络的出入口.

http://www.lryc.cn/news/15959.html

相关文章:

  • 好用的SQL工具盘点:从学习到工作总有一款适合你
  • Memcache介绍
  • PTA:C课程设计(1)
  • 第二十篇 ResNet——模型讲解
  • LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
  • Vue3通透教程【一】Vue3现状—必然趋势?
  • 打破数据孤岛,Apache Doris 助力纵腾集团快速构建流批一体数仓架构|最佳实践
  • 什么是真正的骨传导耳机,骨传导耳机原理
  • [MySQL]基本数据类型及表的基本操作
  • 华为OD机试 - 好朋友(Python) | 机试题+算法思路+考点+代码解析 【2023】
  • SAP ABAP用程序给用户增加SAP_ALL权限
  • stm32f407探索者开发板(二十)——独立看门狗实验
  • C语言进阶(五)—— 多维数组
  • 06_MySQL多表查询
  • 程序员赚钱指南,兼职社区招募
  • Qt-FFmpeg开发-实现录屏功能(10)
  • JavaEE简单示例——动态SQL元素<where>
  • 本地事务详解
  • e2e测试-Cypress 使用
  • 20230222 【梳理】肿瘤检测 预处理+ML+DL
  • 经典文献阅读之--MSC-VO(曼哈顿和结构约束VIO)
  • 华为OD机试真题Python实现【字母计数】真题+解题思路+代码(20222023
  • 在中国市场,假如Teradata像Nutanix那样“退出操作”,谁来“接盘”呢?
  • 使用vs2022编译yolov5+tensorRT+cuda+cudnn代码进行混合编译
  • 记一次:request请求总结
  • 2023年全国最新会计专业技术资格精选真题及答案2
  • 每日英语-20230221
  • 学习系统编程No.4【环境变量】
  • 通过Docker部署rancher
  • 【二叉树】