基本概念
- 子网和局域网是一个概念
- 主机: 配有 IP 地址, 也能进行路由控制的设备;
- 路由器: 即配有 IP 地址, 又能进行路由控制;
- 节点: 路由器和主机的统称。
背景
- 两主机并不是直接连接的,路径选择问题?为什么? 由网络层(IP)解决
- 怎么把数据交给路由器,怎么办? 这是局域网通信的问题,两主机是直连的,在同一个子网中,由数据链路层解决
深入理解IP
- 公网IP在全球具有唯一性。
- IP,比如 192.168.72.1,这是点分十进制的
- IP地址 = 目的网络 + 目的主机号
重谈TCP和UDP
- IP解决的核心问题是主机距离变长
网络层报头
- 4位首部长度:跟TCP报头中的一样
- 16位总长度:报文的大小
如何解包?封包?
解包:固定的20字节,然后根据4位首部长度+16为总长度来解包
封包:根据格式封包就可以了8位协议:表示上层协议类型(UDP,TCP…)
如何分用?
根据8位协议,就可以知道交给上层的哪个协议。
- TTL(生存时间):报文的生存时间,每经过一个路由器都会 - -,可以防止报文在环路中一直滞留,占用资源的情况。
网段划分
- 是什么?为什么?怎么办?
是什么?
- 有了目的IP是不够的,网路是被** 精心设计 (子网划分)**的
被谁设计的? 网路服务提供商
- 路由器有两个IP,路由器的主机号大都为1
- 子网是有网络号的(比如xxx.xxx.xxx.0)
- 子网内的IP地址,都是从哪里来的?谁给的?
路由器有构建子网的能力 - IP = 目标网络号+目标主机号
- IP报文被转发:
- 根据目标网络,将报文转发到目标网络
- 转发到目标网络后,将报文在内网进行转发
为什么?
- 主机A将数据发送给主机B,但如何找到主机B?
- 线性遍历全球的主机,效率很低
- 主机A知道主机B的IP,将主机B的IP与主机A的网络号进行比较不相等,将数据交给路由器,路由器根据报文中目的IP查路由表,确定了主机B的网络,将报文交给相应的路由器,最后进行内网转发交给主机B。
- 第二种方式效率高—>本质是查找—>本质是淘汰(淘汰效率高)
- 在进入目标子网之前,不关心主机号—>报文在进行转发过程中,在进入目标网络之前,路由器只关心网络号,之后就是内网转发
- 在进行路上路由时,路由的基本单位是网络
- 总结,根据上面知道了为什么? 支持网络建设,提高了淘汰率。
怎么办?
- 以前划分网络号和主机号的方式
子网掩码
- 新的划分方案CIDR(Classless Interdomain Routing)
IP 地址和子网掩码还有一种更简洁的表示方法,例如 140.252.20.68/24,
表示 IP 地址为140.252.20.68, 子网掩码的高 24 位是 1,也就是
255.255.255.0
特殊IP
- 将 IP 地址中的主机地址全部设为 0, 就成为了网络号, 代表这个局域网;
- 将 IP 地址中的主机地址全部设为 1, 就成为了广播地址, 用于给同一个链路中
相互连接的所有主机发送数据包; - 127.*的 IP 地址用于本机环回(loop back)测试,通常是 127.0.0.1
IP地址不够用
- 随着网络的发展,更多的设备需要入网,IP不够用:
- 动态分配 IP 地址: 只给接入网络的设备分配 IP 地址. 因此同一个 MAC 地址的设备, 每次接入互联网中, 得到的 IP 地址不一定是相同的;
- NAT 技术(后面会重点介绍);
- IPv6: IPv6 并不是 IPv4 的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6 用 16 字节 128 位来表示一个 IP 地址; 但是目前 IPv6 还没有普及;
公网IP和私有IP
网络可以分为局域网和公网
私有IP(只能用来组建局域网,私有IP不能出现在公网中)
- 10.*,前 8 位是网络号,共 16,777,216 个地址
- 172.16.到 172.31.,前 12 位是网络号,共 1,048,576 个地址
- 192.168.*,前 16 位是网络号,共 65,536 个地址
公网IP不能重复
在网络架设时,在内网,公网,在统一采用各自的子网掩码的方式,进行网络建设。
运营商
基本网络情况
申请IP,无论公网,内网,网络建设工作—>由运营商来做
家庭路由器有构建子网的功能
局域网—>不仅我们自己在做,运营商也在做
路由器:有家庭的,也有企业的
路由器有两个IP:LAN口IP(对内),WAN口IP(对外)
家庭路由器出去的报文到想到达公网,需要先到运营商构建的一个更大的子网中。
为什么交钱给运营商?
我们的报文必须经过运营商的转发才能到达公网。
运营商可以因为你欠费不让你入公网
访问非法目标地址,会被拦截科技上网的本质就是骗过运营商,不让运营商识别出来。
内网–>公网
- 如果目的IP不在该子网中,会向上交付(交付给更大的子网)。
公网–>内网?(数据链路层会讲)
NAT技术
- NAT技术为什么缓解了IP不足的问题?
单独切分了一部分IP,只用它来做内网,这样IP地址就可以重复利用了。
全球网络
- 公网就是对全球公网IP进行划分的过程
- 在路由表条目中找不到目的网路号时,就会将报文交给缺省路由
路由
- 路由器,一定尽可能帮助我们
- 配置默认路由
- 怎么走
- 到达入口路由器—>之后就是根据目标主机进行内网转发
以上都是根据目标网络进行路由
- 路由表信息,查看路由表信息的指令是 route
- 路由表的信息有路由表生成算法来维护
- IP报文的转发过程本质就是进行各个子网之间的转发
- IP解决的核心问题:路径选择,淘汰其他子网
- 根据目的网络进行路由
- 内网转发
分片和组装
为什么不把滑动窗口的数据打成一个报文呢?而是一个又一个的段报文?
规定:数据链路层单次发送的数据帧不能超过MTU(1500)
IP报文太长,IP报文会分片—>网络层自己和对方分别进行分片和组装
分片好不好?
- 分片和组装,上层传输层不关心
- 分片为更多的报文,任意一个丢包,组装就是不完整的—>分片之后丢包的概率增加,所以分片不能作为网络发送的主流
如何不分片?
传输层不能发过大的报文,所以滑动窗口的数据会被分为一段一段的数据
如果分片,如何分片?
16 位标识(id): 唯一的标识主机发送的报文. 如果 IP 报文在数据链路层被分片
了, 那么每一个片里面的这个 id 都是相同的.
3 位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要
用到). 第二位置为 1 表示禁止分片, 这时候如果报文长度超过 MTU, IP 模块就会丢弃报文. 第三位表示**“更多分片”**, 如果分片了的话, 最后一个分片置为 0, 其他是 1. 类
似于一个结束标记.
13 位分片偏移(framegament offset): 是分片相对于原始 IP 报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 除以 8 得到的. 因此, 除了最后一个报文之外(之前如果都是 8 的整数倍,最后一片的偏移量也一定是 8 的整数倍), 其他报文的长度必须是 8 的整数倍(否则报文就不连续了).
注意:片偏移(13 位)表示本片数据在它所属的原始数据报数据区中的偏移量**(以 8 字节为单位)**
- 如何判断是否是分片
- 是否将分片收全?
- 如何组装?
组装,就说明了已经收全了,根据片偏移量就可以了。
- 如何分片?
- 对IP报文的有效载荷进行分片
- 片偏移量(必须是8的整数倍)是数据相对于有效载荷的偏移量
- 分片之后,每一片就是一个IP报文
- 分片和组装不一定只有在通信两端才会进行,在网络中也有可能进行