前端学HTTP之网络基础
HTTP协议对于前端工程师是非常重要的。我们在浏览网站时,访问的每一个WEB页面都需要使用HTTP协议实现。如果不了解HTTP协议,就不可能了解网站的本质。在学习HTTP之前,本文先介绍一些网络基础知识
网络
简单地说,网络就是在一定的区域内将两个或两个以上的计算机以一定的方式连接起来,以供用户共享文件、程序、数据等资源。下面就几种常见的网络类型及分类方法做简要介绍
1、按覆盖范围分
局域网(local area network,LAN):局域网一般在几十米到几千米范围内,一个局域网可以容纳几台到几千台计算机,局域网往往用于某一群体,比如一个公司、一个单位、某一幢楼、某一个学校等
城域网(Metropolis Area Network,MAN):城域网是规模局限在一座城市范围内的区域性网络,一般来说,覆盖范围介于10~100KM之间
广域网(Wide Area Network,WAN):广域网是将分布在各地的局域网连接起来的网络,是网络之间的网络。广域网的范围非常大,可以跨越国界、洲界,甚至全球范围。广域网的典型代表是Internet
目前,还有两个比较流行的网络概念:存储区域网(Storage Area Network,SAN)和虚拟专用网(Virtual Private Network,VPN)。SAN是专用的高性能网络,它用于在服务器与存储资源之间传输数据。由于SAN是一个独立的专用网络,从而可以避免在客户机与服务器之间的任何传输冲突。VPN是一种在公共网络上传输私有网络数据的专用网络技术,利用VPN,一个远程用户或分支机构可以与总部之间建立一条安全的隧道,用于传输私有数据
2、按拓扑结构分
网络拓扑(Topology)确定了网络的结构。网络拓扑有两种:一种是物理拓扑,是指实际布线或设备相互连接的几何形式;另一种是逻辑拓扑,它定义了媒体如何存取由主机发送的数据
(1)物理拓扑
按照物理拓扑结构的不同,可以将网络分为星型网络、环型网络、总线型网络三种基本类型
a、总线型网络。网络中所有的站点共享一条数据通道,总线的两端有端结点。总线型网络安装简单方便,需要铺设的电缆最短,成本低,某个站点的故障一般不会影响整个网络,但介质的故障会导致网络瘫痪。总线网安全性低、监控比较困难、增加新站点也不如星型拓扑网络容易。所以,总线型网络结构现在基本上已经被淘汰
b、环型拓扑。环型网络结构的各站点通过通信介质连成一个封闭的环形。环形网络容易安装和监控,但容量有限,网络建成后,难以增加新的站点。因此,现在组建局域网已经基本上不使用环形网络结构了
c、星型拓扑。各站点通过点到点的链路与中心站点相连。星型网络很容易在网络中增加新的站点,数据的安全性和优先级容易控制,易实现网络监控,一个站点出了问题,不会影响整个网络的运行,但中心站点的故障会引起整个网络瘫痪,星型网络结构是现在最常用的网络拓扑结构
在这三种类型的网络结构基础上,可以组合出拓展星型、层次型、网状型等其他类型拓扑结构的网络
(2)逻辑拓扑
网络逻辑拓扑指各台主机通过传输介质相互通信的方式。最常见的两种逻辑拓扑形式是广播拓扑和令牌拓扑
a、广播拓扑。每台主机都把所要发送数据的目标地址设为网络介质上某个特定网络接口卡的地址、多播地址或广播地址,然后把该数据发送到传输介质中。每台主机使用传输介质时不必遵循某种次序,即先来先服务。现在最常使用的以太网就是采用这种方式来工作的
b、令牌拓扑。令牌拓扑通过向各台主机顺序传递一个电子令牌来控制网络介质的访问。当一台主机接收到令牌时,它就可以把数据发送到网络介质上。如果该主机没有数据要发送,那么就将令牌传递给下一台主机,如此循环。使用令牌传递的主要有令牌环和光纤分布式数据接口(FDDI),它们都是在物理环形拓扑上使用令牌传递的
3、按传输介质分
按照网络的传输介质分类,可以将计算机网络分为有线网络和无线网络两种。有线网络包括采用同轴电缆、双绞线、光纤等有线介质连接的计算机网络。局域网通常采用单一的传输介质,而城域网和广域网采用多种传输介质
(1)双绞线
采用双绞线连网,因价格便宜,安装方便,所以是目前最常见的连接方式。计算机局域网中的双绞线可分为非屏蔽双绞线、铝箔屏蔽的双绞线和屏蔽双绞线
a、非屏蔽双绞线(Unshielded Twisted Paired,UTP)价格低廉、容易安装及重新配置,所以是最常见的传输介质,它由两股线规很细的铜线组成,互相绝缘,以固定间隔彼此绞合在一起,绞合的作用是为抵消电脉冲传输过程中所形成的电磁场。在传输距离(理论上是100m)范围内,五类UTP的数据传输速率可以达到100Mb/s,甚至 1000Mb/s
b、铝箔屏蔽的双绞线(Foil Twisted Pair,FTP)带宽较大,抗干扰能力强。相对的,屏蔽线比非屏蔽线价格及安装成本要高一些,线缆弯曲性能稍差。六类线及六类之前的屏蔽系统多采用这种形式
c、屏蔽双绞线(Shielded Twisted-Pair, STP)每一对双绞线都有一个铝箔屏蔽层。四对双绞线合在一起,并且还有一个公共的金属编织屏蔽层,这是七类线的标准结构,它适用于高速网络的应用
[注意]双绞线的制作口诀一般为白橙橙、白绿蓝、白蓝绿、白棕棕
双绞线有3种类型:直通线、交叉线和全反线。直通线(Straight-through)主要用于不同种设备的互连;交叉线(Crossover)主要用于同种设备的互连;全反线(Rollover)用于对路由器和交换机进行初始配置或用于异步传输
(2)同轴电缆
与双绞线相比,同轴电缆含有线规较粗的单层实心导体,导体一般由铜或覆以铜的铝制成。中间的导体外面覆以一层绝缘材料,这种绝缘材料有助于把中间的导体和外面的金属铝箔屏蔽层隔开。外面通常会包一层金属网,再包一层保护皮对电缆加以保护。中间的导体可支持高频信号,几乎不会出现困扰UTP及同类电缆的信号衰减问题
以太网及其他LAN技术原先使用同轴电缆是因为它能支持高频信号,而且不受电磁干扰影响。然而,面对迅猛发展的双绞线,成本高昂加上安装困难导致同轴电缆退居其后。现在使用同轴电缆较多的网络是有线电视网
同轴电缆根据粗细程度不同,分为粗缆(10Base5)和细缆(10Base2)。粗缆的传输距离是500m,细缆的传输距离是185m
(3)光纤网
光导纤维简称光纤,光纤传输距离长,传输速率高,可达数千兆bps,抗干扰性强,不会受到电子监听设备的监听,是高安全性网络的理想选择。光纤是细如头发般的透明玻璃丝,可用来传导光信号。光纤由纤芯和包层组成,由于纤芯的折射率大于包层的折射率,故光波在界面上形成全反射,使光只能在纤芯中传播,实现通信
工程中使用最多的分法是按光纤横截面上折射率来分,有单模光纤和多模光纤。单模光纤纤芯直径较小,采用激光作为光源,传输的方向是沿光纤直径方向,因此单模光纤数据传输速率较快,传输距离较远,价格相对较贵;多模光纤纤芯直径较大,采用发光二极管作为光源,传输的方向是全反射,因此多模光纤数据传输速率较慢,传输距离较近,价格相对较便宜
(4)无线网
无线网采用微波、红外线、无线电等传输,由于无线网络的连网方式灵活方便,是一种很有前途的组网方式
4、按服务方式分
按照网络的服务方式分类,可以将计算机网络分为客户机/服务器网和对等网两种
a、客户机/服务器(Client/Server)网
服务器是指专门提供服务的高性能计算机或专用设备,客户机是指用户计算机。这是客户机向服务器发出请求并获得服务的一种网络形式,多台客户机可以共享服务器提供的各种资源,这是最常用、最重要的一种网络类型,不仅适合于同类计算机联网,也适合于不同类型的计算机联网。这种网络安全性容易得到保证,计算机的权限、优先级易于控制,监控容易实现,网络管理能够规范化。网络性能在很大程度上取决于服务器的性能和客户机的数量。目前针对这类网络有很多优化性能的服务器,称为专用服务器
b、对等网(Peer-to-Peer)
对等网不要求专用服务器,每台客户机都可以与其他客户机对话,共享彼此的信息资源和硬件资源,组网的计算机一般类型相同。这种网络方式灵活方便,但是较难实现集中管理与监控,安全性也低,较适合于部门内部协同工作的小型网络
另外还有一些非正规的分类方法,如企业网、校园网,根据名称便可理解。从不同的角度对网络有不同的分类方法,每种网络名称都有特殊的含义。了解网络的分类方法和类型特征,是熟悉网络技术的重要基础之一
OSI
OSI和ISO容易混淆。ISO是国际标准化组织(International Standard Organization)。而OSI是ISO提出的关于计算机网络的一个开放式系统互连参考模型(Open System Interconnection/Reference Model)
要想让两台计算机进行通信,必须使它们采用相同的信息交换规则。我们把在计算机网络中用于规定信息的格式,以及如何发送和接收信息的一套规则称为网络协议(Network Protocol)或通信协议(Communication Protocol)
为了减少网络协议设计的复杂性,网络设计者并不是设计一个单一、巨大的协议来为所有形式的通信规定完整的细节,而是采用把通信问题划分为许多个小问题,然后为每个小问题设计一个单独的协议的方法,绝大多数网络采用分层设计方法。所谓分层设计方法,就是按照信息的流动过程将网络的整体功能分解为一个个的功能层,不同机器上的同等功能层之间采用相同的协议,同一机器上的相邻功能层之间通过接口进行信息传递
OSI模型是一个开放体系结构,它规定将网络分为7层,并规定每层的功能
物理层
物理层的主要功能是完成相邻结点之间原始比特流的传输,控制数据怎样被放置到通信介质上。物理层协议关心的典型问题是使用什么样的物理信号来表示数据“1”和“0”;一位持续的时间多长;数据传输是否可同时在两个方向上进行;最初的连接如何建立和完成,通信后连接如何终止;物理接口(插头和插座)有多少针以及各针的用处等。物理层的设计主要涉及物理层接口的机械、电气、功能和过程特性,以及物理层接连接的传输介质等问题,物理层的设计还涉及通信工程领域内的一些问题
1、中继器(Repeater)
中继器是连接网络线路的一种装置,常用于两个网络结点之间物理信号的双向转发工作。中继器是最简单的网络互联设备,主要完成物理层的功能,负责在两个结点的物理层上按位传递信息,完成信号的复制、调整和放大功能,以此来延长网络的长度。由于存在损耗,在线路上传输的信号功率会逐渐衰减,衰减到一定程度时将造成信号失真,因此会导致接收错误。中继器就是为解决这一问题而设计的,它完成物理线路的连接,对衰减的信号进行放大,保持与原数据相同
双绞线理论上的最大传输距离是100m,如果超过100m,由于信号的衰减,很难保证信息传输的正确性,可以使用中继器来延长传输的距离。中继器仅适用于以太网,可将两段或两段以上(使用多个中继器)的以太网互连起来
2、集线器(Hub)
集线器相当于多端口的中继器,也可以把信号整形、放大后发送到所有结点上。在环型网络中只存在一个物理信号传输通道,都是通过一条传输介质来传输的,这样就存在各结点争抢信道的矛盾,传输效率较低。引入集线器这一网络设备后,每一个工作站是用它自己专用的传输介质连接到集线器的,各结点间不再只有一个传输通道,各结点发回来的信号通过集线器集中,集线器再把信号整形、放大后发送到所有结点。这样至少在上行通道上不再出现碰撞现象。但基于集线器的网络仍然是一个共享介质的局域网,这里的“共享”其实就是集线器内部总线,所以当上行通道与下行通道同时发送数据时仍然会存在信号碰撞现象。当集线器在其内部端口检测到碰撞时,产生碰撞强化信号向集线器所连接的所有端口进行传送,这时所有数据都将不能发送成功
正因为集线器的这一不足之处,所以它不能单独应用于较大网络中(通常是与交换机等设备一起分担小部分的网络通信负荷),就像在大城市中心不能有单车道一样,因为网络越大,出现网络碰撞现象的机会就越大。也正因如此,集线器的数据传输效率是比较低的,因为它在同一时刻只能有一个方向的数据传输,也就是所谓的“半双工”方式。如果网络中要选用集线器作为单一的连接设备,那么网络的规模最好在10台以内,而且集线器带宽应为10/100Mb/s以上
集线器除了共享带宽这一不足之处外,还有另一个方面的不足必须要考虑,那就是它的广播工作方式。因为集线器属于OSI七层模型的物理层,基本上不具有“智能”的能力,更别说“学习”功能了。它也不具备交换机所具有的MAC地址表,所以它发送数据时都是没有针对性的,而是采用广播方式发送。也就是说,当它要向某结点发送数据时,不是直接把数据发送到目的结点,而是把数据包发送到与集线器相连的所有结点
这里引入两个概念:冲突域(CollisionDomain)和广播域(BroadcastDomain)。当两个比特在同一介质上同时传输时就会产生冲突。所谓冲突域就是指发送数据给一个单一目标所影响的范围;所谓广播域是指发送数据给一个不明确目标所影响的范围,集线器将把该广播包转发到除接收端口以外的所有端口,集线器上的所有设备属于同一个广播域
所有通过集线器(不管有多少个集线器)互连的网络中只有一个广播域、一个冲突域。这种广播式发送数据有两方面不足:一、用户数据包向所有结点发送,很可能带来数据通信的不安全因素,一些别有用心的人很容易就能截获他人的数据包:二、由于所有数据包都是向所有结点同时发送,可能造成网络拥塞现象,降低网络执行效率
数据链路层
数据链路层的主要功能是如何在不可靠的物理线路上进行数据的可靠传输。数据链路层完成的是网络中相邻结点之间可靠的数据通信。为了保证数据的可靠传输,发送方把用户数据封装成帧(Frame),并按顺序传送各帧。由于物理线路的不可靠,因此发送方发出的数据帧有可能在线路上出错或丢失,从而导致接收方不能正确接收到数据帧。为了保证能让接收方对接收到的数据进行正确性判断,发送方为每个数据分块计算出CRC(循环冗余检验),并把CRC添加到帧中,这样接收方就可以通过重新计算CRC来判断数据接收的正确性。一旦接收方发现接收到的数据有错,则发送方必须重传这一帧数据。然而,相同帧的多次传送也可能使接收方收到重复的帧。比如,接收方给发送方的“确认帧”被破坏后,发送方也会重传上一帧,此时接收方就可能接收到重复帧。数据链路层必须解决由于帧的损坏、丢失和重复所带来的问题
数据链路层要解决的另一个问题是防止高速发送方的数据把低速接收方“淹没”。因此,需要某种信息流量控制机制使发送方得知接收方当前还有多少缓存空间。为了控制的方便,流量控制常常和差错处理一同实现
在最普遍的以太网中,数据链路层通过MAC(Media Access Control,媒体访问控制)地址负责主机之间数据的可靠传输。数据链路层的设备必须能够识别出数据链路层的地址,即MAC地址。一个设备如果能识别MAC地址,该设备至少是数据链路层以上的设备。数据链路层的网络设备主要有网卡、网桥和交换机
1、网卡(NIC)
网卡(Network Interface Card,NIC)也叫网络适配器,是连接计算机与网络的硬件设备。网卡的主要工作原理是整理计算机上发往网线上的数据,并将数据分解为适当大小的数据帧之后向网络上发送出去。对于网卡而言,每块网卡都有一个唯一的网络结点地址, 它是网卡生产厂家在生产时烧入ROM(Read Only Memory,只读存储芯片)中的,叫做MAC地址,且保证绝对不会重复
网卡插在计算机或服务器扩展槽中,通过网络线(如双绞线、同轴电缆或光纤)与网络交换数据、共享资源。计算机对接收到的数据帧进行比较,如果数据帧中的目标MAC地址与本机网卡的MAC地址相同,或者目标MAC地址是广播MAC地址,即 “FFFFFFFFFFFF”,则计算机对数据帧进行处理;否则,计算机丢弃该数据帧
可以在DOS窗口中使用“ipconfig/all”命令査看计算机网卡的MAC地址,网卡的MAC地址用十六进制表示,占用48个比特,前24个比特表示厂商,后24个比特为设备编号
2、网桥(Bridge)
网桥工作在数据链路层,用于将两个LAN连接在一起并按MAC地址转发帧。物理层的集线器可以扩展网络的规模,但所有通过集线器相连的主机属于同一个冲突域,任何时刻只能有一台主机发送数据,如果有两台主机同时发送数据就会发生冲突,导致数据发送失败。当同一个冲突域中的主机数据量非常多时,数据发生冲突的可能性大大增加,此时可以使用网桥来分隔冲突域
网桥可以用来分隔冲突域,把一个冲突域分隔成两个冲突域,通过增加冲突域的数量,减小每个冲突域的大小,减少冲突发生的可能。连接两个网段的网桥能从一个网段向另一个网段传送完整而且正确的帧,不会传送干扰或有问题的帧
网桥主要用于互联以太网分段,传输需在两个不同分段间传输的信息,但是阻断局部分段内的信息,因此网桥减少了网络上的通信总量
因为网桥能检査出一些故障,所以比中继器使用更广泛。两个通过中继器相连的网段,如果由于闪电而导致其中一个网段上有电干扰,中继器会把它传送到另一个网段。相反,如果干扰发生在通过网桥连接的网段中,网桥接收到一个不正确的帧,丢弃该帧。类似地,网桥不会把从一个网段传送来的冲突信号传送到另一个网段。因此,网桥会把故障控制在一个网段中而不会影响到另一个网段
网桥比中继器和集线器对数据包做更多的处理,延时也相对增加,一个双端口的网桥包括两个冲突域和一个广播域
3、交换机(Switch)
与网桥的工作过程类似,交换机也根据源MAC学习,根据目的MAC进行转发,按每一个数据帧中的MAC地址决策信息转发地址表
交换机转发方式分为3种情况:情况一、交换机对己知的单播帧,只往对应的端口转发;情况二、交换机对未知的单播帧,即交换机还没有学到数据帧中的目的MAC地址,交换机泛洪数据包,即发往除接收端口以外的所有端口;情况三、交换机对组播帧和广播帧进行泛洪转发,即发往除接收端口以外的所有端口
类似网桥,交换机提供了网络互联功能。交换机的每个端口都是一个独立的冲突域, 可以为每个工作站提供更高的带宽。因为交换机可以使用现有的电缆、中继器、集线器和工作站的网卡,不必做高层的硬件升级;交换机对工作站是透明的,这样管理开销低廉,简化了网络结点的增加、移动和网络变化的操作;并且交换机的价格与集线器所差无几,所以在当今的网络中,交换机被普遍使用
可以简单地把交换机看成是多端口的网桥,但二者有一些区别。网桥一般只有2个端口,而一般交换机最少也有4个端口,还有24端口、48端口,甚至更多口的交换;网桥采用软件进行转发,而交换机采用专门设计的集成电路,基于硬件进行数据转发,交换机以线路速率在所有的端口并行转发信息,提供了比传统网桥高得多的操作性能,操作接近单个局域网性能,远远超过普通网桥互联网络之间的转发性能;而且,交换机的端口造价远低于网桥
网络层
网络层(Network)的主要功能是完成网络中主机间的报文传输。在广域网中,这包括产生从源端到目的端的路由,根据采用的路由协议,选择最优的路径
网络层涉及的协议有IP、IPX等,网络层的设备必须能识别出网络层的地址,比如路由器、三层交换机等都可以根据IP地址做路径选择,它们都属于网络层设备
路由器是一种连接多个网络或网段的网络层设备,它能将不同网络或网段之间的数据信息进行“翻译”,以使它们能够相互“读懂”对方的数据,从而构成一个更大的网络。它不是应用于同一网段的设备,而是应用于不同网段或不同网络之间的设备。路由器之所以能在不同网络之间起到“翻译”的作用,是因为它不再是一个纯硬件设备,而是支持相当丰富路由协议的软、硬结合的设备,支持的协议有RIP、OSPF、EIGRP等,这些路由协议就是用来实现连通不同网段或网络的
路由器有两大典型功能,即数据通道功能和控制功能。数据通道功能包括转发决定、背板转发,以及输出链路调度等,一般由特定的硬件来完成;控制功能一般用软件来实现,包括与相邻路由器之间的信息交换、系统配置、系统管理等
路由器具有判断网络地址和选择路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网。路由器属于网络层的一种互联设备,有隔离广播的作用,它的每个端口都是一个单独的广播域,也是一个单独的冲突域
在局域网接入广域网的众多方式中,通过路由器接入互联网是最为普遍的方式。使用路由器互联网络的最大优点是:各互联子网仍保持各自独立,每个子网可以采用不同的拓扑结构、传输介质和网络协议,网络结构层次分明。通过路由器与互联网相连,则可完全屏蔽公司内部网络。有些路由器内部还集成了入侵防御和防火墙功能,因此使用路由器可以用来防御攻击,保护内部网络的安全
传输层
传输层(Transport Layer)是整个网络的关键部分,实现两个用户进程间端到端(End-to-End)的可靠通信,处理数据包错误、数据包次序,以及其他一些关键传输问题。向下提供通信服务的最高层,弥补通信子网的差异和不足,向上是用户功能的最低层。与数据链路层有相似之处,不同的地方在于前者是端到端的,后者是点到点的,而且比数据链路层协议复杂得多
传输层的主要功能有:提供建立、维护和拆除传输层连接,向网络层提供合适的服务,提供端到端的错误恢复和流量控制,向会话层提供独立于网络层的传送服务和可靠的透明数据传输
传输层相关的协议有TCP (Transmission Control Protocol,传输控制协议)、UDP (User Datagram Protocol,用户数据报协议),它们涉及服务使用的端口号,主机根据端口号识别服务(常用的WWW服务端口号是80, Telnet服务端口号是23等),区分会话(源IP、源端口号、目标IP、目标端口号,四者共同唯一标识一个会话)
会话层
会话层(Session Layer)允许不同机器上的用户之间建立会话关系,会话层提供的服务之一是管理对话控制。会话层允许信息同时双向传输,或任一时刻只能单向传输。如果属于后者,类似于物理信道上的半双工模式,会话层将记录此时该轮到哪一方。一种与对话控制有关的服务是令牌管理,有些协议保证双方不能同时进行同样的操作,这一点很重要。为了管理这些活动,会话层提供了令牌,令牌可以在会话双方之间移动,只有持有令牌的一方可以执行某种关键性操作
另一种会话层服务是同步,如果在平均每小时出现一次大故障的网络上,两台机器间要进行一次两小时的文件传输,想想会出现什么样的问题?每一次传输中途失败后,都不得不重新传送这个文件。当网络再次出现大故障时,可能又会半途而废。为了解决这个问题,会话层提供了一种方法,即在数据中插入同步点。每次网络出现故障后,仅仅重传最后一个同步点以后的数据
表示层
表示层(Presentation Layer)完成某些特定的功能,对这些功能人们常常希望找到普遍的解决办法,而不必由每个用户自己来实现。值得一提的是,表示层以下各层只关心从源主机到目标主机可靠地传送比特,而表示层关心的是所传送的信息的语法和语义
表示层服务的一个典型例子是用一种大家一致选定的标准方法对数据进行编码
网络上计算机可能采用不同的数据表示,所以需要在数据传输时进行数据格式的转换。例如在不同的机器上常用不同的代码来表示字符串(ASCII和EBCDIC)、整型数(二进制反码或补码),以及机器字的不同字节顺序等。为了让采用不同数据表示法的计算机之间能够相互通信并交换数据,在通信过程中使用抽象的数据结构来表示传送的数据,而在机器内部仍然采用各自的标准编码。管理这些抽象数据结构,并在发送方将机器的内部编码转换为适合网上传输的传送语法,以及在接收方做相反的转换等,都是由表示层来完成的
此外,表示层还涉及数据压缩和解压、数据加密和解密等工作
应用层
联网的目的在于支持运行于不同计算机上的进程进行通信,而这些进程则是为用户完成不同任务而设计的。可能的应用是多方面的,不受网络结构的限制。应用层(Application Layer)包含大量人们普遍需要的协议,如HTTP(Hyper text Transfer Protocol,超文本传输协议),该应用默认使用的是TCP的80端口;FTP(File Transfer Protocol, 文件传输协议),多用于因特网上的文件传输,该应用管理端口默认使用的是TCP的21号端口;SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用于邮件的发送,该应用默认使用的是TCP的25号端口;POP3(Post Office Protocol Version 3,邮局协议版本3),用于邮件的接收,该应用默认使用的是TCP的110号端口;DNS(Domain Name System,域名系统),用于因特网上域名的解析;Telnet(远程登录)是一种字符模式的终端服务,它可以使用户通过网络进入远程主机或网络设备,然后对远程主机或网络设备进行操作,这种连通可以发生在局域网里面,也可以通过互联网进行,该应用默认使用的是TCP的23号端口
对于需要通信的不同应用来说,应用层的协议都是必需的。比如,当某个用户想要获得远程计算机上的一个文件拷贝时,他要向本机的文件传输软件发出请求,这个软件与远程计算机上的文件传输进程通过文件传输协议进行通信,这个协议主要处理文件名、用户许可状态和其他请求细节的通信。远程计算机上的文件传输进程使用其他特征来传输文件内容
TCP/IP
TCP/IP是目前最成功、使用最频繁的互联网协议。TCP/IP参考模型是四层结构,分别是网络访问层(NetworkAccess),包括OSI模型的物理层和数据链路层,在这一层可以看到数据帧的源和目的MAC地址;网际层(Internet),相当于OSI模型中的网络层,在这一层可以看到数据包的源和目的IP地址;传输层(Transport),和OSI模型中的传输层一致,在这一层可以看到数据分段源和目的的端口,以及所使用的协议;应用层(Application),包括OSI模型的上三层,即会话层、表示层和应用层
ISO/OSI参考模型是在其协议被开发之前设计出来的。这意味着ISO/OSI模型并不是基于某个特定的协议集而设计的,因而它更具有通用性。但另一方面,也意味着ISO/OSI模型在协议实现方面存在某些不足。而TCP/IP模型正好相反。先有协议,模型只是现有协议的描述,因而协议与模型非常吻合。问题在于TCP/IP模型不适合其他协议栈。因此,它在描述其他非TCP/IP网络时用处不大
网络访问层
网络访问层(Network Access)的功能包括IP地址与物理硬件地址的映射,以及将IP分组封装成帧。基于不同硬件类型的网络接口,网络访问层定义了和物理介质的连接。网络访问层包含了数据链路层的地址,如用在以太网上就是MAC地址。此层是TCP/IP模型的最底层,负责接收从IP层传来的IP数据报,并将IP数据报通过低层物理网络发送出去,或者从低层物理网络上接收物理帧,解封装出IP数据报,交给IP层处理
网际层
网际层(Internet)的主要功能包括三个方面:1、处理来自传输层的分组发送请求:将分组装入IP数据报,填充报头,选择去往目的结点的路径,然后将数据报发往适当的网络接口;2、处理输入数据报:首先检查数据报的合法性,然后进行路由选择,假如该数据报己到达目的结点(本机),则去掉报头,将IP报文的数据部分交给相应的传输层协议;假如该数据报尚未到达目的结点,则转发该数据报;3、处理ICMP(Internet Control Message Protocol,网际控制信息协议)报文: 即处理网络的路由选择、流量控制和拥塞控制等问题
TCP/IP网络模型的网际层在功能上非常类似于ISO/OSI参考模型中的网络层。网际层上的协议包括IP协议、ICMP协议、Proxy协议、ARP协议、RARP协议、BOOTP协议和DHCP协议
1、IP协议
IP的责任就是把数据从源传送到目的地。它不负责保证传送可靠性、流控制、包顺序和其他对于主机到主机协议来说很普通的服务。IP实现两个基本功能:寻址和分段。IP可以根据数据报报头包括的目的地址将数据报传送到目的地址,在此过程中IP负责选择传送的路线,这种选择路线功能称为路由功能。如果有些网络内只能传送小数据报,IP可以将数据报重新组装并在报头域内注明
构成IP报头的字段如下图所示
括号中的数值表示该字段所占用的比特数。其中,优先级和服务类型字段一般用于QoS(Quality of Service,服务质量);存活期(Time To Live, TTL)是数据报可以生存的时间上限,它由发送者设置,每经过一次路由,TTL至少减1,如果未到达目的地时,生存时间减为零,则抛弃此数据报;源和目的IP地址用于表示数据从哪来,到哪去
IP不提供可靠的传输服务,它不提供端到端的或结点到结点的确认,对数据没有差错控制,它只使用报头的校验码,不提供重发和流量控制。如果出错可以通过ICMP报告,ICMP在IP模块中实现
2、ICMP
ICMP(Internet Control Message Protocol, Internet 控制消息协议)是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用
在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的。在基于IP数据报的网络体系中,IP协议自身没有内在机制来获取差错信息并处理。为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文
经常使用的用于检査网络通不通的Ping命令,这个“Ping”的过程实际上就是ICMP协议工作的过程。发送主机首先发送一个ICMP Echo Request的包,包含64字节数据,它被发送后,接收方会返回一个ICMP Echo Reply的包,返回的数据中包含了接收到的数据的拷贝。还有其他网络命令,如跟踪路由的Tracert命令也基于ICMP协议
ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文,IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面
RFC定义了13种ICMP报文格式
[注意]代码为15、16的信息报文已经作废
下面是几种常见的ICMP报文
a、响应请求。我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个结点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的结点来确定主机与目标之间的网络距离
b、目标不可到达、源抑制和超时报文。这三种报文的格式是一样的,目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它提示的意思就是目标不可到达。常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。最后,无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时
c、时间戳。时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差
3、ARP
ARP(Address Resolution Protocol,地址解析协议)负责将某个IP地址解析成对应的MAC地址。在局域网中,网络中实际传输的是 “帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的,所谓“地址解析”就是主机在发送帧前根据目标IP地址得出目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行
如果源主机在本地缓存中找到目标主机对应的MAC地址,则源主机用此MAC地址封装帧,并发送出去;如果没有找到,则源主机发送一个ARP的查询包(ARP Request)。ARP查询包中的源IP地址是源主机的IP地址,目标IP地址是目标主机的IP地址,源MAC地址是源主机的MAC地址,ARP査询包中的目的MAC地址是广播MAC地址FF-FF-FF-FF-FF-FF。源主机封装完成后,把ARP查询包以广播的形式发送出去,广播域内的所有主机均收到此广播包,如果目标IP地址不是本机IP,则放弃继续处理该数据包,并在本地缓存增加或更新源主机对应的MAC地址。如果目标IP地址与本机相同,也在本地缓存中增加或更新源主机对应的MAC地址,然后发回ARP应答包(ARP Reply)
因此,ARP请求包是广播包,而ARP应答包是单播包
使用“arp -a”命令可以查看本机的ARP缓存表;使用“arp -d”命令删除本机的ARP缓存,使用“arp -s”命令把IP地址和MAC地址进行绑定
4、ProxyARP
前面介绍的ARP协议可以帮助主机或路由器获知局域网上某个IP地址对应的MAC地址,可却无法获知一台远程主机对应的IP地址,因为ARP査询包是广播包,路由器有隔离广播的作用,致使ARP查询包无法穿越路由器而到达远端的目的主机。局域网内的主机可以配置默认网关来访问远端主机,可主机不允许配置多个默认网关。如果某个默认网关(一般是路由器)因故障停机,即使该局域网还有另一台出口路由器,主机也不会向其他的路由器发送数据,此时需要重新配置主机的网关。而代理ARP则可以在这种情况下自动帮助那些在某个子网中的主机,在不重新配置路由甚至默认网关的情况下,发送数据到远端主机
使用ProxyARP(代理 ARP)可以在网络中单独增加一台路由器,而不会影响其他路由器的路由表。但是使用代理ARP也带来严重不足:使用代理ARP将会明显增加网络分段中的传输业务量,并且网络中的主机也将会保持比正常时大许多的ARP表,并以此来处理全部的IP到MAC的地址映射
5、RARP
前面介绍的ARP是己知其他计算机的IP地址,查询其他计算机的MAC地址。而RARP(Reverse Address Resolution Protocol,反向地址转换协议) 是己知本机的MAC地址,询问本机的IP地址。典型用在无盘工作站上,当一台无盘工作站启动时,它没有办法在其初始化时了解自己的IP地址,但是,它可以知道自己的MAC地址。无盘工作站可以通过发送RARP的包来询问与此MAC地址相对应的IP地址,网络上会指定一个被称为RARP服务器的计算机来响应这个请求,这样无盘工作站就会得到自己的IP地址
RARP是早期提供的通过硬件地址获取IP的解决方案,但它有自身的局限性。比如,RARP客户与RARP服务器不在同段,中间有路由器等设备连接,这时候利用RARP就显得无能为力,因为RARP请求报文不能通过路由器。BOOTP(BootstrapProtocol,引导协议)提供了很好的解决方法,同样,在今天的大中型网络中,DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)协议也是常用协议之一
6、BOOTP
BOOTP(BootstrapProtocol,引导协议)也是一种客户/服务器的协议,可以为无盘操作系统或配置成动态获取的计算机提供IP地址、子网掩码、网关(路由器地址),以及DNS信息。实现过程分两种情况:1、这与RARP工作环境一样,即客户与服务器在同一网段,BOOTP服务器被动打开UDP端口67,客户端通过UDP端口68发送请求,因为客户端不知道自己的IP地址,也不知道服务器的IP地址,客户机使用全0的源地址与全1的目标地址,服务器通过单播或广播方式响应;2、客户与服务器在不同网段,实现的方法是,每个网段中设置一个中继代理,中继代理知道服务器的地址,其收到目标端端口为67的广播报文,就将该报文封装成单播数据报,然后发送给BOOTP服务器,服务器知道该报文来自于中继代理,因为在中继代理发送的报文中有其IP地址,中继代理收到BOOTP服务器的回应后,把它发送给BOOTP请求客户
7、DHCP
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)与BOOTP协议差不多,但DHCP功能更强,不仅可以通过租期方便地实现动态分配,而且还可以提供除IP地址、子网掩码、网关及DNS以外的几十个网络参数
[注意]ARP、ProxyARP和RARP也属于网络访问层,可以说ARP协议跨越OSI七层模型的二层和三层。正因为如此,一些处在网络层的防火墙对低层的ARP攻击显得无能为力
传输层
在TCP/IP网络中,IP采用无连接的数据报机制,对数据进行“尽力而为的传递”,即只管将报文尽力传送到目的主机,无论传输正确与否,不做验证,不发确认,也不保证报文的顺序。TCP/IP的可靠性体现在传输层,传输层协议之一的TCP协议提供面向连接的服务(传输层的另一个协议UDP是无连接的)。传输层的主要功能是可靠而又准确地传输并控制源主机与目的主机之间的信息流,提供端到端的控制,通过滑动窗口机制提供流控制,通过序列号和确认机制来保证可靠性。TCP传输控制协议发送数据分段时,可以保证数据的完整性。流控制可以避免发送数据的主机使接收主机的缓存溢出的问题,缓存溢出会导致数据的丢失。可靠的传输可以通过下列方法实现:1、接收方对收到的数据分段向发送方进行确认;2、发送方向接收方重传所有未被确认的数据分段;3、在目的端将数据分段按正确的顺序重组,并删除重复的数据分段;4、提供避免和控制拥塞的机制
1、TCP
TCP (Transmission Control Protocol,传输控制协议)是一种面向连接的传输层协议,能提供可靠的数据传输。在面向连接的环境中,开始传输数据之前,端点之间先要建立连接。TCP负责将消息拆分成数据分段,重传丢失的数据分段井将数据分段在目的主机重组成消息
了解TCP报头中的源端口、目的端口、序列号、确认号和窗口,有助于理解TCP传输的可靠性和TCP的滑动窗口机制
TCP/IP协议组常用的协议如图所示,其中使用TCP的应用层协议有FTP、HTTP、SMTP、POP3、Telnet和DNS等,使用UDP的协议有DNS和TFTP等
2、UDP
UDP(User Datagram Protocol,用户数据报协议)是TCP/IP协议栈中无连接的传输协议,它是一种简单协议,它交换数据报而没有确认机制或传输保证,错误处理和重传机制必须由上层协议来完成。从TCP和UDP的数据分段格式中可以看出,UDP的简单性非常明显。UDP协议主要面向请求/应答式的交易型应用,一次交易往往只有一来一回两次报文交换,假如为此而建立连接和撤销连接,开销是相当大的,这种情况下使用UDP就非常有效。另外,UDP协议也应用于那些对可靠性要求不高,但要求网络的延迟较小的场合,如话音和视频数据的传送
组播一般使用的都是UDP协议,很多广播教学软件使用的就是组播地址和UDP协议,教师机只需要发送一份数据到组播地址,所有的学生机加入这个组播地址,接收教师机的广播教学,学生机的多少对教师机的性能影响不大
3、三次握手
TCP协议是面向连接的,所以它在开始传输数据之前需要先建立连接。要建立或初始化一个连接,两端主机必须同步双方的初始序号。同步是通过交换连接建立数据分段和初始序号来完成的,在连接建立数据分段中包含一个SYN(同步)的控制位。同步需要双方都发送自己的初始序号,并且发送确认的ACK。此过程就是三次握手
第一次握手:主机A发往主机B,主机A的初始序号是X,设置SYN位,未设置ACK位
第二次握手:主机B发往主机A,主机B的初始序号是Y,确认号(ACK)是X+1,X+1确认号暗示己经收到主机A发往主机B的同步序号。设置SYN位和ACK位
第三次握手:主机A发往主机B,主机A的序号是X+1,确认号是Y+1,Y+1确认号暗示已经收到主机B发往主机A的同步序号。设置ACK位,未设置SYN位
三次握手解决的不仅仅有序号问题,还解决了包括窗口大小、MTU(Maximum Transmission Unit,最大传输单元),以及所期望的网络延时等其他问题
4、滑动窗口
在大多数可靠、面向连接的数据传输中,数据分组必须以与发送时相同的顺序传输到接收端。任何数据分组丢失、损坏、重复或接收时乱序都将导致协议出错。最基本的解决方法是让接收方在接收到每一个数据分段后都确认
如果发送方在发送每一个数据分段后都要等候确认,吞吐量是很低的, 因此大多数面向连接、可靠的协议都允许一次发送多个数据分段。因为发送方在发送完数据分组之后和处理完接收到的确认之前是有一段时间间隔的,这段间隔可以用来传输更多的数据。在没有收到确认的情况下,窗口是允许发送方发送数据分组的个数的
TCP使用期待确认,即确认号就是所期待接收的下一个字节。滑动窗口是指在TCP会话中窗口大小是动态协商的。滑动窗口是一种流控机制,允许源设备在向目的设备发送一定数量的数据之后接收一个确认
假设窗口大小为3,源设备可以发送3个字节到目的设备,然后需要等待一个确认。目的设备接收到这3个字节之后,向源设备返回一个确认,这时候源设备就可以继续传输下面3个字节了。如果目的设备没有收到这3个字节,它就不会返回确认,源设备没有接收到确认,它就知道这些字节需要重传
5、确认机制
TCP在传输前,需要对每个数据分段进行编号。接收端主机将数据分段重组成完整信息,TCP必须恢复由Internet通信系统导致的数据损坏、丢失、重复或乱序。TCP通过为传输的每个字节指定序号,并且要求接收端TCP的主动确认(ACK)来实现
如上图所示,1、源主机A远程登录目的主机B,源主机使用一个本地的随机端口1058,访问目的主机的23号服务端口。源主机初始序号是100,没有确认号;2、主机B收到主机A的数据包进行响应,返回的数据包源端口是23,目的端口是1058,主机B返回的包中的端口号和主机A发过来的端口号中的源和目的端口刚好相反。主机B的初始序号是1,确认号101表示已经收到主机A的序号100,希望接收序号101的包;3、主机A对主机B发过来的包进行响应,发送的序号是101,确认号2表示已经收到主机B的序号1
应用层
应用层包括所有的高层协议,与OSI的应用层协议相差不大,包括HTTP(超文本传输协议,使用TCP的端口80)、Telnet(远程登录协议,使用TCP的端口23)、FTP(文件传输协议,使用TCP的端口21和一个不确定的数据传输端口)、SMTP(简单邮件传输协议,使用TCP的端口25)、POP3(邮局3协议,使用TCP的端口110)、DNS(域名服务,使用UDP和TCP的端口53)等