路由和寻址


IP协议,是一个处于垄断地位的网络层协议 IPV4就是IP协议的第四个版本,是目前互联网的主要网络层协议

IP协议会遇到的问题,但不会处理

  1. 封包损坏,数据传输过程中被损坏
  2. 丢包,数据发送过程中丢失
  3. 重发,数据被重发,比如中间设备通过2个路径传递数据
  4. 乱序,到达目的地数据和发送数据不一致 网络层需要解决的问题:
  5. 延迟
  6. 吞吐量
  7. 丢包率

IP协议的工作原理: IP协议接受IP协议上方的Host-To-Host协议传来的数据然后进行拆分,这个能力叫做分片(Fragmentation)

分片(Fragmentation): 将数据切分成片,IP协议通过它下面的局域网(链路层)协议传输数据,因此需要适配底层传输网路的传输能力

IP协议会为每一个切片增加一个协议头 image.png 源IP地址: 目标IP地址: 服务类型:响应不同的用户诉求,用来选择延迟、吞吐量、和丢包率之间的关系 首部长度:用来描述IP协议头的大小 总长度:报文的长度 标识:发送方分配,代表的其实是顺序 片偏移:要不要分包,以及怎么分包 协议类型:主要描述上层协议的类型,比如TCP

“鱼与熊掌”不能兼得--- 延迟、吞吐量、丢包率 延迟(latency)--- 指的是1bit的数据从网络的一个终端传送到另一个终端需要的时间 吞吐量(Throughout)---单位时间内可以传输的平均数据量 丢包率(Packet loss)--- 发送出去的封包没有到达目的地的比例

例子: 丢包率与延迟往往会互相影响,比如moba类游戏中延迟作为平均指标。如果丢包率太多会导致重发,进而影响延时。 对于网盘下载,要求提高吞吐量,延迟不是重要指标。 对于语音电话,要求丢包不能太严重。只有极少数的场景才会要求不丢包,比如网络控制场景。

所以对于服务类型这个字段有下面四种情况提供选择:

  1. 低延迟
  2. 高吞吐量
  3. 低丢包率的
  4. 低成本的

寻址

IPV4地址:4个8位排列而成,总共可以编排43亿个地址 寻址就是如何根据IP地址找到设备

步骤1:找到顶层网络 比如103.16.3.1 的最顶层网络号可以与255.0.0.0 (子网掩码)做位与运算得到 103.16.3.1 & 255.0.0.0 = 103.0.0.0 步骤2:找到下一层网络 接下来要找到下一级网络,就需要使用IP地址和下一级的子网掩码做位与运算 103.16.3.1 & 255.255.0.0 = 103.16.0.0 步骤3:再找到下一层网络 使用255.255.255.0子网掩码找到下一级网络是103.16.3.0 103.16.3.1 & 255.255.255.0 = 103.16.3.0 步骤4:定位设备 设备就在子网103.16.3.0中,最终找到的设备号是1

路由

在上面寻址过程中,IP总是在局域网中,如果目的地不在局域网中,那么就需要把IP封包,寻找下一个路径(下一个网关)。 比如: 本机IP是192.168.5.48 目的IP地址:39.156.66.18 那么就需要通过路由来进行转发,首先判断目标IP是否在路由表中,如果没有则将数据发向默认网关(输入route查看路由表) image.png 数据转发到默认网关接口(192.168.5.1)之后,由路由器规划路径; 数据先转发到上级路由器(192.168.5.1)再转发到更上一级的路由器(192.168.50.1),之后利用ISP提供的公网IP在整个互联网中进行传输,直到找到目的IP image.png

总结: 寻址:通过地址找设备,和现实中的寻址是一样的,比如根据地址找到一个公寓,在IPV4协议中寻找到的是一个设备所在的位置 路由:本质是路径选择,就好像是知道地址,但是到了每个十字路口,还需要选择具体的路径

思考题: 127.0.0.1 、localhost、0.0.0.0 的区别?

127.0.0.1、localhost 和 0.0.0.0 在网络编程和配置中都有所使用,它们各自有不同的用途和含义:

  1. 127.0.0.1
    • 这是回环地址(Loopback Address),用于网络软件的测试以及本机内部通信。
    • 当你访问 http://127.0.0.1 时,你是在与自己的计算机通信,而不是与外部网络中的任何设备通信。
    • 它通常用于开发和调试,因为通过这个地址,你可以确保所有的网络请求都停留在本地,不会发送到外部网络。
  2. localhost
    • 这是一个特殊的主机名,它也指向回环地址 127.0.0.1。
    • 使用 localhost 时,你可以通过主机名而不是 IP 地址来引用本机,这使得配置和代码更具可读性和可维护性。
    • 在大多数操作系统中,localhost/etc/hosts 文件中被映射到 127.0.0.1。
  3. 0.0.0.0:
    • 这是一个特殊的 IP 地址,表示任意可用的 IPv4 地址。
    • 在网络配置中,当你将服务器的监听地址设置为 0.0.0.0 时,它告诉操作系统监听所有可用的网络接口上的指定端口。
    • 这对于服务器来说很有用,因为它允许服务器接受来自任何网络接口的连接请求,而不仅仅是一个特定的接口。 总结来说,127.0.0.1localhost 都指向本机的回环接口,用于本地通信和测试,而 0.0.0.0 用于配置服务器监听所有网络接口上的连接请求。