首页
关于
Search
1
Java期末复习
196 阅读
2
《概率论与数理统计》重难点
140 阅读
3
Java模拟题
89 阅读
4
数据结构期末复习
55 阅读
5
爱心学校课程研发进度安排
47 阅读
个人记录
工作相关
经验分享
登录
Search
Yuxuan HONG
累计撰写
8
篇文章
累计收到
303
条评论
首页
栏目
个人记录
工作相关
经验分享
页面
关于
搜索到
8
篇与
的结果
2024-12-30
《网络与通信》重难点
1. 交换机制、分层和协议:三种交换的原理和特点交换机制指的是数据在网络中如何传输的方式,不同的交换机制决定了网络中数据的流动和控制方式。主要有三种交换方式:1.1. 电路交换 (Circuit Switching)电路交换是一种传统的交换机制,通常用于电话网络。其基本原理是:在通信的双方之间建立一条专用的物理路径,并在整个通信期间保持该路径的连接,直到通信结束。特点:需要为每一通话预留一条固定的通信线路。通信质量稳定,但资源利用率低,尤其在通话不频繁时。一旦连接建立,通信双方可以以恒定的速率交换数据。适用场景:如传统电话交换系统,要求稳定、低延迟的通信。1.2. 分组交换 (Packet Switching)分组交换是互联网和现代计算机网络的基本交换方式。它将数据分成若干小的分组,并将这些分组独立地传输。每个分组可能经过不同的路由,从源节点到达目的节点。常见的协议有IP、TCP等。特点:数据在传输过程中被切分为多个小的“分组”,每个分组有自己的头信息,包含目的地址等。分组独立传输,路由可动态选择,因此更适应网络的变化。比较灵活,可以在网络负载不均的情况下,通过调整路由来优化性能。可能发生“分组丢失”或“分组乱序”,需要进行重传和排序。适用场景:例如互联网通信、电子邮件、视频流等。1.3. 消息交换 (Message Switching)消息交换是一种介于电路交换和分组交换之间的方式。它将整个消息作为一个单位进行存储转发。在网络的每一节点,消息会先被存储在缓存中,然后被转发到下一个节点。特点:消息完整传输,网络中的每个中继节点都需要对整个消息进行存储和转发。存储需求高,可能导致较大的延迟。适合于不要求实时性的通信,如电子邮件。适用场景:例如传真系统、某些批量数据传输。1.4. 总结三种交换方式的比较:特性电路交换分组交换消息交换建立连接时延长短短数据传输方式固定路径分组传输整体消息传输网络资源利用率低高中适应网络变化差好中通信可靠性高需要补充机制需要补充机制2. 信号传输系统的工作原理,编码和调制过程,传输介质的特点及应用信号传输系统的目的是在网络中进行信息的传输,通常是通过电信号、光信号或者无线信号来传递数据。要理解这一过程,我们需要从以下几个方面入手:2.1. 信号传输系统的工作原理信号传输是指将信息从发送端传输到接收端的过程。这个过程通常涉及以下几个基本步骤:信息源:产生数据或信息的设备(如计算机、传感器等)。编码:将信息源中的数据转换成适合传输的信号形式。调制:为了适应物理介质的要求,信号经过调制,变为特定的传输信号(例如,电压或电流变化)。传输介质:是传输信号的物理媒介,可能是电缆、光纤或空气(无线通信)。解调:接收端对接收到的信号进行解调,将其恢复成原始信息。解码:接收到的信号通过解码过程转换回原始的数据形式,供接收端使用。2.2. 编码过程编码是指将原始信息(如数字数据)转化为适合传输的信号格式。编码方式取决于传输媒介的特性和需要的传输效率。常见的编码方式包括:非归零编码(NRZ):在这个编码方式中,1用一个电压值表示(如高电平),0用另一个电压值表示(如低电平)。曼彻斯特编码:在信号中进行翻转,通过电压的中间点变化来表示不同的二进制值。差分曼彻斯特编码:与曼彻斯特编码类似,但信号的变化位置与时间点不同。它常用于更高效的同步。霍夫曼编码:用于数据压缩,将常见的符号用更短的代码表示,较不常见的符号用更长的代码表示。2.3. 调制过程调制是将原始信号映射到合适的载波信号上,适应特定的传输介质。调制的目的是将低频的基带信号(原始信号)转换为适合在物理介质上传输的高频信号。常见的调制技术包括:幅度调制(AM):通过改变信号的幅度来编码数据。频率调制(FM):通过改变信号的频率来表示数据。相位调制(PM):通过改变信号的相位来传输信息。正交振幅调制(QAM):结合了幅度调制和相位调制,能够在相同的带宽内传输更多的数据。2.4. 传输介质的特点及应用传输介质决定了信号传输的速度、质量和距离。常见的传输介质有:双绞线:用于大多数局域网(LAN)连接,适用于传输较低频率的信号。其传输速率较低,且容易受到电磁干扰。应用:电话线路、局域网中的以太网(Ethernet)连接。同轴电缆:常用于较长距离的传输,能够承受更强的电磁干扰。传输速率较高,适用于电视信号和网络连接。应用:电视传输、宽带互联网、局域网连接。光纤:使用光信号进行传输,提供极高的带宽和非常低的信号衰减,适用于长距离和高速数据传输。应用:长距离、高速网络(如城域网和骨干网)。无线传输:通过电磁波进行信号传输,包括Wi-Fi、蓝牙、卫星通信、5G等。应用:移动通信、无线网络、卫星通信、无线传感器网络。电力线通信(PLC):利用电力线传输信号,通常用于局部区域内的通信。应用:智能家居、物联网(IoT)设备的连接。2.5. 传输介质选择的考虑因素带宽:指的是介质能够传输的最大数据速率,带宽越大,能够承载的数据量越多。延迟:传输信号从发送端到接收端的时间,延迟较低的介质适合实时通信。损耗与衰减:信号在传输过程中会丢失能量,导致信号衰减。光纤的衰减通常低于电缆。抗干扰性:某些传输介质对电磁干扰的抵抗力更强,比如光纤几乎不受电磁干扰,而双绞线容易受干扰。总结编码是将原始数据转化为适合传输的信号形式,不同的编码方式有不同的特点。调制则是在一定频率的载波上表示信息,调制技术的选择取决于传输距离、信号的带宽需求和抗干扰性。传输介质的选择影响信号传输的质量、速率和距离。不同介质适应不同场景的通信需求。3. MAC协议与交换机工作原理3.1. MAC协议(介质访问控制协议)MAC协议(Medium Access Control Protocol) 是一种用于控制网络中设备如何访问共享传输介质的协议。在局域网(LAN)中,多个设备可能共享同一物理介质(例如无线频段或以太网电缆),MAC协议就负责协调这些设备的传输行为,防止冲突并确保数据能够有效传输。常见的MAC协议包括:3.1.1. 随机访问MAC协议(Random Access MAC Protocol)随机访问MAC协议允许设备在任何时候尝试发送数据,但必须能够处理因同时发送数据而可能发生的冲突。最典型的随机访问MAC协议是 载波侦听多路访问/碰撞检测(CSMA/CD) 和 载波侦听多路访问/碰撞避免(CSMA/CA)。CSMA/CD (Carrier Sense Multiple Access with Collision Detection):工作原理:设备在发送数据之前会监听信道(载波侦听),如果信道空闲,则开始发送数据;如果信道忙,则等待一段随机时间后再尝试发送。如果两台设备同时发送,信号会发生碰撞,设备会检测到碰撞并停止发送,然后通过随机退避时间重新尝试发送。适用环境:主要用于有线以太网(Ethernet)。特点:易于实现,适用于不经常发生传输冲突的环境。在高负载情况下,碰撞增多会降低网络效率。CSMA/CA (Carrier Sense Multiple Access with Collision Avoidance):工作原理:在无线通信中,由于无法像有线通信一样检测到碰撞,因此采用了避免碰撞的策略。设备在发送数据之前先发送一个短的请求发送(RTS)帧,接收设备会回复一个清除发送(CTS)帧,其他设备在收到CTS帧后会避免发送数据。适用环境:主要用于无线局域网(Wi-Fi,802.11)中。特点:避免了碰撞的发生,但增加了额外的延迟和开销。适用于无线环境,减少了由于信号传播延迟造成的冲突。3.1.2. 轮询与分配式MAC协议轮询与分配式MAC协议通常用于带有集中控制的网络中,如令牌传递和分配式多路访问协议。令牌传递协议(Token Passing):在此协议中,网络中的设备按顺序轮流拥有“令牌”,只有持有令牌的设备才能发送数据。令牌在设备之间传递,避免了冲突。适用环境:令牌环网(Token Ring)、光纤分布式数据接口(FDDI)等。特点:避免了冲突,但传输延迟可能较高,尤其是在网络设备较多时。轮询协议:集中控制的网络(如基于主从的通信方式)中,主设备轮流向各个从设备询问是否需要发送数据。适用环境:有些无线传感器网络(WSN)和卫星通信。特点:主设备有更高的控制性,但容易成为瓶颈。3.2. 交换机工作原理交换机(Switch)是局域网中用于转发数据的设备。它通过 MAC地址表(MAC Address Table) 来确定如何将数据帧从一个端口转发到另一个端口。交换机的工作原理分为以下几个阶段:学习阶段:交换机会学习通过每个端口接收到的源MAC地址,并将其记录在MAC地址表中。这个过程叫做"学习"。当交换机收到一个数据帧时,它会记录该帧的源MAC地址和接收到该帧的端口。转发阶段:当交换机接收到一个数据帧时,它会查看帧的目的MAC地址,并查找MAC地址表中是否有对应的端口。如果有,它就将帧转发到正确的端口。如果没有找到匹配的地址,它将广播该帧到其他所有端口。过滤阶段:如果数据帧的源MAC地址和目的MAC地址属于同一端口,交换机就不会转发该帧,避免无谓的广播。碰撞避免:与集线器不同,交换机的每个端口都可以独立地进行数据传输,因此不会发生碰撞,能够提高网络的带宽和效率。3.3. MAC帧端到端传输过程MAC帧的端到端传输过程包括以下步骤:源设备生成数据帧:源设备通过MAC协议将数据封装成MAC帧,其中包含源MAC地址、目的MAC地址和数据负载。数据帧通过交换机传输:交换机根据MAC地址表将数据帧转发到相应的端口。如果目的设备和源设备位于同一交换机上,数据帧会直接到达目的设备;如果位于不同的交换机上,数据帧会在多个交换机之间转发。目的设备接收并处理数据:目标设备从接收的帧中提取出数据,并交给上层协议进行进一步处理。3.4. VLAN划分过程VLAN(虚拟局域网) 是一种将同一物理网络分割成多个逻辑网络的技术。每个VLAN都像是一个独立的网络,设备只有在同一VLAN内时才能直接通信。VLAN划分的步骤:定义VLAN ID:为每个VLAN分配一个唯一的ID,通常范围是1-4095。配置交换机端口:根据需要将交换机的端口分配到不同的VLAN上。VLAN间通信:不同VLAN之间的通信通常需要通过路由器或者三层交换机来完成。标记VLAN帧:在以太网帧中添加VLAN标签(802.1Q标签),用于区分不同VLAN的流量。VLAN的优势:提高安全性:通过划分VLAN,可以将不同的部门或业务单元的设备隔离,减少广播风暴和不必要的通信。网络管理:便于网络的管理和维护,可以按照组织结构进行网络划分。流量控制:减少广播域的大小,提高带宽利用率。总结MAC协议负责管理设备在共享通信介质上的访问,确保数据传输的有序性。常见的MAC协议有随机访问协议(如CSMA/CD、CSMA/CA)和轮询协议(如令牌传递)。交换机工作原理基于MAC地址表,学习源地址并转发数据帧,避免了网络冲突,并提高了带宽利用率。VLAN划分将一个物理网络划分成多个逻辑网络,从而提高了网络的安全性和可管理性。4. IP数据报结构、IP分片和子网划分,CIDR无类地址,路由聚集4.1. IP数据报结构IP协议(Internet Protocol)是网络层的核心协议,负责在不同的网络之间传输数据。IP数据报是IP协议传输的基本单元,包含了数据包的源地址、目的地址、数据等信息。IP数据报结构包含以下几个关键部分:版本(Version):4位,标识IP协议的版本。常见的版本为IPv4(值为4)和IPv6(值为6)。头部长度(IHL,Internet Header Length):4位,指示IP头部的长度。IPv4的基本头部长度是20字节,但由于可能有可选字段,实际长度可能会更长。服务类型(Type of Service,ToS):8位,用来标识数据包的优先级和处理方式,通常包括延迟、吞吐量和可靠性等指标。总长度(Total Length):16位,指示整个IP数据报的长度,包括头部和数据部分。最大值为65535字节。标识(Identification):16位,用来唯一标识数据报。如果数据报需要分片传输,这个字段有助于将分片重组为原始数据。标志(Flags):3位,其中2位用于指示是否允许分片,以及是否是最后一个分片。片偏移(Fragment Offset):13位,指示数据报分片后各个片段的偏移位置。生存时间(TTL,Time to Live):8位,指示数据包在网络中可以存在的最大跳数。每经过一个路由器,TTL值就会减1,当TTL为0时,数据包会被丢弃。协议(Protocol):8位,指示IP数据包中所携带的数据的上层协议,如TCP(6)、UDP(17)、ICMP(1)等。源IP地址(Source IP Address):32位,指示数据包的源地址。目的IP地址(Destination IP Address):32位,指示数据包的目的地址。选项(Options):可选字段,通常用于扩展功能,如时间戳、路由记录等。数据(Data):数据部分,包含上层协议(如TCP或UDP)传递的数据。4.2. IP分片和重组由于不同的网络可能有不同的最大传输单元(MTU),IP数据报可能会被分片成多个小块,以适应路径中的最小MTU。在传输过程中,数据包可能被分割成多个片段,并在到达目的地后进行重组。分片过程:如果一个IP数据报的大小超过路径MTU,发送方会将数据报分成多个分片,每个分片包含原始数据报的部分数据。每个分片都带有相同的标识符(Identification),用于将它们与原始数据报关联。每个分片除了包含原始数据的部分外,还包含标志字段和片偏移字段,以指示分片的位置。重组过程:到达目的地后,路由器或主机根据标识符和片偏移信息将各个分片重组成完整的IP数据报。问题:分片会增加网络负担,因为每个分片都需要额外的开销,并且每个分片都可能在网络中丢失。如果一个分片丢失,整个数据报就必须重新发送。4.3. 子网划分子网划分是通过将IP地址空间划分为多个更小的子网来优化网络管理和利用效率。通过子网掩码(Subnet Mask),我们可以确定一个IP地址属于哪个子网。子网掩码:子网掩码是一个32位的地址,表示IP地址中哪些部分是网络地址,哪些部分是主机地址。网络地址用于识别子网,主机地址用于识别同一子网内的具体设备。例如,IP地址 192.168.1.1 和子网掩码 255.255.255.0 表示该IP地址属于 192.168.1.0 子网,并且主机部分是 .1。子网划分步骤:选择一个合适的网络地址:根据网络规模选择一个合适的IP地址块。计算子网掩码:选择一个合适的子网掩码来划分子网。分配子网地址:将网络地址划分为多个子网,每个子网分配一个地址范围。CIDR表示法:CIDR(Classless Inter-Domain Routing,无类域间路由选择)是IPv4中用于表示IP地址和子网掩码的标准方法。CIDR表示法使用斜杠(/)后跟一个数字,表示子网掩码中1的位数。例如,192.168.1.0/24 表示 192.168.1.0 网络地址,子网掩码是 255.255.255.0。4.4. CIDR无类地址CIDR(无类域间路由选择)是IPv4中的一个重要概念,旨在解决传统类地址(A类、B类、C类)划分带来的地址浪费问题。CIDR允许更加灵活的子网划分,网络管理者可以根据需要选择合适的网络地址块大小,而不是受限于固定的A、B、C类地址。CIDR的表示法:CIDR表示法是通过IP地址后面加一个斜杠和数字(如 192.168.1.0/24)来表示网络地址和子网掩码。例如,/24表示网络部分是前24位,主机部分是后8位。CIDR的优点:减少IP地址浪费:CIDR允许将一个IP地址空间划分为任意大小的子网,这样可以根据实际需要分配地址。提高路由效率:CIDR允许路由聚集,即多个IP地址块可以被合并为一个更大的路由前缀,从而减少路由表的大小,提高路由效率。4.5. 路由聚集路由聚集是CIDR的一个重要特性,它允许多个连续的IP地址块合并成一个更大的地址块,从而减少互联网路由表的条目数,提高路由效率。路由聚集的工作原理:路由聚集的关键是在路由表中使用一个更大的网络前缀来表示多个小的网络前缀。例如,192.168.0.0/16 可以表示包括 192.168.0.0/24、192.168.1.0/24 等多个子网。好处:减少路由表的大小:聚集能够将多个路由条目合并为一个条目,减小路由表的规模。提高路由效率:减少路由表的条目数量可以加速路由查找过程,提高路由器的性能。总结IP数据报结构包含头部和数据部分,头部包括版本、总长度、标识、TTL等字段,数据部分携带上层协议数据。IP分片用于处理数据报超过路径MTU的情况,将数据分成多个分片传输,接收方再进行重组。子网划分通过子网掩码将一个IP地址空间分成多个子网,以优化网络地址的利用。CIDR提供了一种更加灵活的IP地址分配方式,解决了传统类地址的浪费问题,并允许路由聚集来减少路由表的大小。5. 路由算法:链路状态与距离向量5.1. 链路状态路由算法链路状态路由算法是一种基于网络拓扑信息来选择最佳路径的路由算法。与距离向量算法不同,链路状态算法每个路由器都维护一份完整的网络拓扑图,并根据该拓扑信息计算最短路径。5.1.1. 链路状态算法的工作原理链路状态算法的工作流程可以分为以下几个步骤:交换链路状态信息:每个路由器会定期发送它所知道的链路状态信息(如其直接连接的邻居和链路状态)给网络中的其他路由器。这个信息通常被封装在链路状态包(Link State Packet, LSP)中。建立拓扑图:当路由器收到其他路由器的链路状态信息时,它会将这些信息汇总并建立整个网络的拓扑图。拓扑图中包含每个路由器与其他路由器的连接关系和链路的开销(通常是带宽、延迟或其他度量值)。计算最短路径:每个路由器使用 Dijkstra算法(也叫SPF,Shortest Path First)计算从自己到所有其他路由器的最短路径。Dijkstra算法根据网络拓扑图选择代价最小的路径。更新路由表:基于计算出的最短路径,每个路由器更新自己的路由表,将最佳的下一跳路由信息添加到路由表中。5.1.2. 链路状态算法的特点收敛速度快:由于每个路由器都拥有完整的网络拓扑信息,计算最短路径时能快速得到结果。资源消耗大:路由器需要维护整个网络的拓扑信息,且链路状态信息的广播可能会占用大量带宽。稳定性好:链路状态算法能较好地应对网络拓扑的变化,并能及时更新路由表,减少网络拥塞。扩展性差:在大型网络中,由于每个路由器都需要保存整个网络的拓扑信息,导致存储和计算开销较大。5.1.3. 链路状态协议(如OSPF)OSPF(开放最短路径优先,Open Shortest Path First) 是一种基于链路状态的动态路由协议。OSPF使用链路状态算法和Dijkstra算法来计算最短路径,并根据这些路径更新路由表。区域划分:OSPF支持将网络划分为多个区域(Area),以减少网络中链路状态信息的传播范围。状态同步:路由器通过交换链路状态包来同步路由信息,当拓扑发生变化时,OSPF会快速地重新计算路径。负载均衡:OSPF支持基于最短路径计算进行负载均衡,可以将流量分配到多条路径上。5.2. 距离向量路由算法距离向量路由算法是一种基于邻居信息来选择最佳路径的路由算法。每个路由器维护一个路由表,其中记录了到达其他网络的最短路径的距离(通常是跳数)和下一跳的路由器信息。5.2.1. 距离向量算法的工作原理初始化路由表:每个路由器的路由表只包含自己直接连接的网络的信息,并且初始的距离为1(跳数)。所有其他目标网络的距离设为无穷大(表示不可达)。定期交换路由信息:路由器定期将自己的路由表发送给邻居路由器。邻居路由器根据接收到的信息更新自己的路由表。更新路由表:每个路由器根据邻居路由器的路由信息更新自己的路由表,选择跳数最少的路径来达到目标网络。如果通过某个邻居到目标网络的路径距离小于当前已知的路径,则更新路由表。传播路由信息:路由表的信息不断地在邻居之间传播,直到所有路由器的路由表达成一致。5.2.2. 距离向量算法的特点简单易懂:距离向量算法较为简单,易于实现,并且适用于规模较小的网络。收敛速度慢:由于路由信息是通过邻居逐渐传播的,网络中的变化可能需要较长时间才能达到全网一致。受限于跳数:距离向量算法中,路由表记录的是到达目的地的最小跳数,因此只能处理路径长度为跳数的简单度量,不能灵活处理其他因素(如带宽、延迟等)。容易发生计数到无穷现象:如果网络中发生环路,路由器可能会错误地计算路径,导致“计数到无穷”的现象,使得网络无法收敛。5.3. 距离向量路由算法的无穷计数现象在使用距离向量算法时,可能会遇到一个叫做无穷计数(Count to Infinity)的现象。这种现象通常发生在网络出现环路时,路由器的路由表可能会错误地更新,导致计算出不可达的路径,并反复增加跳数,直到到达一个无穷大的值。5.3.1. 无穷计数的示例假设网络中有三个路由器:A、B和C,A和B之间的路径是直连的,B和C之间的路径也是直连的,A和C之间没有直接连接。初始情况下,A、B、C的路由表都认为A到C的路径不可达。如果A和B之间的链接失败,B认为A到C的路径不可达,而A和B都会将C的路径更新为通过B到达(跳数为2)。此时A和B会认为C仍然可以到达,跳数增加,从而进入了一个循环,直到达到无穷大的跳数。5.3.2. 解决无穷计数问题的方案分割水平(Split Horizon):通过不向邻居通告那些从邻居得来的、经过邻居的不可达路径来避免循环。毒性逆转(Poison Reverse):通过告知邻居自己通过该邻居到达某个目的地的路径不可用(跳数设置为无限大)来避免循环。路由超时(Route Timeout):当路由信息未被更新或没有变化时,可以设置路由条目的过期时间,超时后将该路径删除,防止循环。5.4. OSPF协议(开放最短路径优先)OSPF(Open Shortest Path First)是一个常用的链路状态路由协议,它采用Dijkstra算法来计算最短路径,并广泛应用于大型企业和互联网服务提供商(ISP)网络中。5.4.1. OSPF的工作原理区域划分:OSPF支持将整个自治系统(AS)划分为多个区域(Area),以减少路由信息的传播范围。每个区域内的路由器共享链路状态信息,但不同区域之间通过区域边界路由器(ABR)进行路由信息的交换。区域内路由和区域间路由:OSPF路由表分为两部分:Intra-area routing:指在同一区域内的路由。Inter-area routing:指不同区域之间的路由。选举过程:OSPF通过选举 DR(Designated Router) 和 BDR(Backup Designated Router) 来减少路由更新的开销。DR负责汇总链路状态信息并广播给网络中的其他路由器。5.4.2. OSPF的优点快速收敛:由于使用链路状态算法,OSPF在网络拓扑发生变化时能快速计算出新的最短路径。支持大型网络:OSPF可以扩展到大型网络,通过区域划分减少路由表的大小和链路状态信息的传播范围。负载均衡:OSPF支持基于路径的负载均衡,可以在多个路径上分配流量,提高网络的利用率。总结链路状态路由算法(如OSPF)通过每个路由器维护网络拓扑图,计算最短路径,并使用Dijkstra算法更新路由表。它的优点是收敛速度快,但由于需要广播链路状态信息,资源消耗较大。距离向量路由算法通过交换路由表来更新路径,但容易发生无穷计数问题(例如路由环路)。常用的解决方法包括分割水平、毒性逆转等。OSPF协议是最常用的链路状态路由协议,它支持区域划分、快速收敛和负载均衡,适用于大型和复杂的网络环境。6. TCP协议:可靠数据传输、流量控制与拥塞控制6.1. TCP段结构TCP(传输控制协议)是面向连接的可靠传输协议,负责在网络中进行端到端的可靠数据传输。TCP协议在数据传输过程中,通过TCP段进行信息的封装。每个TCP段都包含了源和目的端口、序列号、确认号、窗口大小等重要字段。6.1.1. TCP段的结构一个标准的TCP段由两个主要部分组成:头部和数据。其中头部包含了多个字段,分别负责不同的控制功能。常见的TCP段结构如下:源端口(Source Port):16位,表示发送方的端口号。目的端口(Destination Port):16位,表示接收方的端口号。序列号(Sequence Number):32位,用于标识发送的数据的顺序。TCP使用序列号来实现数据的顺序控制和重组。确认号(Acknowledgment Number):32位,用于确认接收到的数据的序列号。接收方在确认数据时,会将下一个期望接收的字节的序列号放入确认号字段。数据偏移(Data Offset):4位,表示TCP头部的长度。由于TCP头部可能有选项字段,数据偏移字段指示实际数据开始的位置。保留(Reserved):3位,保留供将来使用。标志位(Flags):9位,表示不同的控制信息,包括:URG(紧急标志位):表示是否有紧急数据。ACK(确认标志位):表示确认字段有效。PSH(推送标志位):表示要求推送数据到应用层。RST(重置标志位):表示连接需要重置。SYN(同步标志位):用于建立连接。FIN(结束标志位):表示连接终止。窗口大小(Window Size):16位,表示接收端的接收窗口大小,用于流量控制。校验和(Checksum):16位,用于检验TCP段是否在传输过程中被损坏。紧急指针(Urgent Pointer):16位,指示紧急数据的位置,只有当URG标志位为1时才有效。选项(Options):可选字段,用于实现不同的功能,如最大报文段大小(MSS)、时间戳等。数据(Data):实际的传输数据部分,包含应用层的数据。6.2. 序列号和确认号TCP是一个可靠的数据传输协议,它通过序列号和确认号来实现数据的顺序控制和可靠传输。6.2.1. 序列号(Sequence Number)每个TCP段都有一个序列号,用来标识数据的顺序。发送方在发送数据时,会将数据分割成一个个字节流,每个字节都有一个唯一的序列号。接收方通过序列号来确保数据按正确的顺序接收,并能够丢失或重复的数据进行重传。在连接建立时,TCP会使用一个初始序列号(ISN),该值是一个随机数。每发送一个字节的数据,序列号就会递增,表示下一个字节的序列号。6.2.2. 确认号(Acknowledgment Number)TCP采用的是累积确认的机制。接收方会将收到的数据的序列号的下一个字节作为确认号,发送给发送方。这意味着接收方通过确认号来告知发送方,已经成功接收到的数据的顺序。例如,如果接收方成功接收到序列号为1000到1500的数据,它会发送一个确认号1501,表示它已经收到了序列号小于1501的所有数据。6.3. 连接管理:三次握手与四次挥手TCP协议是面向连接的,每次通信都需要在发送方和接收方之间建立一个可靠的连接。连接管理通过三次握手(Three-Way Handshake)来完成连接的建立,通过四次挥手(Four-Way Handshake)来完成连接的终止。6.3.1. 三次握手(TCP连接建立)TCP连接的建立需要经过三次交换控制信息,确保双方都准备好开始数据传输。第一次握手:客户端发送一个SYN报文段(请求连接),并选择一个初始序列号ISN(通常为一个随机数)。客户端进入SYN_SENT状态,等待服务器响应。第二次握手:服务器接收到SYN报文段后,回应一个SYN-ACK报文段,确认接收到客户端的连接请求,并选择一个自己的初始序列号ISN。服务器进入SYN_RCVD状态,等待客户端确认。第三次握手:客户端接收到SYN-ACK报文段后,发送一个ACK报文段,确认服务器的连接请求,并将序列号加1。客户端进入ESTABLISHED状态,数据传输开始。服务器也进入ESTABLISHED状态,准备接收数据。6.3.2. 四次挥手(TCP连接关闭)TCP连接的关闭需要通过四次交换控制信息,确保双方都完成数据传输。第一次挥手:客户端发送一个FIN报文段,表示它已经没有数据要发送了。客户端进入FIN_WAIT_1状态,等待服务器的确认。第二次挥手:服务器接收到FIN报文段后,发送一个ACK报文段,确认客户端的关闭请求。服务器进入CLOSE_WAIT状态。第三次挥手:服务器准备关闭连接时,发送一个FIN报文段,表示它也没有数据要发送了。服务器进入LAST_ACK状态,等待客户端的确认。第四次挥手:客户端接收到服务器的FIN报文段后,发送一个ACK报文段,确认服务器的关闭请求。客户端进入TIME_WAIT状态,等待一段时间以确保数据的可靠传输。之后,客户端关闭连接。6.4. 流量控制TCP的流量控制机制用于防止发送方发送数据过快,导致接收方的缓存溢出。它通过窗口机制来实现流量控制,接收方通知发送方自己当前能够接收的最大字节数,即接收窗口大小。6.4.1. 接收窗口(Window Size)接收窗口是TCP头部中的一个重要字段,表示接收方当前能够接收的剩余数据量。窗口大小的大小决定了发送方可以发送多少未确认的数据。如果接收方的缓冲区满了,它会将接收窗口的大小设置为0,告诉发送方暂停发送数据,直到它有足够的空间来接收更多数据。流量控制的目的是保持发送方的发送速率与接收方的处理能力相匹配,避免数据丢失。6.5. 拥塞控制拥塞控制是TCP协议中另一个非常重要的机制,它用于在网络中发生拥塞时,动态调整数据发送速率,以减少网络中丢包现象,并确保高效的传输。6.5.1. 拥塞控制的基本原理TCP的拥塞控制包括四个主要算法:慢启动(Slow Start):在连接建立之初,TCP会使用慢启动算法逐步增加发送窗口大小,避免一下子发送过多的数据。窗口的初始值通常是1个最大报文段大小(MSS)。每收到一个确认,发送窗口大小会指数级增长,直到窗口大小达到一个阈值(ssthresh)。拥塞避免(Congestion Avoidance):当窗口大小超过ssthresh时,TCP会采用线性增长的方式增加发送窗口,每次收到一个确认,窗口大小增加1个MSS。这样可以避免网络中的快速拥塞。快速重传(Fast Retransmit):当发送方收到三个相同的重复确认时,它会立即重传丢失的数据段,而无需等待重传定时器超时。快速恢复(Fast Recovery):在快速重传发生后,TCP会将ssthresh设置为当前窗口大小的一半,并进入拥塞避免阶段。6.5.2. 拥塞窗口(Congestion Window)拥塞控制的核心在于拥塞窗口(cwnd),它表示发送方可发送的最大数据量。拥塞窗口的大小根据网络的拥塞程度动态调整,确保发送方不会过快地发送数据,导致网络拥塞。总结TCP段结构:TCP段包含了源端口、目的端口、序列号、确认号、标志位、窗口大小等字段,用于确保数据传输的可靠性。序列号与确认号:TCP通过序列号和确认号来实现可靠的数据传输,保证数据的顺序性和完整性。连接管理:TCP使用三次握手建立连接,四次挥手关闭连接,确保双方在可靠的状态下进行数据交换。流量控制:通过接收窗口控制发送方的发送速率,避免接收方的缓冲区溢出。拥塞控制:TCP采用慢启动、拥塞避免、快速重传和快速恢复等机制,动态调整数据发送速率,避免网络拥塞。7. 拥塞控制原理与方法拥塞控制是指通过动态调整网络的传输速率,避免网络中过载或拥塞的情况。TCP使用拥塞控制算法来控制数据的发送速率,以避免引发网络拥塞。TCP的拥塞控制不仅确保了网络的稳定性,也提高了网络的传输效率。7.1. 拥塞控制的目的网络拥塞通常会导致数据包丢失、延迟增加以及网络性能下降,因此,拥塞控制的目标是:避免网络过载:通过控制数据发送速率,避免过多的数据包涌入网络,从而减少丢包现象。提高网络利用率:在不引发拥塞的前提下,最大化地利用网络带宽。保持公平性:通过有效的流量管理,确保不同连接之间的带宽公平分配。7.2. 拥塞控制的基本机制TCP的拥塞控制机制通过四个主要算法来实现:慢启动(Slow Start)、拥塞避免(Congestion Avoidance)、快速重传(Fast Retransmit)和快速恢复(Fast Recovery)。这些算法协同工作,通过动态调整拥塞窗口(cwnd)来控制数据的发送速率。7.2.1. 慢启动(Slow Start)慢启动是TCP拥塞控制的初始阶段。它的主要目标是通过快速增加发送窗口的大小,迅速找到网络的容量,但同时避免一开始就发送过多的数据,导致网络瞬间拥塞。工作原理:在连接开始时,TCP的拥塞窗口(cwnd)通常初始化为1个MSS(最大报文段大小)。每当收到一个ACK确认,cwnd就会增加1个MSS。也就是说,发送窗口的大小每收到一个确认报文就会指数增长(cwnd的值会翻倍)。过渡到拥塞避免:当cwnd达到一个阈值(ssthresh)时,慢启动结束,进入拥塞避免阶段。7.2.2. 拥塞避免(Congestion Avoidance)当TCP的拥塞窗口大小超过慢启动的阈值(ssthresh)后,网络开始进入拥塞避免阶段。在这个阶段,TCP会以更为缓慢、稳定的速率增长cwnd,以避免出现网络拥塞。工作原理:在拥塞避免阶段,每收到一个确认,cwnd的增长速度为1个MSS。换句话说,拥塞窗口是线性增长的,而不是指数增长。避免过度发送数据:在拥塞避免阶段,通过缓慢增长窗口的大小,可以逐步增加网络的负载,而不会造成过多的拥塞。7.2.3. 快速重传(Fast Retransmit)快速重传机制主要用于处理丢包的情况。当发送方连续收到三个相同的重复ACK时,它会立即重传该丢失的数据段,而不需要等待重传定时器超时。工作原理:当接收方发现丢失的数据包时,会发送重复的ACK通知发送方。发送方收到三个相同的重复ACK时,认为该数据段丢失,立即重新发送丢失的数据段。优点:避免了等待重传超时的延迟,从而加快了丢包的恢复过程。7.2.4. 快速恢复(Fast Recovery)快速恢复是在快速重传之后的一项技术,它用于在丢包恢复时减少拥塞窗口的大小,避免完全重新启动慢启动过程。工作原理:在快速重传之后,TCP会将ssthresh设置为当前cwnd的一半,并将cwnd设置为ssthresh + 3*MSS。这样,在数据丢失后,TCP不会完全从慢启动开始,而是快速恢复到较高的传输速率,然后逐步过渡到拥塞避免阶段。优势:这种机制能有效减少网络的负担,避免在发生丢包时的过度回退。7.3. 拥塞控制的详细过程综合上述四个机制,TCP的拥塞控制可以分为以下几个步骤:慢启动阶段:一开始,TCP以指数级增长的方式增加拥塞窗口,直到cwnd达到ssthresh值,此时过渡到拥塞避免阶段。拥塞避免阶段:在这个阶段,cwnd每次增加1个MSS,增长速度较慢,目的是避免因过多数据导致网络拥塞。丢包检测:当网络中出现丢包时,TCP通过重复ACK或超时机制来检测丢包。快速重传与快速恢复:当接收到重复ACK时,TCP通过快速重传机制重新发送丢失的数据,并进入快速恢复阶段,调整ssthresh和cwnd,避免完全回退到慢启动。7.4. 拥塞控制的调节参数在实际的网络环境中,拥塞控制的效果受到多个参数的影响。以下是一些关键的调节参数:ssthresh(慢启动阈值):ssthresh的值决定了TCP从慢启动阶段转入拥塞避免阶段的时机。该阈值通常会根据网络的拥塞情况进行动态调整。在丢包发生时,ssthresh通常会减半,以减少发送速率。cwnd(拥塞窗口):cwnd表示发送方可以发送的最大字节数。TCP的拥塞控制机制会通过动态调整cwnd来控制数据的发送速率。cwnd随着网络的拥塞情况增加或减少。RTT(Round Trip Time):RTT是指数据从发送方到接收方再回到发送方的时间。RTT的变化会影响TCP的超时重传机制(RTO),进而影响cwnd的调整速度。MSS(最大报文段大小):MSS是TCP协议所允许的最大数据负载大小,通常由网络的MTU(最大传输单元)决定。在拥塞控制中,MSS的大小会影响cwnd的增长速度。7.5. 拥塞控制的挑战与改进虽然TCP的拥塞控制机制可以有效地减少网络中的拥塞,但在现代高带宽和高延迟的网络中,TCP的拥塞控制依然面临一些挑战。以下是一些常见的挑战及其改进方向:高带宽-延迟积(BDP)网络:在高带宽、高延迟的网络中,慢启动和拥塞避免阶段的增长速度可能无法有效利用网络带宽,导致低效的带宽使用率。为了解决这一问题,BBR(Bottleneck Bandwidth and Round-trip propagation time)协议应运而生,它通过动态调整发送速率来适应带宽和延迟的变化,优化了TCP的拥塞控制。网络中的突发流量:网络中的突发流量可能会导致瞬时拥塞,尤其是在TCP的慢启动阶段。为了解决这一问题,TCP Cubic和TCP BBR等新型拥塞控制算法采用了更先进的策略来提高数据传输的效率和网络的吞吐量。公平性问题:在多用户环境中,多个TCP连接可能会同时竞争带宽,导致公平性问题。现代TCP变种,如TCP Vegas,通过更加精细的流量控制来解决这些问题,确保不同连接之间的带宽公平性。总结拥塞控制是TCP协议的核心机制之一,旨在避免网络拥塞,确保高效的数据传输。其基本机制包括慢启动、拥塞避免、快速重传和快速恢复。慢启动通过指数级增长cwnd来迅速找到网络的容量,而拥塞避免通过线性增长cwnd来避免过度拥塞。快速重传和快速恢复机制用于处理丢包情况,减少拥塞时的性能损失。在实际应用中,TCP的拥塞控制需要根据不同网络环境进行调整,面向高带宽、低延迟网络的协议改进,如BBR和TCP Cubic,进一步优化了传输效率。
2024年12月30日
13 阅读
0 评论
0 点赞
2024-12-27
《概率论与数理统计》重难点
prob code[class*=language-],pre[class*=language-]{color:#333;background:0 0;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.4;-moz-tab-size:8;-o-tab-size:8;tab-size:8;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:.8em;overflow:auto;border-radius:3px;background:#f5f5f5}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal;background:#f5f5f5}.token.blockquote,.token.comment{color:#969896}.token.cdata{color:#183691}.token.doctype,.token.macro.property,.token.punctuation,.token.variable{color:#333}.token.builtin,.token.important,.token.keyword,.token.operator,.token.rule{color:#a71d5d}.token.attr-value,.token.regex,.token.string,.token.url{color:#183691}.token.atrule,.token.boolean,.token.code,.token.command,.token.constant,.token.entity,.token.number,.token.property,.token.symbol{color:#0086b3}.token.prolog,.token.selector,.token.tag{color:#63a35c}.token.attr-name,.token.class,.token.class-name,.token.function,.token.id,.token.namespace,.token.pseudo-class,.token.pseudo-element,.token.url-reference .token.variable{color:#795da3}.token.entity{cursor:help}.token.title,.token.title .token.punctuation{font-weight:700;color:#1d3e81}.token.list{color:#ed6a43}.token.inserted{background-color:#eaffea;color:#55a532}.token.deleted{background-color:#ffecec;color:#bd2c00}.token.bold{font-weight:700}.token.italic{font-style:italic}.language-json .token.property{color:#183691}.language-markup .token.tag .token.punctuation{color:#333}.language-css .token.function,code.language-css{color:#0086b3}.language-yaml .token.atrule{color:#63a35c}code.language-yaml{color:#183691}.language-ruby .token.function{color:#333}.language-markdown .token.url{color:#795da3}.language-makefile .token.symbol{color:#795da3}.language-makefile .token.variable{color:#183691}.language-makefile .token.builtin{color:#0086b3}.language-bash .token.keyword{color:#0086b3}pre[data-line]{position:relative;padding:1em 0 1em 3em}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:hsla(24,20%,50%,.08);background:linear-gradient(to right,hsla(24,20%,50%,.1) 70%,hsla(24,20%,50%,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:hsla(24,20%,50%,.4);color:#f4f1ef;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px #fff}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}html body{font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ol,html body>ul{margin-bottom:16px}html body ol,html body ul{padding-left:2em}html body ol.no-list,html body ul.no-list{padding:0;list-style-type:none}html body ol ol,html body ol ul,html body ul ol,html body ul ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;background-color:#f0f0f0;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:700;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::after,html body code::before{letter-spacing:-.2em;content:'\00a0'}html body pre>code{padding:0;margin:0;word-break:normal;white-space:pre;background:0 0;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:after,html body pre code:before,html body pre tt:after,html body pre tt:before{content:normal}html body blockquote,html body dl,html body ol,html body p,html body pre,html body ul{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body code,html body pre{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview ul{list-style:disc}.markdown-preview ul ul{list-style:circle}.markdown-preview ul ul ul{list-style:square}.markdown-preview ol{list-style:decimal}.markdown-preview ol ol,.markdown-preview ul ol{list-style-type:lower-roman}.markdown-preview ol ol ol,.markdown-preview ol ul ol,.markdown-preview ul ol ol,.markdown-preview ul ul ol{list-style-type:lower-alpha}.markdown-preview .newpage,.markdown-preview .pagebreak{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center!important}.markdown-preview:not([data-for=preview]) .code-chunk .code-chunk-btn-group{display:none}.markdown-preview:not([data-for=preview]) .code-chunk .status{display:none}.markdown-preview:not([data-for=preview]) .code-chunk .output-div{margin-bottom:16px}.markdown-preview .md-toc{padding:0}.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link{display:inline;padding:.25rem 0}.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link div,.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link p{display:inline}.markdown-preview .md-toc .md-toc-link-wrapper.highlighted .md-toc-link{font-weight:800}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,.66);border:4px solid rgba(150,150,150,.66);background-clip:content-box}html body[for=html-export]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0;min-height:100vh}@media screen and (min-width:914px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{font-size:14px!important;padding:1em}}@media print{html body[for=html-export]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=html-export]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,.66);border:4px solid rgba(150,150,150,.66);background-clip:content-box}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc{padding:0 16px}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link{display:inline;padding:.25rem 0}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link div,html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link p{display:inline}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper.highlighted .md-toc-link{font-weight:800}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% - 300px);padding:2em calc(50% - 457px - 300px / 2);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=html-export]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=html-export]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none} /* Please visit the URL below for more information: */ /* https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */ document.addEventListener("DOMContentLoaded", function () { // your code here }); 概率论期末重点 1. 加法公式 对于两个事件 AAA 和 BBB,加法公式是指计算它们并集的概率: P(A∪B)=P(A)+P(B)−P(A∩B)P(A \cup B) = P(A) + P(B) - P(A \cap B)P(A∪B)=P(A)+P(B)−P(A∩B) 这是因为如果直接将 P(A)P(A)P(A) 和 P(B)P(B)P(B) 加在一起,重复计算了 A∩BA \cap BA∩B 的部分,所以需要减去一次。 2. 乘法公式 乘法公式用于计算两个事件交集的概率。对于两个事件 AAA 和 BBB,如果 AAA 和 BBB 是独立事件,则有: P(A∩B)=P(A)⋅P(B)P(A \cap B) = P(A) \cdot P(B)P(A∩B)=P(A)⋅P(B) 如果 AAA 和 BBB 不是独立事件,则有: P(A∩B)=P(A)⋅P(B∣A)=P(B)⋅P(A∣B)P(A \cap B) = P(A) \cdot P(B|A) = P(B) \cdot P(A|B)P(A∩B)=P(A)⋅P(B∣A)=P(B)⋅P(A∣B) 其中,P(B∣A)P(B|A)P(B∣A) 表示在 AAA 已发生的条件下 BBB 发生的条件概率,P(A∣B)P(A|B)P(A∣B) 同理。 3. 事件独立性 事件 AAA 和 BBB 独立的条件是: P(A∩B)=P(A)⋅P(B)P(A \cap B) = P(A) \cdot P(B)P(A∩B)=P(A)⋅P(B) 如果两个事件独立,那么发生其中一个事件的概率不会影响另一个事件的发生概率。 4. 全概率公式 全概率公式用于计算一个事件的概率,假设 B1,B2,…,BnB_1, B_2, \dots, B_nB1,B2,…,Bn 是一个完备事件组,且这组事件相互独立,那么事件 AAA 的概率可以表示为: P(A)=∑i=1nP(A∩Bi)=∑i=1nP(A∣Bi)P(Bi)P(A) = \sum_{i=1}^{n} P(A \cap B_i) = \sum_{i=1}^{n} P(A | B_i) P(B_i)P(A)=i=1∑nP(A∩Bi)=i=1∑nP(A∣Bi)P(Bi) 这意味着我们可以通过对不同情形的条件概率加权平均来求解 AAA 的总体概率。 5. 贝叶斯公式 贝叶斯公式是求解条件概率的重要工具。假设事件 AAA 和 BBB 已知,贝叶斯公式为: P(A∣B)=P(B∣A)P(A)P(B)P(A | B) = \frac{P(B | A) P(A)}{P(B)}P(A∣B)=P(B)P(B∣A)P(A) 贝叶斯公式反映了在已知某些信息后,如何更新事件的概率。例如,如果我们知道 BBB 发生了,那么事件 AAA 的概率就变为 P(A∣B)P(A|B)P(A∣B)。 6. 二项分布 二项分布描述了在独立重复试验中,某个事件发生的次数。设 XXX 为二项随机变量,表示在 nnn 次独立试验中某事件发生的次数,且每次试验成功的概率为 ppp,则 XXX 的概率质量函数为: P(X=k)=(nk)pk(1−p)n−k,k=0,1,2,…,nP(X = k) = \binom{n}{k} p^k (1-p)^{n-k}, \quad k = 0, 1, 2, \dots, nP(X=k)=(kn)pk(1−p)n−k,k=0,1,2,…,n 其中,(nk)\binom{n}{k}(kn) 是组合数,表示从 nnn 次试验中选取 kkk 次成功的方式数。 应用: 期望:E(X)=npE(X) = npE(X)=np 方差:Var(X)=np(1−p)\text{Var}(X) = np(1-p)Var(X)=np(1−p) 7. 泊松分布 泊松分布常用来描述在固定时间或空间范围内某事件发生的次数,尤其是当事件发生的频率较低时。假设 XXX 是一个泊松随机变量,表示某事件在单位时间内发生的次数,且单位时间内事件的平均发生次数为 λ\lambdaλ,则 XXX 的概率质量函数为: P(X=k)=λke−λk!,k=0,1,2,…P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}, \quad k = 0, 1, 2, \dotsP(X=k)=k!λke−λ,k=0,1,2,… 应用: 期望:E(X)=λE(X) = \lambdaE(X)=λ 方差:Var(X)=λ\text{Var}(X) = \lambdaVar(X)=λ 8. 正态分布 正态分布是最常见的连续型概率分布,描述了大量独立且相同分布的随机变量的和。设 XXX 为正态随机变量,均值为 μ\muμ,标准差为 σ\sigmaσ,则 XXX 的概率密度函数为: f(x)=1σ2πe−(x−μ)22σ2,−∞<x<∞f(x) = \frac{1}{\sigma \sqrt{2\pi}} e^{-\frac{(x - \mu)^2}{2\sigma^2}}, \quad -\infty < x < \inftyf(x)=σ2π1e−2σ2(x−μ)2,−∞<x<∞ 正态分布的曲线是对称的,且大多数数据集中在均值附近。 应用: 期望:E(X)=μE(X) = \muE(X)=μ 方差:Var(X)=σ2\text{Var}(X) = \sigma^2Var(X)=σ2 正态分布广泛应用于数据分析、质量控制和自然现象建模等领域。 9. 分布函数的运用 分布函数(或累积分布函数,CDF)用于描述随机变量 XXX 取值小于或等于某个数值 xxx 的概率。对于离散随机变量 XXX,累积分布函数定义为: F(x)=P(X≤x)F(x) = P(X \leq x)F(x)=P(X≤x) 对于连续随机变量,分布函数是概率密度函数(PDF)沿 −∞-\infty−∞ 到 xxx 的积分: F(x)=∫−∞xf(t) dtF(x) = \int_{-\infty}^{x} f(t) \, dtF(x)=∫−∞xf(t)dt 分布函数用于求解概率、分析数据的分布特征、以及计算概率区间等。 10. 二维离散型随机变量的概率分布 设 XXX 和 YYY 是两个离散型随机变量,它们的联合概率分布由联合概率质量函数(PMF)表示,即: P(X=xi,Y=yj)=pij,i=1,2,…,m,j=1,2,…,nP(X = x_i, Y = y_j) = p_{ij}, \quad i = 1, 2, \dots, m, \quad j = 1, 2, \dots, nP(X=xi,Y=yj)=pij,i=1,2,…,m,j=1,2,…,n 其中,pijp_{ij}pij 表示随机变量 X=xiX = x_iX=xi 和 Y=yjY = y_jY=yj 同时发生的概率。联合概率分布的要求是: ∑i=1m∑j=1npij=1\sum_{i=1}^{m} \sum_{j=1}^{n} p_{ij} = 1i=1∑mj=1∑npij=1 边际概率是通过对一个变量求和得到的: 对 XXX 的边际概率: P(X=xi)=∑j=1npijP(X = x_i) = \sum_{j=1}^{n} p_{ij}P(X=xi)=j=1∑npij 对 YYY 的边际概率: P(Y=yj)=∑i=1mpijP(Y = y_j) = \sum_{i=1}^{m} p_{ij}P(Y=yj)=i=1∑mpij 11. 二维连续型随机变量的概率密度 对于二维连续型随机变量 XXX 和 YYY,它们的联合概率密度函数为 fX,Y(x,y)f_{X,Y}(x, y)fX,Y(x,y),满足: ∫−∞∞∫−∞∞fX,Y(x,y) dx dy=1\int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f_{X,Y}(x, y) \, dx \, dy = 1∫−∞∞∫−∞∞fX,Y(x,y)dxdy=1 联合概率密度函数的边际分布分别为: 对 XXX 的边际密度: fX(x)=∫−∞∞fX,Y(x,y) dyf_X(x) = \int_{-\infty}^{\infty} f_{X,Y}(x, y) \, dyfX(x)=∫−∞∞fX,Y(x,y)dy 对 YYY 的边际密度: fY(y)=∫−∞∞fX,Y(x,y) dxf_Y(y) = \int_{-\infty}^{\infty} f_{X,Y}(x, y) \, dxfY(y)=∫−∞∞fX,Y(x,y)dx 12. 二维随机变量函数的概率分布 设有函数 Z=g(X,Y)Z = g(X, Y)Z=g(X,Y),其中 XXX 和 YYY 为二维随机变量,ggg 是某个可测函数。我们可以通过联合概率密度函数来推导 ZZZ 的分布。对于连续随机变量,可以使用变换方法,求得 ZZZ 的概率密度函数 fZ(z)f_Z(z)fZ(z)。这个过程通常涉及雅可比行列式,假设变换是单调的,并且存在逆变换: fZ(z)=∫∫g(x,y)=zfX,Y(x,y) dx dyf_Z(z) = \int \int_{g(x, y) = z} f_{X,Y}(x, y) \, dx \, dyfZ(z)=∫∫g(x,y)=zfX,Y(x,y)dxdy 对于离散随机变量,类似地,可以通过求和来得到新变量的分布。 13. 期望和方差的运用 期望是一个随机变量的加权平均,表示随机变量的平均值或中心趋势。对于离散型随机变量 XXX,期望为: E(X)=∑ixiP(X=xi)E(X) = \sum_i x_i P(X = x_i)E(X)=i∑xiP(X=xi) 对于连续型随机变量,期望为: E(X)=∫−∞∞xfX(x) dxE(X) = \int_{-\infty}^{\infty} x f_X(x) \, dxE(X)=∫−∞∞xfX(x)dx 方差衡量的是随机变量的离散程度,表示随机变量与其期望值之间的平均偏差。方差为: Var(X)=E[(X−E(X))2]=E(X2)−[E(X)]2\text{Var}(X) = E[(X - E(X))^2] = E(X^2) - [E(X)]^2Var(X)=E[(X−E(X))2]=E(X2)−[E(X)]2 其中,E(X2)E(X^2)E(X2) 是 XXX 的二次期望: E(X2)=∑ixi2P(X=xi)或E(X2)=∫−∞∞x2fX(x) dxE(X^2) = \sum_i x_i^2 P(X = x_i) \quad \text{或} \quad E(X^2) = \int_{-\infty}^{\infty} x^2 f_X(x) \, dxE(X2)=i∑xi2P(X=xi)或E(X2)=∫−∞∞x2fX(x)dx 协方差用于衡量两个随机变量 XXX 和 YYY 的线性关系,定义为: Cov(X,Y)=E[(X−E(X))(Y−E(Y))]=E(XY)−E(X)E(Y)\text{Cov}(X, Y) = E[(X - E(X))(Y - E(Y))] = E(XY) - E(X)E(Y)Cov(X,Y)=E[(X−E(X))(Y−E(Y))]=E(XY)−E(X)E(Y) 14. 方差的性质 非负性:Var(X)≥0\text{Var}(X) \geq 0Var(X)≥0。 加法性:对于独立随机变量 XXX 和 YYY,有: Var(X+Y)=Var(X)+Var(Y)\text{Var}(X + Y) = \text{Var}(X) + \text{Var}(Y)Var(X+Y)=Var(X)+Var(Y) 缩放性:对于常数 aaa,有: Var(aX)=a2Var(X)\text{Var}(aX) = a^2 \text{Var}(X)Var(aX)=a2Var(X) 15. 矩的概念理解 矩是对随机变量的一种描述,表示该随机变量的高阶偏离程度。常见的矩有: 原点矩:E(Xn)E(X^n)E(Xn),表示随机变量 XXX 关于原点的高阶期望。 中心矩:E[(X−E(X))n]E[(X - E(X))^n]E[(X−E(X))n],表示随机变量 XXX 关于其期望的高阶期望。 其中,二阶矩即方差,三阶矩和四阶矩分别与偏度(Skewness)和峰度(Kurtosis)相关。 16. 中心极限定理的概念理解及运用 中心极限定理是统计学中的一个重要定理,它描述了大样本下,样本均值的分布趋近于正态分布的性质。 具体来说,设有一组独立同分布的随机变量 X1,X2,…,XnX_1, X_2, \dots, X_nX1,X2,…,Xn,每个变量的期望是 E(Xi)=μE(X_i) = \muE(Xi)=μ,方差是 Var(Xi)=σ2\text{Var}(X_i) = \sigma^2Var(Xi)=σ2,那么当样本容量 nnn 足够大时,样本均值的分布可以近似为正态分布: Xˉ=1n∑i=1nXi\bar{X} = \frac{1}{n} \sum_{i=1}^{n} X_iXˉ=n1i=1∑nXi 当 nnn 很大时,Xˉ\bar{X}Xˉ 的分布趋近于正态分布,且其均值为 μ\muμ,方差为 σ2n\frac{\sigma^2}{n}nσ2,即: Xˉ∼N(μ,σ2n)\bar{X} \sim N\left(\mu, \frac{\sigma^2}{n}\right)Xˉ∼N(μ,nσ2) 中心极限定理非常重要,因为它保证了不论原始数据的分布如何,当样本量足够大时,样本均值的分布会趋近于正态分布。因此,在许多实际应用中,我们可以假设样本均值服从正态分布,即使原始数据本身不一定服从正态分布。 17. 切比雪夫不等式的运用 切比雪夫不等式是描述任意分布的随机变量与其期望的偏差之间关系的一个不等式。它指出,对于任何随机变量 XXX,无论其分布如何,都有: P(∣X−E(X)∣≥k⋅σ)≤1k2,对于任意的 k>0P(|X - E(X)| \geq k \cdot \sigma) \leq \frac{1}{k^2}, \quad \text{对于任意的} \ k > 0P(∣X−E(X)∣≥k⋅σ)≤k21,对于任意的 k>0 其中,σ\sigmaσ 是 XXX 的标准差,kkk 是正数。切比雪夫不等式表明,不论随机变量的分布如何,至少 1k2\frac{1}{k^2}k21 的概率落在期望值 E(X)E(X)E(X) 的 kkk 倍标准差范围内。 应用: 估计分布:即使我们不知道分布的具体形式,切比雪夫不等式也能提供对概率的上界。 风险控制:在风险管理中,切比雪夫不等式可以用来估计极端事件的概率,帮助做出风险预测。 18. 矩估计法(Method of Moments) 矩估计法是一种用样本矩来估计总体分布参数的方法。基本思想是通过样本的矩(如样本均值、样本方差等)来估计总体的矩,然后利用这些矩来推导出参数的估计值。 假设有一个总体分布的概率密度函数(或概率质量函数) f(x;θ)f(x;\theta)f(x;θ),其第 kkk 阶矩为 E[Xk]=μk(θ)E[X^k] = \mu_k(\theta)E[Xk]=μk(θ),其中 θ\thetaθ 为待估参数。矩估计法的步骤如下: 计算样本矩 mk=1n∑i=1nXikm_k = \frac{1}{n} \sum_{i=1}^{n} X_i^kmk=n1∑i=1nXik。 将样本矩与总体矩相等:mk=μk(θ)m_k = \mu_k(\theta)mk=μk(θ)。 解出参数 θ\thetaθ 的估计值。 矩估计法的优点是计算简便,尤其是在没有复杂的似然函数情况下,可以较为直接地得到估计值。但它的缺点是估计结果不一定是最优的,可能缺乏一致性或有效性。 19. 极大似然估计法(Maximum Likelihood Estimation, MLE) 极大似然估计法是一种基于样本数据来估计分布参数的方法。其基本思想是,选择使得观察到的数据最可能发生的参数值。对于一组样本 X1,X2,…,XnX_1, X_2, \dots, X_nX1,X2,…,Xn,假设它们独立同分布,且服从某一概率分布,具有参数 θ\thetaθ。根据样本数据,极大似然估计法的步骤如下: 似然函数:定义似然函数 L(θ)L(\theta)L(θ) 为样本在参数 θ\thetaθ 下的联合概率密度(或概率质量)函数: L(θ)=P(X1=x1,X2=x2,…,Xn=xn;θ)L(\theta) = P(X_1 = x_1, X_2 = x_2, \dots, X_n = x_n; \theta)L(θ)=P(X1=x1,X2=x2,…,Xn=xn;θ) 对于连续型数据,似然函数为联合概率密度函数;对于离散型数据,则是联合概率质量函数。 对数似然函数:为方便计算,通常取似然函数的对数(称为对数似然函数): ℓ(θ)=logL(θ)\ell(\theta) = \log L(\theta)ℓ(θ)=logL(θ) 求解极大值:通过对数似然函数求导并使其等于零,得到最优的参数估计值 θ^MLE\hat{\theta}_{MLE}θ^MLE: ddθℓ(θ)=0\frac{d}{d\theta} \ell(\theta) = 0dθdℓ(θ)=0 极大似然估计法的优点是具有很好的统计性质:一致性(随着样本量增加,估计值趋近于真实参数值)和渐近正态性(在样本量充分大的情况下,估计值服从正态分布)。但它的计算复杂度较高,尤其在多参数情况下,可能需要数值优化方法来求解。 20. 区间估计的计算 区间估计是对一个总体参数的估计方法,它提供一个区间(而非一个点估计),该区间内包含真实参数值的概率较高。最常见的区间估计是置信区间(Confidence Interval, CI)。 对于一个总体均值 μ\muμ 的区间估计,我们可以使用样本均值 Xˉ\bar{X}Xˉ 和样本标准差 SSS 来构建置信区间: Xˉ±zα/2⋅Sn\bar{X} \pm z_{\alpha/2} \cdot \frac{S}{\sqrt{n}}Xˉ±zα/2⋅nS 其中,zα/2z_{\alpha/2}zα/2 是标准正态分布的 α/2\alpha/2α/2 分位点,nnn 是样本容量。 对于大样本,中心极限定理保证了样本均值近似服从正态分布,因此可以使用上述公式。如果总体标准差已知,可以使用正态分布的置信区间;如果总体标准差未知,则通常使用样本标准差并使用 ttt-分布来构造置信区间。 21. 假设检验的基本思想 假设检验(Hypothesis Testing)是统计推断中的一种重要方法,主要用于根据样本数据判断某一假设是否成立。假设检验的基本过程包括以下步骤: 提出假设: 原假设(H0H_0H0):通常是待检验的假设,代表某个已知情况或无效情况。例如,“药物对病人没有影响”。 备择假设(H1H_1H1 或 HaH_aHa):与原假设相对立,代表一个需要通过数据支持的假设。例如,“药物对病人有影响”。 选择显著性水平(α\alphaα): 显著性水平通常设置为 0.050.050.05 或 0.010.010.01,表示在假设检验中接受错误的概率(即犯第一类错误的概率)。如果我们选择 α=0.05\alpha = 0.05α=0.05,意味着我们允许有 5% 的概率拒绝原假设,即使它是真的。 选择检验统计量: 检验统计量是用来检验假设的工具,通常是样本数据的某种函数,例如样本均值、样本标准差等。 计算p值: p值是指在原假设为真时,观察到的样本数据与假设值之间的差异的极端程度。p值越小,表示原假设不成立的证据越强。如果 p值小于显著性水平 α\alphaα,则拒绝原假设。 作出决策: 如果 ppp-值小于或等于显著性水平 α\alphaα,我们拒绝原假设,认为备择假设成立。 如果 ppp-值大于显著性水平 α\alphaα,则不拒绝原假设,认为原假设成立。 22. 不同类型参数检验问题的统计量选择 根据检验的目的和数据类型,常见的假设检验有很多不同的类型。每种检验有其对应的统计量和适用条件。 1. 单样本 ttt-检验 单样本 ttt-检验用于检验单个样本均值是否与总体均值 μ0\mu_0μ0 相等。假设我们有一个样本 X1,X2,…,XnX_1, X_2, \dots, X_nX1,X2,…,Xn,并且想检验该样本的均值是否等于某个值 μ0\mu_0μ0。 原假设(H0H_0H0): μ=μ0\mu = \mu_0μ=μ0 备择假设(H1H_1H1): μ≠μ0\mu \neq \mu_0μ=μ0 (双尾检验)或者 μ>μ0\mu > \mu_0μ>μ0(单尾检验)或 μ<μ0\mu < \mu_0μ<μ0(单尾检验) 统计量为: t=Xˉ−μ0S/nt = \frac{\bar{X} - \mu_0}{S / \sqrt{n}}t=S/nXˉ−μ0 其中,Xˉ\bar{X}Xˉ 是样本均值,SSS 是样本标准差,nnn 是样本容量。该统计量服从自由度为 n−1n - 1n−1 的 ttt-分布。 2. 双样本 ttt-检验 双样本 ttt-检验用于比较两个独立样本的均值是否相等。假设我们有两个独立样本 X1,X2,…,XnX_1, X_2, \dots, X_nX1,X2,…,Xn 和 Y1,Y2,…,YmY_1, Y_2, \dots, Y_mY1,Y2,…,Ym,并且希望检验它们的均值是否相等。 原假设(H0H_0H0): μX=μY\mu_X = \mu_YμX=μY 备择假设(H1H_1H1): μX≠μY\mu_X \neq \mu_YμX=μY(双尾检验)或者 μX>μY\mu_X > \mu_YμX>μY(单尾检验) 统计量为: t=Xˉ−YˉSX2n+SY2mt = \frac{\bar{X} - \bar{Y}}{\sqrt{\frac{S_X^2}{n} + \frac{S_Y^2}{m}}}t=nSX2+mSY2Xˉ−Yˉ 其中,Xˉ\bar{X}Xˉ 和 Yˉ\bar{Y}Yˉ 是样本均值,SX2S_X^2SX2 和 SY2S_Y^2SY2 是样本方差,nnn 和 mmm 是样本容量。 3. 方差分析(ANOVA) 当我们需要比较三个及以上的独立样本均值时,通常使用方差分析(ANOVA)。ANOVA通过比较组内方差和组间方差来检验各组均值是否相等。 原假设(H0H_0H0): 各组均值相等 备择假设(H1H_1H1): 至少有一组均值与其他组不同 统计量为: F=组间均方组内均方F = \frac{\text{组间均方}}{\text{组内均方}}F=组内均方组间均方 其中,组间均方表示各组均值与总体均值之间的变异程度,组内均方表示组内个体与组均值之间的变异程度。 4. 卡方检验 卡方检验用于检验分类数据的独立性或拟合度。比如,检验两个变量是否独立,或者检验样本数据是否符合某一已知的分布。 原假设(H0H_0H0): 变量之间独立,或者样本数据符合某一分布。 备择假设(H1H_1H1): 变量之间不独立,或者样本数据不符合某一分布。 卡方统计量为: χ2=∑(Oi−Ei)2Ei\chi^2 = \sum \frac{(O_i - E_i)^2}{E_i}χ2=∑Ei(Oi−Ei)2 其中,OiO_iOi 是观察到的频数,EiE_iEi 是期望的频数。 5. z检验 z检验通常用于大样本情况下的参数检验。与 ttt-检验类似,z检验用于检验单个样本均值是否与总体均值相等,或者检验两个独立样本的均值是否相等。 单样本 z 检验: z=Xˉ−μ0σ/nz = \frac{\bar{X} - \mu_0}{\sigma / \sqrt{n}}z=σ/nXˉ−μ0 其中,σ\sigmaσ 是总体标准差。 双样本 z 检验: z=Xˉ−YˉσX2n+σY2mz = \frac{\bar{X} - \bar{Y}}{\sqrt{\frac{\sigma_X^2}{n} + \frac{\sigma_Y^2}{m}}}z=nσX2+mσY2Xˉ−Yˉ 通常,z检验用于总体标准差已知或样本容量较大的情况(如 n>30n > 30n>30)。
2024年12月27日
140 阅读
57 评论
6 点赞
2024-09-22
信息学科竞赛教育训练计划——CPython初探
组员信息:230122183 洪宇轩(暑期计划结束,重新开题)230122185 温志宏基本目标在3~16周掌握CPython的基本架构和运行机制,能够理解其源码并具备一定修改或扩展能力。第3周:Python的高级特性目标:深入理解Python本身的一些高级特性,为后续理解CPython做好准备。学习内容:复习Python的基本语法和数据结构(列表、字典、元组等)理解Python中的内存管理机制:引用计数、垃圾回收了解Python中的对象模型(__dict__、__slots__)学习装饰器、生成器、上下文管理器等高级特性任务:使用Python实现一个简单的装饰器和生成器阅读Python官方文档中的数据模型章节第4周:C语言基础学习目标:掌握C语言的基本语法和数据结构,为后续阅读CPython源码做准备。学习内容:C语言基本语法(变量、控制流、函数)指针和内存管理结构体与联合体的使用动态内存分配(malloc/free)任务:使用C语言编写一些简单的程序:如冒泡排序、链表等理解指针的基本操作和内存管理第5周:了解CPython的架构目标:对CPython的整体架构有一个宏观的了解,理解其核心模块和执行流程。学习内容:CPython是如何将Python代码解释执行的理解CPython的架构:编译器、解释器、内存管理、垃圾回收等模块熟悉CPython的目录结构与核心文件(如pythonrun.c、ceval.c)了解编译和安装CPython的过程任务:下载并编译CPython源码:CPython官方GitHub找到并理解CPython核心文件中的函数,如PyObject结构第6周:动手搭建CPython开发环境目标:能够在本地成功编译CPython,并开始熟悉其源码。学习内容:在本地搭建开发环境(Linux/Mac/WSL环境更佳)安装所需的依赖和工具链(如GCC、Make)理解Makefile和CPython的编译过程学习如何进行简单的源码修改与重新编译任务:修改CPython的源码,使其打印出额外的调试信息重新编译并测试修改后的CPython第7周:字节码与解释器目标:了解Python代码是如何被编译为字节码,并由解释器执行的。学习内容:Python代码的执行过程:从源代码到字节码学习CPython的编译器模块,了解如何将Python源码转换为字节码深入阅读ceval.c文件,理解解释器的执行过程理解字节码指令和虚拟机的工作原理任务:编写一个简单的Python程序并使用dis模块查看其字节码阅读并理解CPython解释器的核心执行循环(PyEval_EvalFrameEx)第8周:对象模型与内存管理目标:理解CPython中对象的实现和内存管理机制。学习内容:理解Python对象模型,深入阅读object.c和obmalloc.c了解Python中每个对象的内存布局与引用计数垃圾回收机制:标记-清除算法与分代回收研究PyObject结构体的实现,理解其对各种Python对象的抽象任务:跟踪某些常用数据结构(如列表、字典)在内存中的分配和释放过程修改CPython源码,打印出每个对象创建和销毁的日志信息第9周:内建模块与扩展机制目标:理解CPython中的内建模块和如何编写C扩展模块。学习内容:学习CPython内建模块的实现,了解其与Python语言的交互了解Python的C API,学会如何编写C扩展模块深入理解import机制,了解模块的加载过程任务:阅读一些常见的内建模块(如math、sys)的源码编写一个简单的C扩展模块并在Python中调用第10周:调试与性能分析目标:掌握CPython的调试方法,并了解Python的性能瓶颈。学习内容:学习如何使用调试器(如gdb)调试CPython理解如何通过性能分析工具(如valgrind、perf)发现性能瓶颈了解影响Python性能的因素,如全局解释器锁(GIL)任务:使用gdb调试CPython源码,分析函数调用栈使用性能分析工具,分析一个Python程序的性能瓶颈第11周:CPython的线程与并发模型目标:理解CPython的并发模型以及全局解释器锁(GIL)的工作机制。学习内容:研究CPython中的线程模型和线程安全机制深入理解GIL的设计与影响学习CPython中的多线程与多进程模块实现任务:编写一个简单的Python多线程程序,观察GIL的影响阅读并理解CPython中与线程相关的源码部分第12周:垃圾回收机制深入研究目标:深入理解CPython的垃圾回收机制,尤其是分代回收机制。学习内容:了解CPython的垃圾回收算法及其优化策略深入阅读gcmodule.c,了解分代垃圾回收器的实现研究如何通过修改垃圾回收参数来优化性能任务:修改CPython源码中的垃圾回收参数,测试其对性能的影响编写一个Python程序,验证分代垃圾回收机制的效果第13周:学习Python 3的新特性及其在CPython中的实现目标:了解Python 3.x的新特性是如何在CPython中实现的。学习内容:阅读Python 3.x中的重要新特性(如类型注解、f-strings、异步IO)的实现理解这些特性在CPython中的实现细节任务:阅读某个新特性的PEP(Python Enhancement Proposal)在CPython源码中定位并理解相关实现第14周:探索CPython的优化机制目标:理解CPython中的性能优化技术与JIT的前景。学习内容:研究CPython中的优化机制,如快速路径优化、对象池等了解字节码优化与编译优化的区别任务:对比不同Python版本的性能优化,理解其源码差异第15周:尝试修改和扩展CPython目标:动手修改CPython源码,了解如何做出贡献。学习内容:按照自己的需求,尝试修改CPython的某个功能学习CPython贡献流程,提交Pull Request任务:完成一次简单的CPython源码修改并重新编译了解如何通过贡献者渠道提交代码第16周:总结与进阶方向目标:总结学习成果,规划下一步的学习方向。任务:总结CPython中的重要模块和机制制定后续进阶学习计划,如参与CPython社区、学习JIT优化等
2024年09月22日
24 阅读
0 评论
0 点赞
2024-06-22
Java模拟题
根据知识点和去年的出题思路随便命制的。 :)隐藏内容,请前往内页查看详情
2024年06月22日
89 阅读
85 评论
10 点赞
2024-06-21
Java期末复习
基本数据类型及一些注意事项逻辑类型:boolean整数类型:byte, short, int, long字符类型:char浮点类型:float, double需要加后缀的有long和float注意事项对于局部变量,不存在默认值只有实例方法才能调用实例变量PATH和CLASSPATH的配置PATH的配置: 找到JDK的安装路径(例如:D:\jdk),设置环境变量,在PATH中添加D:\jdk\binCLASSPATH的配置: 设置CLASSPATH环境变量,.; D:\jdk\libJava特点中面向对象是什么Java是面向对象编程语言,面向对象编程(OOP)是一种编程范式,使用“对象”作为基本单元。对象包含数据(属性)和行为(方法)。面向对象编程的三个主要特点:封装:将对象的属性和方法封装在一起,隐藏对象的内部实现细节,只暴露必要的接口。这样可以保护数据,防止外部干扰。继承:一种机制,可以创建一个新类,这个新类基于已有的类并继承其属性和方法。新类可以重用父类的代码,还可以添加新的功能。多态:允许对象以多种形式出现。具体来说,一个父类的引用可以指向子类的实例,并且可以调用子类的方法,实现运行时多态。各个修饰符修饰的类在各个场景下的访问权限修饰符同一个类同一个包子类(同包)子类(不同包)其他包public√√√√√protected√√√√×默认 (无修饰符)√√√××private√××××说明:public:公共访问,任何地方都可以访问。protected:受保护访问,同包可以访问,不同包的子类可以访问。默认(无修饰符):包级私有,同包可以访问,不同包不能访问。private:私有访问,只有同一个类中可以访问。类:顶层类(Outer Class)只能用public或默认修饰,不能用protected或private。内部类(Inner Class)可以用public、protected、默认或private修饰。成员变量:成员变量可以用public、protected、默认或private修饰,遵循上表的访问权限。GUI中listener的用处在Java的GUI编程中,listener是用于响应用户交互事件的接口。例如,点击按钮、移动鼠标等。listener可以让程序对用户操作做出响应。常见的listener接口:ActionListener: 用于处理动作事件(如按钮点击)。MouseListener: 用于处理鼠标事件。KeyListener: 用于处理键盘事件。实际代码示例写一个class,写构造方法,并继承:class Animal { String name; // 构造方法 public Animal(String name) { this.name = name; } public void makeSound() { System.out.println("Some sound..."); } } class Dog extends Animal { // 子类的构造方法 public Dog(String name) { super(name); } @Override public void makeSound() { System.out.println("Bark"); } public static void main(String[] args) { Dog dog = new Dog("Buddy"); dog.makeSound(); // 输出 "Bark" } }写一个接口,并写一个类实现该接口:// 定义接口 public interface Vehicle { void start(); void stop(); int getSpeed(); } // 实现接口的类 public class Car implements Vehicle { private int speed; @Override public void start() { System.out.println("Car is starting"); speed = 10; } @Override public void stop() { System.out.println("Car is stopping"); speed = 0; } @Override public int getSpeed() { return speed; } public static void main(String[] args) { Car car = new Car(); car.start(); System.out.println("Speed: " + car.getSpeed()); car.stop(); System.out.println("Speed: " + car.getSpeed()); } }写一个抽象类以及实现:abstract class Shape { // 抽象方法 abstract void draw(); // 非抽象方法 void description() { System.out.println("This is a shape"); } } class Circle extends Shape { @Override void draw() { System.out.println("Drawing a circle"); } public static void main(String[] args) { Circle circle = new Circle(); circle.draw(); // 输出 "Drawing a circle" circle.description(); // 输出 "This is a shape" } }super关键字:在Java中,super 关键字是一个特殊的引用,它指向当前对象的父类。class Parent { void show() { System.out.println("Parent's show()"); } int value = 10; } class Child extends Parent { void show() { super.show(); // 调用父类的show()方法 System.out.println("Child's show()"); } int value = 20; void printValues() { System.out.println(super.value); // 访问父类的value字段 System.out.println(value); // 访问子类的value字段 } Child() { super(); // 调用父类的构造方法 } } public class Test { public static void main(String[] args) { Child c = new Child(); c.show(); c.printValues(); } }在这个例子中,Child 类继承自 Parent 类。在 Child 类的 show() 方法中,我们使用 super.show() 来调用 Parent 类的 show() 方法。在 printValues() 方法中,我们使用 super.value 来访问父类的字段,而直接使用 value 来访问子类的字段。在 Child 类的构造方法中,我们使用 super() 来调用父类的构造方法。可变参数:可变参数可以与普通参数一起使用,但可变参数必须放在参数列表的最后public void printAll(Object first, int... numbers) { System.out.println(first); for (int num : numbers) { System.out.println(num); } }补充:2022级课堂作业本部分材料来自lyzJDK编译器:javac.exe正确main方法:public static void main(String args[])jdk的安装目录为D:\jdk,则path的值设置为D:\jdk\bin,classpath的值设置为.; D:\jdk\lib源文件扩展名为.java,字节码的扩展名是.classJava源文件是由若干个类组成的,这些类可以在一个源文件中,也可以分布在若干个源文件中,其中必须有一个源文件含有主类类体内容中声明成员变量是为了体现对象的属性还是行为?—-属性类体内容中定义的非构造方法是为了体现对象的属性还是行为?—-行为构造方法没有返回值构造方法可以重载类中的实例方法可以操作类变量(static变量)类方法(static方法)不需要操作实例变量类中的实例方法可以用类名不直接调用局部变量没有默认值接口中不可以声明变量接口中可以定义非抽象方法接口中的常量可以不指定初值可以在接口中只声明常量,不声明抽象方法允许接口中只有一个抽象方法线程在新建状态和死亡状态时,调用isAlive()方法返回值是falseFileInputStream按字节读取文件监视KeyEvent事件的监视器必须实现KeyListener接口"Hello".equals(“hello”)的值是false监视WindowEvent事件的监视器必须实现WindowsListener接口
2024年06月21日
196 阅读
49 评论
12 点赞
1
2