网络层 --- IP协议

一、预备知识

  • 网络层:负责地址管理和路由选择,例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由),路由器(Router)工作在网路层。
  • 网络层只是提供一种路径选择的能力,并不能保障数据传输的可靠性等,这些归传输层管理,故层级之间是相互配合的!!!
  • 网络不是凭空产生的,是由运营商建设的,网络世界跟OS一样是被人精心设计过的。

二、IP协议

1、协议格式

  • 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分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。
  • 16位总长度(total length):IP数据报整体占多少个字节
  • 16位标识(id):唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的
  • 3位标志字段:第一位保留(意思是现在不用),第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为1,其他是0,类似于一个结束标记
  • 13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)
  • 8位生存时间(TTL):数据报到达目的地的最大报文跳数。一般是64,每次经过一个路由,TTL -= 1,一直减到0还没到达,就丢弃了。主要是用来防止出现路由循环
  • 8位协议:表示上层协议的类型 如TCP/UDP
  • 16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏,数据由tcp检验是否正确
  • 32位源地址和32位目标地址:表示发送端和接收端
  • 选项字段:不定长,最多40字节

如何将有效数据和报头进行分离?

读取报头的20字节,得到报文长度和首部长度,然后直接分离

如何将数据传递给上层协议?

报头中包含协议字段

2、网段划分

IP 地址分为两个部分, 网络号和主机号
  • 络号:保证相互连接的两个网段具有不同的标识
  • 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号

路由器可以用来管理局域网中的IP分配,比如家庭中使用的路由器,当我们去连wifi去上网时,它就会分配一个IP给你,由于我们连接的是同一个网络,所以我们IP地址的网络号是相同的,但是主机号不同,因为我们使用的是不同的设备。然后路由器可以把我们发送的消息发送到公网中进行通信。当然分配IP的工作一般都交给DHCP完成。

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

注意:路由器的功能不仅仅是作为路由选择,它还能支持http协议/有小型数据库等功能


划分方案

  • 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

该方案将网络IP分为5类进行使用,但是这样划分后,导致很多IP都被浪费,因为一个C类IP地址的主机号太少,大部分的人(运营商、学校等机构)都想申请B类/A类,然而实际网络架设中, 不会存在一个子网内有这么多主机的情况。因此大量的IP地址都被浪费掉了。

针对这种情况提出了新的划分方案, 称为 CIDR(Classless Interdomain Routing)
  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号
  • 子网掩码也是一个32位的正整数。通常用一串 "0" 来结尾
  • 将IP地址和子网掩码进行 "按位与" 操作,得到的结果就是网络号
  • 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关

根据上面这个计算,我们就基本能够明白IP地址,子网掩码和网络号之间的关系,由于子网掩码是可以自由设置的,所以我们可以根据需求,划分网络号(按需分配),从而提高了IP地址的利用率。

为什么要进行网段划分???我们难道不能直接使用IP地址吗?

IP地址如果数量少,你想怎么使用都行,但是一旦数量多了,就需要被有效管理起来了。就比如你去图书馆借书,如果图书馆中的书很少,那么无论它如何放置,我们都可以很快找到我们需要的书,但是如果书很多,还不整理归类,那么你要找一本书,就困难了。所以进行网段划分的本质就是为了在查找IP地址时,能提高效率。


3、特殊的IP地址

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

4、私有IP地址和公网IP地址

如果一个组织内部组建局域网, IP 地址只用于局域网内的通信, 而不直接连到 Internet 上, 理论上 使用 任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有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)
  • 路由器LAN口连接的主机,都从属于当前这个路由器的子网中
  • 不同的路由器,子网IP其实都是一样的(通常都是192.168.1.1)。子网内的主机IP地址不能重复,但是子网之间的IP地址就可以重复了
  • 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点。这样的运营商路由器可能会有很多级,最外层的运营商路由器,WAN口IP就是一个公网IP了
  • 子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(替换成WAN口IP),这样逐级替换,最终数据包中的IP地址成为一个公网IP,这种技术称为NAT(Network Address Translation,网络地址转换)
  • 如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网IP的服务器上。


宏观上理解公网

 5、路由

上面我们一直在说网络层负责路径选择,路由器能转发数据,那么它到底是如何实现的呢?实际上每个路由器中都有一个路由表,它是动态更新的,记录其所连接到的其他网络的地址信息,这样我们只要知道目的地址的IP地址就能通过&子网掩码,来判断是它们否处于同一个子网中,从而进行路径选择。

所以同层的路由器之间是会相互交换路由表的,以此来更新同步路由信息。

我们的主机中也有路由表

6、分片和组装

当我们tcp/udp数据段过大时,IP协议在进行封装时,就需要对它进行分片,因为下层在发送报文时规定了报文的最大字节数,到达对方主机的网络层后IP协议还需要将数据进行组装。

  • MTU (Maximum Transmission Unit) 是网络接口可以传输的最大数据包大小(以字节为单位)。这里,MTU是1500字节,这是一个常见的以太网设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值