当前位置: 首页 > news >正文

基础知识-互联网模型

1. 注意事项的解释(背)

OSI: 开放系统互联 参考模型 Open System Interconnection

  1. 上三层是为用户提供服务的, 下四层是实际传输数据的
    不管是本地访问还是网络访问,都要经历上三层, 比如我搜百度, 我输入百度俩个字, 是上三层, 回车搜索走的就是下四层, 会话层会对这个操作进行判断,是本地访问还是网络访问
    再如: word, 我敲字进去, 走的是上三层, 点击保存, 直接保存在磁盘里面, 不需要走网络访问(会话层能够判断出来走的就是本地)

    如果给B发送超过65535字节的数据包, 电脑B会死机
    ping xxxx -l 65536 , 但是会限制A发送这么大的数据包
  2. 下四层传输的单位:
    传输层: 数据段(报文) 上面层给的数据如果很大, 会把数据进行拆分,拆成数据包
    网络层: 数据包(报文分组)(大小不能超过2^16=65535Byte)
    数据链路层: 数据帧
    物理层: 比特位
  3. 越上层的设备越智能, 能识别当层以下的所有协议, 越贴近用户,越下层的设备越傻瓜,越贴近于硬件
    数据链路层只认识MAC, 网络层认识MAC和IP, 传输层认识MAC,IP,端口号
  4. 数据发送时,数据从上层向下层进行传输; 接受数据时,数据从下层向上层进行传输
  5. 数据不能跨层传输, 每层之间通过逻辑的接口传递
  6. 物理层负责实际数据传输,其他层只是逻辑对应
    比如数据链路层, 打上去的包头, 只有数据链路层可以看
  7. OSI模型只是理论模型, 不能对应实际协议或硬件(假模型,实际使用的时TCP/IP协议)

2. 基本数据传输过程

1> A主机发数据

  1. 应用层输入搜索的网页
  2. 表示层把数据转换为机器看得懂的二进制
  3. 会话层判断是本地访问还是网络访问
  4. 传输层把数据进行分组, 并且加上一个报头,报头里面包含源端口号和目标端口号
  5. 网络层把数据加上一个包头, 包头里面包含源IP和目标IP(目标IP通过DNS/局域网查询得到)
  6. 数据链路层把数据加上一个帧头和帧尾, 帧尾是用来给不同数据帧做区分用的, 帧头里面包含源MAC和目标MAC( ① 查A的MAC表(ip-mac) ②) ARP广播找到
  7. 物理层把数据进行传输
    2> 中间交换机接受数据
  8. 直接进入数据链路层, 然后交换机拆开帧头, 解析目标MAC,先查询交换机自己的MAC表(MAC-接口), 没找到就进行泛洪找到目标以及目标所对应的接口, 写入自己的MAC表里面
  9. 进入物理层继续进行传输
    3> B主机接受数据
  10. 物理层把数据接受后, 传给数据链路层
  11. 数据链路层识别帧头, 确认目标MAC地址, 拆掉帧头和帧尾
  12. 网络层识别包头,确认目标IP, 拆掉包头
  13. 传输层识别报头, 确认是哪个服务端口, 拆掉报头,并且把报文进行组装
  14. 会话层向上进行传输
  15. 表示层把数据从二进制转换为用户看得懂的文字/图片
  16. 应用层接收到数据, 分配给具体的服务进行处理
  17. 处理完毕原路返回, 源地址和目标地址反过来

问题: 为什么已经确认了目标MAC地址是访问目标, 还需要确认目标IP地址是访问目标?
因为传输过程中IP地址可能会变

3. 通信

电脑,交换机,路由器是怎么通信的?

3.1 交换机通信原理

  1. 协议和设备分层
    协议
    网络层: 设备: 路由器 协议: IP地址
    数据链路层: 设备: 交换机 协议: MAC地址
    交换机不认识IP, 因为下层识别不了上层,上层能够识别下层
    设备分层
  1. 路由器: Router : 用于不同逻辑网段通信的. 会分割广播域
  2. 交换机: Switch : 用于相同逻辑网段通信的. 不会分割广播域
  1. 电脑A->交换机->电脑B
  1. 电脑A封装数据(研究对象为A)
    ① 电脑A封装数据
    传输层:
    Sport: 10001 (1W+随机端口) 源端口
    Dport: 80 (用户双击电脑A上指定客户端,客户端中也包含目标端口)目标端口
    网络层:
    SIP: 源IP A(电脑A如何获取A的IP?人手工分配,电脑识别网卡获得)
    DIP: 目的IP B(电脑A如何获得B的IP?① 局域网: 拿到本机, 询问或查询 ② 公网: DNS获取B的IP)
    IP的获取可以通过用户, 因为用户直接搜索,通过DNS就能解析出IP了
    MAC地址不能通过用户, 因为比较难,不能通过用户间接获取
    数据链路层
    SMAC: 源MAC A(电脑A如何获得A的MAC? 厂商写在A的网卡里面了)(网卡既有IP地址,也有MAC地址)
    DMAC: 目标MAC B(电脑A如何获得B的MAC?①查询A的MAC地址表.②使用ARP广播 IP->MAC)
    ② 电脑A查询未知MAC地址的方式:(顺序执行)
    1> 查询的电脑A的MAC地址表(临时建立,断电会消失)(IP–MAC的表,IP可能会变,所以是临时存储)
    电脑A和其他电脑通信过(ping过), 才会建立这个表,windows查询这个表的方式: arp -a

    发qq没有建立MAC–IP表的原因: 走的是公网, 我们需要内网进行通信
    只有通过信, 才能记录在这个表里面, 然后此时我们已知B的IP,直接通过主机A的MAC表得到B的MAC, 但是如果没有通信, 只能采取方法2了
    2> 重启后, 数据清空了,查表没有查到, 此时使用ARP广播(ARP:地址解析协议 Address Resolution Protocol )(IP->MAC 已知对方IP,通过发广播的方式然后知道对方的MAC)

A知道B的IP, 但是不知道B的MAC, 发送ARP广播, B收到了, B知道找到的是它, 因此返回一个数据包, 包含所有地址, 此时A收到了, A知道了B的MAC, 并且把B的MAC地址和IP地址写入MAC地址表.

知道对方的MAC,不知道对方的IP->使用RAP广播
2) 交换机处理MAC地址(研究对象是交换机)(顺序执行)
1> 查询交换机MAC地址表(临时建立)(接口号–MAC)
交换机是没有MAC地址的, 里面的MAC地址表:接口-连接设备的MAC组成的表, 这个MAC是连接设备的MAC; 如果电脑B和交换机通过信, 就会记录到交换机的地址表里面, 交换机就会在表里面查, 哪个口对应B的MAC, 如图是2口, 那么直接通过2口找到B

2> 重启后, 数据清空了查表发现是空的,那么,此时采用的是泛洪查询
泛洪是指, 会给所有的口(除去发送数据的口,也就是交换机和A的口),都发消息,此时我们知道B的MAC地址, B收到消息后, 进行回复(包含三个地址), 交换机收到回复之后,确认了2口对应的就是主机B的MAC, 然后把2-主机B的MAC写入交换机的MAC地址表里面, 后续如果A/C再给B发消息, 交换机直接就可以查表找到对应B的接口, 把数据从接口发送给B,而不是再次泛洪
总之: 交换机关注的, 就是从哪个口把消息准确发给目标主机

补充:
广播和泛洪的区别

  1. 广播: 广播是网络层的广播, 广播的是IP地址(是拿IP查MAC)
  2. 泛洪: 泛洪是数据链路层的泛洪, 泛洪的地址是拿MAC查接口
    广播地址和泛洪地址
    广播地址
  3. 单网段广播地址: 192.168.166.255 知道源地址,不知道目标地址(ARP)
  4. 全网段广播地址: 255.255.255.255 源地址不知道,目标地址也不知道(DHCP的Discover广播)
    广播域: 两种广播到达的范围是一样的, 都是以路由器为截断
    泛洪地址
  5. 电脑B处理方式: 从下往上进行拆包
  1. 交换机的MAC地址
  1. 二层交换机(从下往上数,第二层就是数据链路层): 整个交换机只拥有一个MAC地址(交换机48个口根本分不过来,所以不是给接口用的,它只是给交换机用的), 此MAC不能用于网络通信, 仅用于交换机之间特殊运算使用.(不用管这个运算), 总之: 交换机上面的接口,既没有IP也没有MAC
    电脑和路由是同一种设备的原因, 因为电脑和路由的网卡是真实网卡(上面有IP,也有MAC是绑死的)
  2. 三层交换机(从下往上数,第三层就是网络层): 此交换机每个网卡既有独立的IP地址,也有独立的MAC地址, 就可以看成48口的路由器
    补充:
    常见单词
    Source: 源头
    Destination: 目的地
  1. 基本原则
    交换机既不识别一个接口对应多个MAC地址, 也不识别一个MAC对应多个接口
    路由器既识别一个网卡对应多个IP地址, 也能识别一个IP对应多个网卡
    网卡口VS网关口VS交换机上的接口
    只有电脑连着路由器的那个口是网关口, 其他的都是网卡口, 交换机的口只是单纯的接口

    积分问题
  1. 电脑A和电脑C怎么通信, 电脑A和电脑D怎么通信
    电脑A和电脑C通信
    A拿着C的IP在自己的MAC表里面查询C, 找到了数据包就进入交换机,如果没有找到, 就进行ARP广播,最后找到了C的MAC,写入A的MAC表里面, 然后进入交换机,交换机S1进行查表, 表里面没有C的MAC, 因此进行泛洪, 通过S2发送泛洪请求, 此时C进行返回, 并且记录到S1和S2的MAC表里面
    A查询B的时候是查询请求, 会先查表再泛洪. A查询C的时候, S1发送给S2的是泛洪请求, 不会引发S2的查表过程, 直接泛洪找C(此时S1的MAC记录表里面记录的是3-C的MAC, S2的MAC记录表里面记录的是5-C的MAC)

    电脑A和电脑D
    情况1: S1的3口记录的是最后一个和它进行通信的主机的MAC, 假设之前S1和D进行通信过信, 那么3口指向的就是D, 直接就可以查表然后找到D,然后进行通信

    情况2: S1的3口没有记录D, 记录的是其他的主机, 那么此时就和查C的情况一样

3.2 路由器通信原理

拓扑图
Fa 0/0
Fa: faster 以太网
0/0: 第一个0是, 模块0(路由器里面可以新加接口的东西), 第二个0是模块上的0网卡

通信原理

  1. 电脑A封装数据(研究对象)
    SIP: A
    DIP: B
  2. 数据包到达R1(研究对象是R1)
    路由器处理未知IP的方式: 路由器绝不是通过广播查询未知IP地址的
    只有一个方式: 查询路由表: (路由器是靠网段来建立路由表的,而不是单个ip):
    查询指令: route print
    直连网段: 直连网段,不需要特殊配置,当给直连网卡设置IP地址的同时,直连网段就自动写入了路由表中
    非直连网段:
    ① 静态路由: 由管理员手工命令配置路由器路径(管理员通过手工配置的方式, 告诉路由按照指定的路由器路径发送数据包)
    1> 优点: 转发效率高, 消耗路由器资源少
    2> 缺点: 消耗管理员的运算资源(不适合大型网络,不适合频繁变换的网络)
    静态路由的手工配置:
    A要给B发消息, R1直连的是 1.0 2.0 网段, 因此要找到配置3.0和4.0的网段, 因为路由只能识别相邻的俩个网段,我们需要配置 4.0->2.2(路由器只能识别相邻的网段, 其他的网段的配置为,相邻路由器最近的网段的接口),3.0->2.2, 然后R2继续设置, R2直连的是2.0 3.0 网段, 我们需要4.0->3.2, 1.0->2.1, 然后R3直连的网段是3.0 4.0, 此时A可以和B单向通信, 我们需要 2.0->3.1, 1.0->3.1, 这样电脑A和电脑B才可以双向通信

手工配置的缺点:
一旦新增一个路由器, 那么就要新增很多的配置
适合大型网络,不适合频繁变换的网络

② 动态路由: 由运算器运算生成路由路径
1> 优点: 适合大型网络, 适合复杂网络
2> 缺点: 动态路由协议众多, 学习和管理技术要求高
人为配置一部分: 直接设置路由直连的是哪些网段就可以了

缺点: 对应不同的复杂网络, 需要选择不同的协议(rip:按跳数来)

补充: loopback:0, 也就是给一块网卡配置了多个逻辑网段(交换机的一块网卡,可以配置多个逻辑网段),逻辑网段内部也有交换机进行相连…

计分问题2: 电脑B访问电脑A是否会出问题? 路由器只能识别相邻的逻辑网段, 并且相邻逻辑网段不能一致, 如果人为绕过相邻逻辑网段, 非相邻的逻辑网段一致,会发生什么状况(动态路由的情况)?
现象: 路由器R2一会给A发数据,一会给C发数据,形成了一个环
原因:

  1. 路由器是按照网段来区分而不是IP
  2. 路由器支持1个IP对应多个网卡, 1.0网段对应2.1和3.2的网卡口, 并且记录在路由表里面, 循环进行执行(负载均衡,一会给A发,一会给C发)

    路由表的详细解释:
  3. 网络目标: 192.168.23.0, 表示一个网段, 接口: 192.168.23.1表示能够找到这个这个网段里面电脑的路由器接口

    目标网络记录的是整个网段的IP, 假设我们ping 166.24主机, 我们需要通过路由器的直连网卡接口达到交换机, 然后查询交换机的MAC表找 35主机, 找不到就泛洪
    路由器和电脑在网络层是一种设备,因此是
    电脑不能当路由器的原因
  4. 个人电脑的网卡只有1个
  5. 非直连网段需要手动配置, 技术不达标
    问题1:
    交换机不认识IP地址, 但是交换机怎么能够通过IP来进行逻辑网段的通信?
    交换机和电脑进行配合, 电脑判断出目标IP是不是同一个逻辑网段, 是就交给交换机,不是一个逻辑网段,就交给路由器

3.3 对等网络通信原理(私有-私有,公有-公有)

私有-私有,公有-公有,中间不能间隔着公网, MAC地址(数据链路层->交换机)是用于同网段通信,IP地址(网络层->路由器)是用于不同网段通信的
补充:
IPv4 地址耗尽问题怎么解决?
方法一: 私有IP (不要钱)(可重复): 变相增加IP总数
不同使用下面三组私有IP的局域网, 只要隔着公网, 里面的逻辑网段可以一致
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
小米的路由器: 31.0 , 所有的用户设置的都是31.0, 但是并没有发生IP冲突, 因为隔着公网

方法二: 子网掩码: 节约IP地址, 减少浪费
网关

  1. 网关是一个路由器(路由器上的接口): 用于让当前网段下所有的网络设备, 跨网段通信用的
    电脑判断目标MAC是否是同网段,是就发给交换机,让交换机查表/泛洪去找, 电脑判断是非同网段, 就发给交换机->路由器,让路由器去查路由表找
    IP是用来跨网段通信的(路由器), MAC是用来同网段通信的(交换机)
    当存在多个内网线的时候给哪块网卡设置网关,就用的那根内网线
  2. 网关还是个默认路由(路由是协议,路由器是物理设备): 静态路由的一个分支(兜底路由路径)
    假设访问百度
    从上往下查, 上面的直连网段不行, 只能到默认路由, 然后由默认路由继续查
    查局域网里面的ip,直接走直连网段的路由就可以找到, 直连网段能走,就走, 非直连网段才需要走默认路由(需要确认一下, 图中IPV4的地址和IPV4默认网关是否写对了)

    通信原理
  1. 电脑 A 封装数据
    Sport: 10000+以上的端口
    Dport: 80(点击客户端程序)
    SIP: 手工配置
    DIP: B(局域网,直接查/问)(公网:DNS)
    SMAC: A
    DMAC: R1-1 (人为设置网关)
    电脑A怎么知道目标MAC是R1-1?
    电脑A自己默认网关配置的就是R1-1口的IP, 然后电脑A拿着IP找R1-1的MAC, 先找A自己的MAC表, MAC表里面没有,就使用ARP寻找R1-1的MAC,找到后记录在A自己的MAC表里面, 目标MAC不能是B的原因, 根本发不了广播, 因为中间隔着路由器, 我们需要一个路由一个路由的走
  2. 交换机 S1
    六个地址都不变的原因:交换机是数据链路层的, 是要拆的,但是会原封不动的还原,拆的时候看MAC
    过程: 交换机S1拿着R1-1的MAC地址, 查MAC地址表, 如果没有找到就进行泛洪,找到了交换机的2口对应R1-1的MAC, 然后记录在表里面
  3. 路由器 R1
  1. R1-1口接收数据包
    数据链路层拆包(因为目标MAC确实是R1-1口), 拿着目标IP(B主机的IP)去路由表里面找, 没找到路由器就报错, 找到了就顺着R1-2口发出去
  2. R1-2口发出数据包
    源IP和目标IP没有变
    源MAC: R1-2, 目标MAC: R2-1, 源和目标的MAC变的原因: 因为跨了一个网段, MAC地址只能在同一个网段里面生效, 所以要重新封装(从1.0网段->2.0网段), 重新封装: R1识别出2.0是它的直连网段,通过查路由表,查B的IP对应的网卡口就是R2-1的口
    由此可见: 目标IP和目标MAC不一定一致, 每次经过一个路由(跨一个网段), MAC都会更改一次(之前是A-R1,是1.0网段,后面是R1-2 -> R2-1 是2.0网段)
    IP是跨网段通信的, MAC是同网段通信的
  1. 路由器-R2
    同样的过程, R2-1口接收数据, 在数据链路层把包头拆了,R2封装新的源MAC和目标MAC地址,IP不会变:
    SMAC: R2-2
    DMAC: B的MAC(查R2的路由表,找到了B的MAC)
  2. 交换机 S2
    交换机拿着目标B的MAC,查自己的MAC表,如果没找到就泛洪, 找到了2口对应B的MAC, 然后把数据发出去
  3. 主机B
    俩次拆包确认地址(MAC,IP), 确认目标端口是80,然后给应用层找到www服务
    再反转地址, 原路返回
  1. A -> 交换机S1, S1拿R1-1的MAC地址去查自己的MAC表, 没找到就泛洪, 找到了 S1 的2口是R1-1的MAC地址对应的口
  2. S1->R1, R1在数据链路层检查, 发现目标MAC和自己R1-1的MAC一样,因此拆包,传给网络层, R1拿着目标IP(B), 去找自己的路由表, 没有找到对应的网卡口就报错, 找到了就传输给数据链路层, 因为跨网段通信了(1.0->2.0网段),所以要变更源MAC(R1-2)和目标MAC(R2-1)
  3. R1->R2, 同样在数据链路层拆包头, 然后通过目标IP查自己的路由表,确认了是从那个网卡口能找到B, 同样更改源MAC(R2-2), 目标MAC(B的MAC)
  4. R2->S2, 已知目标MAC是B, S2直接查自己的MAC表, 找不到就泛洪,确认B的MAC对应的接口
  5. S2->B, B在数据链路层, 检查目标MAC就是自己,拆, 在网络层检查目标IP就是自己,拆,在传输层确认目标端口是自己服务器上的哪个服务, 拆, 然后传给应用层,应用层传给对应服务
  6. B把六个地址进行反转, 然后原路返回

3.4 非对等网络通信原理(私有IP–>公有IP)

不能用对等网络通信原理的原因: 私有IP是有可能一样的, 因此网络返回的时候, 不知道返回的是哪个IP的主机(网络是双向的)

原理:

  1. 电脑B封装
    SIP: 192.168.1.2 (私有IP)
    DIP: 百度
  2. 网关路由的处理
    网关是一个路由器(用于让当前网段下所有网络设备, 跨网段通信的)
    网关还是一个默认路由(兜底路由路径)
    NAT网络转换(NAT表: 静态NAT转换,动态NAT转换,PAT转换 Port Address Translation 端口地址转换)
  1. 静态NAT
    内网如果有100个电脑, 就必须有100个公网IP
    篡改后的原IP,使用路由拿公网IP来进行篡改
  2. 动态NAT(之前使用的动态IP)
    篡改后的IP使用临时IP来进行篡改(因为网络计费方式过了,因此不现实)

    PAT转换
    篡改后的IP都是用的一个公网IP, 但是新增一个原端口号的列, 来区分是哪台源IP

    问: 为什么路由器认识端口(路由器是网络层)? 给当前技术打的补丁,路由器只能在NAT表下识别端口号

3.4.1 原则: NAT网络是单向的

  1. 原因: B作为源, 主动去访问百度,会建立NAT表(临时),并且能够从百度返回数据,百度作为源,不能找到电脑B, 因为私有IP是无法定位的(私有IP有可能一致)
  2. 问题: NAT网络一定是单向的吗?
    不一定, 特定开发一个技术,从外网进入内网
    为什么要开发这个技术?
    普通用户, 从内网进入外网是常规操作, 外网向内网是我们技术人员远程办公的常用操作

    怎么实现外网向内网进行访问?
  1. 网络穿透技术: ① SSH Secure Shell 安全外壳隧道(Windows)/端口映射(Linux) ② VPN
    条件:
    ① 需要被穿透网络的路由器支持网络穿透技术
    ② 需要被穿透网络的路由器的对外IP地址为公网IP(IP全球唯一,要钱)
    优点: 数据相对安全, 没有经过相关服务器
    缺点: 对使用者技术要求高
  2. 利用第三方中转服务器(向日葵,todesk)
    优点: 简单
    缺点: 所有数据会经过中转服务器, 不安全

    积分问题:
    虚拟机的NAT模式,到底能不能访问局域网内其他电脑? 为什么可以访问公网?

    虚拟机的NAT模式,到底能不能访问局域网内其他电脑?
    现象: NAT模式下, 虚拟机可以ping通真实机, 但是真实机不能ping通虚拟机(里面可以ping通外面, 外面ping不通里面)
    虚拟机可以ping通真实机:
  3. 虚拟机把真实机当成了NAT网络路由器, 被NAT网络路由器包裹(篡改)后, 可以访问外网,外网返回数据,查NAT表可以进行返回

真实机不能ping通虚拟机:
2) 247.41和166.35不是一个逻辑网段, 166.35里面的网关写的是公网的路由器,所以发给了路由器(公网路由器), 路由器查路由表也没找到,目标IP地址(虚拟机IP地址)是不存在的, 因此报错

NAT是单向的
修改166.35的默认网关, 修改成真实机:166.240, 对于真实机而言(此时相当于路由器), 相当于直连了俩个网段, 然后166.35继续ping虚拟机,ping不通. 这样才证明了NAT是单向的这句话, 虚拟机可以ping通真实机(使用NAT表), 但是真实机ping不通虚拟机(相当于公网访问私网, 需要网络穿透技术)

为什么虚拟机在NAT模式能够访问公网?

  1. 虚拟机把真实机当成的NAT路由器
  2. NAT网关允许二次包裹(第一次在真实机把IP篡改成166.240, 第二次在连接外网的路由器上再次把IP篡改成公网IP)
http://www.jsqmd.com/news/1112814/

相关文章:

  • 电气自动化专业:站在“绿牌”风口,解锁你的硬核职业版图
  • AI智能体能力评估新范式:从推箱子游戏看规划与推理的进化
  • 农贸市场快检室试剂采购:如何选择适配基层的快检耗材方案
  • JMeter消息队列压测全攻略:从方案设计到性能调优
  • MySQL数据库技术全解析:从SQL语法到实战应用的系统梳理
  • 如何从rand7生成rand5
  • 如何快速找回遗忘的压缩包密码:ArchivePasswordTestTool 完整指南
  • 创业者适合读EMBA吗?2026客观选型测评分析
  • 【无标题】小学期课设
  • 智能激活革命:KMS_VL_ALL_AIO如何彻底改变Windows和Office激活体验
  • utshell:新一代Rust实现的Bash兼容shell完全指南
  • 游戏开发教学方案
  • 成都专业的暖通商家有哪些
  • 基于STM32单片机WIFI云平台物联网 空气质量 烟雾温湿度PM2.5 1(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • Hive 的内置函数
  • 武汉徐东火锅实测|理性避坑+科学选型测评指南
  • CIM电子沙盘与数字孪生技术服务商实力参考 | 城市与地产数字化展示选购指南
  • 【终极指南】Intel Wi-Fi 6 AX201 网卡感叹号、WiFi图标消失?3招彻底搞定!
  • 多维聚合实战:维度建模、层级升降与条件度量
  • 安装包逆向工程实战指南:从识别打包器到脚本分析
  • 免费解锁LOL所有皮肤:R3nzSkin国服换肤工具终极指南
  • MuleSoft+LLM企业级AI编排:可治理、可监控的AI落地实践
  • 居家饮食百搭冲调,庆葆堂菊粉固体饮料,日常纤维好搭档
  • 海外大模型差异化变现全解:5 条蓝海赛道完整落地实操体系
  • NestJS+Prisma+Docker全栈开发实战指南
  • 基于零代码平台的自媒体运营数据清洗与预处理
  • 机器学习生产化落地:模型服务化、实时推理与可观测性实战
  • 免费开源!5分钟搞定WPS Office与Zotero无缝连接,科研写作从此轻松10倍
  • 学术写作效率飞跃!2026全流程AI论文网站终极指南
  • bazel编译系统(TODO)