目录
IP协议报头
4位版本号
4位首部长度
8位服务类型(TOS)
16位总长度
IP拆包
16位标识、3位标志、13位片偏移编辑
8位生存时间(TTL)
8位协议
16位首部校验和
网络地址管理
32位源ip&32位目的ip
方案一:动态分配ip地址
方案2:NAT网络地址转换(使用一个ip代表一批设备)
方案3:使用ipv6,从根本上解决IP不够用的问题
网络号&主机号
一个两个不同的局域网之间的关系(图解)
子网掩码
几个特殊的IP
回环IP:
广播地址:主机地址全为1的IP:(192.168.0.255)
主机地址为十进制1的IP(网关IP)
主机地址为0的IP
路由地址选择
IP协议其实是工作在网络层的协议。
关于什么是网络层,已经在这一篇文章当中提到了。
初识网络:IP、端口、网络协议、TCP-IP五层模型_革凡成圣211的博客-CSDN博客TCP/IP五层协议详解https://blog.csdn.net/weixin_56738054/article/details/128666970?spm=1001.2014.3001.5501 它主要负责地址管理和路由器选择。
下面,来一张图看看ip报文,下面将说几个常见的属性
版本号这里的取值只有两个,一个是4另外一个是6,分别代表ipv4和ipv6。
本文章目前讨论的就是ipv4。
描述了ip报头有多长。IP报头和TCP报头一样,也是包含了选项部分的长度,选项的长度是变化的,最短可以为0,也就是可有可无的。
4位,对应的二进制最大可以表示的字节数为2^4-1=16-1=15。
但是由于首部长度的单位也是"4字节"。当首部长度位15的时候,可以经过下面的运算得出IP报头长度和选项长度。
同时,由于首部长度的单位是"4字节",那么也就是意味着,ip报头的大小最大为15*4=60(字节)
这里说是8位,其实实际上只有4位,对应4种形态。
这4位当中,只有1位可以表示1,其他都是0。
这4种形态分别是:
最小延时、最大吞吐量、最高可靠性、最小成本。
实际开发当中就可以根据需要,来切换IP的模式,达到最优的效果。
描述了一个IP数据包的长度。一个IP数据包,包含了两部分:
IP报头+IP载荷。这两个部分合起来,就是一个IP报文的总的长度。
16位,那么整个ip报头最大的长度为2^16-1=65535(字节)
所以:IP载荷部分长度=16位总长度-4位首部长度。
IP报头当中有一个属性——16位首部长度。
16位,最大表示2^16-1=65535(字节),换算成KB,就是64KB。
这难道代表,IP数据报的最大长度就是64KB吗?
并不是的,当一个IP报文的总长度如果达到了64KB之后,就会在网络层进行拆包,把一
个数据拆成多个IP数据报,然后发送给数据链路层。各自以数据帧的方式进行传送
在接收方接收这个IP报文的时候,会再次把这两个IP数据报进行解析,然后再合并成一个IP报文传送给接收方传输层。
这就好像一个电梯的载重是9吨,如果一个货物重10吨,那么就只能分成多次进行运送了。
然后运送到目标楼层之后,在进行拼装组合。
和UDP不一样的是,UDP虽然也有大小限制(64KB),但是一旦超过了这个限制,只能由
程序员手动拆包。并不像IP协议一样可以自动拆包。
一个数据报在网络上能够传输的最大时间。这个时间的单位不是"秒",而是次数
当初始化之后,在链路上面进行传输的时候,每经过一个路由器,TTL的值就-1。
如果TTL的值减为0之后,还没有到达目标,此时就认为这个数据永远也到达不了了,于是这个IP报文就会被丢弃。
8位协议,指明了此处的IP协议的载荷当中的传输层协议是什么,例如指明了是TCP还是UDP的协议。
仅仅根据首部的特点计算出它的校验和,并不需要根据整个ip报头再计算一次。
原因:IP载荷已部分已经有对应的协议校验过了,无需再次校验。
如果校验和不一致,直接丢弃
IP地址功能
IP有两个功能,一个是网络地址管理,另外一个是路由器选择。
下面,首先谈一下IP是怎样进行网络地址管理的
此处看到的IP地址是一个32位的整数。但是,我们平时看到的ip地址好像就是a.b.c.d这样的格式的数字。
我们一般期待,每一个网络设备的ip地址都不一样。32位,也就是代表了42亿9千万个数字。
但是,如果放在整个世界的网络设备当中,42亿9kw这个数字远远不够用
为了解决这个问题,于是就有了如下的解决方案:
此时,哪些设备需要网络,哪一些设备就连上网络。但是,这是一个治标不治本的方式。无法彻底解决ip地址不够用的问题。
在NAT背景下,就把IP地址分为两个大类:
大类1:内网IP(私有ip)
什么样的IP,可以代表内网IP呢?
有以下这三种IP:
①10.*开头的IP地址;
②172.16.*~172.31.*;
③192.168.*
只要IP地址属于这三类当中的某一类,那么就一定属于私网IP
大类2:外网IP(公网IP)
除了大类1范围以外的IP地址,都属于公网IP
NAT要求:公网IP必须是唯一的,不可以重复。
私网IP可以在不同的局域网内重复出现,但是不可以在同一个局域网内重复
如果某个私网想要访问公网,那么就需要使用NAT(路由器)把IP地址进行映射,从而完成网络访问。同样地,不同局域网下面的设备,也无法直接访问。
使用IPV4+NAT+动态分配的技术,是目前来说比较广泛使用的方式。
小明说:我的电脑的IP地址是192.168.2.3,
小红说:我知道你的电脑的IP啦,我可以黑你!
小明:你只知道我的私网IP,无法知道我的公网IP,也就是我家的路由器的IP。就算你知道了我家路由器的IP,也只能黑我的路由器呀,哈哈。你永远黑不到我的电脑噢~
对于ipv4,它使用的是32位,也就是4字节来表示ip地址。
下图是ipv4的
关于ipv6,它是使用了128位,也就是16字节来表示ip地址。
128位,可以表示的无符号范围为(0,2^128-1)。这一个数字(大约是42亿的4次方),可以表示足够多的ip地址了。
如果一个ip地址为192.168.10.1(本主机的私网地址)。
那么,网络号为:192.168.10(也就是前三位),主机号为最后一位:1。
那么也就意味着,一个局域网下面的所有网络设备,它们的网络号都是192.168.10。
①同一个路由器都拥有两个接口,一个是WAN口(连接其中一个局域网);
另外一个是LAN口(连接另外一个局域网),LAN口一般用于连接和这个路由器相连的网络设备。
也就是LAN口的网络号和各个主机的网络号一致。
②路由器连接的另外一个光猫:
这个光猫的LAN口编号和路由器的WAN口编号处于同一个局域网内部。
如上图,一个子网掩码就是255.255.255.0;
子网掩码也是一个32位的整数:如上图,表示就是:1111 1111 1111 1111 1111 1111 0000 0000
左侧都是1,右侧都是0。1的部分描述了IP地址的网络号最多有多少位。
255.255.255就是网络号的最大值了。
127.*的IP地址为本机回环IP,通常是127.0.0.1,这个IP地址通常用于测试本机的应用程序。例如手写一个客户端——服务端程序的时候,用于测试是否可以连通网络。
主机地址为一个ip地址最后一个.往后的部分。例如在上面的IP地址当中,255就是这个IP地址的主机地址,255的用二进制表示就是11111111
这里的全为1并不是十进制的1,而是二进制的1。
如果使用UDP协议往这个地址上面发送数据报,那么整个局域网的所有设备都可以收到。
当一个通信设备的IP地址为192.168.0.1.......或者192.168.3.1
也就是主机号为1的时候,这个通信设备就通常是一个网关
网关可以理解为一个局域网的入口
例如下图当中的LAN口就是一个局域网是入口:
例如123.45.67.0
主机IP为0,说明这个IP地址代表了一个局域网的IP。
这是IP地址的第二个功能。
每一个路由器都会保存一定的周围设备的信息,这部分信息被称为(路由表)。
每次有一个IP数据报经过路由器,就需要匹配路由表,看一看接下来咋走。
如果路由表上面有匹配的项,就会往这一个匹配的项走。
以上内容只是简单了解一下路由器选择,具体内容,可以参考网络。