IP协议(基础知识)

1. 报文格式

"网络数据报",往往是由报头和正文(载荷)构成的.

所谓报文,里面其实就是一些结构化数据,被赋予了特定含义. 

1.1 4位版本

  • 用来表示IP协议的版本.
  • 现有的IP协议有两个版本:IPv4,IPv6.
  • 其它版本可能只是在实验室中存在,并没有真正大规模商用.

1.2 4位首部长度

  • 设定和TCP一样.
  • IP报头是可变长的.
  • IP报头又是带有选项的.
  • 此时单位也是4字节.

1.3 8位服务类型

  • 真正只要4位才有效果.
  • 四种可切换状态:

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

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

③最高可靠性:在传输过程中最不容易触发丢包.

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

注: 四种形态是互斥的,只能切换到一种形态.

  • 虽然IP协议支持这个机制,实际上开发中很少使用.

1.4 16位总长度

  • IP报头+载荷的长度
  • 总长度-IP报头长度=载荷长度=TCP报文总长度.
  • TCP报文总长度-TCP报头长度=TCP载荷长度.
  • 这里的16位总长度,也涉及到64KB的问题.但是IP协议,自身支持"拆包组包"机制.这里的64KB,只是约束了一个IP数据报.
  • 如果携带比较长的数据的时候,IP协议会自动的把一个数据报拆成多个数据报,接收方在进行分用的时候,也会把多个数据报合并成一个数据报.

1.5 16位标识/3位标志位/13位片偏移

  • 描述了整个IP数据报拆包组包的过程.
  • 当IP数据报需要携带比较长的数据的时候,就在IP协议这一层触发拆包操作.把一个打包拆成多个小包.
  • 多个小的IP数据报就会都带有IP报头,载荷是TCP数据报的几个部分.

这就和搬家一样,一趟搬不完,多搬几趟.

1.5.1 16位标识

  • 拆出的这多个包,16位标识是相同的.(是一伙儿的)

1.5.2 13位片偏移

  • 每个包的偏移是不同的,前一个包片偏移更小,后一个更大.
  • 通过片偏移,就可以区分包的先后顺序.

1.5.3 3位标志位

  • 其中有一位是不用的.
  • 还有一位,表示是否允许拆包.在这里已经拆了,这一位都是1.
  • 剩下一位,表示"结束标记",标识当前的包是否是最后一个.这一位为0,表示这是最后一个包.

1.6 8位生存空间TTL

  • 单位是-次.
  • 初始情况下TTL会有个数值(32/64/128).
  • 每次经过一个路由器转发,TTL就会-1,减到0了就会被丢弃.
  • 正常来说,TTL足以支持数据报到达网络的任意一个位置.如果确实出现0了,基本可以认为目标IP不可达.(通过转发情况,做出限制)

比如说设置了64,64够用吗??

理论上来说是可以的.经过最多64次转发,就能到达世界的任何一个角落.(参考六度空间理论)

1.7 8位协议

  • 描述了上层-传输层,使用哪种协议.

1.8 16位首部校验和

  • 校验数据是否正确的机制,只需要校验首部即可.
  • 载荷部分,要么是TCP,要么是UDP,都已经自己校验过了.此时IP只要校验好自己的报头就好.

1.9 32位源IP地址,32位目的IP地址

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

2. IP 地址

网络上有这么多主机,需要有办法描述主机的具体位置.IP地址就是解决这个问题的关键.

32位源IP地址:

  • 所谓的IP地址,其实是一个32位的整数(4字节).
  • 点分十进制,由于按照32位的方式表示,就会使这个数字变得很大,难以理解.
  • 一般会把IP地址,按照点分十进制的方式来表示.
  • 即,使用三个"."把32位分成4个部分,每个部分就是8位,1个字节,每个字节的范围0-255(不带符号).

32位表示的数据量,非常有限.既然是"地址",原则上不能重复的,每个设备的IP不能相同.

但全世界能上网的设备,早就超过这个数据量了!!!

还有物联网!!!

2.1 [重点]IP地址不够用了怎么办?

2.1.1 动态分配IP(DHCP)

你的这个设备,不会一直需要上网.

需要上网的时候,就分配IP,不需要不分配.

但这种方案,只能缓解,不能根治.

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

理解网络结构的关键要点!!!

 

发现,这两个IP地址不同,这就是NAT机制.

IP地址不够用,想了个办法:

把IP地址,分成两大类.

2.1.2.1 内网IP
  • 不同的局域网内的设备,内网IP可以重复,同一个局域网的设备,内网IP不能重复.                           (10.*   172.16.*-172.31.*   192.168.*)
  • 很明显,属于内网IP,只需要保证在局域网内不重复即可.换言之,在其他局域网中,也可以使用这样的IP地址.
  • 此时,大量的设备可以在不同局域网中使用同样的IP了,此时IP不够用问题得到了很大改善.
2.1.2.2 外网IP
  • 外网IP不能重复.
2.1.2.3 通信情况

1)如果局域网内部的设备之间进行通信,肯定是可以的(局域网内部,内网IP都是唯一的)

2)A局域网中的设备,想和B局域网中的设备通信,如果这两个设备的IP相同,怎么办?

  • 规则:直接禁止这种情况.
  • 要想通信,就需要一个带有外网IP的设备进行中转.

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

像平时使用的电脑,手机,都是在局域网内部使用,都有一个内网IP.

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

 我的电脑,向QQ服务器发送请求:

这个数据报,经过电信路由器的时候,会触发NAT机制.

电信路由器,就会使用自己的外网IP替换掉当前IP数据报中的源IP.

当这个数据报到达服务器之后,服务器不知道这个数据报是源自于172.29.29.92,而是源自于10.20.30.40

NAT机制下,意义在于,一个外网IP代表的不一定是一个设备了,而是很大设备.看到的是一个,其实背后代表了很多.

QQ服务器返回相应,返回的响应里面也是IP数据报.

这个数据报,就会先到达电信路由器.

那么电信路由器如何知道,这么多设备,这个数据报要给谁?

对于NAT设备(路由器),会在触发NAT的时候,维护一个映射表,形如:

NAT设备,通过查表,就知道了,要把目的IP再替换回来.

这个时候,电信路由器,和我的电脑之间时,局域网内部的通信了,此时就容易完成通信了.(不够严谨)

真实的情况,是我的电脑的数据,经过我的路由器,会进行NAT,经过电信光猫,会进行NAT,经过电信路由器,又会进行NAT(每次经历,路由器转发,都可能会触发NAT机制:看路由器是怎么配置的,有的模式下会触发,有的不会)

当前的互联网世界,是通过NAT构建起来的.

但NAT的缺点很明显

2.1.2.4 NAT优缺点

1)缺点: 

①效率不高

②非常繁琐

③不方便直接访问局域网内的设备

提高了IP地址的"利用率",并没有从根本上解决IP不够用的问题.

2)最大的优点:

NAT是一个"纯软件实现"的方案.

2.1.3 IPv6

从根本上解决IP地址不够用的问题.

  • IPv4,是4个字节,32位表示IP地址.
  • IPv6,是16个字节,128位表示IP地址.这个数字足以支持把地球上的每一粒砂子都分配一个IP地址.

其实,IPv6的诞生时间和NAT差不多.但为什么NAT能够成功,IPv6举步难行?

  • 因为IPv6和IPv4不兼容!!!
  • 要想升级IPv6,就需要更换路由器设备(不会提高网速,不会提高流畅性).
  • 相比之下,NAT方案,只需要路由器开发商开发出新版本的软件(路由器固件),升级软件,即可直接支持(成本低).
  • 其实,国内网络环境中,IPv6普及程度已经超过了70%.
  • IPv6具有一定的战略价值.
  • IPv4地址分配,是美国管的,为了摆脱制约,国内大力发展IPv6.

优点:

1.IPv6难以封锁.

2.IPv6新的领域,有很多的基础设施需要建设,深入参与,可以拿到更大的话语权.

3. 网段划分

3.1 组成

  • 网络号:表示网段,保证相互连接的两个网段具有不同的标识.
  • 主机号:标识主机,同一网段中,主机之间具有相同的网络号,但是必须有不同的主机号.

在日常开发中,不必关心这个IP地址是怎么来的,以及规则是什么.

IP地址,可以是自动分配(家里的设备,网络环境简单).也可以是手动分配的(企业的设备,网络环境复杂,网管来配置).

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

是通过子网掩码来识别的.

3.2 子网掩码

  • 子网掩码和IP地址一样,也是4字节,32位的整数.
  • 左侧必须是连续的1,右侧必须是连续的0.                                                                              (255=1111 1111 240=1111 0000   0=0000 0000   这里0和1不能穿插)
  • 1的范围就描述了IP地址的对应哪些位是网络号.
  • 即前20个bit位是网络号,后12个bit位是主机号.
  • 家用路由器子网掩码一般是255.255.255.0

子网掩码是现代的划分网络号的方案,下面来看看之前的的方案(虽然不用,但笔试可能会考):

分类范围
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

3.3 特殊的IP地址

①将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网.

  • 不能给具体的设备分配这个IP.

②将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有 主机发送数据包.

  • 比如,有一个网段:192.168.0 子网掩码:255.255.255.0
  • 如果IP地址为192.168.0.255,这个全1就属于"广播IP".
  • 往这个IP上发送数据报,这个数据报就会被转发给局域网中的所有设备.
  • 此处广播,在传输层只能使用UDP,不能使用TCP.

TCP无法针对广播地址进行三次握手,建立连接操作.

③127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1.

  • 本机和本机通信,可以使用这个IP.
  • localhost也可以表示本机.是一个"域名",会被解析成127.0.0.1,从使用层面来看,这两个东西是等价的,更推荐使用127.0.0.1,使用localhost可能会有幺蛾子.

④本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输), 对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。

4. 路由选择(简单介绍)

  • 即数据报在IP协议下是如何进行传输的.
  • 互联网,整体来说,非常复杂庞大,任何一个路由器都无法认识到网络的全貌!

举个例子:

在高德地图上,搜一个目的地,能规划处很多条路线.地图路径规划,是站在全局的角度.地图服务商能够知道整个城市的道路情况,交通情况,做出一个"最优解".

但是路由器,无法做到理解全貌,只能认识部分网络环境,能够知道和它相邻的一些设备的情况.在这个前提下,进行路由转发,就只能走一步算一步.这里给出的路径,也不一定是最优解,只能说是"较优解".

路由器转发数据的过程,类似于问路,走一段路,问一个人.

每个路由器内部,有一个数据结构,"路由表",数据报到达路由器的时候,就需要查询路由器.

1)如果查到了,就可以直接按照这个方向继续转发,数据就能到达.

2)如果没查到,路由器会给一个默认的方向(下一跳地址),沿着默认的方向走,(往往是走到了上级路由器这里),上级路由器了解的会更详尽一点.

这个过程,是一个"启发式"的过程.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值