学习笔记:计算机网络自顶向下方法

学习笔记:计算机网络自顶向下方法

2023年7月27日发(作者:)

学习笔记:计算机⽹络⾃顶向下⽅法⽬录1. 计算机⽹络与互联⽹1.1 什么是互联⽹终端系统通过通信连接(communication links)和包交换机(packet switches)连接在⼀起包交换机的两种主要类型路由器(routers)与链路层交换机(link-layer swtiches)路由器应⽤于⽹络核⼼,链路层交换机⽤于接⼊层transmission ratepackets = header bytes + data通路终端系统通过⽹络服务提供商(Internet Service Providers , ISPs)访问互联⽹每个ISP⾃⾝都是包交换机和通信连接的⽹络协议定义了两个或多个通信实体之间交换的消息的格式和顺序,以及在发送和/或接收消息或其他事件时所采取的操作。1.2 ⽹络边缘1.2.1 接⼊⽹end systems = hostsserversclients互联⽹中最常见的家庭访问⽅式数字⽤户线(Digital Subscriber Line, DSL),通常和电话线是⼀体的数字⽤户线接⼊复⽤器(digital subscriber line access multiplexer, DSLAM)是⼈们进⾏数据交换的中⼼,位于运营商的本地中⼼局。DSL在不同频段上同时传输电话信号与⽹络信号独占线路电缆(cable)电缆因特⽹接⼊(cable Internet access)利⽤了有线电视公司现有的有线电视基础设施。光缆将电缆头端连接到地区枢纽,从这⾥使⽤传统的同轴电缆到达各家各户和公寓。因为在这个系统中应⽤了光纤和同轴电缆,所以它经常被称为混合光纤同轴(Hybrid Fiber Coax, HFC)。电缆调制解调器(cable modem)通常是⼀个外部设备,通过⼀个以太⽹端⼝连接到家庭PC。在电缆头端,电缆调制解调器端接系统(Cable Modem Termination System, CMTS)起到如同DSL⽹络的DSLAM 类似的功能。电缆因特⽹接⼊的⼀个重要特征是使⽤共享⼴播媒体(共享的上⾏与下⾏通道)共享线路光纤到户(Fiber to The Home, FTTH)⼀对⼀直接⼊户主动光纤⽹络(Active Optical Network, AON)被动光纤⽹络(Passive Optical Network, PON)每个家庭具有⼀个光纤⽹络端接器(Optical Network Terminator, ONT),它由专门的光纤连接到邻近的分配器(splitter)。在家庭中,⽤户将⼀台家庭路由器(通常是⽆线路由器)与 ONT 相连,并经过这台家庭路由器接⼊因特⽹。分配器把⼀些家庭(通常少于100个) 集结到⼀根共享的光纤,该光纤再连接到本地电话和公司的中⼼局中的光纤线路端接器(Optical Line Terminator, OLT)。所有从 OLT发送到分配器的包在分配器处复制。共享线路卫星链路企业常⽤的互联⽹接⼊⽅式:以太⽹和WIFI以太⽹WIFI按照⼊户顺序,分别为电缆调制解调器、路由器、⽆线通信基站,后两者往往封装在⼀起⼴域⽆限接⼊:4G和LTE1.2.2 物理媒体对于每⼀个“传输--接收”对,每⼀个⽐特的信息以电磁波的形式通过物理媒体来传输。物理媒体分为导引型媒体和⾮导引型媒体双绞铜线双绞铜线由两根塑胶封装的铜线呈螺旋状绞成。许多双绞铜线对被捆扎在⼀起形成电缆,每对双绞铜线都构成⼀条通信线路⽆屏蔽双绞线(Unshielded Twisted Pair, UTP)常⽤在建筑物内的计算机⽹络中,即⽤于局域⽹(LAN)中。⽬前局域⽹中的双绞电话线和拨号上⽹⽅式都是⽤双绞线。拨号调制解调器技术通过双绞线能以⾼达56 kbps 的速率接⼊。数字⽤户线(DSL)技术通过双绞线使住宅⽤户以超过数⼗ Mbps的速率接⼈因特⽹(当⽤户靠近ISP的调制解调器居住时)。导引型独占媒体同轴电缆导引型共享媒体电缆电视系统最近与电缆调制解调器结合起来,为住宅区⽤户提供数⼗Mbps速率的因特⽹接⼊光纤光纤是长途引导型传输媒体,特别是适合跨海链路。极⾼的⽐特速率、低的信号衰减、难以被窃听光线的相关设备成本⾼,如发射器、接收器以及交换机等陆地⽆线电通道⽆线电信道的特性极⼤地依赖于传播环境和传输信号的距离。路径损耗和遮挡衰落:即当信号跨距离传播和绕过/通过阻碍物体时信号降低强度多径衰落:由于⼲扰对象的信号反射⼲扰:由于其他⽆线电信道或电磁信号陆地⽆线电信道能够⼤致划分为三类很短距离(如1⽶或2⽶),如⽆线头戴式⽿机、键⿏、医疗设备等另⼀类运⾏在局域,通常跨越数⼗到⼏百⽶,如⽆线LAN技术第三类运⾏在⼴域,跨越数万⽶,如蜂窝接⼊技术卫星⽆线电通道同步卫星36000 km的⾼度280 ms 的延迟⽤于提供 DSL 和 电缆⽆法覆盖的区域的物联⽹接⼊近地轨道卫星需要放置多个才能够实现连续的覆盖1.3 ⽹络核⼼1.3.1 包的交换信息(message)、包(packet)存储转发传输(store-and-forward transmission)包交换机必须完全接受⼀个包后才能向后传输它相隔 N 条链路(或说 N-1 个包交换机)传递P个包的延迟[D_{end-to-end} = (N+P-1)frac{L}{R} ]排队延时与丢包转发表与路由选择协议每台路由器具有⼀个转发表(forwarding table),⽤于将⽬的地址(或⽬的地址的⼀部分)映射成为输出链路。因特⽹具有⼀些特殊的路由选择协议(routing protocol),⽤于⾃动地设置这些转发表。例如,⼀个路由选择协议可以决定从每台路由器到每个⽬的地的最短路径,并使⽤这些最短路径结果来配置路由器中的转发表。1.3.2 电路交换通过⽹络链路和交换机移动数据有两种基本⽅法:电路交换(circuit switching)和分组交换(packet switching)。⽤餐馆作⽐喻,电路交换是严格的预定式餐馆,⽽包交换则是⾮预定式的。在电路交换中,每个运⾏中的连接都是实际存在,并由路径上的交换机维护的。电路交换⽹络中的复⽤频分复⽤电话⽹络、⽆线电台带宽(在电话⽹络中为4 kHz)时分复⽤帧电路交换⽹络不像包交换⽹络的“存储转发传输”机制那样受到链路数量 N 的影响分组交换与电路交换的对⽐分组交换的批评者经常争辩说,分组交换不适合实时服务(例如,电话和视频会议),因为它的端到端时延是可变的和不可预测的(主要是因为排队时延的变动和不可预测所致)。分组交换的⽀持者却争辩道:①它提供了⽐电路交换更好的带宽共享;②它⽐电路交换更简单,更有效,实现成本更低。历史站在了分组交换这⼀边。今天许多电路交换电话⽹正在缓慢地向分组交换迁移。1.3.3 ⽹络的⽹络ISP提供⽤户接⼊互联⽹的服务。ISP不必是电信公司,也可以是学校、公司等拥有服务器的机构。为了让数量庞⼤的服务器相连,接⼊ISP本⾝也必须互联,即所谓“⽹络的⽹络”。⽹络结构1⼀个全球ISP作为供应商与其他所有客户ISP连接⽹络结构2多个全球ISP⽹络结构3增加区域ISP,形成三层结构⽹络结构4增加⼊⽹点(Point of Presence, PoP)、对等、多宿(multi-home)、因特⽹交换点(Internet exchange point, IXP)⼊⽹点:单个ISP提供多个接⼊其⽹络的路由器或链路。ISP可以将PoP安装在电信公司所有的租⽤空间内进⾏租赁对等:同级别的客户ISP可以直接建⽴⽹络进⾏数据传输。这样的好处是,不经过上级ISP传输,节省了付费流量。多宿:⼀个客户ISP可以同时连接多个⾼级ISP。这样可以增加稳定性。因特⽹交换点:提供集中的对等连接⽹络结构5增加了内容提供商⽹络(content provider network)独⽴于公共因特⽹1.4 分组交换⽹中的时延、丢包和吞吐量在本节中,我们将开始研究和量化计算机⽹络中的时延、丢包和吞吐量等问题。1.4.1 分组交换⽹中的时延概述total nodal delay = nodal processing delay + queuing delay + transmission delay + propagation delaytransmission 传输propagation 传播时延的类型处理时延检查分组⾸部和决定将该分组导向何处其他因素,如检查⽐特级别的差错在⾼速路由器中,此时延为微秒级别排队时延分组在链路上等待传输排队时延是流量强度和性质(周期性或突变性)的函数毫秒到微秒级别传输时延路由器将数据推向链路所需的时间L/R毫秒到微秒级别传播时延d/ss ≈ 光速在⼴域⽹中,为毫秒级别传输时延与传播时延前者与包长度和链路传输速度有关,类似于⾼速公路上的收费站处理速度(ETC快于⼈⼯收费)后者主要与路由器之间的距离有关,类似于⾼速公路上的⾏驶速度常常出现的情况是传播时延⼩于传输时延,所以对于⼀个有多个分组的数据⽽⾔,可能第⼀个分组已经过传播达到接收路由器了,但数据本⾝还未完成传输1.4.2 排队时延和丢包流量强度[traffic intensity = frac{aL}{R} ]a表⽰包达到队列的平均速率,L表⽰包的平均⽐特长度,R表⽰传输速率流量强度⼀定不可以⼤于 1当流量强度⼩于等于 1时若包周期性达到,则不会排队若包突变性到达,则可能排队,并且随着流量强度接近 1,队列的平均长度呈指数式增加丢包1.4.3 端到端时延tracerouteTraceroute是⼀个简单的程序,它能够在任何因特⽹主机上运⾏。当⽤户指定⼀个⽬的主机名字时,源主机中的该程序朝着该⽬的地发送多个特殊的分组(拥有编号⽤于显⽰路径节点的顺序)。当这些分组向着⽬的地传送时,它们通过⼀系列路由器。当路由器接收到这些特殊分组之⼀时,它向源回送⼀个短报⽂。该报⽂包括该路由器名字和地址。常常默认重复进⾏3次端系统、应⽤程序和其他时延协议中的有意延迟Voice-over IP语⾳信号在被发送之前还需要额外的处理,会有延迟1.4.4 计算机⽹络中的吞吐量瞬时吞吐量、平均吞吐量瓶颈链路串联中的最⼩值时瓶颈共享链路可能成为瓶颈1.5协议层次及其服务模型1.5.1分层的体系结构协议分层互联⽹协议栈应⽤层应⽤层是⽹络应⽤程序及它们的应⽤层协议存留的地⽅应⽤层协议分布在多个端系统上,端系统之间使⽤协议交换信息的分组。我们把这种位于应⽤层的信息分组称为报⽂(message)因特⽹的应⽤层包括许多协议HTTP——提供 Web⽂档的请求和传送SMTP——提供电⼦邮件报⽂的传输FTP——提供两个端系统之间的⽂件传送DNS——域名系统运输层运输层在应⽤程序端点之间传送应⽤层报⽂。在因特⽹中,有两个运输协议,即TCP 和UDP。TCP 向它的应⽤程序提供了⾯向连接的服务。这种服务确保有效的传递和并进⾏流量控制(即发送⽅/接收⽅速率匹配)。TCP也将长报⽂划分为短报⽂,并提供拥塞控制机制,因此当⽹络拥塞时,源抑制其传输速率。UDP协议向它的应⽤程序提供⽆连接服务。这是⼀种不提供不必要服务的服务,没有可靠性,没有流量控制,也没有拥塞控制。在本书中,我们把运输层分组称为报⽂段(segment)⽹络层⽹络层负责将数据报(datagram)从⼀台主机移动到另⼀台主机。数据报是⽹络层包的名称源主机通过运输层协议(TCP或 UDP) 向⽹络层递交运输层报⽂段和⽬的地址⽹络层包括著名的IP协议,该协议定义了在数据报中的各个字段以及端系统和路由器如何作⽤于这些字段。仅有⼀个IP协议,所有具有⽹络层的因特⽹组件必须运⾏IP协议。因特⽹的⽹络层也包括决定路由的路由选择协议因特⽹具有许多路由选择协议。⽹络管理者能够运⾏所希望的任何路由选择协议。⽹络层通常被简单地称为IP层这反映了IP是将因特⽹连接在⼀起的粘合剂。链路层为了将分组从⼀个结点(主机或路由器)移动到路径上的下⼀个结点,⽹络层必须依靠该链路层的服务。在每个结点,⽹络层将数据报下传给链路层,链路层沿着路径将数据报传递给下⼀个结点。在下个结点,链路层将数据报上传给⽹络层。由链路层提供的服务取决于应⽤于该链路的特定链路层协议。链路层的例⼦包括以太⽹、WiFi和电缆接⼊⽹的DOCSIS协议。数据报从源到⽬的地传送通常需要经过⼏条链路,⼀个数据报可能被沿途不同链路上的不同链路层协议处理例如,⼀个数据报可能被⼀段链路上的以太⽹和下⼀段链路上的PPP 所处理。⽹络层将受到来⾃每个不同的链路层协议的不同服务。在本书中,我们把链路层分组称为帧(frame)物理层物理层的任务是将该帧中的⼀个⼀个⽐特从⼀个结点移动到下⼀个结点。这层中的协议进⼀步与该链路(例如,双绞铜线、单模光纤)的实际传输媒体相关。例如,以太⽹具有许多物理层协议:⼀个是关于双绞铜线的,另⼀个是关于同轴电缆的,还有⼀个是关于光纤的,等等。OSI(Open Systems Interconnection)协议栈表⽰层使通信的应⽤程序能够解释交换数据。数据压缩和数据加密以及数据描述数据压缩是⾃解释的数据描述使得应⽤程序不必担⼼在各台计算机中表⽰/存储的内部格式不同的问题。会话层提供数据交换定界和同步功能,建⽴检查点和恢复⽅案。当在互联⽹协议栈中需要这些功能时,应⽤程序开发员需要⾃⼰来加上1.5.2 封装每⼀层,⼀个分组具有两种类型的字段:⾸部字段和有效载荷字段(payload field)。有效载荷通常是来⾃上⼀层的分组。这样每⼀层都实现了对上⼀层字段的封装。1.6 ⾯对攻击的⽹络坏家伙能够经因特⽹将有害程序放⼊你的计算机中恶意软件(malware)包括病毒(virus)和蠕⾍(worm)恶意软件能在设备中做许多不正当的事情,如删除⽂件、⼿机⽤户信息等病毒需要被⽤户接收被执⾏(⽐如邮件)蠕⾍不需要明显的⽤户交互就能进⼊设备(⽐如⽹络)多个受控主机构成僵⼫⽹络坏家伙能够攻击服务器和⽹络基础设施拒绝服务攻击(denial-of-Service(DoS) attack)弱点攻击向易受攻击的服务器发送特殊的报⽂宽带泛洪向⽬标主机发送⼤量的报⽂连接泛洪创建⼤量半开和全开的TCP连接分布式DoS,DDoS利⽤僵⼫⽹络来攻击服务器坏家伙能够嗅探分组在⽆线传输设备的附近放置⼀台被动的接收机,该接收机就能得到传输的每个分组的副本!记录每个流经的分组副本的被动接收机被称为分组嗅探器(packet sniffer)。密码学时防御嗅探的重要⽅法坏家伙能够伪装成你信任的⼈IP哄骗(IP spoofing)将具有虚假源地址的分组注⼊因特⽹端点鉴别⽹络安全的历史因特⽹最初就是基于“⼀群相互信任的⽤户连接到⼀个透明的⽹络上”这样的模型进⾏设计的,在这样的模型中,安全性没有必要。如今,在相互信任的⽤户之间的通信是⼀种例外⽽不是规则。欢迎来到现代计算机⽹络世界!1.7 计算机⽹络和因特⽹的历史2.应⽤层2.1应⽤层协议原理将应⽤软件限制在端系统的⽅法(不需要考虑路由器、链路层交换机等),促进了⼤量的⽹络应⽤程序的迅速研发和部署。2.1.1⽹络应⽤程序体系结构应⽤程序体系结构(application architecture)规定了如何在各种端系统上组织该应⽤程序。在选择应⽤程序体系结构时,应⽤程序研发者很可能利⽤现代⽹络应⽤程序中所使⽤的两种主流体系结构之⼀:客户——服务器体系结构(client-service architecture)或对等(P2P)体系结构。客户——服务器体系结构在客户-服务器体系结构(client-server architecture)中,有⼀个总是打开的主机称为服务器,它服务于来⾃许多其他称为客户的主机的请求。服务器拥有⼀个固定的IP地址使⽤配备了⼤量主机的数据中⼼来⽀撑海量的数据收发P2P体系结构多⽬前流⾏的、流量密集型应⽤都是P2P体系结构的。⽂件共享(例如BitTorrent)对等⽅协助下载加速器(例如迅雷)因特⽹电话(例如Skype)IPTV(例如“迅雷看看”和 PPstream)P2P体系结构的最引⼈⼊胜的特性之⼀是它们的⾃扩展性(self- scalability)。例如,在⼀个 P2P⽂件共享应⽤中,尽管每个对等⽅都由于请求⽂件产⽣⼯作量,但每个对等⽅通过向其他对等⽅分发⽂件也为系统增加服务能⼒。每台主机同时是使⽤者和提供者,每台主机的加⼊同时增加服务能⼒和需求挑战增强ISP友好。因为许多家庭⽹络的上传与下载速率是“不对称”的安全性。⾼度分布和开发特性,带来了安全隐患激励。激励⽤户资源提供带宽、存储和计算资源2.1.2 进程通信客户和服务器进程⽹络应⽤程序由成对的进程组成,这些进程通过⽹络相互发送报⽂。对每对通信进程,我们通常将这两个进程之⼀标识为客户(client),⽽另⼀个进程标识为服务器(server)。在给定的⼀对进程之间的通信会话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器。进程与计算机⽹络之间的接⼝进程通过⼀个称为套接字(socket)的软件接⼝向⽹络发送报⽂和从⽹络接收报⽂。套接字是同⼀台主机内应⽤层与运输层之间的接⼝由于该套接字是建⽴⽹络应⽤程序的可编程接⼝,因此套接字也称为应⽤程序和⽹络之间的应⽤程序编程接⼝(Application Programming Interface,API)。进程寻址为了标识接收进程,需要定义两种信息主机的地址IP地址是⼀个32⽐特的量且它能够唯⼀地标识该主机定义在⽬的主机中的接收进程的标识符端⼝号⽤于制定进程。常⽤的应⽤程序拥有统⼀的端⼝号Web服务器——80邮件服务进程——252.1.3 可供应⽤程序使⽤的运输服务⼀个运输层协议能够为调⽤它的应⽤程序提供什么样的服务呢?我们⼤体能够从四个⽅⾯对应⽤程序服务要求进⾏分类:可靠数据传输、吞吐量、定时和安全性。可靠数据传输保证⼀端应⽤程序发送的数据正确、完全地交付给另⼀端的应⽤程序——确保数据交付服务容忍丢失的应⽤(loss-tolerant-application)吞吐量带宽敏感的应⽤(bandwidth-sensitive application)弹性应⽤(elastic application)定时时延安全性机密性数据完整性端点鉴别2.1.4 因特⽹提供的运输服务TCP服务⾯向连接的服务建⽴连接之前的准备结束收发之后,连接将被拆除可靠的数据传送服务拥塞控制机制当发送发和接收⽅之间的⽹络出现拥塞时,TCP会抑制发送⽅进程有利于保护互联⽹⽹络安全套接字层(Secure Socket Layer, SSL)是加强版的TCP,它存在应⽤层中。应⽤程序将明⽂数据传给SSL套接字,SSL将其加密后发送给TCP套接字UDP服务UDP是⼀种不提供不必要服务的轻量级运输协议,它仅提供最⼩服务。⽆“握⼿过程”⾮可靠数据传输服务可能乱序⽆拥塞控制机制,发送⽅可以⽤它选定的任何速率向下层注⼊数据因特⽹运输协议所不提供的服务今天的因特⽹通常能够为时间敏感应⽤提供满意的服务,但它不能提供任何定时或带宽保证。电⼦邮件、远程终端访问、Web、⽂件传输都使⽤了 TCP可靠数据传输因特⽹电话应⽤选择 UDP + TCPUDP能够避开拥塞控制机制TCP能作为备⽤,在UDP被防⽕墙阻⽌时发挥作⽤2.1.5 运输层协议应⽤层协议(application-layer protocol)定义了运⾏在不同端系统上的应⽤程序进程如何相互传递报⽂。特别地,应⽤层协议定义了:交换的报⽂类型,例如请求报⽂和响应报⽂。各种报⽂类型的语法,如报⽂中的各个字段及这些字段是如何描述的。字段的语义,即这些字段中包含的信息的含义。⼀个进程何时以及如何发送报⽂,对报⽂进⾏响应的规则。应⽤层协议有公共与专⽤之分,如 Skype 使⽤的就是专⽤⽹络应⽤层协议是应⽤程序的⼀个重要部分2.1.6本书涉及的⽹络应⽤2.2 Web和HTTP2.2.1 HTTP概况Web的应⽤层协议是超⽂本传输协议(HyperText Transfer Protocol, HTTP),它是Web的核⼼,在[RFC 1945]和[RFC 2616]中进⾏了定义。HTTP由两个程序实现:⼀个客户程序和⼀个服务器程序,通过交换HTTP报⽂进⾏会话。HTTP定义了这些报⽂的结构以及客户和服务器进⾏报⽂交换的⽅式。⼀些Web术语Web页⾯ (Web page)对象 (object)HTML⽂件图⽚、Java程序、视频⽚段等可以通过 URL 寻址URL = 服务器主机名 + 路径名Web 浏览器也称为 客户端Web 服务器HTTP 使⽤ TCP 作为运输层协议HTTP是 ⽆状态协议(stateless protocol)Web 使⽤客户-服务器程序体系结构2.2.2 ⾮持续连接和持续连接采⽤⾮持续连接的HTTP在HTTP协议中,会为每⼀个对象都建⽴连接,⼜在该对象完成传输后可以设置并⾏度来改变并⾏的连接数量往返时间(Round-Trip Time, RTT)每⼀个对象都需要2个RTT来完成交付,其中第⼀个RTT⽤于建⽴连接采⽤持续连接的HTTPHTTP的默认⽅式是带流⽔线的持续连接同⼀个客户和服务器之间的报⽂都通过同⼀个连接进⾏传输经过⼀定的时间间隔后,未被使⽤的连接会被断开2.2.3 HTTP报⽂格式HTTP规范 [RFC 1945; RFC 2616; RFC 7540]包含了对HTTP 报⽂格式的定义。HTTP 报⽂有两种:请求报⽂和响应报⽂。HTTP请求报⽂GET /somedir/ HTTP/1.1Host: nection: closeUser-agent: Mozilla/5.0Accept-language: fr通⽤格式常见的⽅法GET也可以将页⾯的输⼊送给服务器/animalsearch?monkeys&bananaPOSTHEADPUT(HTTP 1.1)在指定路径添加⽂件DELETE(HTTP 1.1)删除指定路径的⽂件HTTP响应报⽂HTTP/1.1 200 OKConnection: closeDate: Tue, 18 Aug 2015 15:44:04 GMTServer: Apache/2.2.3 (CentOS)Last-Modified: Tue, 18 Aug 2015 15:11:03 GMTContent-Length: 6821Content-Type: text/html(data data data data data ...)通⽤格式注意

Content-length 指的是发送对象的字节数常见的状态码和短语200 OK301 Mover Permanently400 Bad Request404 Not Found505 HTTP Version Not Supported2.2.4 ⽤户与服务器的交互:cookieCookie技术由四部分组成服务器响应报⽂中的cookie⾸部⾏客户请求报⽂中的cookie⾸部⾏⽤户端系统中由浏览器管理的cookie⽂件Web站点的后端数据库cookie识别码在⽤户第⼀次登陆站点时形成,在之后,识别码被包含在每份报⽂中来进⾏⽤户的⾝份识别和数据库的查询2.2.5 Web 缓存Web缓存器(Web cache)也叫代理服务器(proxy server),它是能够代表初始Web服务器来满⾜HTTP请求的⽹络实体。Web缓存器有⾃⼰的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本。Web缓存既是服务器⼜是客户Web缓存以更⼩的代价实现了⽹络性能的提升ISP(公司、⼤学、家庭等)常会选择安装代理服务器内容分发⽹络(Content Distribution Network, CDN)是存在于公共因特⽹的代理服务器2.2.6 条件GET⽅法为了避免Web缓存发送给客户的对象是陈旧未更新的,HTTP增加了条件GET⽅法请求报⽂和响应报⽂分别是GET /fruit/ HTTP/1.1Host: -modified-since: Wed, 9 Sep 2015 09:23:24HTTP/1.1 304 Not ModifiedDate: Sat, 10 Oct 2015 15:39:29Server: Apache/1.3.0 (Unix)(empty entity body)当对象未修改时,响应报⽂只会包含⼀个空的对象2.3 因特⽹中的电⼦邮件SMTP(Simple Mail Transfer Protocol) 是因特⽹电⼦邮件中主要的应⽤层协议。它使⽤TCP可靠数据传输服务,从发送⽅的邮件服务器向接收⽅的邮件服务器发送邮件。像⼤多数应⽤层协议⼀样,SMTP 也有两个部分:运⾏在发送⽅邮件服务器的客户端和运⾏在接收⽅邮件服务器的服务器端。2.3.1 SMTPRFC 5321给出了 SMTP 的定义。 SMTP 是因特⽹电⼦邮件应⽤的核⼼。SMTP⼀般不使⽤中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端也是这样。2.3.2 与HTTP 的对⽐HTTP是拉协议(pull prototype),SMTP是推协议(push prototype)2.3.3 邮件报⽂格式邮件报⽂由报⽂⾸部和报⽂体组成。⼀个典型的报⽂⾸部看起来如下:From: alice@

To: bob@

Subject: Searching for the meaning of life.2.4.4 邮件访问协议SMTP是⼀个推协议,所以接收⽅⽤户需要从接收⽅服务器获得邮件报⽂时,必须借助其他的协议。⽬前流⾏的邮件访问协议包括:第三版的邮局协议(Post Office Protocol—Version 3, POP3)、因特⽹邮件访问协议(Internet MailAccess Protocol, IMAP)以及 HTTPPOP3POP3是⼀个极为简单的邮件访问协议,由 RFC 1939进⾏定义。POP3有三个⼯作阶段特许(authorization)user pass 事物处理取回报⽂标记要删除的报⽂取消删除标记更新服务器有两种可能的回答+OK-ERR两种基本模式下载并删除下载并保留IMAPIMAP 由 RFC 3501 定义POP3协议没有给⽤户提供任何创建远程⽂件夹并为报⽂指派⽂件夹的⽅法。IMAP实现了这个功能IMAP 的另⼀个重要特性是它具有允许⽤户代理获取报⽂组件(⽽不是全部)的命令基于 Web的电⼦邮件只有邮件服务器之间使⽤ SMTP 协议,⽽在客户和服务器(发送⽅或接收⽅)之间使⽤ HTTP 协议2.4 DNS:因特⽹的⽬录服务主机的两种识别码:主机名(host name)和 IP 地址(IP address)2.4.1 DNS 提供的服务域名系统Domain Name System, DNS)的主要任务是实现主机名和 IP 地址的转换。DNS 是:1. ⼀个由分层的DNS 服务器(DNS server) 实现的分布式数据库2. ⼀个使得主机能够查询分布式数据库的应⽤层协议。DNS协议运⾏在 UDP 之上,使⽤53号端⼝。HTTP协议使⽤DNS的基本流程1. 浏览器所在的主机运⾏着DNS应⽤的客户端2. 浏览器提取出请求的 URL 中的主机名3. 主机名通过 DNS 客户端被发送给 DNS服务器4. DNS 服务器将转换得到的 IP 地址发送给 DNS 客户端5. 浏览器从 DNS 响应报⽂中获得 IP 地址,并向该地址的 80 端⼝发起⼀个 TCP 连接DNS 给使⽤它的因特⽹应⽤带来了额外的时延⼤量分布的DNS服务器有利于减⼩此时延DNS 提供的其他重要服务主机别名(host aliasing)有着复杂主机名的主机还能拥有⼀两个别名别名通常更好记忆邮件服务器别名(mail server aliasing)MX记录(参见后⾯)允许⼀个公司的邮件服务器和 Web服务器使⽤相同(别名化的)的主机名负载分配(load distribution)DNS 也⽤于在冗余的服务器(如冗余的Web服务器等)之间进⾏负载分配。这是通过让⼀个 IP 地址集合(冗余的服务器)与⼀个规范主机名(⽐如)相联系实现的DNS是通过客户-服务器模式提供的重要⽹络功能。因特⽹体系结构的复杂性⼤多数位于⽹络的“边缘”。DNS 通过采⽤了位于⽹络边缘的客户和服务器,实现了关键的名字到地址转换功能,它还是这种设计原理的另⼀个范例。2.4.2 DNS⼯作机理概述事实上,DNS是⼀个在因特⽹上实现分布式数据库的精彩范例。在这个分层数据库中主要有3个层次根 DNS 服务器。IPv4下,有13“组”根 DNS 服务器顶级域(Top-level Domain, TLD) DNS 服务器顶级域名如com, net, org, edu 以及 jp, cn, fr等权威 DNS 服务器⼀个组织需要将⾃⼰的所有主机名-IP地址映射存放在⼀个权威 DNS 服务器中或是⾃⼰组建,如许多⼤学与⼤公司或是存储在某个 ISP 公司中本地 DNS 服务器本地 DNS 服务器是客户向 DNS 服务器发送请求的代理服务器DNS 查询有递归和迭代两种⽅式主机向本地 DNS 服务器的请求是递归的向下到底,然后向上返回到顶其他的请求都是迭代的每次总是得到⼀个结果,然后向上返回结果DNS 缓存2.4.3 DNS记录和报⽂共同实现 DNS 分布式数据库的所有 DNS服务器存储了资源记录(Resource Record, RR), RR提供了主机名到 IP 地址的映射。每个 DNS回答报⽂包含了⼀条或多条资源记录。资源记录是⼀个包含了下列字段的4元组:(Name, Value, Type, TTL)TTL 是该记录的⽣存时间Name 通常是主机域名,⽽

value 的实际含义取决于

Type 的值Type = A, 则Value 是该主机名对应的 IP 地址如果

Type =NS ,则

Value 是个知道如何获得该域中主机IP地址的权威DNS 服务器的主机名。(, , NS)如果

Type = CNAME ,则

Value 表⽰主机对应的规范主机名(foo. com, , CNAME)如果

Type = MX ,则

Value 表⽰邮件服务器的规范主机名。(, , MX)为了获得邮件服务器的规范主机名,DNS 客户应当请求⼀条

MX 记录;⽽为了获得其他服务器的规范主机名,DNS客户应当请求

CNAME记录。DNS 报⽂标识符⽤于标识查询报⽂,同时将被复制到响应报⽂中。标志位⽤于查询报⽂与响应报⽂的匹配。标志位包含了“查询/回答”、“是否未权威”、“是否希望递归”、“递归可⽤”等信息其他的信息都是⾃解释的在 DNS 数据库中插⼊记录当你向某些注册登记机构注册域名时,需要向该机构提供你的基本和辅助权威 DNS 服务器的名字和IP地址名字和 IP 地址信息分别⼀条

Type = A

记录注册域名和权威 DNS 服务器的关系对应⼀条

Type NS 记录被加⼊的信息还有注册域名的

Type = A 记录,以及 注册域名邮箱的

Type = MX 记录DNS 数据库曾经只能静态配置,现在也可以动态配置了博客搬家是动态配置的⼀个应⽤吗?DNS具有惊⼈的健壮性,⾄今没有⼀种⽅法成功地击垮了 DNS 系统2.5 P2P ⽂件分发P2P⽂件分发适合⼀个主机向⼀个主机集合发送⼤⽂件的场景2.5.1 P2P体系结构的扩展性P2P 与 客户-服务器模式的⽐较客户-服务器模式[D_{cs}=max{frac{NF}{u_s}, frac{F}{d_{min}}} ]其中,(u_S)表⽰服务器的上传速度,(d_{min})表⽰客户接⼊⽹络中的最⼩下载速度可以看出,客户-服务器模式的分发时间将在 N ⾜够⼤时,取决于 N 的⼤⼩。P2P 模式[D_{P2P}=max{frac{F}{u_s}, frac{F}{d_{min}}, frac{NF}{u_s+sum_{i=1}^{N}u_i}} ]其中,(u_i)表⽰每个客户端的上传速度。可以看出,服务器作为最初唯⼀保存⽂件的主机,只需要将⽂件上传⼀次。虽然在整个⽹络上,⽂件依然被上传了N次,但该上传任务是由服务器和各个服务器共同完成的C-S模式随着客户的增加⽽线性增加,因为在C-S模式中,上传速度是固定的,⽽需上传的⽂件⼤⼩却随着客户的加⼊⽽线性增加;P2P模式呈对数式缓慢增加,且存在⼀个边界,这是因为新增的⽤户在增加上传⽂件⼤⼩的同时也增强了系统中的上传速度。2.5.2 BitTorrentBitTorrent 是⼀种流⾏的 P2P 协议。BitTorrent 较为复杂,本章考察其中的⼀项运⾏机制——也被称为“⼀报还⼀报”(tit-for-tat)基本概念洪流(torrent)⽂件块(chunk)追踪器(tracker)临近对等⽅临近对等⽅常会因为客户的离开⽽随着时间⽽变化稀缺优先技术每个客户会获得临近对等⽅的⽂件块列表。多个⽂件块列表形成⼀个⽂件块集合。在⾃⼰⽋缺的诸多⽂件块中,它会优先请求在⽂件块集合中拥有最少副本的那⼀个。这样的好处是能够平衡洪流中每个⽂件块的数量⼀报还⼀报在响应请求上,每个客户端遵从这样的⼀个机灵的原则:总是优先向以最⾼速率给⾃⼰提供⽂件块的客户发送⽂件。通常会排出前4名。这4个对等⽅被称为“疏通(unchoked)”。为了避免资源过于集中,BitTorrent还会使得客户每30s随机向⼀个客户发送⽂件块传输速度前4的对等⽅和随机⽤户之外的⽤户被称为阻塞(choked),它们不能从该客户处获得任何⽂件块优点功利原则使得每个客户都能找到与⾃⼰的传输速度最匹配的对等⽅随机机制使得新加⼊的客户能够参与交换,并获得交易的筹码虽然 tit-for-tat 被证明不是必要的机制,但它成功地限制了搭便车的⾏为,使得 BitTorrent 获得源源不断的活⼒未提到的有趣机制⽚(⼩块)流⽔线随即优先选择残局模型反怠慢2.5.3 DHT(Distributed Hash Table)分布散列表2.6 视频流和内容分发⽹络2.6.1 ⽹络视频⽹络视频由⼀系列连续的图⽚组成,它们以每秒24或30张的速度进⾏播放。图⽚中的每⼀个像素点所展⽰的亮度和颜⾊⼜被编码成⽐特。压缩算法使得⼈们可以在⽐特率和视频质量之间进⾏权衡2.6.2 HTTP Streaming and DASH每个视频⽂件储存在 HTTP 服务器上,并拥有⼀个属于⾃⼰的 URL。HTTP 客户端通过

GET 来请求视频⽂件。传输来的⽐特⾸先被存储在客户本地应⽤的缓存中。当客户接收的⽐特⼤⼩超出该缓存时,视频应⽤开始解码缓存中的⽐特,并将它显⽰在屏幕上。于是,⽂件接收、⽂件缓存、视频解码播放在同⼀时间进⾏。DASH(Dynamic Adaptive Streaming over HTTP)向客户提供了多个压缩程度的视频版本。HTTP 服务器还拥有⼀个清单⽂件(manifest file)。它显⽰了每个版本的 URL 和对应的⽐特率客户可以⾃⾏选择,或者使⽤算法⾃动选择适合⾃⼰宽带和视频缓存容量的版本。2.6.3 内容分布⽹络使⽤朴素的客户-服务器结构有以下缺点远距离传输将极⼤受限于链路中的瓶颈速率⼀个流⾏的视频⽂件可能在同⼀条链路上传输多次,造成额外的花费⽹络脆弱,⼀旦服务器或关键链路宕机,则相应的客户不能再请求到任何视频CDN管理了稀疏分布的服务器群。这些服务器群作为代理服务器,使得客户能从距离最近的服务器群处获得视频资源。Google 布置了专属⾃⼰的CDNCDN由两种基本模式深⼊(Enter Deep)将CDN服务器布置在接⼊⽹络中提供了⾼吞吐量和低延迟但安装和维护的费⽤较⾼Bring Home将CDN服务器布置在 IXP 中,所在的⽹络层次更⾼安装和维护的费⽤较低相对低的吞吐量和相对⾼的延迟⼤多数 CDN 不直接将视频推向服务器群,⽽是根据客户的请求进⾏发送。(即使⽤“拉”协议,⽽不是“推”协议)Google的专属⽹络结构主要有3部分组成:14个元数据中⼼,每个数据中⼼都由10万个左右的服务器组成提供⽤户的搜索服务、⽂件处理等等50个服务器群分布在 IXP 中,每个由100-500个服务器组成通常存储着诸如 YouTube 等⽹站上的视频内容⼏百个分布在 IXP 的 Deep-Enter 服务器群通常存储着页⾯的⼀些静态内容CDN的操作DNS 在 CDN中的应⽤涉及的主机有本地主机本地DNS服务器⽬标⽹站服务器⽬标⽹站DNS服务器⽬标⽹站托管的CDN服务器托管CDN根据请求内容分配的服务器服务器群选择策略地理最近原则忽略了⽹络实际情况有些终端可能被配置为使⽤远程 LDNS,这种情况⽹络最快原则需要实时监测⽹络延迟,但有些服务器可能不接受延迟测试案例分析Netflix⽹飞同时使⽤亚马逊云与专属CDN亚马逊云负责⼀些复杂的或统筹的⼯作内容接收内容处理创建同⼀个视频⽂件的多个版本以⽀持 DASH内容分发内容会被分发给各个 CDN⽹飞的⽹络结构采取“推”模式,所有的视频内容都会被定期推向所有的CDN⽹飞不需要借助 DNS 进⾏重定向,运⾏在亚马逊云的软件会直接确定最佳的CDN,并将其域名发送给客户端YouTubeYouTube(现已被Google收购),使⽤“拉”策略+DNS重定向,这两部分在前⾯已经介绍了利⽤了 HTTP 的“字节范围请求”来避免流量的浪费KanKanCDN-P2P混合,客户⾸先从CDN服务器请求影⽚的开头,然后寻找同级的主机。不同于P2P的“传输速率”优先策略,视频播放中会优先选择“能提供持续传输”的主机作为伙伴⼀旦当前的主机连接满⾜了视频播放的需求,客户就会断开与服务器的连接2.7 TCP套接字编程2.7.1 UDP套接字编程发送进程为分组附上⽬的地址⽬的地址 = IP 地址 + 端⼝号(port number)将源地址附在分组上不是由发送进程完成的,⽽是由底层操作系统执⾏的客户端创建基本步骤1. 配置指定服务器地址和端⼝号创建客户端套接字2. 发送通过⼈机接⼝获得信息编码向服务器端发送信息,⼀定要附加地址信息3. 接收通过套接字获得返回的信息解码显⽰返回的信息代码from socket import *serverName = 'hostname'serverPort = 12000clientSocket = socket(AF_INET, SOCK_DGRAM) #create a socket, the parameter means the socket is based on IPv4 & e = input('Input lowercase sentence:')((),(serverName, serverPort))modifiedMessage, serverAddress = om(2048) #takes the buffer size 2048 as inputprint(())()服务器端创建基本步骤1. 配置服务器端⼝号创建服务器套接字将套接字绑定到服务器端⼝号进⾏监听2. 接收通过套接字获得信息解码处理(视具体功能⽽不同)3. 发送编码通过套接字发送,⼀定要附加地址信息代码from socket import *serverPort = 12000serverSocket = socket(AF_INET, SOCK_DGRAM)(('', serverPort)) #print("The server is ready to receive")while True: message, clientAddress = om(2048) modifiedMessage = ().upper() ((), clientAddress)2.7.2 TCP套接字编程⾯向连接之“三次握⼿(Three-way handshake)”客户端创建基本步骤1. 配置指定服务器地址和端⼝号创建客户端套接字2. 建⽴连接t((serverName, serverPort))3. 发送通过⼈机接⼝获得信息编码向服务器端发送信息4. 接收通过套接字获得返回的信息解码显⽰返回的信息代码from socket import *serverName = 'servername'serverPort = 12000clientSocket = socket(AF_INET, SOCK_STREAM)t((serverName, serverPort))sentence = input('Input lowercase sentence:')(())modifiedSentence = (1024)print('From Server: ', ())()服务器端创建基本步骤1. 配置服务器端⼝号创建服务器欢迎套接字(welcoming door)将套接字绑定到服务器端⼝号进⾏监听2. 响应服务端的连接请求⽣成⼀个连接套接字connectionSocket, addr = ()3. 接收通过套接字获得信息解码处理(视具体功能⽽不同)4. 发送编码通过套接字发送代码from socket import *serverPort = 12000serverSocket = socket(AF_INET, SOCK_STREAM)(('', serverPort))(1)print('The server is ready to receive')while True: connectionSocket, addr = () sentence = (1024).decode() capitalizedSentence = () (()) ()

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690424394a347915.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信