![](/myblog/blog-placeholder-4.jpg)
路由和寻址
IP协议,是一个处于垄断地位的网络层协议 IPV4就是IP协议的第四个版本,是目前互联网的主要网络层协议
IP协议会遇到的问题,但不会处理
- 封包损坏,数据传输过程中被损坏
- 丢包,数据发送过程中丢失
- 重发,数据被重发,比如中间设备通过2个路径传递数据
- 乱序,到达目的地数据和发送数据不一致 网络层需要解决的问题:
- 延迟
- 吞吐量
- 丢包率
IP协议的工作原理: IP协议接受IP协议上方的Host-To-Host协议传来的数据然后进行拆分,这个能力叫做分片(Fragmentation)
分片(Fragmentation): 将数据切分成片,IP协议通过它下面的局域网(链路层)协议传输数据,因此需要适配底层传输网路的传输能力
IP协议会为每一个切片增加一个协议头
源IP地址:
目标IP地址:
服务类型:响应不同的用户诉求,用来选择延迟、吞吐量、和丢包率之间的关系
首部长度:用来描述IP协议头的大小
总长度:报文的长度
标识:发送方分配,代表的其实是顺序
片偏移:要不要分包,以及怎么分包
协议类型:主要描述上层协议的类型,比如TCP
“鱼与熊掌”不能兼得--- 延迟、吞吐量、丢包率 延迟(latency)--- 指的是1bit的数据从网络的一个终端传送到另一个终端需要的时间 吞吐量(Throughout)---单位时间内可以传输的平均数据量 丢包率(Packet loss)--- 发送出去的封包没有到达目的地的比例
例子: 丢包率与延迟往往会互相影响,比如moba类游戏中延迟作为平均指标。如果丢包率太多会导致重发,进而影响延时。 对于网盘下载,要求提高吞吐量,延迟不是重要指标。 对于语音电话,要求丢包不能太严重。只有极少数的场景才会要求不丢包,比如网络控制场景。
所以对于服务类型这个字段有下面四种情况提供选择:
- 低延迟
- 高吞吐量
- 低丢包率的
- 低成本的
寻址
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查看路由表)
数据转发到默认网关接口(192.168.5.1)之后,由路由器规划路径;
数据先转发到上级路由器(192.168.5.1)再转发到更上一级的路由器(192.168.50.1),之后利用ISP提供的公网IP在整个互联网中进行传输,直到找到目的IP
总结: 寻址:通过地址找设备,和现实中的寻址是一样的,比如根据地址找到一个公寓,在IPV4协议中寻找到的是一个设备所在的位置 路由:本质是路径选择,就好像是知道地址,但是到了每个十字路口,还需要选择具体的路径
思考题: 127.0.0.1 、localhost、0.0.0.0 的区别?
127.0.0.1、localhost 和 0.0.0.0 在网络编程和配置中都有所使用,它们各自有不同的用途和含义:
- 127.0.0.1:
- 这是回环地址(Loopback Address),用于网络软件的测试以及本机内部通信。
- 当你访问
http://127.0.0.1
时,你是在与自己的计算机通信,而不是与外部网络中的任何设备通信。 - 它通常用于开发和调试,因为通过这个地址,你可以确保所有的网络请求都停留在本地,不会发送到外部网络。
- localhost:
- 这是一个特殊的主机名,它也指向回环地址 127.0.0.1。
- 使用
localhost
时,你可以通过主机名而不是 IP 地址来引用本机,这使得配置和代码更具可读性和可维护性。 - 在大多数操作系统中,
localhost
在/etc/hosts
文件中被映射到 127.0.0.1。
- 0.0.0.0:
- 这是一个特殊的 IP 地址,表示任意可用的 IPv4 地址。
- 在网络配置中,当你将服务器的监听地址设置为 0.0.0.0 时,它告诉操作系统监听所有可用的网络接口上的指定端口。
- 这对于服务器来说很有用,因为它允许服务器接受来自任何网络接口的连接请求,而不仅仅是一个特定的接口。
总结来说,
127.0.0.1
和localhost
都指向本机的回环接口,用于本地通信和测试,而0.0.0.0
用于配置服务器监听所有网络接口上的连接请求。