目录
[5.1 作用](#5.1 作用)
[5.2 分类划分](#5.2 分类划分)
[5.3 私有IP地址和公网IP地址](#5.3 私有IP地址和公网IP地址)
[5.4 数据是如何发送到服务器的](#5.4 数据是如何发送到服务器的)
一、IP的作用
IP提供了一种能力可以,把数据从主机A跨网络送到主机B的能力
二、路由的本质
在不同的子网间进行信息传递
三、IP的构成
IP = 目的网络 + 目的主机
类似我们要去陕西看兵马俑 我们需要先去目标的城市再到具体的目标地址

主机:配有IP地址,也要进行路由控制的设备
路由器:即配有IP地址,又能路由控制
节点:路由器和主机的统称
四、IP报头

IP报文如何分离报头和有效载荷的
首部长度(单位为4字节)+总长度
- 8位协议表示上层协议的类型
- 4位版本 IPV4 IPV6
- 8位服务类型(TOS)
- 3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时、最大吞吐量、最高可靠性、最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。
- 8位生存时间(TTL)
- 因为网络传递过程中可能存在报文路由的环路问题且有集线器(用于信号放大)会造成报文路由的环路问题,如果数量一多会造成网络拥堵,TTL设定经过节点最大的数量,每经过一个TTL减一,一直减到0,就弃用了。
五、网段划分
网段划分是谁划分的
运营商
5.1 作用
提升全网中定位的主机的效率,类似于我们的学号具有唯一性和很强的指向性,它的前几位可能是院号

我的得到根据一个学生的学号寻找他的时候可以迅速淘汰大量的学院

- 不同的子网起始就是包网络号相同的主机放到一起了
- 如果再子网中新增一台主机它的网络号和这个子网的网络号一定相同
- 链接路由器本质就是向路由器申请一个IP地址
- 有一种技术叫做DHCP,能够自动的给子网内新增主机节点分配IP地址,避免了手动管理IP的不便。
- 一般的路由器都带有DHCP功能,因此路由器也可以看做一个DHCP服务器。
5.2 分类划分
过去曾经提出一种划分网络号和主机号的方案,把所有的IP地址分为五类,如下图所示

但是随着时代的发展
有的类的地址太少了不够用,有的太多了大多的地址被闲置,所以我们采用CIDR(无类别域间路由)
- 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
- 子网掩码也是一个32位的正整数,通常用一串 "0" 来结尾;
- 将IP地址和子网掩码进行 "按位与" 操作,得到的结果就是网络号;
- 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;
- 可以写成IP/掩码的形式
例如:

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

5.3 私有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

上面具体的子网划分是通过路由器划分的
5.4 数据是如何发送到服务器的
- 家用路由器一端给主机分配IP 一段链接运营商的路由器,所以它内部具有两个IP(一个WAN口IP,一个LANIP(子网IP))
- 每一个家用路由器,其实又作为运营商路由器的子网的一个节点,这样运营商路由器可能会有很多级,最外层的运营商路由器,WAN口IP就是一个公网IP了
- 我们向外通信的时候必须经过运营商IP
- 子网内的主机需要和外网进行通信时,路由器将IP首部中的IP进行替换(换成WAN口IP),这样逐层替换,最终数据包中的IP地址成为一个公网IP,这种技术称为NAT
例:

上图我们的目的IP是122.77.241.3和掩码&后发现不是不是本区域的网路号,会用WANIP替换起点IP一直向上交付给路由器知道找到目的IP的网络号
不同的路由器的子网IP可以一样,子网内的主机IP地址不能重复,不同子网的主机IP可以重复
六、理解公网
例:首先网络地址会规定每个国家的网络号和掩码(这就是第一层子网划分),各个国家拿到网络号和掩码会将他们配置到各个国家的国家路由器中,并将所有国家的国家路由器通过卫星或者海底光纤链接在一起组成国际骨干网络(公网),并配置一张表记录各个国家的子网掩码和网络地址,例如在俄罗斯的一台主机向5.1.16.1的一台主机发送信息他的信息会从的这主机一路向上交付到国家路由器,通过将网络号和表中掩码&查找对应的国家,这里将信息交付到中国国家路由器

中国镜内又会规定各个省份的网络地址和子网掩码如下图,运行商会将他们配置到省间路由器上,并将他们链接到一起构成国内骨干网络(公网)(这就是第二次子网划分)每一个省间路由器都会配置一张表记录各个省份网络地址和子网掩码的表,注意:每一个路由器都有两个IP地址,所以国家路由器也有用于和各个省份通信的IP和表,上图的例子:到来中国的国家路由器后会继续通过将网络号和表中掩码&查找对应的省份,这里将信息交给陕西路由器

各个省份同理会将子网进行第三次子网划分分配给各个市,每个市包括各个对应的省份都有对应的表并组成国内骨干网络(公网)

到了市,可能由于人数不多,我们使用私有IP地址构建内网,各个市的出入口路由器,我们今天认为就是之前子网的出入口路由器

结论:我们这个网络地址,是被精心设计的,我们通过IP地址可以找到对应的目标主机
路由
- 当IP数据包到达路由器时,路由器会先查看目的IP;
- 路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器;
- 依次反复,一直到达目标IP地址。
- 这一切都要依靠每个节点内部维护一个路由表
- 查路由表的结果:1、缺省路由(不知道将IP地址传到哪里,一般会传给路由器)
- 2、明确下一跳
- 3、到达入口路由器,内网转发

转发过程例1: 如果要发送的数据包的目的地址是192.168.56.3
- 先跟第一行的子网掩码做与运算得到192.168.56.0,这个结果与第一行的目的网络地址不符
- 接着再跟第二行的子网掩码做与运算,得到的结果依然是192.168.56.0,
- 而这正是第二行的目的网络地址,因此数据包会从eth1接口发送出去;又因为192.168.56.0/24正是与eth1接口直接相连的网络,所以可以直接将数据包发送到目的主机,不需要经过再路由器转发。
转发过程例2: 如果要发送的数据包的目的地址是202.10.1.2
- 先依次和路由表前几项进行对比,发现都不匹配;
- 之后按照缺省路由条目,从eth0接口发出去,发往192.168.10.1路由器;
- 再由192.168.10.1路由器根据它自身的路由表决定下一跳地址。
七、IP的分片和组装
因为数据链路层规定链路层收到的IP报文(有效载荷)大小不能超过MTU(1500字节),所以如果网络层的报文超过1500就要进行封装

16位标识
标识一个报文的唯一性,如果分片了,分片报文的标识就是相同的
3位标识
第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到),第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文,第三位表示"更多分片",如果分片了的话,最后一个分片置为0,其他是1,类似于一个结束标记。
13位分片
是分片相对于原始IP报文开始处的偏移,其实就是在表示当前分片在原报文中处在哪个位置,实际偏移的字节数是这个值×8得到的,因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)(因为我们是16位总长度用13位片偏移来决定8的倍数后三位都为0,可以不表示)。注意分片之后的报文也要携带IP报头,报头也要算字节数

如何组装
1、如何区别IP报文是否有分片,如何挑出来分片的报文
遍历所有的报文只要发现一个报文的3位标志位的分片标志位为1或者片偏移>0就是存在分片,取出所有相同的16位标识
2、你怎么保证挑出来的分片是完整的
按照片偏移进行升序排列,判断自身报文长度+片偏移是否等于下一片的片偏移
细节一
任意分片丢失,会导致整个报文进行重传,变相的导致丢包的概率增大,所以IP通信不是主流,这也是为什么滑动窗口不一次性将所有的数据一次传输的原因 1460是最大段尺寸
