尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

北邮研究生高级计算机网络课件:TCP拥塞控制、BGP与SDN实践指南

发布时间:2026/9/29 4:28:30

资讯中心
01
ARTICLE

北邮研究生高级计算机网络课件:TCP拥塞控制、BGP与SDN实践指南

北邮研究生高级计算机网络课件:TCP拥塞控制、BGP与SDN实践指南
简介北邮研究生课程《高级计算机网络技术》的配套PPT课件定位为计算机网络概论部分的精讲讲义适合研究生、网络方向初学者以及备考高校网络课程的人群使用。资源共1个文件格式为pptx共72页压缩包仅762KB单文件便于携带和课堂展示。目前已有231人学习浏览是较为实用的课程辅助材料。课件系统梳理了计算机网络从实验性网络、局域网兴起到ISO开放系统互连、Internet时代的四个发展阶段并围绕因特网从ARPANET到三级结构再到多层次ISP的演进过程展开还介绍了Internet2与NGI计划、ISOC/IANA/IETF等管理组织以及因特网标准的四个制定阶段。后续内容延伸到网络定义、分类、性能指标和体系结构等核心概念配有网络互联示意图与阶段划分图示可帮助读者快速建立计算机网络知识框架也为进一步学习网络层、传输层和网络安全打下基础。1. 北邮研究生课程高级计算机网络技术PPT课件先搞清楚这份课件值不值得啃拿到一份《北邮研究生课程高级计算机网络技术PPT课件.pptx》如果只按本科期末复习的习惯从头翻到尾这份材料对你几乎没有任何额外价值。这门课从TCP拥塞控制开始就推翻本科教材的简化结论讲BGP时把路由选路当成AS之间的经济博弈到SDN章节再谈控制面与数据面分离每一页PPT都在追问同一个问题这个协议为什么被设计成现在这样。它适合三类人准备考研复试的研究生、工作几年想回炉补网络底子的从业者以及期末前把课件当索引用的在读学生。后面我把这套课件的使用方式拆成三个深水区、一套最小实验和四个避坑点你对照着再过一遍PPT价值会比刷两遍历年题高得多。2. 课件里最容易拉开差距的三个深水区TCP拥塞控制、BGP路由策略、SDN数据面本科《计算机网络》和研究生《高级计算机网络》的区别不在多讲了几个协议而在把协议背后的权衡讲透。课件如果按章节流水账看很容易被带过去但真正拉开差距的是下面三块拥塞控制从记忆状态机变成推导控制律BGP从背诵选路顺序变成理解AS间博弈SDN从听说过OpenFlow变成能说清南向接口发生了什么。这三块也是复试和期末主观题最爱出题的地方。2.1 TCP拥塞控制从Reno到BBR为什么研究生课上要重新推导本科阶段看谢希仁的教材拥塞控制收敛成一句话慢启动、拥塞避免、快重传、快恢复四个状态背下来就能应付考试。但研究生课件不会满足于状态机它会给出一张图一条TCP流在丢包率0.1%、RTT 50ms的链路上吞吐量到底是多少。这时候你会发现本科背的结论完全不够用教材可以为了教学把系统简化成“发生拥塞就减半”但真实网络里窗口减半的时机、减半的幅度、恢复的节奏都直接影响链路利用率和公平性。课件里通常会推导经典TCP吞吐量公式这个公式虽然不再精确描述现代算法但作为数量级估算依然实用import math def tcp_throughput(mss_bytes, rtt_sec, loss_rate): # 经典公式 T 1.2 * MSS / (RTT * sqrt(loss_rate)) # 输入MSS按字节RTT按秒loss_rate是丢包概率 return 1.2 * mss_bytes / (rtt_sec * math.sqrt(loss_rate)) # 以太网典型MSS为1460字节RTT取50ms丢包率0.1% throughput_bps tcp_throughput(1460, 0.05, 0.001) print(f理论吞吐量约 {throughput_bps * 8 / 1e6:.2f} Mbps)这段代码里MSS是最大报文段长度链路MTU为1500时减去IP头20字节和TCP头20字节就是1460RTT是往返时延丢包率要按小数传0.1%写成0.001而不是1。课件用它说明一个反直觉结论哪怕只有0.1%的丢包一条50ms延迟的TCP流也跑不满百兆链路。正是这个缺陷催生了CUBIC和BBR。复习时别满足于记住“收到三个重复ACK就快重传”要能答出阈值为什么设成3、AIMD为什么是加性增乘性减、BBR为什么在深队列下延迟表现更好。算法对比是课件图表重灾区建议自己列一张表加深理解算法核心思想关键参数典型场景RenoAIMD线性探测cwnd减半低带宽时延积丢包即拥塞CUBIC三次函数凹增长最后窗口Wmax高带宽长链路Linux默认BBR基于瓶颈带宽和RTT建模pacing rate高丢包、深队列链路2.2 BGP选路不是背路由表而是理解AS间博弈本科网络课对BGP的要求通常是能说出EBGP和IBGP的区别知道AS Path是选路依据。课件里BGP这部分会往前走一大步直接问互联网上两个AS都不愿意绕路给别家免费转发流量这种“自私”行为如何体现在BGP属性里答案就是LocalPref、AS Path、MED这几个属性。选路顺序在课件里被反复强调先比本地优先级再比AS Path长度然后Origin、MED最后才是内部IGP代价到下一跳的距离。这个顺序背下来不难但很多人栽在细节上。我做复试模拟时发现考生普遍说不清LocalPref默认值是100、范围是0到232−1也不知道MED只在本AS向邻居宣告时才有意义。用思科配置举例调优BGP路径选择就这几行:router bgp 65001 bgp default local-preference 200 neighbor 192.168.1.1 route-map SET_MED in route-map SET_MED permit 10 set metric 100这段配置里bgp default local-preference把本AS所有BGP路由的本地优先级改为200接收来自192.168.1.1的路由时通过route-map把MED设为100。选路时LocalPref越大越优先MED越小越优先。这里的坑是LocalPref只在同一个AS内传播不会出现在BGP对外宣告的路径属性里MED则会随路由通告给邻居AS但邻居是否采纳取决于它的策略。考试题经常把这两个属性混在一起问“对外通告哪些属性”答不上来就翻车。课件想让学生建立的核心认知是BGP不是最短路径协议而是策略协议。AS可以为了商业关系故意把某条路径的LocalPref调低实现主备切换或流量分流。能说出这一点复试里关于“为什么BGP不采用类似OSPF的SPF算法”这类问题的答案就通了AS之间没有统一的度量标准谁都不愿把选路权交给一个全网公用的公式。2.3 SDN南向接口与数据面OpenFlow与可编程交换机SDN章节在课件里占了不小篇幅但很多读者看到“控制面与数据面分离”就以为听懂了。真正的分水岭在OpenFlow协议的消息细节上。课件会展示一条流表从控制器下发到交换机的全过程交换机收到未匹配的报文通过PacketIn消息上报控制器控制器计算转发路径回复FlowMod消息交换机把规则装进流表后续同流报文直接按规则转发。这一个闭环就是南向接口的核心。如果只看原理不看实现很容易忘记流表下发还需要指定匹配域和优先级。用OVS实际下发一条流表规则会更直观# 创建OVS网桥并添加一条流表目的网段10.10.0.0/16的报文从2号口转发 ovs-vsctl add-br br0 ovs-ofctl add-flow br0 priority100,ip,nw_dst10.10.0.0/16,actionsoutput:2priority参数决定多条规则同时命中时谁生效数值越大越优先nw_dst是IP目的匹配域actions除了output还支持drop、set_field、push_vlan等动作。课件里关于SDN的图表最关键的其实是理解“控制器挂了流表还在不在”这个问题——OpenFlow流表默认带idle_timeout但不主动清除规则所以数据面仍然能继续转发已有流只是新流无法建立。这个细节能区分一个本科式理解和一个研究生式理解。数据中心网络部分SDN常和VXLAN一起出现。VXLAN把二层以太网帧封装在UDP里外层端口4789解决数据中心里租户隔离和跨物理机二层互通的问题。协议本身不复杂但配合SDN控制器做自动化网络隔离这套组合才真正体现研究生课件的深度。复习时能画出让“控制器统一下发VXLAN隧道”的流程图比背十个概念都管用。3. 把课件用起来用最小实验复现TCP拥塞控制与SDN转发逻辑课件里最难啃的是实验曲线图与其把图背下来不如亲手跑一遍。我一般会用一台普通笔记本完成下面三个实验不需要服务器也不需要买设备。实验环境建议Ubuntu 22.04以上内核5.15或更新版本如果用WindowsWSL2对网络命名空间支持不完整建议直接装虚拟机。三个实验分别对应课件里难懂的三类内容多节点网络环境、拥塞控制动态过程、SDN转发逻辑。3.1 用Linux网络命名空间搭建多节点实验环境课程实验最麻烦的就是搭环境。建两台虚拟机太笨重用Docker又多了层NAT干扰网络观测。最常见也最干净的做法是用Linux网络命名空间加veth对在主机里模拟两台主机和一台交换机的三层结构。网络命名空间有独立网卡、路由表和协议栈却只占几MB内存是复现课件场景最轻量的工具。#!/bin/bash # 实验拓扑h1 -- veth -- 网桥br0 -- veth -- h2 # 模拟课件里的两主机经交换机通信的场景 ip netns add h1 ip netns add h2 ip link add br0 type bridge ip link add veth-h1 type veth peer name veth-h1-br ip link add veth-h2 type veth peer name veth-h2-br ip link set veth-h1 netns h1 ip link set veth-h2 netns h2 ip link set veth-h1-br master br0 ip link set veth-h2-br master br0 ip link set br0 up ip link set veth-h1-br up ip link set veth-h2-br up ip netns exec h1 ip link set lo up ip netns exec h2 ip link set lo up ip netns exec h1 ip link set veth-h1 up ip netns exec h2 ip link set veth-h2 up ip netns exec h1 ip addr add 192.168.10.1/24 dev veth-h1 ip netns exec h2 ip addr add 192.168.10.2/24 dev veth-h2 ip netns exec h2 ping -c 3 192.168.10.1这段脚本里ip netns add创建两个独立网络栈veth是一对虚拟网线一端放进命名空间另一端挂到Linux网桥上网桥充当二层交换机。关键的细节是网桥本身不需要配IPveth对两端的名字长度不能超过15个字符否则内核会拒绝创建。脚本最后一步用ping验证h2到h1的连通性。这里不需要开启ip_forward因为网桥走的是二层转发如果以后扩展为路由器模式才需要sysctl -w net.ipv4.ip_forward1。这套环境比mininet更透明每个命令都能看清创建了什么对象。做完实验后清理也很重要ip netns del h1和ip link del br0能回收所有资源避免残留影响下一次实验。如果发现创建命名空间报Operation not permitted说明内核没开CONFIG_NET_NS或者当前用户在容器里没有权限。3.2 用iperf3打流与netem注入丢包观察snd_cwnd变化课件里TCP拥塞控制那章最经典的一条曲线是丢包发生后拥塞窗口从某个值乘性减半、然后线性爬坡的过程。Reno的这条曲线用人手画很容易画错但用真实内核跑出来只需要三个工具iperf3打流、tc命令注入损伤、ss命令读取内核TCP状态。# 在h1里启动iperf3服务器h2作为客户端压测20秒 ip netns exec h1 iperf3 -s -p 5201 # 在另一个终端进入h2命名空间查看TCP窗口信息 ip netns exec h2 watch -n 1 ss -tni state established ( dport :5201 )iperf3的-s是服务端模式-p指定端口客户端用-c指定对端地址。watch每隔1秒刷新ss命令的输出。ss的-t显示TCP套接字-n不做域名解析-i显示内核TCP信息其中snd_cwnd就是发送端拥塞窗口单位是MSS段数而不是字节。要注意看客户端那一侧因为数据发送方向是从h2到h1只有h2的socket才有snd_cwnd值。如果窗口一直不变化多半是链路质量太好需要先注入网络损伤。# 在h2的接收侧挂netem模拟50ms延迟加5%丢包 tc qdisc add dev veth-h2-br root netem delay 50ms loss 5%tc qdisc是Linux流量控制的核心命令netem是内核自带的网络损伤模块。这里把qdisc挂在veth-h2-br的出口影响的是发往h2方向的流量如果希望双向都受损要在两条veth的br侧都加。netem的delay指定固定时延loss指定丢包概率还可以用distribution normal让延迟呈正态分布更接近真实网络。执行后再看ss输出会发现snd_cwnd周期性下跌然后爬升这就是把课件里的Reno曲线复现出来了。如果还想看不同拥塞控制算法的差异Linux内核自带CUBIC和BBR模块直接切换即可ip netns exec h2 sysctl -w net.ipv4.tcp_congestion_controlbbrsysctl的-w参数表示临时修改内核参数重启后失效。切到BBR后同样加netem丢包拥塞窗口不再像Reno那样剧烈锯齿而是维持一个相对平稳的水平。这个对比实验写进课程报告比抄教材上的图有说服力得多。注意一点系统默认算法是CUBIC切换回CUBIC用cubic参数。3.3 用Ryu控制器复现学习交换机行为SDN实验最常遇到的场面是代码写完跑不起来跑起来又不通通了又不知道是控制器在转发还是OVS自带的传统转发。要彻底看穿这个黑匣子最省事的方式是用Ryu控制器加Mininet让OVS交换机退化成一个纯数据面设备所有转发决策全部由控制器下发。# 先启动Ryu应用再启动Mininet让控制器接管OVS交换机 ryu-manager learning_switch.py --observe-links sleep 2 mn --topo single,3 --controller remote --mac --switch ovsk --protocols OpenFlow13mn参数里--topo single,3表示一个交换机连三台主机--controller remote让Mininet去连外部控制器--mac把主机MAC设成有规律的00:00:00:00:00:01这种格式方便排查--protocols OpenFlow13强制使用OpenFlow 1.3版本。Ryu应用放在当前目录的learning_switch.py文件里from ryu.base import app_manager from ryu.controller import ofp_event from ryu.controller.handler import MAIN_DISPATCHER, set_ev_cls from ryu.ofproto import ofproto_v1_3 from ryu.lib.packet import packet, ethernet class LearningSwitch(app_manager.RyuApp): OFP_VERSIONS [ofproto_v1_3.OFP_VERSION] def __init__(self, *_args, **_kwargs): super().__init__(*_args, **_kwargs) self.mac_table {} set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) def packet_in_handler(self, ev): msg ev.msg dp msg.datapath ofp dp.ofproto parser dp.ofproto_parser pkt packet.Packet(msg.data) eth pkt.get_protocol(ethernet.ethernet) in_port msg.match[in_port] # 学习源MAC对应的入端口 self.mac_table.setdefault(dp.id, {}) self.mac_table[dp.id][eth.src] in_port # 查表决定转发端口未知则泛洪 out_port self.mac_table[dp.id].get(eth.dst, ofp.OFPP_FLOOD) actions [parser.OFPActionOutput(out_port)] out parser.OFPPacketOut( datapathdp, buffer_idmsg.buffer_id, in_portin_port, actionsactions) dp.send_msg(out) # 已知目的端口时下发流表避免后续重复上报控制器 if out_port ! ofp.OFPP_FLOOD: match parser.OFPMatch(in_portin_port, eth_dsteth.dst) mod parser.OFPFlowMod( datapathdp, priority10, matchmatch, instructions[parser.OFPInstructionActions( ofp.OFPIT_APPLY_ACTIONS, actions)]) dp.send_msg(mod)这段代码只有几十行逻辑就是课件里描述的学习交换机。OFP_VERSIONS声明这个应用只支持OpenFlow 1.3MAIN_DISPATCHER表示只在交换机连接完成后的正常状态下处理PacketIn事件。控制器收到未知报文后先学习源MAC和入端口的映射目的MAC没学到就泛洪学到就下发一条FlowMod规则。参数里priority10要高于默认的0优先级否则流表不会生效。在Mininet里执行h1 ping h2第一次ping会看到Ryu日志刷出PacketIn事件之后的数据包全部走OVS流表不再经过控制器。用ovs-ofctl dump-flows s1查看能看到控制器下发的规则。这个验证过程把课件里“控制面与数据面分离”的图还原成了实际可见的流表项比单纯看PPT牢靠得多。4. 高级计算机网络避坑指南课程报告、实验代码与考试复习的四个坑课件本身讲得再细落地时该翻的车一个都不会少。以下四个坑是我反复踩过、也在帮别人排错时见过最多的按“现象到原因再到解决”写清楚能帮你省下至少一个通宵。4.1 带宽与吞吐量的单位陷阱Mbps和MB/s总是对不上现象实验报告里链路带宽标的是10Gbpsiperf3结果里显示9.24Gbits/sec同学却算出来链路利用率只有0.9%后面怎么调参数都对不上。原因把Gbits/sec和GBytes/sec混用了或者把Mbps当成MB/s直接除。iperf3默认用Mbits/sec输出也就是兆比特每秒而课件图表出于可读性经常用MB/s也就是兆字节每秒。两者差8倍再加上TCP头、IP头开销算出来的利用率必然离谱。解决写报告前统一单位全部换算成bps。带宽计算式1Byte等于8bit1MB/s等于8Mbps。链路利用率用实际吞吐量除以链路容量都要用同一单位。一个更隐蔽的坑是iperf3的吞吐量包含TCP载荷不包含报文头所以和物理链路速率相比必然偏低这不是bug。建议执行时加-J参数输出JSON格式里边的bits_per_second字段已经是规范单位避免手写换算出错。4.2 netem丢包后Wireshark时间戳对不上现象用netem加了delay 50ms loss 5%在主机上用Wireshark抓包看到的RTT要么比50ms小很多要么忽大忽小到几百毫秒怀疑是控制变量没设对。原因tc qdisc只能挂在网络设备的出口方向netem加入的延迟作用在报文发出之后如果抓包点放在网桥入口或虚拟网卡入口抓到的是延迟生效之前的报文。另外现代网卡默认开启GRO和GSO多个小包会被合并成大包交给抓包工具时间戳记录的其实是合并后的时间曲线自然对不上。解决抓包时用tcpdump加-tttt选项记录精确时间戳同时关闭设备的offload特性执行ethtool -K veth-h1-br gro off gso off。如果只是观察拥塞窗口变化更推荐直接读内核TCP_INFO也就是ss -ti的输出而不是用抓包算RTT因为ss取到的是内核协议栈内真实的平滑RTT。课程报告里最好注明观测点观测点不统一是数据对不上最常见的原因。4.3 SDN控制器“黑匣子”OpenFlow版本与fail-mode导致流量不通现象Ryu代码看着没问题Mininet里三台主机也启动了h1 ping h2第一个包能通后面的包全部丢掉ovs-ofctl dump-flows里看不到任何流表。原因两个细节叠加。一是OVS默认可能协商到OpenFlow 1.0而Ryu应用只声明支持1.3版本协商失败后规则下发不了二是OVS交换机在连接不上控制器时如果fail-mode是standalone会退化成普通二层交换机自行转发一旦控制器连上又切回secure模式行为切换导致第一个包通、后续包丢。解决启动Mininet时固定协议版本显式加上--protocols OpenFlow13同时对交换机设置secure模式让控制器断连时不再自转ovs-vsctl set bridge s1 protocolsOpenFlow13 ovs-vsctl set bridge s1 fail_modesecureovs-vsctl的set命令直接修改数据库配置protocols指定网桥支持的OpenFlow版本fail_mode决定控制器失联时的行为。secure模式下没有流表直接丢弃报文反而更容易排查。做完这两步再pingRyu日志里能看到PacketIn和FlowMod消息这才是SDN在正常工作而不是OpenFlow协议在碰运气。4.4 PPT课件打开乱码、公式变形、字体缺失现象下载的《北邮研究生课程高级计算机网络技术PPT课件.pptx》用WPS打开公式变成小方框图片位置错乱转成PDF后字体全部变成宋体数学符号走样。原因课件基本用PowerPoint编写公式采用OMML格式WPS的公式渲染支持不完整部分专业字体比如Cambria Math在非Office环境不预装系统自动替换时版面就乱了。解决在装有Microsoft Office的Windows机器上打开再用“另存为PDF”导出最安全。如果只是拿来做考前速览可以用python-pptx把每页的文字提纲抽出来python3 -m pip install python-pptxfrom pptx import Presentation prs Presentation(北邮研究生课程高级计算机网络技术PPT课件.pptx) for i, slide in enumerate(prs.slides, 1): texts [] for shape in slide.shapes: if hasattr(shape, text) and shape.text: texts.append(shape.text.replace(\n, )) print(f[{i:03d}] | .join(texts[:5]))python-pptx读取每页幻灯片中所有文本框和图形里的文字按页打印前5段文本足以作为速查目录。它不解析公式对象与内嵌图片所以适合建立复习框架不适合替代精读。还有一个文件层面的坑有的文件扩展名是.pptx实际却是旧版二进制格式用file命令确认一下输出如果是“Composite Document File V2”说明文件本身不是真pptx要先用Office转换器转格式而不是纠结打开软件。期末复习怕课件乱码提前导出PDF再批注是最省心的方案。5. 进阶把计算机网络八股变成自己的研究方向5.1 从课件提取研究方向找“设计权衡”和“未解决的点”很多人读完这套课件只会说“我学过SDN和拥塞控制”这等于没学。我一般会做一件事把课件里所有对比图、曲线图单独挑出来在每张图旁边标注三个问题——它证明了什么用了什么参数还有哪个场景没覆盖。比如CUBIC为什么在高带宽高延迟链路上用凹函数增长而不是像Reno那样线性爬升BGP的AS Path选路会不会被上游AS恶意宣告短路径影响FlowMod下发时延在流表项上百万之后怎么优化。这些“为什么”和“还差什么”就是现成的技术方向。拿这些方向去面试或写小论文比说“我熟悉网络协议”具体得多。下面的表是我从课件里抽出来的入门方向每个方向都能在一台笔记本上复现研究方向课件对应章节最小复现实验TCP多流公平性拥塞控制iperf3开两条流统计吞吐分配比BBR收敛行为拥塞控制动态改tbf限速观察snd_cwndBGP策略博弈域间路由用FRRouting搭两个AS调LocalPrefSDN控制面瓶颈南向接口用Ryu批量下发流表测首包时延VXLAN多租户隔离数据中心网络Mininet加OVS封装VXLAN隧道5.2 验证课件结论的习惯复现图表而非背书我建议至少复现课件里一条曲线而不只是看。常见做法是在h1和h2之间的网桥侧加一个tbf限速命令tc qdisc add dev veth-h1-br root tbf rate 10mbit burst 32kbit limit 3000tbf是令牌桶过滤rate限制平均速率burst控制瞬间突发大小limit限制队列长度。加完限速后用iperf3打流同时把ss -ti的输出追加到文件ip netns exec h2 ss -tin cwnd.txt得到数据后用awk提取snd_cwnd列交给matplotlib或gnuplot画图。用一到两个晚上把Reno和BBR在同样限速条件下的窗口曲线并排画出来课件里那些结论就不再是图形而是你亲手跑出来的证据。我自己拿到任何一门新课件都习惯先翻图再翻文字先把图讲出理由再看答案后来做网络实验也一直用这个习惯。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。