主机和结点

在互联网世界中,将那些配有IP地址的设备叫做“主机”。这里的主机可以是超大型计算机,也可以是小型计算机。这是因为互联网在当初刚发明的时候,只能连接这类大型的设备,因此习惯上就将配有IP地址的设备称为“主机”。
然而,准确地说,主机的定义应该是指“配置有IP地址,但是不进行路由控制的设备”既配有IP地址又具有路由控制能力的设备叫做“路由器”,跟主机有所区别。而结点则是主机和路由器的统称

IP协议

IP(Internet Protocol)协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求
IP不提供可靠的传输服务,它不提供端到端的或结点到结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流量控制。如果出错可以通过ICMP报告,ICMP在IP模块中实现
『网络』浅谈IP协议

IP协议头格式

『网络』浅谈IP协议

  • 4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4。
  • 4位头部长度(header length):IP头部的长度是多少个32bit(单位),也就是length * 4的字节数。4bit表示的最大数字是15因此IP头部最大长度是60字节
  • 8位服务类型(Type of Service)3位优先权字段(已弃用)4位TOS字段,和1位保留字段(必须置0)4位TOS分别表示最小延时最大吞吐量最高可靠性最小成本。这四者相互冲突,只能选择一个对于ssh/telent这样的应用程序,最小延时比较重要对于ftp这样的程序,最大吞吐量比较重要
  • 16位总长度(字节数)IP数据报整体占多少个字节
  • 16位标识(id)唯一的标识主机发送的报文如果IP报文在数据链路层被分片了,那么每一片里面的这个id是相同的
  • 3位标志字段第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文第三位标识“更多分片”,如果分片的话,最后一个分片置为1,其他是0,类似于一个结束标志
  • 13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处于哪个位置。实际偏移的字节数是这个值 * 8得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)
  • 8位生存时间(Time To Live,TTL)数据报到达目的地的最大报文跳数一般是64。每次经过一个路由,TTL -= 1,一直减到0还没到达,就丢弃。这个字段主要是用来防止出现路由循环
    『网络』浅谈IP协议
  • 8位协议:表示上层协议的类型
  • 16位首部校验和使用CRC进行校验,来鉴别头部是否损坏
  • 32位源地址和目的地址:表示发送端接收端
  • 选项字段最大40字节

网段划分

网络号和主机号

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

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

通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的IP地址都不相同
那么问题来了,手动管理子网内的IP,是一个相当麻烦的事情

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

早期的网段划分

过去曾经提出过一种划分网络号和主机号的方案,把所有IP地址分为五类
『网络』浅谈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.0 ~ 239.255.255.255。
  • E类:240.0.0.0.0 ~ 247.255.255.255。

因为早期的网段划分方式太过于粗糙浪费较多,因此被淘汰了。于是提出了新的网段划分方案,称为CIDR

CIDR

CIDR(Classless Inter-Domain Routing,无类别域间路由)。

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号
  • 子网掩码也是一个32位的正整数,通常用一串"0"来结尾
  • 将IP地址和子网掩码进行“按位与”操作,得到的结果就是网络号
  • 网络号和主机号的划分与这个IP是A类、B类还是C类无关。

下面看两个例子
『网络』浅谈IP协议
『网络』浅谈IP协议

  • IP地址与子网掩码做与运算可以得到网络号,主机号从全0到全1就是子网的地址范围
  • IP地址和子网掩码还有一种更简洁的表示方法,例如:140.252.20.68/24,表示IP地址为140.252.60.68,子网掩码的高24位为1,也就是255.255.255.0

再来看一个问题
现在有一个网络的网段是192.168.122.0子网掩码是255.255.255.0,现在要将这个网络平均划分成四个子网每个子网的主机范围以及子网掩码是多少?

  1. 通过掩码得到主机号个数:256个。
  2. 因为要平均划分为四个子网,则每个子网中主机号数量为256 / 4 = 64个
  3. 每个子网的掩码如下:
    255.255.255.0
    255.255.255.64
    255.255.255.128
    255.255.255.192
  4. 每个子网IP地址范围如下:
    192.168.122.0~192.168.122.63
    192.168.122.64~192.168.122.127
    192.168.122.128~192.168.122.191
    192.168.122.192~192.168.122.255

特殊的IP地址

  • 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网
  • 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据报
  • 127.*的IP地址用于本机回环测试,通常是127.0.0.1

私有IP和公网IP

如果一个组织内部组件局域网IP地址只用于局域网内的通信,而不直接连到Internet上理论上使用任意的IP地址都可以但是RFC 1918规定了用于组件局域网的私有IP地址

  • 10.*.*.*.*,前8位是网络号,共有16777216个地址。
  • 172.16.* ~ 172.31.*,前12位是网络号,共1048576个地址。
  • 192.168.*,前16位是网络号,共65536个地址。

上述范围中的都称为私有IP其余的都称为公网IP
『网络』浅谈IP协议

  • 一个路由器可以配置两个IP地址,一个是WAN口IP,一个是LAN口IP(子网IP)。
  • 路由器LAN口连接的主机都从属于当前这个路由器的子网中
  • 不同的路由器,子网IP其实都一样的(通常是192.168.1.1)。子网内的主机IP地址不能重复。但是子网之间的IP地址就可以重复了。
  • 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点。这样的运营商路由器可能会有很多级,最外层的运营商路由器,WAN口IP就是一个公网IP
  • 子网内的主机需要和外网机进行通信时路由器将IP首部中的IP地址进行替换(替换成WAN口IP),这样逐级替换,最终数据包中的IP地址成为一个公网IP。这种技术称为NAT(Network Address Translation,网络地址替换)
  • 如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网IP的服务器上。这样的服务器可以在阿里云、腾讯云上进行购买。

网关

大家都知道,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。也就是网络关卡。
网关既可以用于广域网互连也可以用于局域网互连

  • 说明
    由于历史原因许多有关TCP/IP的文献曾经把网络层使用的路由器称为网关,在今天很多局域网采用的都是路由来接入网络,因此通常指的网关就是路由器的IP(LAN口IP)
  • 举例说明
    网络AIP地址范围为:192.168.1.1~192.168.1.254子网掩码是255.255.255.0网络BIP地址范围为:192.168.2.1~192.168.2.254子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的。即使两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络中,而要实现两个网络之间的通信,则必须要通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机

所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢网关的IP地址是具有路由功能的设备的IP地址具有路由功能的设备路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)

路由

路由是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程
『网络』浅谈IP协议
如上图所示,路由的过程,就是上述一跳一跳的过程。所谓一跳就是数据链路层中的一个区间。具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间
IP数据报的传输过程和问路一样。

  • 当IP数据报,到达路由器时,路由器会先查看目的IP
  • 路由器判断这个数据包是直接能够发送给目标主机,还是需要发送给下一个路由器
  • 如此反复,直到到达目标IP地址。

那么路由器如何判断这个数据包该发送到哪里呢
『网络』浅谈IP协议
为了将数据包发送给目标主机所有主机都维护着一张路由控制表(Routing Table)。该表记录IP数据在下一步应该发送给哪个路由器IP包根据这个路由表在各个数据链路上传输。
『网络』浅谈IP协议

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

一台主机的网络接口配置路由表如下:
『网络』浅谈IP协议

  • 这台主机有一个网络接口连到172.17.48.0/20网络
  • 路由表的Destination是目的网络地址Genmask是子网掩码Gateway是下一跳地址Iface是发送接口Flags中的U标志表示此条目有效(可以禁用某些条目)G标志表示此条目的下一条地址是某个路由器的地址没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由转发

路由转发过程
『网络』浅谈IP协议

traceroute命令

traceroute命令利用ICMP协议定位您的计算机和目标计算机之间的所有路由器TTL值可以反映数据包经过的路由器或网关的数量,通过操纵独立ICMP呼叫报文的TTL值和观察该报文被抛弃的返回信息,traceroute命令能够遍历到数据包传输路径上的所有路由器
『网络』浅谈IP协议

相关文章:

  • 2021-12-14
  • 2021-07-24
  • 2022-12-23
  • 2021-08-06
  • 2021-11-01
  • 2021-12-05
  • 2022-12-23
  • 2021-05-02
猜你喜欢
  • 2021-06-18
  • 2018-05-16
  • 2021-08-19
  • 2021-12-10
  • 2021-11-29
  • 2021-07-15
  • 2021-05-05
相关资源
相似解决方案