菜鸟笔记
提升您的技术认知

网络层(IP协议)

IP协议

功能

IP功能: 将数据从 A 主机经过路径选择送至 B 主机
TCP + IP功能:将数据从 A 主机经过路径选择可靠的送至 B 主机(先到达B主机的局域网,找到目标网络–>找到目标主机)

协议头格式

  • 4位版本号: 指定IP协议的版本,对于IPv4来说,就是4

  • 4位首部长度: IP头部的长度是多少个32bit,也就是length*4的字节数

  • 16位标识: 唯一的标识主机发送的报文,如果IP报文在数据链路层被分片了,那么每一片里面的这个id都是相同的。

    1. 分片之后,每一片都要携带ip报头
    2. 不建议过多分片,会导致组装不成功,得重传。
    3. mtu 是最大传送单位,每次发送超过 mtu 就要进行分片
  • 3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁 止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 后一个分片置为1, 其他是0. 类似于一个结束标记。

  • 16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.

  • 8位协议: 表示上层协议的类型

接下来我们讨论几个问题:

    1. ip 报文丢失 tcp 是怎么知道的?
    
    答:ip 报文中封装的是 tcp 的内容
    
    2. 怎么将报头和有效载荷分离?
    
    答:有4位首部长度,剩下的都是载荷
    
    3. 为什么要进行分片?
     
     答:MAC帧给的规定
     
    4. 怎么将有效载荷交付给上层?
    
    答:8位协议
网段划分

为什么会有网段划分呢?归根结底是为了效率,提高查找效率

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

  • 网络号:保证相互连接的两个网段具有不同的标识
  • 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
  • 不同的子网,实际上就是把网络号相同的主机放到一起
  • 如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网 中的其他主机重复

通过合理设置主机号和网络号,就可以保证相互连接的网络中,每台主机的IP地址都不相同

那么问题来了, 手动管理子网内的IP, 是一个相当麻烦的事情.

  • 有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便.
  • 一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器.

过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类, 如所示:

  • 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

那我们来回答一个问题:

 构成子网掩码的条件是什么?
 
 答:1或者0必须连续,1与1之间不能有0,0与0之间不能有1.
私有IP地址和公网IP地址
  • 10.*,前8位是网络号,共16,777,216个地址

  • 172.16.到172.31.,前12位是网络号,共1,048,576个地址

  • 192.168.*,前16位是网络号,共65,536个地址
    包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP)

  • 一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).

  • 子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级 替换, 终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地 址转换).

路由

路由的过程, 就是这样一跳一跳 “问路” 的过程.

所谓 “一跳” 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间.

IP 数据包的传输过程也和问路一样

  • 当IP数据包,到达路由器时,路由器会先查看目的IP
  • 路由器决定这个数据包是直接发送给目标主机,还是需要发送给下一个路由器
  • 依次反复,一直到达目标IP地址

那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表(检索路径);

  • 路由表可以使用 route 命令查看
  • 如果目的IP命中了路由表,就直接转发即可
  • 路由表中的后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。