【计算机网络】IP协议(下)

文章目录

  • 1. 特殊的IP地址
  • 2. IP地址的数量限制
  • 3. 私有IP地址和公网IP地址
    • 私有IP为什么不能出现在公网上?
    • 解决方案——NAT技术的使用
  • 4. 路由
  • 5. IP分片问题
    • 为什么要进行切片?
    • 如何做的分片和组装?
      • 16位标识
      • 3位标志
      • 13位片偏移
      • 例子
    • 细节问题
      • 如何区分不同的片?
      • 如何知道分片了?
      • 如何判断是开头报文 中间报文 结尾报文?
      • 如何保证把分片收全了?
      • 结论
  • 6. 自己做一次分片

1. 特殊的IP地址

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


2. IP地址的数量限制

IP地址 是一个 4字节32位的正整数,共有2^32个IP地址
TCP/IP协议规定,每一个主机都需要IP地址
而由于特殊的IP地址的存在,数量不足43亿

为了解决IP地址不足的问题,有三种方案

方案一:动态分配IP地址
使用的是 DHCP 技术(子网是由路由器划分好的,局域网的所有主机的IP地址,都是从路由器中申请的)
假设在你家里面,手机连接上热点,当断开热点时,相当于在路由器层面上被回收了
(用的时候就给你,不用就回收)

方案二:NAT技术(后面会讲)

方案三:IPV6
IPV6 用16字节 128比特位来表示一个IP地址,但目前来没有普及

3. 私有IP地址和公网IP地址

IRFC 1918规定 用于组建局域网的私有IP地址

I10.* 前8位是网络号
I172.16. 到172.31. 前12位是网络号
192.168.* 前16位是网络号
包含这个范围中的,都成为 私有IP,其余都称为 全局IP(公网IP)

私有IP为什么不能出现在公网上?

家里的路由器是可以通过私有IP,去构建子网的
由于每个家用路由器都可以构建相同的子网,所以私有IP是可以重复存在的


【计算机网络】IP协议(下)_第1张图片

src作为源IP地址,dst作为目的IP地址
想要从当前主机 发送到公网上


【计算机网络】IP协议(下)_第2张图片

由于当前主机 并不认识 目的IP地址是谁 ,所以就会向上交付给 家用路由器
由于家用路由器 既属于你的设备,又属于运营商的设备,所以有两个IP
子网IP 又可称为 LAN口IP 表示 你家里的设备
WAN口IP 表示 运营商的设备


【计算机网络】IP协议(下)_第3张图片

发现目的IP122…3 是一个 公网IP,所以就将其继续向上交付 运营商路由器


【计算机网络】IP协议(下)_第4张图片

运营商路由器 继续向上交付 交给对应的 主机
服务器收到报文请求,做出响应 构建response 向下交付时,是没办法向下交付的
源IP地址(src) 是私有IP地址
子网中的私有IP地址是可以重复存在的,所以私有IP不能出现在公网上

解决方案——NAT技术的使用

【计算机网络】IP协议(下)_第5张图片

从200的主机 交付给家用路由器, 家用路由器发现其目的地址是公网IP,则继续向上交付


【计算机网络】IP协议(下)_第6张图片

在交付之前,需将 LAN 口 IP(子网IP) 转换成 WAN 口 IP


【计算机网络】IP协议(下)_第7张图片 【计算机网络】IP协议(下)_第8张图片

再次将LAN口 IP(子网IP) 替换成 WAN口 IP


【计算机网络】IP协议(下)_第9张图片

主机收到报文后,构建响应,形成响应报文,就可以返回
由于目的IP地址(dst) 不是私有IP,所以可以向下交付了

将源IP在内网环境下不断被替换的技术 称为 NAT (地址转化)技术

4. 路由

假设 你坐火车 去上海同济大学报道,当下火车时,发现东西丢了,幸好身上还藏有20块钱
此时根本不知道在哪里,只知道在火车站,并不清楚 同济大学在哪里
所以只好找个大爷 问路,询问同济大学怎么走
在现实中可能大爷并不知道,或者直接拒绝回答你的问题

若在网络环境中,存在一个路由器也不知道这个报文去哪里,但它即便不知道,也会想办法帮助你

按照网络的情况,大爷虽然没去过,但是大概知道在那个路上,所以给你说了一个路线到附近

到了附近,你又不认识路了,又问了一个大爷,询问同济大学怎么走,最后到达同济大学

所以问别人路,一定要告诉别人你去哪里


结论:

1. 当一个报文到了某个路由器内部,询问路由器时,首先要告诉路由器自己要去哪里,所以IP报头中包含目的IP

2. 大爷思考路线时,并给出结果 相当于 查找路由表

3. 碰到大爷知道下一站该怎么走,或者 碰到 大爷并不知道怎么走,但不会拒绝你,会给你介绍知道路的人相当于 路由器并不知道你去哪里,但确定你当前不是要在 现在的网络里

4. 当到达同济大学保安处时,询问同济大学保安怎么走,大爷告诉你这里就是
相当于 到达目标子网的入口路由器处


实际上并不是去同济大学,而是去同济大学的11号宿舍楼找辅导员,但问路时,并不会问同济大学的11号宿舍楼在哪里
在路上时,只需问同济大学在哪里即可

当到达同济大学时,才会去问同济大学的11号宿舍楼怎么走
相当于 问路口路由器 要去的目标主机在哪里

整个报文转发的过程:
先根据路上网络进行路上转发,到了目标网络的路口路由器处,再根据目标主机进行交付

【计算机网络】IP协议(下)_第10张图片

5. IP分片问题

为什么要进行切片?

【计算机网络】IP协议(下)_第11张图片

数据链路层规定 所发出去的单个帧的有效载荷不能超过MTU(最大传送单元 1500字节)
IP报文送多大并不是由 IP说了算,真正由报文多少是由TCP决定的

若TCP给IP一个较大报文,而在数据链路层 又不给转,因为大小超过1500字节
所以IP只能 进行分片


【计算机网络】IP协议(下)_第12张图片

分片只能由当前IP来做,组装也只能由对方的IP来做
因为分片的信息只有ip协议知道

如何做的分片和组装?

16位标识

【计算机网络】IP协议(下)_第13张图片

所以IP报头 存在 16位标识
16位标识就是 16位整数,保证自己和其他的保文不重复


3位标志

【计算机网络】IP协议(下)_第14张图片

3位标志 共有3个比特位
第一位 为保留位 这个位不用,后面需要的使用再用

第二位
若为1 表示禁止分片,若报文长度超过MTU,则IP模块会丢弃报文
若为0 表示 允许分片

第三位 表示更多分片
若分片了,则最后一个分片置为0,其他为1

(看不懂下面有例子进行理解)


13位片偏移

【计算机网络】IP协议(下)_第15张图片

若不分片,对应的报文 在原始报文中 起始偏移量为0

例子

【计算机网络】IP协议(下)_第16张图片

将一个字节为4500的报文,分片成三个1500字节的保文
所以三个1500字节的报文 16位标识相同,设置为1234

三位标志,若后面有报文就设为1,若后面没有保文 就设为0

第一个报文的片偏移为0,第二个报文的片偏移为1500,第三个报文的片偏移为3000

细节问题

如何区分不同的片?

【计算机网络】IP协议(下)_第17张图片

假设为数据的接收方,不断收报文
若有两种客户端发送报文,第一种客户端的报文可能进行分片,第二种客户端的报文也可能进行分片,两者可能糅在一起
报文中携带源IP,可以通过源IP 区分不同的客户端的能力


如何知道分片了?

1. 只要片偏移不是0(说明分片过了),提取对应的标识
2. 若片偏移为0,再看更多分片为1(说明还有分片),则一定分片了


如何判断是开头报文 中间报文 结尾报文?

若更多分片为1,片偏移为0, 则为开头报文
若更多分片为1,片偏移不为0, 则为中间报文
若更多分片为0,片偏移不为0 ,则为 结尾报文
若更多分片为0,片偏移为0,则为独立报文


如何保证把分片收全了?

即如何保证 开始报文 中间报文 结尾报文 没有丢

若 开始报文或者结尾报文丢失,通过上述判断条件即可得知
通过偏移量 进行排序,每一个偏移量之间的差值应该是相同的,若差值不同,则中间报文丢失了


结论

1. 网络中分片,尽量让它成为少数情况

2. 为什么不太建议网络分片?
当IP进行切片时,丢失一部分,导致报文丢失

所以无论是TCP或者UDP,当IP丢失报文时,就真的丢了
但TCP可以进行超时重传,传给IP一份新的报文
而UDP什么都不干

过多的分片,容易增加丢包率


由数据链路层定制规则,数据不能超过1500字节
当来自TCP的报文数据过大时,IP会进行分片,但分片会导致增加丢包率
可IP也没办法,IP只是用来执行命令的

所以一切问题出在TCP上面
只有TCP每次将数据发送小一点,才能减少丢包率
所以滑动窗口的发送区域的报文 拆成多个报文 向下交付给IP


3. 怎么做到分片减少?
所以 TCP协议,尽量发送数据不要过大

【计算机网络】IP协议(下)_第18张图片

MTU(最大传送单元 1500字节)
IP标准报头为20字节,有效载荷为1480
TCP标准报头为20字节,有效载荷为1460

把TCP传送的1460 这样的数字 称为 MSS (最大段尺寸)
TCP发送的报文数据 不要超过1460

6. 自己做一次分片

【计算机网络】IP协议(下)_第19张图片

假设 一个已经被封装的IP报文 为3000字节

分片后,每一片都是IP报文,所以都要携带报头
所以应该分为3片


【计算机网络】IP协议(下)_第20张图片

首先将前1500个字节作为开始报文,即 20+1480
其有效载荷为1480 ,没有超过1500
可以看作切片的第一片


【计算机网络】IP协议(下)_第21张图片

将IP报文剩余的1500字节 拆分出 一个 20字节,在1480 前面重新加入一个 20字节的报头(未来要去掉)
可以看作切片的第二片


【计算机网络】IP协议(下)_第22张图片

此时只剩下 20字节,在其前面重新加入一个 20字节的报头(未来要去掉)
可以看作切片的第三片


【计算机网络】IP协议(下)_第23张图片

你可能感兴趣的:(计算机网络,计算机网络,tcp/ip,网络)