Java网络编程学习(一)

网络相关概念

网络体系结构

OSI体系结构(七层)

OSI(Open Systems Interconnection,开放系统互联)体系结构将整个计算机网络分为七层,从上到下依次为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

分层功能经典设备协议与标准
物理层(Physical Layer)负责在物理媒体上传输原始比特流。这包括定义物理设备的硬件规格、传输介质的类型(如电缆、光纤、无线电波)、信号的编码方式和传输速率等集线器(Hub)、中继器(Repeater)、网络适配器(NIC)等以太网标准(如10BASE-T、100BASE-TX)、光纤通信标准(如SONET、SDH)以及无线通信标准(如IEEE 802.11、蓝牙)等
数据链路层(Data Link Layer)负责将物理层传输的比特流组装成帧,并提供节点之间的可靠数据传输。这包括成帧、物理地址(MAC地址)管理、错误检测和校正、流量控制和访问控制等功能交换机(Switch)、网桥(Bridge)等VLAN(虚拟局域网)、STP(生成树协议)、IEEE 802.3(以太网标准)、ATM(异步传输模式)、HDLC(高级数据链路控制)、PPP(点对点协议)等
网络层(Network Layer)负责数据包的路由选择和逻辑地址(IP地址)的处理。这包括路径选择、逻辑地址管理、分组转发和拥塞控制等功能路由器(Router)等IP(网络互联协议)、ICMP(Internet控制报文协议)、ICMPv6(互联网控制信息协议版本六)、ARP(地址解析协议)、RARP(反向地址转换协议)等
传输层(Transport Layer)提供端到端的通信服务,确保数据从发送方到接收方的可靠传输。这包括端口管理、可靠传输、流量控制和错误检测与校正等功能网关等TCP(传输控制协议)、UDP(用户数据报协议)、TLS(传输层安全协议)等
会话层(Session Layer)责管理应用程序之间的会话。这包括会话建立、管理和终止、会话检查点和恢复、对话控制等功能网关等LDAP(轻型目录访问协议)等
表示层(Presentation Layer)负责数据的格式化、加密解密和数据压缩。这确保发送方和接收方使用一致的数据格式,提供数据的语法和语义转换该层主要关注数据的表示形式,如数据的编码、压缩和解压、加密和解密等,以确保数据的完整性和保密性。虽然OSI模型中没有明确列出表示层的具体协议,但实际应用中可能涉及各种数据编码、压缩和加密标准
应用层(Application Layer)直接面向用户,提供各种网络服务。这包括文件传输、电子邮件、远程登录、网页浏览等功能网关等TELNET、DNS(域名解析协议)、HTTP(超文本传输协议)、HTTPS(超文本传输安全协议)、FTP(文件传输协议)、NFS(网络文件系统)等
TCP/IP体系结构(四层)

TCP/IP(Transmission Control Protocol/Internet Protocol)体系结构。

分层功能协议
网络接口层(Network Interface Layer)网络接口层(有时也称为链路层或数据链路层)负责处理与物理网络介质的直接通信。它实现了数据帧在物理媒介上的传输网络接口层包含了各种硬件协议,如以太网(Ethernet)、无线局域网(WLAN,如Wi-Fi)等。这些协议定义了如何在物理连接上传输数据
网络层(Network Layer)网络层负责数据的路径选择和逻辑地址寻址。它实现了数据包从源主机到目的主机的路由和转发网络层主要包括IP(互联网协议)和ICMP(互联网控制消息协议)等协议
传输层(Transport Layer)传输层负责在源端和目的端之间建立、管理和终止会话。它提供了端到端的通信和数据传输服务,并确保数据的可靠传输和流量控制传输层主要包括TCP(传输控制协议)和UDP(用户数据报协议)两种协议
应用层(Application Layer)应用层是TCP/IP协议的最高层,负责处理特定的应用程序细节。它提供了网络应用程序之间的通信接口,并实现了特定的应用协议和服务应用层包含了各种不同的协议,如HTTP(用于万维网的超文本传输)、FTP(用于文件传输)、SMTP(用于电子邮件的发送)、POP3和IMAP(用于电子邮件的接收)、DNS(域名解析服务)等
五层协议体系结构
分层
物理层(Physical Layer)
数据链路层(Link Layer)
网络层(Network Layer)
传输层(Transport Layer)
应用层(Application Layer)

网络通信数据封装

数据封装是指将协议数据单元(PDU)封装在一组协议头和尾中的过程。在数据通过网络进行传输时,每一层协议都会对其下层传来的数据进行封装,添加自己的协议头和必要的信息,以便在下一层进行处理和传输。封装的过程确保了数据在传输过程中的完整性和可靠性。

具体来说,数据封装的过程如下:

  • 应用层生成应用数据,如HTTP请求。
  • 传输层将应用数据封装成段(segment),并添加传输层头部(如TCP/UDP头部)。
  • 网络层将传输层段封装成数据包(packet),并添加网络层头部(如IP头部)。
  • 数据链路层将数据包封装成帧(frame),并添加数据链路层头部(如以太网头部)和尾部。
  • 物理层将帧转换成比特流(bit stream)进行物理传输。

网络通信数据分用

分用是复用的逆过程,它指的是在接收端,将从网络接收到的合并数据流拆分成单独的应用程序数据流的过程。在数据通过网络传输到达目的主机后,每一层协议都会根据其协议头中的信息,将数据包拆分成其下层可以处理的数据单元,并传递给下一层进行处理。这样,最终应用层就能够接收到属于自己的数据,并进行相应的处理。

具体来说,数据分用的过程如下:

  • 物理层接收到比特流,并将其转换成帧。
  • 数据链路层根据帧头中的信息,将帧拆分成数据包,并传递给网络层。
  • 网络层根据数据包头中的信息,将数据包拆分成传输层段,并传递给传输层。
  • 传输层根据段头中的信息,将段拆分成应用数据,并传递给应用层。
  • 应用层接收到属于自己的数据,并进行相应的处理。

端口

端口号的定义与作用

端口号是一个16位的无符号整数,其取值范围是0到65535。在网络通信中,端口号与IP地址配合使用,共同确定了一个网络连接的唯一性。具体来说,端口号的作用主要体现在以下几个方面:

  • 标识服务或应用程序:每个端口号都与一个特定的服务或应用程序相关联,这样网络上的计算机就能够根据端口号来识别并路由数据到正确的目标。
  • 实现多路复用:通过使用端口号,一台计算机可以同时提供多种服务,而无需为每种服务分配一个单独的IP地址。这使得网络通信更加灵活和高效。
  • 提供安全性:某些端口可以用于加密通信,如HTTPS使用的443端口,从而确保数据在传输过程中的安全性。
  • 区分传入和传出连接:在TCP连接中,每个连接都有两个端口号,一个用于源地址,一个用于目标地址。这样,系统就能够区分传入和传出的连接,并对其进行相应的处理。
端口号的分类

根据端口号的用途和范围,可以将其分为以下几类:

  • 系统或保留端口(Well-Known Ports):范围从0到1023。这些端口号通常分配给系统级或熟知的服务和应用,如HTTP(80端口)、HTTPS(443端口)、FTP(21端口)等。普通用户通常没有权限来绑定这些端口。
  • 注册端口(Registered Ports):范围从1024到49151。这些端口号没有固定的用途,但对于一些无法使用系统端口的服务来说,这些端口号是预留的。有些软件企业会为自己的服务预留一些端口号。
  • 动态/私有端口(Dynamic/Private Ports):范围从49152到65535。这些端口号不被ICANN或IANA管理,可供任意使用。它们常用于客户端软件临时通讯,如临时的端点。
常用端口号及其对应的服务
端口号服务/协议描述
80HTTP超文本传输协议,用于非安全的网页传输
443HTTPS安全的超文本传输协议,通过SSL/TLS加密传输数据
21FTP文件传输协议,用于文件传输服务
22SSH安全外壳协议,用于远程登录和管理
25SMTP简单邮件传输协议,用于电子邮件传输服务
110POP3邮局协议版本3,用于接收邮件服务
143IMAPInternet消息访问协议,用于接收邮件服务并支持邮件管理
53DNS域名系统,用于域名解析服务
23Telnet远程登录到主机的终端仿真服务,但通常不安全
3389RDP远程桌面协议,用于Windows远程桌面服务

数据链路层

封装成帧、透明传输和差错控制是三个核心问题,它们对于保证数据的可靠传输起着至关重要的作用。

封装成帧

  • 封装成帧是指在数据链路层将上层交付的协议数据单元(PDU)添加帧头和帧尾,使之成为帧。
  • 帧头和帧尾中包含有重要的控制信息,用于帧定界、帧同步、差错控制等。封装成帧的作用在于将原始数据封装成能够在物理层传输的比特流,并确保在传输过程中数据能够完整、准确地被接收端接收。
  • 帧头通常包含源地址、目的地址、协议类型等控制信息,而帧尾则用于标识帧的结束。

透明传输

  • 指数据链路层对上层交付的传输数据没有任何限制,就好像不存在一样。
  • 数据链路层应该能够传输任意比特组合的比特流数据,而不会因数据中的某些特定比特组合而导致传输错误。
  • 数据链路层需要采取一些措施来避免数据中的特定比特组合被错误地解释为控制字符。例如,在面向字节的物理链路中,可以使用字节填充(或称字符填充)的方法。当数据中出现与帧定界符相同的字节时,在其前面插入一个转义字符,接收端在接收到转义字符后,就知道其后面的字节是数据而不是定界符。这样,就可以确保数据中的任意比特组合都能够被正确传输。

差错控制

  • 指在数据链路层中采取各种措施来检测和纠正数据传输过程中可能出现的差错。由于物理线路、设备故障、干扰等多种原因,数据传输过程中可能会出现比特差错,即0/1翻转。为了保证数据传输的可靠性,必须采用差错控制技术来检测和纠正这些差错。
  • 差错控制技术包括循环冗余检验(CRC)和检错重发等。CRC是一种基于多项式运算的差错检测方法,通过在数据后面附加一定数量的冗余码来生成帧校验序列(FCS)。接收端在接收到帧后,使用相同的生成多项式对接收到的数据进行CRC运算,如果得出的余数不为0,则说明数据在传输过程中出现了差错。
  • 检错重发则是一种差错纠正方法。当接收端检测到数据差错时,可以请求发送端重新发送数据,直到接收端接收到正确数据为止。这种方法虽然会增加一些传输延迟,但能够大大提高数据传输的可靠性。

网络层

IP地址(Internet Protocol Address)

  • IP地址(Internet Protocol Address)是互联网协议地址,用于标识互联网上的每一台设备,无论是计算机、手机、服务器还是其他网络设备。
  • IP地址使得数据包能够在互联网中正确地路由和传递。
分类
版本分类

IP地址主要分为两类:IPv4(Internet Protocol Version 4)和IPv6(Internet Protocol Version 6)。

  1. IPv4地址
  • IPv4地址由32位二进制数表示,通常被划分为4个8位(一个字节)的十进制数,用点号(.)分隔,例如:192.168.1.1。
  • IPv4地址范围从0.0.0.0到255.255.255.255,但并非所有地址都是可用的。
  • IPv4地址被分为几个类别,包括A类、B类、C类、D类和E类,以及特殊地址(如私有地址、广播地址、环回地址等)。
  1. IPv6
  • IPv6地址由128位二进制数表示,通常被划分为8个16位(两个字节)的十六进制数,用冒号(:)分隔,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。
  • IPv6地址提供了更大的地址空间,解决了IPv4地址耗尽的问题。
  • IPv6地址的表示方式更灵活,例如可以使用缩写(省略连续的零),例如:2001:db8:85a3::8a2e:370:7334。
用途和分配方式
  • 公网IP:这是在全球互联网上唯一且可路由的地址。它允许设备在互联网上被直接访问和通信。
  • 私网IP(也称为局域网IP):这些地址是在私有网络内部使用的,通常用于家庭、办公室或企业等局域网环境。私网IP地址在外部互联网上是不可见的,也无法直接访问。
  • 动态IP:这种地址是由网络中的动态主机配置协议(DHCP)服务器在设备连接到网络时自动分配的。动态IP地址可能会随着设备的每次连接而改变。
  • 静态IP:与动态IP不同,静态IP地址是手动分配给设备的,并且不会改变(除非手动更改)。静态IP地址通常用于需要稳定网络连接的设备,如服务器。
IPv4地址根据其网络号和主机号的位数

IP地址由网络号和主机号两部分组成,这种分类方式主要适用于IPv4地址。
一、网络号和主机号

  1. 网络号(Network ID)
  • 用于标识一个特定的网络或子网。
  • 在IP地址中,网络号占据前若干位(具体位数取决于IP地址的类别和子网划分)。
  1. 主机号(Host ID)
  • 用于标识网络中的某一台特定设备。
  • 在IP地址中,主机号占据剩余的位数。

二、基于网络号和主机号分类的IP地址类型分类

  1. A类地址:
  • 网络号:最高位为0,后面跟着7位网络地址和24位主机地址。
  • 范围:1.0.0.0到126.255.255.255。
  • 子网掩码:默认为/8(即255.0.0.0)。
  • 特点:支持的最大主机数为16,777,214,适用于大型网络。
  1. B类地址:
  • 网络号:最高两位为10,后面跟着14位网络地址和16位主机地址。
  • 范围:128.0.0.0到191.255.255.255。
  • 子网掩码:默认为/16(即255.255.0.0)。
  • 特点:支持的最大主机数为65,534,适用于中等规模的网络。
  1. C类地址:
  • 网络号:最高三位为110,后面跟着21位网络地址和8位主机地址。
  • 范围:192.0.0.0到223.255.255.255。
  • 子网掩码:默认为/24(即255.255.255.0)。
  • 特点:支持的最大主机数为254,适用于小型网络或局域网。
  1. D类地址:
  • 用途:作为组播地址,用于将数据发送给特定的一组设备。
  • 范围:224.0.0.0到239.255.255.255。
  • 特点:不区分网络号和主机号。
  1. E类地址:
  • 用途:保留用于实验和开发,不用于公共网络。
  • 范围:240.0.0.0到255.255.255.255(但通常不包括255.255.255.255,因为它用作有限广播地址)。
  • 特点:同样不区分网络号和主机号。

三、特殊IP地址
除了上述分类外,还有一些特殊用途的IP地址,如:

  • 环回地址:127.0.0.1,用于测试TCP/IP协议和本地主机进程之间的通信。
  • 广播地址:255.255.255.255,用于将数据发送给网络中的所有设备(有限广播地址)。
  • 私有地址:用于局域网内部,不会在互联网上公开。包括A类私有地址10.0.0.0/8、B类私有地址172.16.0.0/12和C类私有地址192.168.0.0/16。
协议报文
IPV4
字段名称占用位数(bit)描述
版本(Version)4指定IP协议的版本,IPv4为4
首部长度(Header Length)4表示IP首部的长度,单位是4字节。最小值为5(20字节),最大值为15(60字节)
区分服务(Differentiated Services/Type of Service, TOS)8用于指定QoS(Quality of Service)和流量控制等参数
总长度(Total Length)16表示整个IP数据报的长度,包括IP首部和数据部分,单位是字节。最大值为65535字节
标识(Identification)16用于唯一地标识一个报文的所有分片,以便在重组时识别
标志(Flags)3用于标识IP分片的状态,包括保留位、禁止分片(Don’t Fragment, DF)和更多分片(More Fragment, MF)
片偏移(Fragment Offset)13表示分片相对于原始数据报的偏移量,单位是8字节
生存时间(Time to Live, TTL)8表示数据报在网络中最多可以被经过的路由器数量,用于防止数据报在网络中无限循环
协议(Protocol)8表示数据报中的数据部分使用的协议类型,如TCP、UDP、ICMP等
首部检验和(Header Checksum)16用于检测IP头部在传输过程中是否出现了错误
源地址(Source Address)32表示数据报的发送者IP地址
目的地址(Destination Address)32表示数据报的接收者IP地址
可选字段(Options)可变长度附加的首部字段,可选地跟在目的地址之后,用于特殊需求,长度可变
填充(Padding)可变长度用于保证首部是4字节的整数倍,当首部长度不是4字节的整数倍时,需要填充0
数据部分(Data)可变长度来自上一层的数据,长度可变

子网掩码

子网掩码(Subnet Mask),又叫网络掩码、地址掩码、子网络遮罩,它用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码是一个32位地址(IPV4),不能单独存在,必须结合IP地址一起使用。

功能
  1. 区分网络地址和主机地址:子网掩码用于屏蔽IP地址的一部分,以区分网络标识(Net.ID)和主机标识(Host.ID),并说明该IP地址是在局域网上还是在广域网上。
  2. 划分子网:子网掩码可以将一个大的IP网络划分为若干小的子网络,从而提高网络的管理效率和安全性。通过子网掩码划分子网后,每个子网可以独立管理和控制,限制不同子网之间的直接通信,从而提高网络的安全性。
与IP地址的关系
  1. 确定唯一地址:子网掩码是用来判断两台计算机的IP地址是否属于同一子网络的根据。通过子网掩码和IP地址的二进制AND运算,可以确定一个IP地址所属的子网络。
  2. IP地址规划:在分配IP地址时,子网掩码可以帮助网络管理员合理规划和分配IP地址,避免地址浪费。例如,在一个拥有多个部门的企业中,可以为每个部门分配一个独立的子网,从而实现更精细的IP管理。
配置
  1. 确定网络需求:根据网络的规模和需求确定子网掩码。例如,如果需要将一个类C网络(默认子网掩码为255.255.255.0)分割成4个子网,可以使用子网掩码255.255.255.192。
  2. 计算子网地址和广播地址:根据选定的子网掩码,计算每个子网的子网地址和广播地址。例如,对于子网掩码255.255.255.192,每个子网有64个地址,其中第一个地址是子网地址,最后一个地址是广播地址。
  3. 配置网络设备:将计算出的子网地址和子网掩码配置到网络设备(如路由器、交换机等)中,确保网络设备能够正确识别和处理子网。

常用的网络命令

ifconfig
功能

ifconfig命令用于显示和配置网络接口的信息,包括IP地址、子网掩码、广播地址等。它还可以启用或禁用网络接口。

基本语法

ifconfig [interface] [options]

  • [interface]:指定要配置或显示信息的网络接口名,如eth0。
  • [options]:指定要执行的操作,如up(启用接口)、down(禁用接口)、netmask(设置网络掩码)等。
示例
  • 查看所有网络接口的信息:ifconfig
  • 启用名为eth0的网络接口:ifconfig eth0 up
  • 为eth0接口设置IP地址为192.168.1.10:ifconfig eth0 192.168.1.10 netmask 255.255.255.0
netstat
功能

netstat命令用于显示网络连接、路由表、网络接口统计信息、伪装连接以及广播域成员等。它可以帮助用户了解网络的状态和连接情况。

基本语法

netstat [options]

  • [options]:指定要显示的信息类型,如-a(列出所有连接)、-t(列出TCP连接)、-u(列出UDP连接)、-n(禁用反向域名解析,加快查询速度)等。
示例
  • 显示所有当前连接:netstat -a
  • 显示所有TCP连接:netstat -at
  • 显示所有监听中的TCP和UDP端口:netstat -tuln
ping
功能

ping命令是最常用的网络连通性测试命令之一。它向目标主机发送ICMP Echo Request消息,并等待目标主机的ICMP Echo Reply消息。通过ping命令,用户可以检查是否能够到达目标主机以及网络延迟的情况。

基本语法

ping [options] <目标主机名或IP地址>

  • [options]:指定ping命令的选项,如-t(不间断地ping指定计算机,直到管理员中断)、-n(发送指定个数的数据包)、-l size(发送指定大小的数据包)等。
  • <目标主机名或IP地址>:指定要ping的目标主机名或IP地址。
示例
  • ping百度:ping baidu.com
  • 不间断地ping指定IP地址,直到管理员中断:ping -t ip地址(注意:此命令可能会导致目标主机资源占用过高,应谨慎使用)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/967728.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git(分布式版本控制系统)系统学习笔记【并利用腾讯云的CODING和Windows上的Git工具来实操】

Git的概要介绍 1️⃣ Git 是什么&#xff1f; Git 是一个 分布式版本控制系统&#xff08;DVCS&#xff09;&#xff0c;用于跟踪代码的变更、协作开发和管理项目历史。 由 Linus Torvalds&#xff08;Linux 之父&#xff09;在 2005 年开发&#xff0c;主要用于 代码管理。…

yum报错 Could not resolve host: mirrorlist.centos.org

检查dns 使用ping www.baidu.com &#xff0c;如果ping不通&#xff0c;检查/etc/resolv.conf文件中是否有&#xff1a; nameserver 8.8.8.8 nameserver 8.8.4.4 替换yum源 1.备份原始的 YUM 源配置文件&#xff1a; sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.r…

postgreSQL16.6源码安装

1.获取源码 从PostgreSQL: File Browser获取tar.bz2或者tar.gz源码 2.解压 tar xf postgresql-version.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# tar xf postgresql-16.6.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# ll 总计 24324 drwxr-xr-x 12 ro…

Machine Learning:Introduction

文章目录 Machine LearningTrainingStep 1.Contract Function with Unknown ParametersStep 2.Define Loss from Training DataStep 3.Optimization Linear ModelPiecewise Linear CurveBeyond Piecewise Liner?FunctionLossOptimization Model Deformation Machine Learning …

【Java】多线程和高并发编程(三):锁(下)深入ReentrantReadWriteLock

文章目录 4、深入ReentrantReadWriteLock4.1 为什么要出现读写锁4.2 读写锁的实现原理4.3 写锁分析4.3.1 写锁加锁流程概述4.3.2 写锁加锁源码分析4.3.3 写锁释放锁流程概述&释放锁源码 4.4 读锁分析4.4.1 读锁加锁流程概述4.4.1.1 基础读锁流程4.4.1.2 读锁重入流程4.4.1.…

使用redis实现 令牌桶算法 漏桶算法

流量控制算法&#xff0c;用于限制请求的速率。 可以应对缓存雪崩 令牌桶算法 核心思想是&#xff1a; 有一个固定容量的桶&#xff0c;里面存放着令牌&#xff08;token&#xff09;。每过一定时间&#xff08;如 1 秒&#xff09;&#xff0c;桶中会自动增加一定数量的令牌…

金媒婚恋交友系统V10.5的CRM操作提示:“您没有权限执行此操作”解决方法

大家都知道新年2.5日新版10.5已经升级了&#xff0c;这次升级相对以前更新内容相当重量级&#xff01;最突出的就是CRM系统的更新和UI改观吐槽的内容都改进了我愿意和大家分享代码和新得~关注我昵称就能知道我哦&#xff01;&#xff01; 出现原因&#xff1a;是这个红娘账号没…

ubuntu使用最佳流程2:ubuntu20.04安装cuda(多版本切换),cudnn,显卡驱动

cuda安装&#xff08;多版本cuda安装&#xff1a;可切换&#xff09; 查看系统硬件配置 查询Linux系统的版本号 lsb_release -a查询显卡型号 待更新下载 CUDA官方传送门 找到适合自己的命令行下载安装即可 安装 accept 第一个driver去掉&#xff08;点击enter&#xff…

Crowdin 在线本地化平台调用硅基流动AI预翻译

平台介绍 硅基流动&#xff08;AI服务平台&#xff09; 官网&#xff1a;https://siliconflow.cn/zh-cn/ 官方介绍 我主要使用&#xff1a;云服务平台 SilliconCloud 此平台已经将热门的开源大语言模型部署&#xff0c;花钱买额度&#xff0c;就能使用 API 最近有上线 Deep…

二、通义灵码插件保姆级教学-IDEA(使用篇)

一、IntelliJ IDEA 中使用指南 1.1、代码解释 选择需要解释的代码 —> 右键 —> 通义灵码 —> 解释代码 解释代码很详细&#xff0c;感觉很强大有木有&#xff0c;关键还会生成流程图&#xff0c;对程序员理解业务非常有帮忙&#xff0c;基本能做到哪里不懂点哪里。…

游戏引擎学习第97天

回顾昨天并计划今天 在这期节目中&#xff0c;主要讲解了光照的概念&#xff0c;并进一步讨论了法线贴图光照的实现。节目的内容大致分为几个部分&#xff1a; 光照的基础概述&#xff1a;讨论了光的工作原理以及如何在编程图形时需要考虑光照问题。尽管这些概念并没有深入到…

python+unity落地方案实现AI 换脸融合

先上效果再说技术结论&#xff0c;使用的是自行搭建的AI人脸融合库&#xff0c;可以离线不受限制无限次生成&#xff0c;有需要的可以后台私信python ai换脸融合。 TODO 未来的方向&#xff1a;3D人脸融合和AI数据训练 这个技术使用的是openvcinsighface&#xff0c;openvc…

Python——批量图片转PDF(GUI版本)

目录 专栏导读1、背景介绍2、库的安装3、核心代码4、完整代码总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自动化专…

AutoMQ 如何实现没有写性能劣化的极致冷读效率

前言 追赶读&#xff08;Catch-up Read&#xff0c;冷读&#xff09;是消息和流系统常见和重要的场景。 削峰填谷&#xff1a;对于消息来说&#xff0c;消息通常用作业务间的解耦和削峰填谷。削峰填谷要求消息队列能将上游发送的数据堆积住&#xff0c;让下游在容量范围内消费…

[AI]Mac本地部署Deepseek R1模型 — — 保姆级教程

[AI]Mac本地部署DeepSeek R1模型 — — 保姆级教程 DeepSeek R1是中国AI初创公司深度求索&#xff08;DeepSeek&#xff09;推出大模型DeepSeek-R1。 作为一款开源模型&#xff0c;R1在数学、代码、自然语言推理等任务上的性能能够比肩OpenAI o1模型正式版&#xff0c;并采用MI…

MariaDB *MaxScale*实现mysql8读写分离

1.MaxScale 是干什么的&#xff1f; MaxScale是maridb开发的一个mysql数据中间件&#xff0c;其配置简单&#xff0c;能够实现读写分离&#xff0c;并且可以根据主从状态实现写库的自动切换&#xff0c;对多个从服务器能实现负载均衡。 2.MaxScale 实验环境 中间件192.168.12…

Ollama 简单 好用 好玩

简介 Ollama https://github.com/ollama/ollama/ 是一个基于 Go 语言 的 本地大语言模型运行框架&#xff0c;专注于本地化运行大型语言模型&#xff08;LLM&#xff09;的开源工具。 类 Docker 产品&#xff08;支持 list,pull,push,run 等命令&#xff09;&#xff0c;更好玩…

存储可靠性:从基于磁盘的RAID到分布式纠删码(EC),多副本

文章目录 0.简介1.RAID1.1 RAID 01.2 RAID 11.3 RAID 51.4 RAID 61.5 RAID 10 2.EC&#xff08;纠删码&#xff09;2.1 概念2.2 原理 3.多副本4. 总结和优缺点比较 0.简介 在选择数据存储方案时&#xff0c;一个绕不开的话题就是数据存储的可靠性&#xff08;面对故障时的应对…

【自然语言处理】利用Memory Layer替换Transformer中的FFN

论文地址&#xff1a;https://arxiv.org/pdf/2412.09764 相关博客 【自然语言处理】利用Memory Layer替换Transformer中的FFN 【自然语言处理】【大模型】BitNet&#xff1a;用1-bit Transformer训练LLM 【自然语言处理】BitNet b1.58&#xff1a;1bit LLM时代 【自然语言处理】…

Redis持久化的两种方式:RDB和AOF

redis中的数据存储在缓存中&#xff0c;如果没有持久化的策略&#xff0c;Redis一旦宕机&#xff0c;那么将会导致数据丢失&#xff1b;因此redis提供了以下两种持久化方式&#xff1a;RDB和AOF 一般来说&#xff0c;大部分公司对这两种方式都是同时开启的 一、RDB RDB策略全…