最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

品读《计算机网络 自顶向下方法》

业界 admin 8浏览 0评论

本人浅读《计算机网络 自顶向下方法》,品读经典,大有裨益,梳理前六章,与君分享,才疏学浅,欢迎指正和补充,不胜感激。

在本书中,我们使用一种特定的计算机网络,即公共因特网,作为讨论计算机网络及其协议的载体。

计算机网络和因特网

什么是因特网?

其一,我们能够描述因特网的具体构成,即因特网的基本硬件和软件组件;其二,我们能够根据为分布式应用提供服务的联网基础设施来描述因特网。

具体构成描述

因特网是一个世界范围是计算机网络,即它是一个互联了遍及全世界数十亿计算设备的网络。这些设备都称为主机(host)或者端系统(end system)。端系统通过通信链路(communication link)和分组交换机(packet switch)连接到一起。通信链路由不同的物理媒体组成(后面会介绍)。链路的传输速率以比特/s(bit/s 或 bps)度量。当一台端系统要向另一台端系统发送数据时,发送端系统将数据分段,并为每段加上首部字节。由此形成的信息包用计算机网络的术语称为分组(packet)。这些分组通过网络发送到目的端系统,在那里被装配成初始数据。

分组交换机从它的一条入通信链路接受到达的分组,并从它的一条出通信链路转发该分组。分为路由器(router)和链路层交换机(link-layer switch)。链路层交换机通常用于接入网中,而路由器通常用于网络核心中。从发送端系统到接收端系统,一个分组所经历的一系列通信链路和分组交换机称为通过该网络的路径。

路由器和链路层交换机的区别?

知乎评论:“你想想教材里的路由协议。家用交换机有哪个能跑的?真的路由器至少都要几千块。支持不同的路由协议,能根据当前网络状况自动协调路由。家里用得着么?”。从我们身边观察,家用路由器不如说是低配交换机加集成较弱的路由功能,正儿八经的路由器是要上千的。

外观:从外观上看,链路层交换机通常接口比较多,体积也相对较大,而路由器的接口就少得多,体积也要小很多。事实上,图(b)并不是真正的路由器,它只是集成了路由器的功能,除此之外它还有交换机的功能(LAN口就是作为交换机接口来使用的,WAN是用于连接外网的接口,而四根天线则是无线接入点,也就是我们通常所说的wifi和热点)。

层次:链路层交换机的原理相对简单,一般都是使用硬件电路来实现数据帧的转发,而路由器一般工作在网络层,肩负着网络互联的重任,需要实现更为复杂的协议,具有更加智能的转发决策功能,通常都会在在路由器中跑操作系统,实现复杂的路由算法。因此,与链路层交换机相比,路由器更加偏向于软件实现其功能。

转发对象:交换机是根据MAC地址转发数据帧,而路由器则是根据IP地址来转发IP数据报/分组。数据帧是在IP数据包/分组的基础上封装了帧头(源MAC和目的MAC等)和帧尾(CRC校验码)。实际上,数据帧中的IP地址决定最终数据包要到达的主机,而MAC地址则是决定下一跳将要将数据传送给哪台设备(路由器或目的主机)。IP地址是软件实现的,可以描述主机所在的网络,而MAC地址是硬件实现的,每一个网卡在出厂的时候都会将全世界唯一的MAC地址固化在网卡的ROM中,因此MAC地址是不可修改的,但是IP地址是可以由网络管理人员配置修改的。

分工:链路层交换机用于组件局域网,路由器主要负责连接外网并寻找网络中最合适数据传输的路径。

端系统通过因特网服务提供商(Internet Service Provider,ISP)接入因特网。

端系统、分组交换机和其他因特网部件都要运行一系列协议(protocol),这些协议控制因特网中信息的接受收和发送。IETF组织的RFC文档往往是技术性很强并相当详细的。它们定义了TCP、IP、HTTP和SMTP等协议。目前已经有将近7000个RFC。

服务描述

运行在一个端系统上的应用程序怎样才能指令因特网向运行在另一个端系统上的软件发送数据呢?

与因特网相连的端系统提供了一个套接字接口(socket interface),该接口规定了运行在一个端系统上的程序请求因特网基础设施向运行在另一个端系统上的特定目的地程序交付数据的方式。因特网套接字接口是一套发送程序必须遵循的规则集合,因此因特网能够将数据交付给目的地。

网络边缘

端系统也称为主机(host),因为它们容纳应用程序。主机有时又被进一步划分为两类:客户(client)和服务器(server)。客户通常是桌面PC、移动PC和智能手机等。服务器通常是更为强大的机器,用于存储和发布web页面、流视频。

接入网

拨号接入:安装简单但速度最慢,所需介质为电话线,通过拨号ISP提供的电话实现上网。拨号连接占用电话线,即固定电话和上网无法同时进行。

DSL:每个用户的调制解调器使用现有的电话线与电话公司的数字用户线接入复用器(DSLAM)交换数据。家庭的调制解调器得到数字数据后将其转换为高频音,以通过电话线传输给本地中心局。来自许多家庭的模拟信号在DSLAM处被转换回数字形式。在用户一侧,一个分配器把到达家庭的数据信号和电话信号分隔开,并将数据信号转发给DSL调制解调器。在电话公司一侧,在本地中心局中,DSLAM将数据和电话信号分隔开,并将数据送往因特网。DSL使用铜制电话双绞线传输。

电缆因特网:电缆因特网接入利用了有线电视公司现有的有线电视基础设施。住宅从提供有线电视的公司获得了电缆因特网接入。电缆将电缆头端接到地区枢纽,从这里使用传统的同轴电缆到达各家各户。经常被称为光纤混合同轴系统(HFC)。电缆因特网需要特殊的调制解调器,这种调制解调器称为电缆调制解调器(数字信号转为模拟信号,是通常所说的猫)。电缆调制解调器通常是一个外部设备通过一个以太网端口连接到家庭PC。在电缆头端,电缆调制解调器端接系统(CMTS)将许多下行家庭中的电缆调制解调器发送的模拟信号转换成数字信号。

光纤:分为FTTH(Fiber To The Home)和FTTB(Fiber To The Building)。光纤到户和光纤到楼。一般的宽带现在都是光纤到楼,一般所说比较快的光纤就是FTTH。光纤分布体系结构分为AON有源光纤网络和PON无源光纤网络。PON如下图

在公司和大学校园以及越来越多的家庭环境中,使用局域网(LAN)将端系统连接到边缘路由器。以太网用户使用双绞铜线与一台以太网交换机相连(平时购买到的路由器主要功能是体现交换机的功能,能,有薄弱的路由器功能,也算边缘路由器)。以太网交换机或这样相连的交换机网络,则与更大的因特网相连。

另外,在无线LAN中,无线用户从一个接入点发送分组,该接入点与局域网连接,局域网再与有线因特网连接。一个无线LAN用户通常必须位于接入点的几十米范围内。基于IEEE 802.11技术的无线LAN接入,更通俗的称为WIFI,目前几乎无处不在。

物理媒体

物理媒体的例子包括双绞铜线、同轴电缆、多模光纤缆、陆地无线电频谱和卫星无线电频谱。物理媒体分为两种类型:引导性媒体(guided media)和非引导型媒体(unguided media)。对于引导型媒体,电波沿着固体媒体前行,如光缆、双绞铜线或同轴电缆。对于非引导型媒体,电波在空气或外层空间中传播,例如在无线局域网或数字卫星频道中。

双绞铜线:

双绞线由两根绝缘的铜线组成,每根大约1mm粗,以规则的螺旋状排列着。这两根线被绞合起来,以减少临近类似的双绞线的电气干扰。一般我们购买到的网线就是双绞线。

同轴电缆:

同轴电缆由两个铜导体组成,但是这两个导体是同心的而不是并行的。同轴电缆在电缆电视系统中相当普遍。在电缆电视系统中相当普遍。

光纤:

光纤是一种细而柔软的、能够引导光脉冲的媒体,每个脉冲表示一个比特。一根光纤能够支持极高的比特速率,高达数十甚至数百Gbps。它们不收哦电磁干扰,衰减极低,并且很难窃听。高成本使得LAN或接听接入网中不适用它们。

陆地无线电信道:

分为三类:一类运行在很短距离(1米或两米),如个人设备头戴式耳机、键盘;另一类运行在局域,通常跨越数十到几百米,比如无线LAN技术;第三类运行在广域跨越数万米,比如蜂窝接入技术,即移动网络。

卫星无线电信道:

通信中通常使用两类卫星:同步卫星和近地轨道卫星

同步卫星永久停留在地球上方相同点上。从地面站到卫星再回到地面站的巨大距离引入了可观的280ms信号传播时延。同步卫星最重要的应用之一是传输电视节目。广播信号也被传输。

近地轨道卫星放置的非常靠近地球,为了提供对一个区域的连续覆盖,需要在轨道上放置许多卫星。

网络核心

分组交换

在各种网络应用中,端系统彼此交换报文(message)。为了从源端系统向目的端系统发送一个报文,源将长报文划分为较小的数据块,称之为分组(packet)。在源和目的地之间,每个分组都通过通信链路和分组交换机(路由器和链路层交换机)传送。

存储转发传输:在交换机能够开始向输出链路传输该分组的第一个比特之前必须接受到整个分组。

排队时延和分组丢失:对于每条相连的链路该分组交换机具有一个输出缓存(output buffer),它用于存储路由器准备发往那条链路的分组。该输出缓存在分组交换中起着重要的作用。如果到达的分组需要传输到某条链路,但发现该链路正忙于传输其他分组,该到达分组必须在输出缓存中等待。因此除了存储转发时延外,分组还要承受输出缓存的排队时延。一个到达的分组可能发现该缓存已经被其他等待传输的分组完全充满了,再次情况下,将出现分组丢失(丢包)(packet loss),到达的分组或已经排队的分组之一被丢弃。

转发表和路由选择协议:在因特网中,每个端系统具有一个IP地址,当源主机要向目的端系统发送一个分组时,源在该分组的首部包含了目的地的IP地址。每台路由器有一个转发表(forwarding table),用于将目的地址映射成输出链路。当某分组到达一台路由器时,路由器检查该地址,并用这个目的地址搜索其转发表,以发现适当的出链路。路由器将该分组导向该出链路。

因特网具有一些特殊的路由选择协议(routing protocol),用于自动地设置这些转发表。例如,一个路由选择协议可以决定从每台路由器到每个目的地的最短路径,并使用这些最短路径来配置路由器中的转发表。

报文交换

报文交换相比分组交换,报文交换不拆分报文,以完整报文进行存储转发。

电路交换

传统的电话网络是电路交换网络的例子。在发送方能够发送消息之前,该网络必须在发送方和接收方之间建立一条连接。这是一个名副其实的连接,因为此时沿着发送方和接收方之间路径上的交换机都将未该连接维护连接状态。该连接被称为一条电路。它在连接期间在该网络链路上预留额恒定的传输速率。

电路交换中的电路是通过频分复用(FDM)和时分复用(TDM)来实现的。对于FDM,链路的频谱由跨越链路创建的所有连接共享。特别是,在连接期间链路为每条连接专用一个频段。调频无线电台也使用FDM来共享频谱,每个电台被分配特定频段。对于一条TDM,时间被划分为固定期间的帧,并且每个帧又被划分为固定数量的时隙。网络在每个帧中为该连接指定一个时隙。这些时隙由该连接单独使用。

分组交换允许更多用户同时使用网络!——网络资源充分共享

网络的网络

让端用户和内容提供商连接到接入ISP仅解决了连接难题中很小的一部分,因为因特网是由数以亿计的用户构成的。要解决这个难题,ISP自身必须互联。通过创建网络的网络可以做到这一点,理解这个短语是理解因特网的关键。

书中逐步递进介绍了因特网网络结构,这里直接介绍今天的因特网结构。

如果某个公司建立并运营一个可盈利的全球传输ISP(也称T1,目前中国电信、中国联通已经升级到T1),其他公司建立自己的全球传输ISP并与最初的全球传输ISP是一件自然的事,然而这些全球传输ISP必须是互联的。不然的话,与某个全球传输ISP连接的接入ISP将不能与连接到其他全球传输的ISP的接入ISP进行通信。

区域ISP,在任何给定的区域,可能有一个区域ISP,区域中的接入ISP与之相连。每个区域ISP与第一层ISP相连。第一层ISP是全球传输ISP,尽管它不是在世界上每个城市都存在,但它确实存在。有大约十几个第一层ISP。区域ISP向第一层ISP付费,在某些区域,可能有较大的区域ISP(可能跨越整个国家),该区域中较小是区域ISP与之相连,较大的区域ISP与第一层ISP连接。(例如在中国,有每个城市有接入ISP,它们与省级ISP相连,省级ISP又与国家级ISP连接,国家级ISP最终与第一层ISP连接)。

Pop(Point of Presence)存在于等级结构的所有层次,底层(接入ISP)除外。一个Pop只是提供商网络中的一台或多台路由器群组,其中客户ISP能够与供应商ISP连接。对于要与提供商Pop连接的客户网络,它能将它的路由器直接连接到位于该Pop的一台路由器,任何ISP可以选择多宿,即可以与两个或多个提供商ISP连接。当一个ISP多宿时,即使它的提供商之一出现故障,它仍然能够继续发送和接受分组。

客户ISP向他们的提供商ISP付费以获得全球因特网互联能力。客户ISP支付给提供商ISO的费用数额反映了它通过提供商交换的通信流量。为了减少这些费用,位于相同等级结构层次的临近一堆ISP能够对等,也就是说,能够直接将它们的网络连到一起,使它们之间的所有流量直接连接而不是通过上游的中间ISP传输。当两个ISP对等时,不进行付费。第三方公司创建一个因特网交换点(Internet Exchange Point,IXP),IXP是一个汇合点,多个ISP在这里一起对等。

提供商自给自足:内容提供商网络最典型的比如谷歌,谷歌专用网络仅承载出入谷歌浏览器的流量。谷歌专用网络通过与较低层的ISP对等,尝试绕过因特网的较高层,采用的方式是可以是直接与它们连接,或者在IXP处与它们连接。然而因为许多接入ISP仍然仅能通过第一层网络的传输到达,所以谷歌网络也与第一层ISP连接,并就与这些ISP交换的流量付费。通过创建自己的网络,内容提供商不仅减少了向顶层ISP支付的费用,而且对其服务最终如何交付给端用户有了更多的控制。

时延和吞吐量

时延

时延从一台主机出发,通过一系列路由器传输,在另一台主机中结束它的历程。当分组从一个节点沿着这条路径到后继节点,该分组在沿途的每个节点经受了集中不同类型的时延。这些时延最为重要的是节点处理时延(nodal proccessing delay)、排队时延(queuing delay)、传输时延(transmission delay)和传播时延(propagation delay),这些时延总体累加起来是节点总时延。许多因特网应用,如搜索、web浏览、电子邮件、地图、即时通讯和语音,它们的性能受网络时延的影响很大。为了深入理解分组交换和计算机网络,我们必须理解这些时延的性质和重要性。

处理时延:检查分组首部和决定将该分组和决定将该分组导向何处所需要的时间是处理时延的一部分。处理时延也能够包括其他因素,如检查比特级别的差错所需要的时间,该差错出现在从上游节点向路由器A传输这些分组比特的过程中。在这种节点处理之后,路由器将该分组引向通往路由器B链路之前的队列。

排队时延:在队列中,分组在链路上等待传输时,它经受排队时延

传输时延:是路由器推出分组所需的时间。用L比特表示该分组的长度,用Rbps表示从路由器A到路由器B的链路传输速率,传输时延是L/R。

传播时延:从该链路的起点到路由器B传播所需要的的时间是传播时延。传播时延取决于该链路的物理媒体和链路距离。

吞吐量

考虑主机A到主机B跨越计算机网络传送一个大文件,在任何时间瞬间的瞬时吞吐量是主机B接受到该文件的速率。如果该文件F比特,主机B接受到所有F比特用去T时间,则文件传送的平均吞吐量是F/T bps

如图a,服务器不能以快于Rs的速率通过其链路注入比特(服务器拥塞);这台路由器也不能以快于Rc的速率转发比特(路由器拥塞)。如果Rs<Rc,由该服务器注入的比特将顺畅地通过路由器流动,并以Rs到达客户;另一方面,如果Rc<Rs,则该路由器将不能像接受速率那样快地转发比特。在这种情况下,比特以速率Rc离开该路由器,从而得到端到端吞吐量Rc。(如果比特继续以Rs到达路由器,继续以Rc离开路由器,该路由器中等待传输给客户的积压比特将不断增加),对于这种简单的两链路网络,吞吐量是min{Rc,Rs}

图b显示了一个在服务器和客户之间具有N条链路的网络,这N条链路的传输速率分别是R1,R2,…RN。传输吞吐量为min{R1,R2,…RN},这同样仍是沿着服务器和客户之间路径的瓶颈链路的速率。

如图a中显示了一个服务器和一个客户,因特网的核心中的所有链路都有非常高的传输速率,即该速率比Rs和Rc要高得多。因为因特网的核心就像一个粗大的管子,所以吞吐量=min{Rs,Rc}。

图b,其中有10台服务器和10个客户与某计算机网络核心相连。同时发生10个下载,涉及10个客户-服务器对,在核心中有一条所有10个下载通过的链路。将这条链路R的传输速率表示为R,假定所有服务器接入链路有相同的速率Rs,所有客户接入链路有相同的速率Rc,并且核心除了速率为R的一条共同链路之外的所有链路,它们的传输速率比Rc,Rs,R大得多。如果R很大吞吐量依然是min{Rs,Rc}。如果相同量级瓶颈就可能是R了。

协议层次

分层体系结构每层以一下方式提供服务:

1.在这层中执行了某些动作

2.使用直接下层的服务

这种简化本身由于提供模块化具有很高价值,这使某层所提供的服务实现易于改变,只要该层对上面的层提供相同的服务,并且使用来自下面层次的相同服务,当某层的实现变化时,该系统的其余部分保持不变。

网络设计者以分层的方式组织协议以及实现这些协议的网络硬件和软件,一个协议层能够用软件和硬件或两者的结合来实现。注入HTTP和SMTP这样的应用层协议总是在端系统中用软件实现,运输层协议也是如此。因为物理层和数据链路层负责处理跨越特定链路的通信,它们通常在与给定链路相关联的网络接口卡中实现。网络层通常是硬件和软件实现的混合体。

各层的所有协议被称为协议栈。因特网的协议由5个层次组成(OSI 7层模型去掉了会话层和表示层):物理层、链路层、网络层、运输层和应用层。

应用层

应用层包括许多协议,例如HTTP(提供web文档的请求和传送)、SMTP(提供电子邮件报文的传输)和FTP(提供两个端系统之间的文件传输)。web域名到IP的转换也是借助与特定的应用层协议DNS完成的。应用层协议分布在多个端系统上,而一个端系统中的应用程序使用协议与另一个端系统中的应用程序交换信息分组。应用层的信息分组称为报文。

运输层

因特网的运输层在应用程序端点之间传送应用层报文。在英特网中,有两种运输协议,即TCP和UDP,利用其中任何一个都能运输应用层报文。TCP(向上)向他的应用程序提供了面向连接的服务。这种服务包括了应用层报文向目的地 的 确保传递和流量控制(即发送方、接收方速率匹配)。TCP也将长报文划分为短报文,并提供拥塞控制机制,因此当网络拥塞时,源抑制其传输速率。UDP协议向它的应用程序提供无连接服务。这是一种不提供不必要服务的服务,没有可靠性,没有流量控制,也没有拥塞控制。运输层的分组称为报文段。

网络层

因特网的网络层负责将称为数据报的网络层分组从一台主机移动到另一台主机。在一台源主机中的因特网运输层协议(TCP或UDP)向网络层递交运输层报文段和目的地址
因特网的网络层包括著名的网际协议IP,该协议定义了在数据报中的各个字段以及端系统和路由器如何作用于这些字段。IP仅有一个,所有具有网络层的因特网组件必须运行IP。因特网的网络层也包括决定路由的路由选择协议,它根据该路由将数据报从源传输到目的地。因特网有许多路由选择协议。

链路层

因特网的网络层通过源和目的地之间的一系列路由器路由数据报。为了将分组从一个节点移动到路径上的下一个节点,网络层必须依靠链路层的服务,特别是在每个节点,网络层将数据报下传给链路层,链路层沿着路径将数据报传递给下一个节点。在该下一个节点。链路层将数据报上传给网络层。
由链路层提供的服务取决于应用于该链路的特定链路层协议。例如,某些协议基于链路提供可靠传递,从传输节点跨越一条链路到接收节点。这种可靠的传递服务不同于TCP的可靠传递服务,TCP提供从一个端系统到另一个端系统的可靠交付。链路层的例子包括以太网、WIFI和电缆接入网的DOCSIS协议。因为数据报从源到目的地传送通常需要经过几条链路,一个数据报可能被沿途不同链路上的不同链路层协议处理。链路层分组称为帧。

物理层

链路层的任务是将整个帧从一个网络元素移动到临近的网络元素,而物理层的任务是将该帧中的一个个比特从一个节点移动到下一个及诶单。在这层中的协议仍然是链路相关的,并且进一步与该链路的实际传输媒体相关。例如,以太网有许多物理层协议,一个是关于双绞铜线的,另一个是关于同轴电缆的,还有一个是关于光纤的,等等。

封装

数据从发送端系统的协议栈向下,沿着中间的链路层交换机和路由器的协议栈上上下下,然后向上到达接收端系统的协议栈。链路层交换机实现了第一层和第二层;路由器实现了第一层到第三层。这意味着因特网路由器能够实现IP协议,而链路交换机不能。

封装:在发送主机端,一个应用报文被传送给运输层。运输层收取到报文并附上附加信息(运输层首部信息),该首部将被接收端的运输层使用。应用层报文和运输层首部信息一道构成了运输层报文段。首部信息也许包括了:允许接收端运输层向上向适当的应用程序交付报文的信息;差错检测位信息,该信息判断报文中的比特是否在图中已被改变。运输层向网络层传递该报文段,网络层增加了如源和目的端系统地址等网络层首部信息,生成网络层数据报。该数据报接下来被传递给链路层,链路层增加它自己的链路层首部信息并生成链路层帧。所以我们看到,在每一层,一个分组具有两种类型的字段:首部字段和有效载荷字段。有效载荷通常是来自上一层的分组。

封装的过程可以比前面描述的更负载一个报文可能被划分为多个报文段。报文段可能被划分为多个网络层数据报,一个数据报有可能划分为多个帧。在接收端,则必须重构它们。

面对攻击的网络

坏家伙如何攻击计算机网络?

恶意软件

恶意软件一旦感染我们的设备,就能够做各种不正当的事情,包括删除我们的文件,安装间谍软件来收集我们的隐私信息并发送给坏家伙。我们的受害主机也可能称为数以千计的类似受害设备网络中的一员,坏家伙能够使用僵尸网络展开分布式拒绝服务攻击。

目前为止的多数恶意软件都是自我复制的:一旦感染一台主机,就会从那台主机寻求进入因特网中的其他主机,从而感染新的主机。病毒需要用户交互来感染用户设备。蠕虫无需任何明显用户交互就能进入设备。比较脆弱的应用程序从因特网接收了恶意软件并运行它,生成了蠕虫。感染设备能扫描因特网,搜索其他运行相同网络应用程序的易受感染的主机,向他们发送一个蠕虫副本。

攻击服务器和网络基础设施

拒绝服务攻击(DOs)使得网络、主机或其他基础设施部分不能由合法用户使用。Web服务器、电子邮件服务器、DNS服务器都能够称为Dos攻击的目标。
1.弱点攻击 向一台目标主机上运行的易受攻击的应用工程或操作系统发送制作精细的报文。(这需要比较了解被攻击的目标)
2.带宽洪泛 攻击者向目标主机发送大量的分组,分组数量之多使得目标的接入链路变得拥塞,使得合法的分组无法到达服务器。单一的攻击源可能无法产生足够大的流量来伤害该服务器。此外,如果从单一源发出所有流量的话,某上游路由器就能够检测出该攻击并阻挡下来。相比于来自单一主机的DoS攻击,DDoS攻击更难检测和防范
3.连接洪泛:攻击者在目标主机中创建大量的半开或全开TCP连接,导致主机停止接受合法的连接。

嗅探

嗅探WIFI或蜂窝网络:在无线传输设备的附近放置一台分组嗅探器,就能得到传输的每个分组的副本。
嗅探有线环境:LAN中,分组嗅探器能够获得经该LAN发送的所有分组。

伪装信任的人

生成具有任意源地址、分组内容和目的地址的分组,然后将这个伪装的分组传入因特网,因特网将忠实的将该分组转发到目的地,这一切都极为容易。接收方将该虚假地址作为真实的地址,进而执行该分组中的命令。这种方式称为IP哄骗,值是冒充另一个用户许多方式中的一种。

应用层

我们考察集中网络应用程序,包括Web、电子邮件、DNS、对等文件分发、和视频流。然后将涉及开发运行在TCP和UDP上的网络应用程序。

应用层协议原理

网络应用程序体系结构

两种主流体系结构:客户-服务器体系结构 和 对等体系结构

在CS体系结构中,有一个总是打开的主机称为服务器,它服务于来自浏览器的请求。CS体系结构,客户相互之间不进行直接通信。CS体系结构著名的应用程序包括Web、FTP、Telnet和电子邮件。在CS中常常配备大量主机的数据中心被用于创建服务器。如百度、谷歌都有它们的数据中心。

在一个P2P体系结构中,对位于数据中心的专用服务器有最小的依赖。相反,应用程序在间断连接的主机对之间使用直接通信,这些主机被称为对等方。许多现在流行的、流量密集型应用都是P2P的。这些应用包括迅雷、网络电话、视频会议。P2P体系最引人入胜的特性之一是它的自扩展性。例如尽管每个对等方都由于请求文件产生工作负载,但每个对等方通过向其他对等方分发文件为系统增加服务能力。

QQ聊天工具是p2p和cs混合使用的。p2p(NAT打洞成功):你的消息直接发给你的聊天对象,同时也发一份到服务器做备份。cs(NAT打洞不成功):你的消息发给服务器转发

进程通信

在两个不同端系统上的进程,通过跨越计算机网络交换报文而相互通信。发送进程生成并向网络中发送报文,接收进程接收这些报文并可能通过回送报文进行响应。>

发起通信的进程被标识为客户,在会话开始时等待联系的进程是服务器。

进程通过一个称为套接字的软件接口向网络发送报文和从网络接收报文(可以将套接字类比成应用层和运输层之间的门)。套接字是一台主机内应用层和运输层之间的接口。应用程序开发者对运输层的控制仅限于:选择运输层协议、也许能设置几个运输层参数。

使用套接字编程需要标识接收进程,主机地址(IP地址)和目的主机接收进程标识符(端口号)。比如Web服务器默认端口80,FTP为21、SMTP为25.

运输服务

一个运输层协议能够为调用它的应用程序提供什么服务?

可靠数据传输

分组在计算机网络中可能丢失。当一个运输协议提供可靠数据传输,发送进程只要将其数据传递进套接字,就可以完全相信该数据将能无差错的到达接收进程。当一个运输层协议不提供可靠数据传输时,由发送进程发送的有些数据可能到达不了接收进程。这可能被容忍丢失的应用所接收,比如交谈式音频、视频。

吞吐量

运输层协议能够以某种特定的速率提供确保的可用吞吐量。使用这种服务,该应用程序能够请求r比特/秒的确保吞吐量,并且该运输协议能确保可用吞吐量至少为r。具有吞吐量要求的应用被称为带宽敏感的应用。许多当前多媒体应用是这样 的。弹性应用 比如电子邮件、文件传输。

定时

这种服务将对交互式实时应用程序有吸引力,为了有效性而要求数据交付有严格的时间限制。

安全性

运输协议能够加密由发送进程传输的所有数据,在接收主机中,运输层协议能够将数据交付给接收进程之前解密这些数据。

因特网的运输服务

TCP

TCP模型包括面向连接服务和可靠数据传输服务。

面向连接:TCP让客户和服务器互相交换运输层控制信息。这个所谓的握手过程提醒客户和服务器,让它们为大量分组的到来做好准备。在握手阶段后,一个TCP连接就在两个进程的套接字之间建立了。这条连接是全双工的,即连接双方的进程可在此连接上同时进行报文收发。当应用程序结束报文发送时,必须拆除该连接。(运输层章讨论具体实现)

可靠数据传输:通信进程能够依靠TCP无差错、按适当顺序交付所有发送的数据。

TCP协议还有拥塞控制机制,这种服务不一定能为通信进程带来好处,但能为因特网整体带来好处。当发送方和接收方之间的网络拥塞时,TCP的拥塞控制机制会一直发送进程,也视图限制每个TCP连接,使它们达到公平共享网络带宽的目的。

TCP安全:安全套接字层(SSL)是加强后的TCP,在TCP基础上提供进程到进程的安全性服务,包括加密、数据完整性和端点鉴别,这种强化是在应用层实现的。SSL有它自己的套接字,发送端先通过SSL套接字加密,然后传送给TCP套接字。接收端TCP套接字传送给SSL套接字解密。

UDP

UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务。UDP是无连接的,没有握手过程。UDP是一种不可靠数据传送服务。不保证报文到达接收进程,到达的报文也可能是乱序的。

因特网提供和不能提供的服务

TCP提供了可靠数据传输,SSL提供安全服务。因特网运输协议没有提供吞吐量和定时保证服务。

应用层协议

应用层协议定义了:

交换的报文类型,例如请求报文和响应报文。

各种报文类型的语法,如报文中的各个字段以及这些字段是如何描述的。

字段的语义,即这些字段中的信息的含义

确定一个进程何时以及如何发送报文,对报文进行响应的规则。

Web的应用层协议HTTP,电子邮件应用层协议SMTP。文件传输FTP、目录服务DNS

Web和HTTP

HTTP概述

Web的应用层协议是超文本传输协议(HyperText Transfer Protocol ,HTTP)。

HTTP使用TCP作为它的支撑运输协议。HTTP客户首先发起一个与服务器的TCP连接。一旦连接建立,该浏览器和服务器进程就可以通过套接字接口访问TCP。客户向他的套接字接口发送HTTP请求报文并从他的套接字接口接收HTTP响应报文。一旦客户向他的套接字接口发送一个请求报文,TCP为HTTP提供可靠数据传输,一个客户进程发出的每个HTTP请求都能完整的到达服务器。

HTTP是一个无状态协议,即不保存关于客户的任何信息。

非持续连接和持续连接

客户发出一系列请求。(比如打开一个web页面请求多个图片)

每个请求是经一个单独的TCP发送是非持续连接

所有的请求机响应经相同的TCP连接发送是持续连接

HTTP在默认情况下使用持续连接,客户和服务器也能配置成非持续连接

浏览器和服务器之间建立TCP连接,三次握手过程:客户向服务器发送一个小的TCP报文段(一次),服务器用一个小的TCP报文段做出确认和响应(两次),最后,客户向服务器返回确认(三次)。客户结合第三次握手向该TCP连接发送HTTP请求报文。一旦该请求到达服务器,服务器在该连接上发送HTML文件。该请求响应用去另一个RTT。所以响应时间是两个RTT

非持续连接:

在浏览器输入URL,向服务器请求一个有一个HTML基本文件和10个JPEG图片的Web页面。

1.HTTP客户进程在端口号80发起一个到服务器的TCP连接

2.HTTP客户经它的套接字向服务器发送一个HTTP请求报文。

3.HTTP服务器进程经它的套接字接收该请求报文,找出该web页面,在一个HTTP响应报文中封装对象,并通过其套接字向客户发送响应报文。

4.HTTP服务器进程通知TCP断开连接(客户完整接收报文后实际断开)

5.HTTP客户接收响应报文,TCP连接关闭。客户得到HTML文件,和10个对JPRG文件的引用。

6。对10个JPEG文件重复前面步骤。

在非持续连接中,产生了11个TCP连接。用户能够配置浏览器连接的并行度(10个JPEG并行连接)。

往返时间RTT(Round-Trip Time,RTT):指一个短分组从客户到服务器然后再返回客户所花费的时间。RTT包括分组传播时延、分组在中间路由器和交换机上的排队时延和分组处理时延(这些时延之前讨论过,可能传输时延忽略了)

持续连接

非持续连接缺点:必须为每个请求维护一个连接,给web服务器带来严重负担。第二,每个连接都有两个RTT时延

一般来说,如果一条连接经过一段时间间隔仍未被使用,断开连接。

HTTP报文格式

request

HTTP请求报文的第一行叫做请求行(request line,或叫请求头):方法字段、URL字段、HTTP版本字段

方法字段包括GET/POST/HEAD/PUT/DELETE(比较常用的就get 和 post)。

当用户提交表单时,HTTP客户常常使用POST方法。如果使用get方法表单,将表单信息添加到请求头URL后面。HEAD方法类似GET方法,当服务器收到一个使用HEAD方法的请求时,将会用一个HTTP报文响应,但不返回请求对象。PUT方法允许用户上传对象到指定的Web服务器上指定的路径。DELETE允许用户或者引用程序删除Web服务器上的对象。

首部行(或叫消息头):下面仅仅是众多首部上中的几个

Host:指明对象所在的主机,这个信息是Web代理高速缓存所要求的(后面将会介绍)

Connection:keep-alive 高速浏览器使用持续连接。如果是close,就是不要使用持续连接,在发送完被请求对象后就关闭连接。

User-agent:向服务器发送请求的浏览器的类型,服务器可以对不同类型的浏览器发送相同对象的不同版本

Accept:表示浏览器希望(能够)接收的数据类型,对应content-type。浏览器响应过来的数据类型。

Accept-language:zh-CN得到该对象中文版本

Accept-Encoding:浏览器支持的内容编码格式(压缩格式)列表,服务器在接收请求时,挑选一种用来对响应信息进行编码,并通过Content-Encoding来告诉浏览器服务器选定的编码格式。

首部行最后有一个空行,表示首部行结束。

实体体,使用get请求时该实体体为空,使用post方法时才使用该实体体。

Response

状态行(status line):

协议版本字段、状态码、相应状态信息

常见的状态码:

1××:告知请求的处理进度和情况。

200 OK:请求成功,信息在返回的响应报文中

301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文中的Location首部行中。客户端软件将自动获取新的URL

400 Bad Request:一般是客户端错误,比如提交数据字段类型和后台的实体类不一致

404 NOT FOUND:被请求的文档不在服务器上

505 HTTP Version NOT Supported:服务器不支持请求报文使用的HTTP协议版本

首部行(header line,又称响应头)

Connection:keep-alive 表示持续连接,close表示发送报文后就断开连接。

Date:服务器产生并发送该响应报文的日期和时间。

Server:指示发送报文服务器类型

Last-Modified:对象创建或最后修改的日期和时间。对既可能在本地客户也可能在网络缓存服务器上的对象缓存来说非常重要(随后讨论缓存服务器)

Content-Encoding:对应请求的Accept-Encoding,一般有gzip和deflate,浏览器再拿到响应正文后,根据编码格式进行解压,服务器也可以返回未压缩的正文,但这种情况不允许返回Content-Encoding

Content-Type:指示实体体对象中的对象类型

ser-cookie与cookie有关(马上提到)

实体体(entity body)

使用telnet查看真实的报文!(需要在控制面板、启动或关闭windows功能中开启telnet功能,telnet)

telnet www.baidu 80

然后在telnet框中输入(我测试的时候不显示输入)

GET / HTTP/1.1

Host:www.baidu (然后回车两次)

cookie & session

cookie技术有四个组件:

1.在HTTP响应报文中的cookie首部行

2.在HTTP请求报文中的cookie首部行

3.用户端系统cookie文件

4.位于web站点的后端数据库

Cookie的主要构成如下:(可以对照上面telnet 百度真实报文)

name:一个唯一确定的cookie名称。通常来讲cookie的名称是不区分大小写的。

value:存储在cookie中的字符串值。最好为cookie的name和value进行url编码

domain:cookie对于哪个域是有效的。所有向该域发送的请求中都会包含这个cookie信息。这个值可以包含子域(如:yq.aliyun),也可以不包含它(如:.aliyun,则对于aliyun的所有子域都有效).

path: 表示这个cookie影响到的路径,浏览器跟会根据这项配置,像指定域中匹配的路径发送cookie。

expires:失效时间,表示cookie何时应该被删除的时间戳(也就是,何时应该停止向服务器发送这个cookie)。如果不设置这个时间戳,浏览器会在页面关闭时即将删除所有cookie;不过也可以自己设置删除时间。这个值是GMT时间格式,如果客户端和服务器端时间不一致,使用expires

本人浅读《计算机网络 自顶向下方法》,品读经典,大有裨益,梳理前六章,与君分享,才疏学浅,欢迎指正和补充,不胜感激。

在本书中,我们使用一种特定的计算机网络,即公共因特网,作为讨论计算机网络及其协议的载体。

计算机网络和因特网

什么是因特网?

其一,我们能够描述因特网的具体构成,即因特网的基本硬件和软件组件;其二,我们能够根据为分布式应用提供服务的联网基础设施来描述因特网。

具体构成描述

因特网是一个世界范围是计算机网络,即它是一个互联了遍及全世界数十亿计算设备的网络。这些设备都称为主机(host)或者端系统(end system)。端系统通过通信链路(communication link)和分组交换机(packet switch)连接到一起。通信链路由不同的物理媒体组成(后面会介绍)。链路的传输速率以比特/s(bit/s 或 bps)度量。当一台端系统要向另一台端系统发送数据时,发送端系统将数据分段,并为每段加上首部字节。由此形成的信息包用计算机网络的术语称为分组(packet)。这些分组通过网络发送到目的端系统,在那里被装配成初始数据。

分组交换机从它的一条入通信链路接受到达的分组,并从它的一条出通信链路转发该分组。分为路由器(router)和链路层交换机(link-layer switch)。链路层交换机通常用于接入网中,而路由器通常用于网络核心中。从发送端系统到接收端系统,一个分组所经历的一系列通信链路和分组交换机称为通过该网络的路径。

路由器和链路层交换机的区别?

知乎评论:“你想想教材里的路由协议。家用交换机有哪个能跑的?真的路由器至少都要几千块。支持不同的路由协议,能根据当前网络状况自动协调路由。家里用得着么?”。从我们身边观察,家用路由器不如说是低配交换机加集成较弱的路由功能,正儿八经的路由器是要上千的。

外观:从外观上看,链路层交换机通常接口比较多,体积也相对较大,而路由器的接口就少得多,体积也要小很多。事实上,图(b)并不是真正的路由器,它只是集成了路由器的功能,除此之外它还有交换机的功能(LAN口就是作为交换机接口来使用的,WAN是用于连接外网的接口,而四根天线则是无线接入点,也就是我们通常所说的wifi和热点)。

层次:链路层交换机的原理相对简单,一般都是使用硬件电路来实现数据帧的转发,而路由器一般工作在网络层,肩负着网络互联的重任,需要实现更为复杂的协议,具有更加智能的转发决策功能,通常都会在在路由器中跑操作系统,实现复杂的路由算法。因此,与链路层交换机相比,路由器更加偏向于软件实现其功能。

转发对象:交换机是根据MAC地址转发数据帧,而路由器则是根据IP地址来转发IP数据报/分组。数据帧是在IP数据包/分组的基础上封装了帧头(源MAC和目的MAC等)和帧尾(CRC校验码)。实际上,数据帧中的IP地址决定最终数据包要到达的主机,而MAC地址则是决定下一跳将要将数据传送给哪台设备(路由器或目的主机)。IP地址是软件实现的,可以描述主机所在的网络,而MAC地址是硬件实现的,每一个网卡在出厂的时候都会将全世界唯一的MAC地址固化在网卡的ROM中,因此MAC地址是不可修改的,但是IP地址是可以由网络管理人员配置修改的。

分工:链路层交换机用于组件局域网,路由器主要负责连接外网并寻找网络中最合适数据传输的路径。

端系统通过因特网服务提供商(Internet Service Provider,ISP)接入因特网。

端系统、分组交换机和其他因特网部件都要运行一系列协议(protocol),这些协议控制因特网中信息的接受收和发送。IETF组织的RFC文档往往是技术性很强并相当详细的。它们定义了TCP、IP、HTTP和SMTP等协议。目前已经有将近7000个RFC。

服务描述

运行在一个端系统上的应用程序怎样才能指令因特网向运行在另一个端系统上的软件发送数据呢?

与因特网相连的端系统提供了一个套接字接口(socket interface),该接口规定了运行在一个端系统上的程序请求因特网基础设施向运行在另一个端系统上的特定目的地程序交付数据的方式。因特网套接字接口是一套发送程序必须遵循的规则集合,因此因特网能够将数据交付给目的地。

网络边缘

端系统也称为主机(host),因为它们容纳应用程序。主机有时又被进一步划分为两类:客户(client)和服务器(server)。客户通常是桌面PC、移动PC和智能手机等。服务器通常是更为强大的机器,用于存储和发布web页面、流视频。

接入网

拨号接入:安装简单但速度最慢,所需介质为电话线,通过拨号ISP提供的电话实现上网。拨号连接占用电话线,即固定电话和上网无法同时进行。

DSL:每个用户的调制解调器使用现有的电话线与电话公司的数字用户线接入复用器(DSLAM)交换数据。家庭的调制解调器得到数字数据后将其转换为高频音,以通过电话线传输给本地中心局。来自许多家庭的模拟信号在DSLAM处被转换回数字形式。在用户一侧,一个分配器把到达家庭的数据信号和电话信号分隔开,并将数据信号转发给DSL调制解调器。在电话公司一侧,在本地中心局中,DSLAM将数据和电话信号分隔开,并将数据送往因特网。DSL使用铜制电话双绞线传输。

电缆因特网:电缆因特网接入利用了有线电视公司现有的有线电视基础设施。住宅从提供有线电视的公司获得了电缆因特网接入。电缆将电缆头端接到地区枢纽,从这里使用传统的同轴电缆到达各家各户。经常被称为光纤混合同轴系统(HFC)。电缆因特网需要特殊的调制解调器,这种调制解调器称为电缆调制解调器(数字信号转为模拟信号,是通常所说的猫)。电缆调制解调器通常是一个外部设备通过一个以太网端口连接到家庭PC。在电缆头端,电缆调制解调器端接系统(CMTS)将许多下行家庭中的电缆调制解调器发送的模拟信号转换成数字信号。

光纤:分为FTTH(Fiber To The Home)和FTTB(Fiber To The Building)。光纤到户和光纤到楼。一般的宽带现在都是光纤到楼,一般所说比较快的光纤就是FTTH。光纤分布体系结构分为AON有源光纤网络和PON无源光纤网络。PON如下图

在公司和大学校园以及越来越多的家庭环境中,使用局域网(LAN)将端系统连接到边缘路由器。以太网用户使用双绞铜线与一台以太网交换机相连(平时购买到的路由器主要功能是体现交换机的功能,能,有薄弱的路由器功能,也算边缘路由器)。以太网交换机或这样相连的交换机网络,则与更大的因特网相连。

另外,在无线LAN中,无线用户从一个接入点发送分组,该接入点与局域网连接,局域网再与有线因特网连接。一个无线LAN用户通常必须位于接入点的几十米范围内。基于IEEE 802.11技术的无线LAN接入,更通俗的称为WIFI,目前几乎无处不在。

物理媒体

物理媒体的例子包括双绞铜线、同轴电缆、多模光纤缆、陆地无线电频谱和卫星无线电频谱。物理媒体分为两种类型:引导性媒体(guided media)和非引导型媒体(unguided media)。对于引导型媒体,电波沿着固体媒体前行,如光缆、双绞铜线或同轴电缆。对于非引导型媒体,电波在空气或外层空间中传播,例如在无线局域网或数字卫星频道中。

双绞铜线:

双绞线由两根绝缘的铜线组成,每根大约1mm粗,以规则的螺旋状排列着。这两根线被绞合起来,以减少临近类似的双绞线的电气干扰。一般我们购买到的网线就是双绞线。

同轴电缆:

同轴电缆由两个铜导体组成,但是这两个导体是同心的而不是并行的。同轴电缆在电缆电视系统中相当普遍。在电缆电视系统中相当普遍。

光纤:

光纤是一种细而柔软的、能够引导光脉冲的媒体,每个脉冲表示一个比特。一根光纤能够支持极高的比特速率,高达数十甚至数百Gbps。它们不收哦电磁干扰,衰减极低,并且很难窃听。高成本使得LAN或接听接入网中不适用它们。

陆地无线电信道:

分为三类:一类运行在很短距离(1米或两米),如个人设备头戴式耳机、键盘;另一类运行在局域,通常跨越数十到几百米,比如无线LAN技术;第三类运行在广域跨越数万米,比如蜂窝接入技术,即移动网络。

卫星无线电信道:

通信中通常使用两类卫星:同步卫星和近地轨道卫星

同步卫星永久停留在地球上方相同点上。从地面站到卫星再回到地面站的巨大距离引入了可观的280ms信号传播时延。同步卫星最重要的应用之一是传输电视节目。广播信号也被传输。

近地轨道卫星放置的非常靠近地球,为了提供对一个区域的连续覆盖,需要在轨道上放置许多卫星。

网络核心

分组交换

在各种网络应用中,端系统彼此交换报文(message)。为了从源端系统向目的端系统发送一个报文,源将长报文划分为较小的数据块,称之为分组(packet)。在源和目的地之间,每个分组都通过通信链路和分组交换机(路由器和链路层交换机)传送。

存储转发传输:在交换机能够开始向输出链路传输该分组的第一个比特之前必须接受到整个分组。

排队时延和分组丢失:对于每条相连的链路该分组交换机具有一个输出缓存(output buffer),它用于存储路由器准备发往那条链路的分组。该输出缓存在分组交换中起着重要的作用。如果到达的分组需要传输到某条链路,但发现该链路正忙于传输其他分组,该到达分组必须在输出缓存中等待。因此除了存储转发时延外,分组还要承受输出缓存的排队时延。一个到达的分组可能发现该缓存已经被其他等待传输的分组完全充满了,再次情况下,将出现分组丢失(丢包)(packet loss),到达的分组或已经排队的分组之一被丢弃。

转发表和路由选择协议:在因特网中,每个端系统具有一个IP地址,当源主机要向目的端系统发送一个分组时,源在该分组的首部包含了目的地的IP地址。每台路由器有一个转发表(forwarding table),用于将目的地址映射成输出链路。当某分组到达一台路由器时,路由器检查该地址,并用这个目的地址搜索其转发表,以发现适当的出链路。路由器将该分组导向该出链路。

因特网具有一些特殊的路由选择协议(routing protocol),用于自动地设置这些转发表。例如,一个路由选择协议可以决定从每台路由器到每个目的地的最短路径,并使用这些最短路径来配置路由器中的转发表。

报文交换

报文交换相比分组交换,报文交换不拆分报文,以完整报文进行存储转发。

电路交换

传统的电话网络是电路交换网络的例子。在发送方能够发送消息之前,该网络必须在发送方和接收方之间建立一条连接。这是一个名副其实的连接,因为此时沿着发送方和接收方之间路径上的交换机都将未该连接维护连接状态。该连接被称为一条电路。它在连接期间在该网络链路上预留额恒定的传输速率。

电路交换中的电路是通过频分复用(FDM)和时分复用(TDM)来实现的。对于FDM,链路的频谱由跨越链路创建的所有连接共享。特别是,在连接期间链路为每条连接专用一个频段。调频无线电台也使用FDM来共享频谱,每个电台被分配特定频段。对于一条TDM,时间被划分为固定期间的帧,并且每个帧又被划分为固定数量的时隙。网络在每个帧中为该连接指定一个时隙。这些时隙由该连接单独使用。

分组交换允许更多用户同时使用网络!——网络资源充分共享

网络的网络

让端用户和内容提供商连接到接入ISP仅解决了连接难题中很小的一部分,因为因特网是由数以亿计的用户构成的。要解决这个难题,ISP自身必须互联。通过创建网络的网络可以做到这一点,理解这个短语是理解因特网的关键。

书中逐步递进介绍了因特网网络结构,这里直接介绍今天的因特网结构。

如果某个公司建立并运营一个可盈利的全球传输ISP(也称T1,目前中国电信、中国联通已经升级到T1),其他公司建立自己的全球传输ISP并与最初的全球传输ISP是一件自然的事,然而这些全球传输ISP必须是互联的。不然的话,与某个全球传输ISP连接的接入ISP将不能与连接到其他全球传输的ISP的接入ISP进行通信。

区域ISP,在任何给定的区域,可能有一个区域ISP,区域中的接入ISP与之相连。每个区域ISP与第一层ISP相连。第一层ISP是全球传输ISP,尽管它不是在世界上每个城市都存在,但它确实存在。有大约十几个第一层ISP。区域ISP向第一层ISP付费,在某些区域,可能有较大的区域ISP(可能跨越整个国家),该区域中较小是区域ISP与之相连,较大的区域ISP与第一层ISP连接。(例如在中国,有每个城市有接入ISP,它们与省级ISP相连,省级ISP又与国家级ISP连接,国家级ISP最终与第一层ISP连接)。

Pop(Point of Presence)存在于等级结构的所有层次,底层(接入ISP)除外。一个Pop只是提供商网络中的一台或多台路由器群组,其中客户ISP能够与供应商ISP连接。对于要与提供商Pop连接的客户网络,它能将它的路由器直接连接到位于该Pop的一台路由器,任何ISP可以选择多宿,即可以与两个或多个提供商ISP连接。当一个ISP多宿时,即使它的提供商之一出现故障,它仍然能够继续发送和接受分组。

客户ISP向他们的提供商ISP付费以获得全球因特网互联能力。客户ISP支付给提供商ISO的费用数额反映了它通过提供商交换的通信流量。为了减少这些费用,位于相同等级结构层次的临近一堆ISP能够对等,也就是说,能够直接将它们的网络连到一起,使它们之间的所有流量直接连接而不是通过上游的中间ISP传输。当两个ISP对等时,不进行付费。第三方公司创建一个因特网交换点(Internet Exchange Point,IXP),IXP是一个汇合点,多个ISP在这里一起对等。

提供商自给自足:内容提供商网络最典型的比如谷歌,谷歌专用网络仅承载出入谷歌浏览器的流量。谷歌专用网络通过与较低层的ISP对等,尝试绕过因特网的较高层,采用的方式是可以是直接与它们连接,或者在IXP处与它们连接。然而因为许多接入ISP仍然仅能通过第一层网络的传输到达,所以谷歌网络也与第一层ISP连接,并就与这些ISP交换的流量付费。通过创建自己的网络,内容提供商不仅减少了向顶层ISP支付的费用,而且对其服务最终如何交付给端用户有了更多的控制。

时延和吞吐量

时延

时延从一台主机出发,通过一系列路由器传输,在另一台主机中结束它的历程。当分组从一个节点沿着这条路径到后继节点,该分组在沿途的每个节点经受了集中不同类型的时延。这些时延最为重要的是节点处理时延(nodal proccessing delay)、排队时延(queuing delay)、传输时延(transmission delay)和传播时延(propagation delay),这些时延总体累加起来是节点总时延。许多因特网应用,如搜索、web浏览、电子邮件、地图、即时通讯和语音,它们的性能受网络时延的影响很大。为了深入理解分组交换和计算机网络,我们必须理解这些时延的性质和重要性。

处理时延:检查分组首部和决定将该分组和决定将该分组导向何处所需要的时间是处理时延的一部分。处理时延也能够包括其他因素,如检查比特级别的差错所需要的时间,该差错出现在从上游节点向路由器A传输这些分组比特的过程中。在这种节点处理之后,路由器将该分组引向通往路由器B链路之前的队列。

排队时延:在队列中,分组在链路上等待传输时,它经受排队时延

传输时延:是路由器推出分组所需的时间。用L比特表示该分组的长度,用Rbps表示从路由器A到路由器B的链路传输速率,传输时延是L/R。

传播时延:从该链路的起点到路由器B传播所需要的的时间是传播时延。传播时延取决于该链路的物理媒体和链路距离。

吞吐量

考虑主机A到主机B跨越计算机网络传送一个大文件,在任何时间瞬间的瞬时吞吐量是主机B接受到该文件的速率。如果该文件F比特,主机B接受到所有F比特用去T时间,则文件传送的平均吞吐量是F/T bps

如图a,服务器不能以快于Rs的速率通过其链路注入比特(服务器拥塞);这台路由器也不能以快于Rc的速率转发比特(路由器拥塞)。如果Rs<Rc,由该服务器注入的比特将顺畅地通过路由器流动,并以Rs到达客户;另一方面,如果Rc<Rs,则该路由器将不能像接受速率那样快地转发比特。在这种情况下,比特以速率Rc离开该路由器,从而得到端到端吞吐量Rc。(如果比特继续以Rs到达路由器,继续以Rc离开路由器,该路由器中等待传输给客户的积压比特将不断增加),对于这种简单的两链路网络,吞吐量是min{Rc,Rs}

图b显示了一个在服务器和客户之间具有N条链路的网络,这N条链路的传输速率分别是R1,R2,…RN。传输吞吐量为min{R1,R2,…RN},这同样仍是沿着服务器和客户之间路径的瓶颈链路的速率。

如图a中显示了一个服务器和一个客户,因特网的核心中的所有链路都有非常高的传输速率,即该速率比Rs和Rc要高得多。因为因特网的核心就像一个粗大的管子,所以吞吐量=min{Rs,Rc}。

图b,其中有10台服务器和10个客户与某计算机网络核心相连。同时发生10个下载,涉及10个客户-服务器对,在核心中有一条所有10个下载通过的链路。将这条链路R的传输速率表示为R,假定所有服务器接入链路有相同的速率Rs,所有客户接入链路有相同的速率Rc,并且核心除了速率为R的一条共同链路之外的所有链路,它们的传输速率比Rc,Rs,R大得多。如果R很大吞吐量依然是min{Rs,Rc}。如果相同量级瓶颈就可能是R了。

协议层次

分层体系结构每层以一下方式提供服务:

1.在这层中执行了某些动作

2.使用直接下层的服务

这种简化本身由于提供模块化具有很高价值,这使某层所提供的服务实现易于改变,只要该层对上面的层提供相同的服务,并且使用来自下面层次的相同服务,当某层的实现变化时,该系统的其余部分保持不变。

网络设计者以分层的方式组织协议以及实现这些协议的网络硬件和软件,一个协议层能够用软件和硬件或两者的结合来实现。注入HTTP和SMTP这样的应用层协议总是在端系统中用软件实现,运输层协议也是如此。因为物理层和数据链路层负责处理跨越特定链路的通信,它们通常在与给定链路相关联的网络接口卡中实现。网络层通常是硬件和软件实现的混合体。

各层的所有协议被称为协议栈。因特网的协议由5个层次组成(OSI 7层模型去掉了会话层和表示层):物理层、链路层、网络层、运输层和应用层。

应用层

应用层包括许多协议,例如HTTP(提供web文档的请求和传送)、SMTP(提供电子邮件报文的传输)和FTP(提供两个端系统之间的文件传输)。web域名到IP的转换也是借助与特定的应用层协议DNS完成的。应用层协议分布在多个端系统上,而一个端系统中的应用程序使用协议与另一个端系统中的应用程序交换信息分组。应用层的信息分组称为报文。

运输层

因特网的运输层在应用程序端点之间传送应用层报文。在英特网中,有两种运输协议,即TCP和UDP,利用其中任何一个都能运输应用层报文。TCP(向上)向他的应用程序提供了面向连接的服务。这种服务包括了应用层报文向目的地 的 确保传递和流量控制(即发送方、接收方速率匹配)。TCP也将长报文划分为短报文,并提供拥塞控制机制,因此当网络拥塞时,源抑制其传输速率。UDP协议向它的应用程序提供无连接服务。这是一种不提供不必要服务的服务,没有可靠性,没有流量控制,也没有拥塞控制。运输层的分组称为报文段。

网络层

因特网的网络层负责将称为数据报的网络层分组从一台主机移动到另一台主机。在一台源主机中的因特网运输层协议(TCP或UDP)向网络层递交运输层报文段和目的地址
因特网的网络层包括著名的网际协议IP,该协议定义了在数据报中的各个字段以及端系统和路由器如何作用于这些字段。IP仅有一个,所有具有网络层的因特网组件必须运行IP。因特网的网络层也包括决定路由的路由选择协议,它根据该路由将数据报从源传输到目的地。因特网有许多路由选择协议。

链路层

因特网的网络层通过源和目的地之间的一系列路由器路由数据报。为了将分组从一个节点移动到路径上的下一个节点,网络层必须依靠链路层的服务,特别是在每个节点,网络层将数据报下传给链路层,链路层沿着路径将数据报传递给下一个节点。在该下一个节点。链路层将数据报上传给网络层。
由链路层提供的服务取决于应用于该链路的特定链路层协议。例如,某些协议基于链路提供可靠传递,从传输节点跨越一条链路到接收节点。这种可靠的传递服务不同于TCP的可靠传递服务,TCP提供从一个端系统到另一个端系统的可靠交付。链路层的例子包括以太网、WIFI和电缆接入网的DOCSIS协议。因为数据报从源到目的地传送通常需要经过几条链路,一个数据报可能被沿途不同链路上的不同链路层协议处理。链路层分组称为帧。

物理层

链路层的任务是将整个帧从一个网络元素移动到临近的网络元素,而物理层的任务是将该帧中的一个个比特从一个节点移动到下一个及诶单。在这层中的协议仍然是链路相关的,并且进一步与该链路的实际传输媒体相关。例如,以太网有许多物理层协议,一个是关于双绞铜线的,另一个是关于同轴电缆的,还有一个是关于光纤的,等等。

封装

数据从发送端系统的协议栈向下,沿着中间的链路层交换机和路由器的协议栈上上下下,然后向上到达接收端系统的协议栈。链路层交换机实现了第一层和第二层;路由器实现了第一层到第三层。这意味着因特网路由器能够实现IP协议,而链路交换机不能。

封装:在发送主机端,一个应用报文被传送给运输层。运输层收取到报文并附上附加信息(运输层首部信息),该首部将被接收端的运输层使用。应用层报文和运输层首部信息一道构成了运输层报文段。首部信息也许包括了:允许接收端运输层向上向适当的应用程序交付报文的信息;差错检测位信息,该信息判断报文中的比特是否在图中已被改变。运输层向网络层传递该报文段,网络层增加了如源和目的端系统地址等网络层首部信息,生成网络层数据报。该数据报接下来被传递给链路层,链路层增加它自己的链路层首部信息并生成链路层帧。所以我们看到,在每一层,一个分组具有两种类型的字段:首部字段和有效载荷字段。有效载荷通常是来自上一层的分组。

封装的过程可以比前面描述的更负载一个报文可能被划分为多个报文段。报文段可能被划分为多个网络层数据报,一个数据报有可能划分为多个帧。在接收端,则必须重构它们。

面对攻击的网络

坏家伙如何攻击计算机网络?

恶意软件

恶意软件一旦感染我们的设备,就能够做各种不正当的事情,包括删除我们的文件,安装间谍软件来收集我们的隐私信息并发送给坏家伙。我们的受害主机也可能称为数以千计的类似受害设备网络中的一员,坏家伙能够使用僵尸网络展开分布式拒绝服务攻击。

目前为止的多数恶意软件都是自我复制的:一旦感染一台主机,就会从那台主机寻求进入因特网中的其他主机,从而感染新的主机。病毒需要用户交互来感染用户设备。蠕虫无需任何明显用户交互就能进入设备。比较脆弱的应用程序从因特网接收了恶意软件并运行它,生成了蠕虫。感染设备能扫描因特网,搜索其他运行相同网络应用程序的易受感染的主机,向他们发送一个蠕虫副本。

攻击服务器和网络基础设施

拒绝服务攻击(DOs)使得网络、主机或其他基础设施部分不能由合法用户使用。Web服务器、电子邮件服务器、DNS服务器都能够称为Dos攻击的目标。
1.弱点攻击 向一台目标主机上运行的易受攻击的应用工程或操作系统发送制作精细的报文。(这需要比较了解被攻击的目标)
2.带宽洪泛 攻击者向目标主机发送大量的分组,分组数量之多使得目标的接入链路变得拥塞,使得合法的分组无法到达服务器。单一的攻击源可能无法产生足够大的流量来伤害该服务器。此外,如果从单一源发出所有流量的话,某上游路由器就能够检测出该攻击并阻挡下来。相比于来自单一主机的DoS攻击,DDoS攻击更难检测和防范
3.连接洪泛:攻击者在目标主机中创建大量的半开或全开TCP连接,导致主机停止接受合法的连接。

嗅探

嗅探WIFI或蜂窝网络:在无线传输设备的附近放置一台分组嗅探器,就能得到传输的每个分组的副本。
嗅探有线环境:LAN中,分组嗅探器能够获得经该LAN发送的所有分组。

伪装信任的人

生成具有任意源地址、分组内容和目的地址的分组,然后将这个伪装的分组传入因特网,因特网将忠实的将该分组转发到目的地,这一切都极为容易。接收方将该虚假地址作为真实的地址,进而执行该分组中的命令。这种方式称为IP哄骗,值是冒充另一个用户许多方式中的一种。

应用层

我们考察集中网络应用程序,包括Web、电子邮件、DNS、对等文件分发、和视频流。然后将涉及开发运行在TCP和UDP上的网络应用程序。

应用层协议原理

网络应用程序体系结构

两种主流体系结构:客户-服务器体系结构 和 对等体系结构

在CS体系结构中,有一个总是打开的主机称为服务器,它服务于来自浏览器的请求。CS体系结构,客户相互之间不进行直接通信。CS体系结构著名的应用程序包括Web、FTP、Telnet和电子邮件。在CS中常常配备大量主机的数据中心被用于创建服务器。如百度、谷歌都有它们的数据中心。

在一个P2P体系结构中,对位于数据中心的专用服务器有最小的依赖。相反,应用程序在间断连接的主机对之间使用直接通信,这些主机被称为对等方。许多现在流行的、流量密集型应用都是P2P的。这些应用包括迅雷、网络电话、视频会议。P2P体系最引人入胜的特性之一是它的自扩展性。例如尽管每个对等方都由于请求文件产生工作负载,但每个对等方通过向其他对等方分发文件为系统增加服务能力。

QQ聊天工具是p2p和cs混合使用的。p2p(NAT打洞成功):你的消息直接发给你的聊天对象,同时也发一份到服务器做备份。cs(NAT打洞不成功):你的消息发给服务器转发

进程通信

在两个不同端系统上的进程,通过跨越计算机网络交换报文而相互通信。发送进程生成并向网络中发送报文,接收进程接收这些报文并可能通过回送报文进行响应。>

发起通信的进程被标识为客户,在会话开始时等待联系的进程是服务器。

进程通过一个称为套接字的软件接口向网络发送报文和从网络接收报文(可以将套接字类比成应用层和运输层之间的门)。套接字是一台主机内应用层和运输层之间的接口。应用程序开发者对运输层的控制仅限于:选择运输层协议、也许能设置几个运输层参数。

使用套接字编程需要标识接收进程,主机地址(IP地址)和目的主机接收进程标识符(端口号)。比如Web服务器默认端口80,FTP为21、SMTP为25.

运输服务

一个运输层协议能够为调用它的应用程序提供什么服务?

可靠数据传输

分组在计算机网络中可能丢失。当一个运输协议提供可靠数据传输,发送进程只要将其数据传递进套接字,就可以完全相信该数据将能无差错的到达接收进程。当一个运输层协议不提供可靠数据传输时,由发送进程发送的有些数据可能到达不了接收进程。这可能被容忍丢失的应用所接收,比如交谈式音频、视频。

吞吐量

运输层协议能够以某种特定的速率提供确保的可用吞吐量。使用这种服务,该应用程序能够请求r比特/秒的确保吞吐量,并且该运输协议能确保可用吞吐量至少为r。具有吞吐量要求的应用被称为带宽敏感的应用。许多当前多媒体应用是这样 的。弹性应用 比如电子邮件、文件传输。

定时

这种服务将对交互式实时应用程序有吸引力,为了有效性而要求数据交付有严格的时间限制。

安全性

运输协议能够加密由发送进程传输的所有数据,在接收主机中,运输层协议能够将数据交付给接收进程之前解密这些数据。

因特网的运输服务

TCP

TCP模型包括面向连接服务和可靠数据传输服务。

面向连接:TCP让客户和服务器互相交换运输层控制信息。这个所谓的握手过程提醒客户和服务器,让它们为大量分组的到来做好准备。在握手阶段后,一个TCP连接就在两个进程的套接字之间建立了。这条连接是全双工的,即连接双方的进程可在此连接上同时进行报文收发。当应用程序结束报文发送时,必须拆除该连接。(运输层章讨论具体实现)

可靠数据传输:通信进程能够依靠TCP无差错、按适当顺序交付所有发送的数据。

TCP协议还有拥塞控制机制,这种服务不一定能为通信进程带来好处,但能为因特网整体带来好处。当发送方和接收方之间的网络拥塞时,TCP的拥塞控制机制会一直发送进程,也视图限制每个TCP连接,使它们达到公平共享网络带宽的目的。

TCP安全:安全套接字层(SSL)是加强后的TCP,在TCP基础上提供进程到进程的安全性服务,包括加密、数据完整性和端点鉴别,这种强化是在应用层实现的。SSL有它自己的套接字,发送端先通过SSL套接字加密,然后传送给TCP套接字。接收端TCP套接字传送给SSL套接字解密。

UDP

UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务。UDP是无连接的,没有握手过程。UDP是一种不可靠数据传送服务。不保证报文到达接收进程,到达的报文也可能是乱序的。

因特网提供和不能提供的服务

TCP提供了可靠数据传输,SSL提供安全服务。因特网运输协议没有提供吞吐量和定时保证服务。

应用层协议

应用层协议定义了:

交换的报文类型,例如请求报文和响应报文。

各种报文类型的语法,如报文中的各个字段以及这些字段是如何描述的。

字段的语义,即这些字段中的信息的含义

确定一个进程何时以及如何发送报文,对报文进行响应的规则。

Web的应用层协议HTTP,电子邮件应用层协议SMTP。文件传输FTP、目录服务DNS

Web和HTTP

HTTP概述

Web的应用层协议是超文本传输协议(HyperText Transfer Protocol ,HTTP)。

HTTP使用TCP作为它的支撑运输协议。HTTP客户首先发起一个与服务器的TCP连接。一旦连接建立,该浏览器和服务器进程就可以通过套接字接口访问TCP。客户向他的套接字接口发送HTTP请求报文并从他的套接字接口接收HTTP响应报文。一旦客户向他的套接字接口发送一个请求报文,TCP为HTTP提供可靠数据传输,一个客户进程发出的每个HTTP请求都能完整的到达服务器。

HTTP是一个无状态协议,即不保存关于客户的任何信息。

非持续连接和持续连接

客户发出一系列请求。(比如打开一个web页面请求多个图片)

每个请求是经一个单独的TCP发送是非持续连接

所有的请求机响应经相同的TCP连接发送是持续连接

HTTP在默认情况下使用持续连接,客户和服务器也能配置成非持续连接

浏览器和服务器之间建立TCP连接,三次握手过程:客户向服务器发送一个小的TCP报文段(一次),服务器用一个小的TCP报文段做出确认和响应(两次),最后,客户向服务器返回确认(三次)。客户结合第三次握手向该TCP连接发送HTTP请求报文。一旦该请求到达服务器,服务器在该连接上发送HTML文件。该请求响应用去另一个RTT。所以响应时间是两个RTT

非持续连接:

在浏览器输入URL,向服务器请求一个有一个HTML基本文件和10个JPEG图片的Web页面。

1.HTTP客户进程在端口号80发起一个到服务器的TCP连接

2.HTTP客户经它的套接字向服务器发送一个HTTP请求报文。

3.HTTP服务器进程经它的套接字接收该请求报文,找出该web页面,在一个HTTP响应报文中封装对象,并通过其套接字向客户发送响应报文。

4.HTTP服务器进程通知TCP断开连接(客户完整接收报文后实际断开)

5.HTTP客户接收响应报文,TCP连接关闭。客户得到HTML文件,和10个对JPRG文件的引用。

6。对10个JPEG文件重复前面步骤。

在非持续连接中,产生了11个TCP连接。用户能够配置浏览器连接的并行度(10个JPEG并行连接)。

往返时间RTT(Round-Trip Time,RTT):指一个短分组从客户到服务器然后再返回客户所花费的时间。RTT包括分组传播时延、分组在中间路由器和交换机上的排队时延和分组处理时延(这些时延之前讨论过,可能传输时延忽略了)

持续连接

非持续连接缺点:必须为每个请求维护一个连接,给web服务器带来严重负担。第二,每个连接都有两个RTT时延

一般来说,如果一条连接经过一段时间间隔仍未被使用,断开连接。

HTTP报文格式

request

HTTP请求报文的第一行叫做请求行(request line,或叫请求头):方法字段、URL字段、HTTP版本字段

方法字段包括GET/POST/HEAD/PUT/DELETE(比较常用的就get 和 post)。

当用户提交表单时,HTTP客户常常使用POST方法。如果使用get方法表单,将表单信息添加到请求头URL后面。HEAD方法类似GET方法,当服务器收到一个使用HEAD方法的请求时,将会用一个HTTP报文响应,但不返回请求对象。PUT方法允许用户上传对象到指定的Web服务器上指定的路径。DELETE允许用户或者引用程序删除Web服务器上的对象。

首部行(或叫消息头):下面仅仅是众多首部上中的几个

Host:指明对象所在的主机,这个信息是Web代理高速缓存所要求的(后面将会介绍)

Connection:keep-alive 高速浏览器使用持续连接。如果是close,就是不要使用持续连接,在发送完被请求对象后就关闭连接。

User-agent:向服务器发送请求的浏览器的类型,服务器可以对不同类型的浏览器发送相同对象的不同版本

Accept:表示浏览器希望(能够)接收的数据类型,对应content-type。浏览器响应过来的数据类型。

Accept-language:zh-CN得到该对象中文版本

Accept-Encoding:浏览器支持的内容编码格式(压缩格式)列表,服务器在接收请求时,挑选一种用来对响应信息进行编码,并通过Content-Encoding来告诉浏览器服务器选定的编码格式。

首部行最后有一个空行,表示首部行结束。

实体体,使用get请求时该实体体为空,使用post方法时才使用该实体体。

Response

状态行(status line):

协议版本字段、状态码、相应状态信息

常见的状态码:

1××:告知请求的处理进度和情况。

200 OK:请求成功,信息在返回的响应报文中

301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文中的Location首部行中。客户端软件将自动获取新的URL

400 Bad Request:一般是客户端错误,比如提交数据字段类型和后台的实体类不一致

404 NOT FOUND:被请求的文档不在服务器上

505 HTTP Version NOT Supported:服务器不支持请求报文使用的HTTP协议版本

首部行(header line,又称响应头)

Connection:keep-alive 表示持续连接,close表示发送报文后就断开连接。

Date:服务器产生并发送该响应报文的日期和时间。

Server:指示发送报文服务器类型

Last-Modified:对象创建或最后修改的日期和时间。对既可能在本地客户也可能在网络缓存服务器上的对象缓存来说非常重要(随后讨论缓存服务器)

Content-Encoding:对应请求的Accept-Encoding,一般有gzip和deflate,浏览器再拿到响应正文后,根据编码格式进行解压,服务器也可以返回未压缩的正文,但这种情况不允许返回Content-Encoding

Content-Type:指示实体体对象中的对象类型

ser-cookie与cookie有关(马上提到)

实体体(entity body)

使用telnet查看真实的报文!(需要在控制面板、启动或关闭windows功能中开启telnet功能,telnet)

telnet www.baidu 80

然后在telnet框中输入(我测试的时候不显示输入)

GET / HTTP/1.1

Host:www.baidu (然后回车两次)

cookie & session

cookie技术有四个组件:

1.在HTTP响应报文中的cookie首部行

2.在HTTP请求报文中的cookie首部行

3.用户端系统cookie文件

4.位于web站点的后端数据库

Cookie的主要构成如下:(可以对照上面telnet 百度真实报文)

name:一个唯一确定的cookie名称。通常来讲cookie的名称是不区分大小写的。

value:存储在cookie中的字符串值。最好为cookie的name和value进行url编码

domain:cookie对于哪个域是有效的。所有向该域发送的请求中都会包含这个cookie信息。这个值可以包含子域(如:yq.aliyun),也可以不包含它(如:.aliyun,则对于aliyun的所有子域都有效).

path: 表示这个cookie影响到的路径,浏览器跟会根据这项配置,像指定域中匹配的路径发送cookie。

expires:失效时间,表示cookie何时应该被删除的时间戳(也就是,何时应该停止向服务器发送这个cookie)。如果不设置这个时间戳,浏览器会在页面关闭时即将删除所有cookie;不过也可以自己设置删除时间。这个值是GMT时间格式,如果客户端和服务器端时间不一致,使用expires

发布评论

评论列表 (0)

  1. 暂无评论