1 主机、路由器网络层主要功能

2 IP数据报

2.1 图示

2.2 字段详细介绍

1)版本号

  占4位:IP协议的版本号。4表示IPv4,6表示IPv6。

2)首部长度

  占4位:表示IP分组首部长度。

  以4字节为单位。如值为5,则表示首部长度为20字节(5*4=20)

3)服务类型TOS

  占8位:指示期望获得哪种类型的服务

  1998 年这个字段改名为区分服务
  只有在网络提供区分服务(DiffServ)时使用
  一般情况下不使用,通常IP分组的该字段的值为00H
 
4)总长度
  段占16位:IP分组的总字节数(首部+数据)
  IP分组最大的总长度:65535B
  最小的IP分组首部:20B
  IP分组可以封装的最大数据:65535-20=65515B
 
5)生存时间
  占8位:IP分组在网络中可以通过的路由器数(或跳步数)
  路由器转发一次分组,TTL减1
  如果TTL=0还没到达目标,路由器则丢弃该IP分组
 
6)协议
  占8位:指示IP分组封装的是哪个协议的数据包
  6为TCP,表示封装的为TCP段;
  17为UDP,表示封装的是UDP数据报
 
7)首部校验和
  占16位:实现对IP分组首部的差错检测
  计算校验和时,该字段置为全0参与计算
  采用反码算数运算求和,和的反码作为首部校验和字段
  由于经过中间节点(路由器)会对首部进行设置,首部会发生变化,所以逐跳计算、逐跳校验
 
8)源IP地址、目的IP地址
  各占32位:分别标识发送分组的源主机/路由器(网络接口)和接收分组的目的主机/路由器(网络接口)的IP地址
 
9)选项字段
  长度可变,范围在1~40B之间:携带安全、源选路径、时间戳和路由记录等内容。实际上很少被使用
 
10)填充
  长度可变,范围在0~3B之间:目的是补齐整个首部,符合32位对齐,即保证首部长度是4字节的倍数
 
11)标识、标志位、片偏移几个字段在下面IP分片重组进行说明
 

3 IP分片和重组

3.1 最大传输单元

  网络链路存在MTU (最大传输单元),也就是链路层数据帧可封装数据的上限。
  不同链路的MTU不同
 

3.2 链路MTU不同引发的问题

  如下图,链路L1的最大输出单元MTU1大于L2的最大输出单元MTU2
  主机H1向H2发送一个分组,大小为MTU1,经过L1,到达路由器
  路由器要把它转发到L2这个接口,但是L2的最大输出单元MTU2是小于MTU1的,无法经过L2。可以通过分片和重组来解决这个问题。
  

3.3 分片和重组

  大IP分组向较小MTU链路转发时,可以被“分片” (fragmented)

  1个IP分组分为多片IP分组IP分片到达目的主机后进行“重组”(reassembled)。注意,重组是到达目标主机后才进行的,在中间节点不会重组,原因很简单,如果分片了到达下一个路由器就重组,在下一次遇到最大输出单元较小的链路又得分片。

3.4 首部几个相关的字段

1)标识(ID)

  占16位:标识一个IP分组

  IP协议利用一个计数器,每产生IP分组计数器加1,作为该IP分组的标识。一个数据报文拆分的多个分组的ID相同
 
2)标志位
  占3位。第一位保留,第二位是DF (Don't Fragment)。第三位是MF (More Fragment)
  DF:
    DF=1:禁止分片;

    DF=0:允许分片
  MF:
    MF =1:非最后一片;
    MF =0:最后一片(或未分片)
  

 3)片偏移

  占13位:一个IP分组分片封装原IP分组数据的相对偏移量。片偏移字段以8字节为单位。

  如一个报文的大小为128,每个分组可以封装的数据为32,那么第一个分组的偏移量为0(32/8*(1-1)),第二个分组的偏移量为4(32/8*(2-1)),第三个分组的偏移量为8(32/8*(3-1)).......

3.5 分片过程

  假设原IP分组总长度为L,待转发链路的MTU为M

  若L>M,且DF=0,则可以/需要分片
  分片时每个分片的标识复制原IP分组的标识
  通常分片时,除最后一个分片,其他分片均分为MTU允许的最大分片
  一个最大分片可封装的数据应该是8的倍数,
  一个最大分片可封装的数据为(除法向下取整):减掉的20是首部的大小,实际上分片能存储的数据的大小是M-20,然后向下取8的倍数
  

  需要的总片数为(除法向上取整):减掉的20是原IP分组的首部的大小,L-20就是它存储的数据大小,除以每个分片能存储的数据大小,向上取整

  

  每片的片偏移字段取值为:i表示第几个分片

  

  每片的总长度为:除了最后一个分片,其它分片都是d+20

  

  每片的MF标志位为:

3.6 示例

 

4 IP编址

  分为IPV4和IPV6,此处将IPV4

  

4.1 简介

  IPV4地址长度是32位。由两部分组成,网络号和主机号。

  通常写成10进制的200.221.222.101这种形式,便于使用和记忆。200.221.101就是网络号,101就是主机号。

  

4.2 IP子网

  IP地址具有相同网络号的设备接口,不跨越路由器(第三及以上层网络设备)可以彼此物理联通的接口。
  如下图,黄色框起来的就是一个个的子网。

  

5 有类IP编址

5.1 IP分类

  如下图,采用二分法把ip地址分为5类

  A类地址,第一位是0的所有IP,占了全部IP的50%。它的前8位是网络号,后24位是主机号

  B类地址,第一位是1,第二位是0的所有IP,占了全部IP的25%。它的前16位是网络号,后16位是主机号

  C类地址,第一位是1,第二位是1,第三位是0的所有IP,占了全部IP的12.5%。它的前24位是网络号,后8位是主机号

  D类地址,第一、二、三位是1,第四位是0的所有IP,占了全部IP的6.5%。不区分网络号和主机号。用来命令或标识Internet网络中一组主机。只能作为IP分组中的目的地址,不能作为发送地址。也叫作多波地址

  E类地址,第一、二、三、四位是1的所有IP,占了全部IP的6.5%。不区分网络号和主机号。作为研究使用。

  

5.2 特殊的IP

5.3 私有IP地址

  地址按用途分为私有地址和公有地址两种。所谓私有地址就是在A、B、C三类IP地址中保留下来为企业内部网络分配地址时所使用的IP地址。
  私有地址主要用于在局域网中进行分配,在 Internet上是无效的。这样可以很好地隔离局域网和 Internet。私有地址在公网上是不能被识别的,必须通过NAT将内部IP地址转换成公网上可用的IP地址,从而实现内部IP地址与外部公网的通信。
  公有地址是在广域网内使用的地址,但在局域网中同样也可以使用,除了私有地址以外的地址都是公有地址。
  私有ip属于非注册地址,专门为组织机构内部使用。RFC1918定义了私有IP地址范围:
    A:10.0.0.0~10.255.255.255 即10.0.0.0/8
    B:172.16.0.0~172.31.255.255即172.16.0.0/12
    C:192.168.0.0~192.168.255.255 即192.168.0.0/16

  

6 IP子网划分和子网掩码

6.1 子网再划分的原因

  A类的网络号有8位,且第一位固定是0,所以A类的子网可以有2^7-1个。每个子网下面可以分配的ip数为2^24-1

  B类的网络号有16位,且前两位固定是10,所以B类的子网可以有2^14-1个。每个子网下面可以分配的ip数为2^16-1=65535

  C类的网络号有24位,且前三位固定是110,所以C类的子网可以有2^21-1个。每个子网下面可以分配的ip数为2^8-1=255

  由此可见,A的子网数最少,但是每个子网可分配的ip最多

  现在一个组织,有2000台主机,给他C类ip,才可以分配255个ip,肯定是不够的,给它一个B类ip,又太浪费,B类可分配65565个,而他只需要2000个,大量的ip浪费了。

  所以,需要一种手段,把子网分成更小的子网。

6.2 子网号

  在之前,ip地址分为网络号和主机号。现在,加上一个子网号。它占用原来的主机号的前几位来表示子网号,具体占用几位不固定。 

  通过网络号+子网号来表示一个更小的子网。

  

6.3 子网掩码

6.3.1 简介

  子网掩码也是32位,形式和ip一样。

  取值NetID、SubID位全取1,HostID位全取0

  例如:A网的默认子网掩码为:255.0.0.0,B网的默认子网掩码为:255.255.0.0,C网的默认子网掩码为:255.255.255.0

        借用3比特划分子网的B网的子网掩码为:255.255.224.0(11111111 11111111 11100000 00000000)

6.3.2 子网划分示例

  子网201.2.3.0,255.255.255.0被子网掩码255.255.255.192(11111111 11111111 11000000 00000000)划分为4个等长的子网

    201.2.3.0-201.2.3.63

    201.2.3.64-201.2.3.127

    201.2.3.128-201.2.3.191

    201.2.3.192-201.2.3.255

  

6.3.3 路由怎么确定转发到哪个子网

  将IP分组的目的IP地址与子网掩码按位与运算,提取子网地址

  如:目的ip地址为172.32.1.112,子网掩码255.255.254.0

  

  子网地址:172.32.0.0(子网掩码:255.255.254.0)

  地址范围:172.32.0.0~172.32.1.255
  可分配地址范围:172.32.0.1~172.32.1.254
  广播地址:172.32.1.255 
 
  不用位与运算来分析一下
    172.32.1.112是B类ip,默认掩码是255.255.0.0
    现在掩码是255.255.254.0(11111111 11111111 11111110 00000000)
    借用了7位来划分子网,也就是把172.32这个B类子网划分为2^7个小的子网
    第一个小的子网就是172.32.0.0-255 以及172.32.1.0-255,第而个小的子网就是172.32.2.0-255 以及172.32.3.0-255,.......
    现在,目标地址是172.32.1.112,属于第一个子网
 

6.4 一个C类子网借用3位划分子网举例

 
  注意,第四位组取值范围中,红色起始值和绿色终止值都属于特殊ip

7 CIDR和路由聚合

7.1 简介

  无类域间路由(CIDR: Classless InterDomain Routing)
  消除传统的 A 类、B 类和 C 类地址界限,之前采用NetID+SubID来划分子网,现在采用Network Prefix (Prefix)来划分子网,Prefix可以任意长度
  融合子网地址与子网掩码,方便子网划分
  无类地址格式:a.b.c.d/x,其中x为前缀长度
  

7.2 示例

  原先的表示:子网201.2.3.64,255.255.255.192→201.2.3.64/26
 

7.3 CRID的优点

  由于Prefix可以任意长度,所以可以简单的自由划分任意大小的子网。也可以把多个子网合并成一个大的子网。

    提高IPv4 地址空间分配效率
    提高路由效率
 

7.4 路由聚合示例

  如下图,转发表中有三条记录。223.1.0.0/23,223.1.2.0/24,223.1.3.0/24,它们的接口都是2,那么就可以合并为223.1.0.0/22。这样子,路由转发表就把三条合并为一条了,减少了记录数。
  223.1.0.0/23包含下面这些ip
    223.1.00000000.0-255
    223.1.00000001.0-255
  223.1.2.0/24包含下面这些ip
    223.1.00000010.0-255
  223.1.3.0/24包含下面这些ip
    223.1.00000011.0-255
  223.1.0.0/22包含下面这些ip,刚好是上面三个合并的范围
    223.1.00000000.0-255
    223.1.00000001.0-255
    223.1.00000010.0-255
    223.1.00000011.0-255
  
  

7.5 最长前缀匹配优先

  如果,在路由转发表中匹配到多条记录,选取最长前缀(最具体)的那个范围

  如路由转发表有下面两条记录

  200.23.16.0/20  接口1

  200.23.18.0/23  接口2

  目标ip200.23.18.1,两个都可以匹配上,有限选择最长前缀的,所以选择接口2

8 DHCP协议

8.1 简介

  DCHP(Dynamic Host  Protocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网

8.2 主机获取ip地址

  主机获取ip地址有两种方式

    硬编码-静态配置

    动态主机配置协议-DHCP: Dynamic Host ConfigurationProtocol,从服务器动态获取

8.3 静态配置

  默认网关就是注意直接连接的路由器的公网ip地址,通过它可以连接网络

8.4 DHCP动态获取

8.4.1动态主机配置协议-DHCP简介

  它是从服务器动态获取的,主要有下列内容
    IP地址
    子网掩码
    默认网关地址
    DNS服务器名称与IP地址
  “即插即用”
  允许地址重用
  支持在用地址续租(服务器分配的ip是有时限的)
  支持移动用户加入网络
 
8.4.2 动态获取过程
  1)主机广播 “DHCP discover”(发现报文)
  2)DHCP服务器利用 “DHCP offer” (提供报文) 进行响应
  3)主机请求IP地址: “DHCP request” (请求报文)
  4)DHCP服务器分配IP地址: “DHCP ack” (确认报文) 

  

 8.4.3 路由器和DCHP

  现在的家用路由器都具备提供DHCP服务的能力,可以说现在的家用路由器是DHCP服务器、DNS 服务器、NAT服务器的集合体。

  默认情况下路由器的DHCP服务器是启动的,并不需要用户进行配置。DHCP服务器给你连接该路由器上面的计算机分配IP地址、DNS服务器地址和默认网关地址。

9 网络地址转换NAT

9.1 简介

  现在,我们日常生活中,计算机连接网络都是在一个路由器下的子网,且分配的都是私有ip,私有ip是不能直接和公网ip进行通信的,需要进行网络地址转换

  如下图,右侧本地家庭网络都是采用的私有ip,想要与Internet进行通信,需要路由器进行一次网络地址转换。

  10.0.0.1,10.0.0.2,10.0.0.3全部转换为138.76.29.7。那么,怎么区分来自哪台计算机呢,采用端口号来区分

9.2 网络地址转换(NAT)

  IPv4地址耗尽,为了能够让计算机都能有ip可以,ipv4中设置了一些ip为私有ip,它们可被重复使用。再结合NAT技术就可以让使用私有ip的用户上网了。
  本地网络设备IP地址的变更,无需通告外界网络
  变更ISP时,无需修改内部网络设备IP地址
  内部网络设备对外界网络不可见,即不可直接寻址(安全) 
 

9.3 NAT的实现

1)替换
  使用(IP地址,新端口号)替换每个外出IP数据报的(源IP地址,源端口号)
 
2)记录
  将每对(IP地址, 新端口号) 与(源IP地址, 源端口号)的替换信息存储到NAT转换表中
 
3)替换
  根据NAT转换表,使用(源IP地址, 源端口号)替换每个进入内网IP数据报的(目的IP地址,目的端口号),即(NAT IP地址, 新端口号)

  

9.4 示例

9.5 NET端口号范围

  tcp/udp端口仅仅是个标识数字,没有硬件上的意义,范围0-65535,NAT就利用它解决IP地址不足的问题。

  所以NET可以同时支持605535个多并行连接

9.6 NET穿透问题

9.6.1 说明

  如下图,在内网有个服务,这个内网外的其它用户想要访问它,该怎么访问呢

  

 9.6.2 解决方法

1)静态配置NAT

  将特定端口的连接请求转发给服务器 ,如配置(138.76.29.7, 2500) 总是转发给(10.0.0.1, 25000)

2)中继(如Skype) 

  NAT内部的客户与中继服务器建立连接

  外部客户也与中继服务器建立连接

  中继服务器桥接两个连接的分组

  除了上面两种方法,还有其它的一些方法就不介绍了

最新文章

  1. mongodb学习(一)
  2. Linux安装snmp
  3. 【转】html input radio取得被选中项的value
  4. DDoS攻击
  5. C#.NET利用ContextBoundObject和Attribute实现AOP技术--AOP事务实现例子
  6. C# - 委托_ 匿名方法
  7. jQuery EasyUI学习资源汇总
  8. eclipse里index.jsp头部报错的原因和解决方法
  9. ES6的数据类型
  10. CVE-2017-1000405 利用脏牛漏洞Linux提权复现
  11. JS 页面表格的操作
  12. luogu P2470 [SCOI2007]压缩
  13. Alpha 冲刺 (6/10)
  14. 笔记02 linux的一些命令sed
  15. 【夯实PHP基础】微信小程序开发 2017.02.06
  16. js的 new Date()日期格式化显示以及js获取时间戳
  17. Android手机用KSWEB搭建Web服务器成功安装WordPress
  18. upper_bound()与lower_bound()的使用
  19. 20155337 《Java程序设计》实验三(敏捷开发与XP实践)实验报告
  20. 不需要打密码的sudo方法

热门文章

  1. windows10 ftp文件夹错误
  2. HDLBits答案——Verification: Reading Simulations
  3. <二>自己实现简单的string
  4. Scrum 框架的四个会议还适用于哪些敏捷方法?
  5. DHorse操作手册
  6. day15 Socket网络编程 & 反射
  7. 数电第五周周结_by_yc
  8. 【Scala】常见题目中Scala的使用
  9. SAP程序发布流程
  10. Windows10下python3和python2同时安装(一)安装python3和python2