IP 协议

IP 协议

  • .
  • IP协议格式
  • 四位版本号
  • 四位首部长度
  • 8位服务类型
  • 16位总长度
  • 16位标识符,3位标志位,13位片偏移
  • 8位生存时间TTL
  • 8位协议
  • 16位首部校验和
  • 32位源地址 32位目的地址
  • IP地址的组成
  • 特殊的IP地址

.

IP协议格式

四位版本号

用来表示IP协议的版本,现有的IP协议只有两个版本,IPv4,IPv6,其他版本只在实验室中存在,没有大规模商用

四位首部长度

设定和TCP一样,IP报头是可变长的,IP报头又是带有选项(可以有,可以没有)的,这里的单位也是4个字节,也就是最大有16*4=64个字节的长度

8位服务类型

真正只有四位才有效果,类似于模式切换:

最小延时,传输一个数据报的时间尽量短

最大吞吐量,一定时间内传输的数据尽量多

最高可靠性,在传输过程中最不容易丢包

最小成本,在传输过程中消耗的硬件资源最低

四种形态互斥,只能切换一种情况

16位总长度

IP报头+载荷的长度

总长度-IP报头的长度=载荷长度=TCP报文的总长度

TCP报文总长度-TCP报头长度=TCP载荷长度

这里的16总长度,确实也涉及到64kb的问题

但是IP协议,自身是支持"拆包组包"机制

这里的64kb只是约束了一个ip数据报,如果我们要携带一个比较长的数据报的时候,IP协议会自动的把一个数据报拆分为多个数据报,接收方在进行分用的时候,也会把多个数据报合并成一个数据报

16位标识符,3位标志位,13位片偏移

这三个标志描述了整个IP数据报拆包租包的过程

当IP数据报需要携带比较长的TCP数据的时候就在IP协议这一层触发拆包操作

把一个大包拆分成多个小包

多个小的IP数据报都会携带有IP报头,载荷是TCP数据报的几个部分

16位标识:拆出的这几个包,16位标识符是相同的

13位片偏移:不同的,前一个包,片偏移更小,后一个更大,通过片偏移就可以区分拆分包的顺序

3位标志位:其中有一位是不用的,还有一位表示是否允许拆包,显然上面这里是1,剩下一位表示"结束标记"标识当前的包是否是最后一个,这一位为0就表示当前是最后一个包了

8位生存时间TTL

单位是次

初始情况下TTL会有个数值(32/64/128)

每次经过一个路由器转发,TTL就会-1,减到0了就会被丢弃

正常来说,TTL足以支持数据到达网络的任意一个位置,如果确实出现0了,基本可以认为目标IP不可到达

8位协议

描述了传输层是使用了哪种协议

16位首部校验和

校验数据是否正确的机制,这里只需要校验首部即可,因为载荷是TCP和UDP数据报,而它们自己可以校验自己

32位源地址 32位目的地址

IP协议中最重要的部分,数据报从哪来,到哪去??

网络上有很多主机,需要有办法去描述主机的具体位置

IP地址就是解决这个问题的关键,所谓的IP地址,其实就是一个32位的整数(4字节)

点分十进制:由于按照32位的方式表示,会使得这个数字变得很大,很难理解记忆,一般都会把IP地址,按照点分十进制的方式来表示(使用三个.把32位分成四个部分,每个部分就是8位,也就是一个字节,每个字节的范围是0-255(不带符合))

比如:192.168.22.56

但是,32位表示的数据是有限的,差不多是42亿九千万,既然是地址,原则上是不能重复的,每个设备的IP得不相同,但是实际上是世界上能上网的设备,早就超过了这个数值,那么问题来了,IP地址不够用了该怎么办呢?

1.动态分配IP(DHCP)

设备不会一直需要上网,需要上网,就分配IP,不需要上网就先不分配IP

这个方案,只能缓解,不能根治

2.NAT机制(网络地址转换)(理解网络结构的关键要点)

把IP地址分为两大类:

1].内网IP;不同的局域网内的设备,内网IP可以重复,同一个局域网内的设备,内网IP不能重复

内网IP有三类:

10.*

172.16.*-172.31. *

192.168. *

2].外网IP:外网IP不能重复

1)局域网内部的设备之间的通信,是可以的(局域网内部的内网IP都是唯一的)

2)A局域网中的设备,想和B局域网中的设备进行通信,和可能会有IP冲突的情况,因此,这里的规则是禁止不同的局域网之间进行通信.想要通信,就需要有一个带有外网IP的设备进行中转

3)局域网内部的设备访问带有外网IP的设备

我们平时使用的电脑,平板,手机,都是在局域网内部使用的,它们会有一个内网IP

还有一类设备,是"服务器",服务器可以有外网IP

路由器配有自己的外网IP,用来与服务器的外网IP进行交互

当客户端给服务器发送请求的过程中,途径路由器的时候,就会触发NAT机制,路由器在转发数据的时候,就会使用自己的外网IP替换掉当前客户端发来的IP数据报中的源IP,当这个数据报到达服务器之后,服务器不知道这个数据报是来自原本的源IP的,只知道来源于路由器这里的外网IP地址

NAT机制下,意义在于说,一个外网IP代表的不一定是一个设备了,而是很多设备

那么服务器怎么把响应返回给客户端呢

服务器在返回IP数据报的时候,会先到达路由器,

对于NAT设备(路由器)来说,会在触发NAT机制的时候,维护一个映射表(抓换表),里面包含了替换前后的源IP,以及源端口

在返回响应的途中经过路由器之后,就会通过查表,把IP给替换回来

NAT的缺点很明显:

(1).效率不高

(2).非常繁琐

(3).不方便直接访问局域网内的设备

但是NAT是一个纯软件实现的方案,这个优点足以使得NAT一统天下

3.IPv6,从根本上解决IP不够用的问题

IPv4是4个字节,32位表示IP地址

IPv6是16个字节,128位表示IP地址

其实IPv6的诞生时间和NAT差不多,为什么NAT能成功,而IPv6发展起来举步维艰呢?

这是因为IPv4和IPv6不兼容,想要升级IPv6,就需要更换路由器设备=>花钱

相比之下,NAT方案,只需要路由器开发商开发出新版本的软件(路由器固件),升级软件,即可直接支持,成本非常低

IP地址的组成

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

网络号:标识网段(局域网),保证相互连接的两个网段具有不同的标识;

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

IP地址,可以自动分配(家用设备,网络环境简单)

也可以手动分配(企业设备,网络环境复杂,需要网管来配置)

一个IP地址,哪些部分是网络号,哪些部分是主机号呢?

通过子网掩码来识别

子网掩码和IP地址一样,也是四字节,32位的整数

左侧必须是连续的1,右侧必须是连续的0

1的范围就对应了网络号的范围,0的范围则是对应了主机号的范围

一般家用路由器上的子网掩码是255.255.255.0

除此之外,上古时期,还有一种方案,

特殊的IP地址

此处广播,在传输层只能使用UDP,不能使用TCP,因为TCP不能针对广播地址进行三次握手,建立连接的操作

相关推荐
三金121386 分钟前
SpringIoC容器的初识
网络·网络协议·rpc
韩楚风8 分钟前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学12 分钟前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Pythonliu734 分钟前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
我是哈哈hh1 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
郭二哈1 小时前
C++——模板进阶、继承
java·服务器·c++
狼头长啸李树身1 小时前
眼儿媚·秋雨绵绵窗暗暗
大数据·网络·服务发现·媒体
挥剑决浮云 -1 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
立秋67892 小时前
Python的defaultdict详解
服务器·windows·python
SizeTheMoment2 小时前
初识HTTP协议
网络·网络协议·http