批处理
在起初,计算机的主要用途是自动完成写复杂的计算,用户事先将数据和用户程序(也可以理解为计算方式)装入卡带或磁盘,计算机安装一定方式读取、执行,自动完成计算任务。现如今我们计算机也有很多批处理功能,例如点个按钮自动打开一个软件等,时代在发展,批处理系统已被放入博物馆,但留下的这个概念依旧沿用
分时系统
继批处理系统之后,20世纪60年代出现了分时系统TSS。它是指多个终端与同一个计算机连接、允许多个用户同时使用一台计算机的系统。当时计算机造价非常昂贵,一人一台专有计算机的费用对一般人来说可望不可即。分时系统的一个重要特性是独占性
重要的发展是出现了交互式操作(指计算机依据用户给出的指令完成处理并将结果返回给用户),在此之前是没有的
分时系统还促进了像BASIC这样能够与计算机实现交互的编程语言的发展。而在此之前的COBOL和FORTRAN等计算机编程语言都必须以批处理系统为基础才能开发和运行。其实BASIC语言的发明是为了让更多的人学习如何编程,因此也可以说它是关注分时系统的初学者们必学的一门开发语言
由于分时系统的独占性、使得装备一套用户可直接操作的计算机环境变得比以前简单。分时系统中每个终端与计算机之间使用通信线路连接形成一个星形结构。正是从这一时期开始、网络(通信)与计算机之间的关系逐渐浮出水面,小型机也随即产生,办公场所与工厂也逐渐引人计算机
计算机之间的通讯
这时候计算机实现了从单独模式到网络互连模式的发展,从此计算机的发展又进入了一个崭新的历史阶段,而促成这一发展原因是为了实现信息共享,提升工作效率的需求,更重要的是这时候是七十年代,计算机相关硬件技术有了飞速发展,计算机日益向小型化、低价格、高集成方向发展
计算机网络的产生
20世纪70年代初期,人们开始实验基于分组交换技术的计算机网络,并着手研究不同厂商的计算机之间相互通信的技术。到了80年代,一种能够互连多种计算机的网络随之诞生。它能够让各式各样的计算机相互连接,从大型的超级计算机或主机到小型的个人电脑
计算机使用模式的演变:
TCP/IP是通信协议的统称,协议就是计算机与计算机之间通过网络实现通信时事先达成的一种约定
这种约定使那些由不同厂商的设备、不同的CPU以及不同的掉作系统组成的计算机之间、只要遵循相同的协议就能够实现通信。反之,如果所使用的协议不同、就无法实现通信。这就好比两个人使用不同国家的语言说话怎么也无法相互理解。
协议可以分为很多种,每一种协议都明确地界定了它的行为规范。两台计算机之间必须能够支持相同的协议,并遵循相同协议进行处理这样才能实现相互通信
IOS是国际标准组织,全称是International Organization for Standards。他们制定了一个国际标准叫OSI开放式通讯系统互联参考模型,全称是Open Systems InterConnecton
在这一模型中,每个分层都接收由它下一层所提供的特定服务,并且负责为自己的上一层提供特定的服务。
- 上下层之间进行交互时所遵循的约定叫做接口
- 两个设备同一层之间的交互所遵循的约定叫做协议
分层的劣势,可能就在于过分额模块化,使处理变得更加沉重以及每个模块都不得不实现相似的处理逻辑等问题
应用层
为应用程序提供服务并规定应用程序中通信相关的细节。包括文件传输、电子邮件、远程登录(虚拟终端)等协议
表示层
将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。因此它主要负责数据格式的转换 就是将设备固有的数据格式转换为网络标准传输格式。不同设备对同一比特流解释的结果可能会不同。使它们保持一致是这一层的主要作用
会话层
负责建立和断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理,本层也会对表示层过来的数据进行一步封装
传输层
负责数据传输的可靠性,只在通信双方节点上进行处理,而无需在路由器上处理
网络层
将数据传输到目标地址,目标地址可以是多个网络通过路由器连接而成的某个地址,这一层主要负责寻址和路由选择
数据链路层
负责物理层面上互连、节点之间的通信传输,将01序列划分为具有意义的数据帧传送给对端(数据帧的生成和接收)
物理层
负责01比特流与电压的高低、光的闪灭之间的互换
网络通信方式大致分为电路交换和分组交换两种
电路交换
交换机负责数据中转处理,计算机首先被连接到交换机上,交换机与交换机之间由众多通信线路再继续连接
因此计算机之间在发送数据时,需要通过交换机与目标主机建立通信电路。我们将连接电路称为建立连接。建立好连接以后,用户就可以一直使用这条电路,直到该连接被断开为止
缺点就是资源利用率低,因为具有独占性,而在同一链路的其他设备是无法知晓该条线路何时空闲,何时忙碌,即便知道了,是否会与其他设备出现竞争关系
分组交换
让连接到通信电路的计算机将要发送的数据分成多个数据包,按照一定的顺序排列之后分别发送
数据被细分后,所有的计算机就可以一齐收发数据,这样也就提高了通信线路的利用率。由于在分组的过程中,已经在每个分组的首部写入了发送端和接收端的地址,所以即使同一条线路同时为多个用户提供服务、也可以明确区分每个分组数据发往的目的地,以及它是与哪台计算机进行的通信
在分组交换中,由分组交换机(路由器)连接通信线路
分组交换的大致过程:发送端计算机将数据分组发送给路由器、,由器收到这些分组数据以后,缓存到自己的缓冲区,然后再转发给目标计算机
因此分组交换也有另一个名称:蓄积交换
分组交换的实现,有两个问题需要解决,一是如果设备同时发起传输如何保证不丢包,二是是否会造成延迟太大
第一个问题解决方案就是在路由器里面有个存储空间,可以存储一定数量的数据包,如果存满了,那就是不让计算机成功发送出去,类似我们平时会出现看视频卡顿,消息发送转圈转老半天的情况
第二个问题就是分组,例如看视频,每一帧都有很大的数据量,我们完全可以将其分为一小包一小包的发,而连接到路由器上的设备,如果不做特殊处理,它们优先级是一样的,因此总可以插入一包,所以会占用带宽
地址
每一层协议所使用的地址是不同的,一个地址必须明确的表示一个主体对象,地址是唯一性的,MAC地址和IP地址在标识一个通信主体时只具有唯一性,IP地址具有层次性,层次性是为了更快速的定位到某一个地址,因此IP地址由网络号和主机号组成
Communication media and data links
在数据传输的过程中,两个设备之间数据流动的物理速度称为传输速率,单位为bps每秒比特数(Bits Per Second)
传输速率高不是指单位数据流动的速度有多快,而是指单位时间内传输的数据量有多少
主机之间实际的传输速率被称作吞吐量。其单位与带宽相同都是bps(Bis PerSecond)。吞吐量这个词不仅衡量带宽,同时也衡量主机的CPU处理能力、网络的拥堵程度、报文中数据字段的占有份额(不含报文首部,只计算数据字段本身)等信息
Network Interface Card
网络接口卡NIC也叫网络适配器,想要接入以太网必须有NIC,无线局域网下计算机也必须具备能够接入无线网的NIC才能连接网络
Repeater
中继器是物理层面上延长网络的设备,由电缆传过来的电信号或光信号经由中继器的波形调整和放大再传给另一个电缆,
- 中继器不负责判断数据是否有误
- 中继器不能连接传输速度不同的媒介
- 网络延长距离也不能无限扩大,一个100Mbps的以太网最多连接两个中继器
有些中继器可以提供多个端口服务。这种中继器被称作中继集线器或集线器,集线器也可以看作是多口中继器,每个端口都可以成为一个中继器
网桥/2层交换机
数据链路层面上连接两个网络的设备,能够识别数据链路层中的数据帧,并将这些数据帧临时存储于内存,再重新生成信号作为一个全新的帧转发给相连的另一个网段
-
网桥会通过数据帧中的一个数据位FCS用于校验数据是否正确送达目的地,网桥通过检查这个域中的值,将那些损坏的数据丢弃
-
网桥能通过地址自学机制和过滤功能控制网络流量(网络上传输的数据报文数量)
-
网桥没有连接网段个数的限制
-
网桥基本只用于连接相同类型的网络,但有时也可以连接传输速率不同的网络
-
以太网等网络中经常使用的交换集线器Hub现在基本也属于网桥的一种,交换集线器中连接电缆的每个端口都能提供类似网桥的功能
路由器/3层交换机
网络层面上连接两个网络、并根据路由选择转发分组报文的设备
网桥是根据MAC地址进行处理,而路由器则是根据IP地址进行处理的。由此,TCP/IP中网络层的地址就成为了IP地址
- 路由器可以连接不同的数据链路
- 路由器还有分担网络负荷的作用,有些路由器还具备一定的网络安全功能
- 路由器会分割数据链路,因此数据链路层的广播无法继续传播
4~7层交换机
负责处理OSI模型中从传输层至应用层的数据,如果用TCP/IP分层模型来表述,4~7层交换机就是以TCP等协议的传输层及其上面的应用层为基础分析收发数据、并对其进行特定的处理
为了能通过同一个URL将前端访问分发到后台多个服务器上,可以在这些服务器的前端加一个负载均衡器。这种负载均衡器就是4~7层交换机的一种
优先处理像语音这类对及时性要求较高的通信请求,这种处理叫带宽控制,也是4~7层交换机的重要作用
网关
是OSI参考模型中负责将从传输层到应用层的数据进行转换和转发的设备
网关不仅转发散据还负责对数据进行转换,它通常会使用一个表示层或应用层网关,在两个不能进行直接通信的协议之间进行翻译,最终实现两者之间的通信
- 网关负责读取不同协议后对它们逐一进行合理转换,再将相应数据转发出去
- 在同一种类型的协议之间转发数据的叫应用网关,比如代理服务器,有了代理服务器,客户端与服务器之间无需在网络层上直接通信,而是从传输层到应用层对数据和访问进行各种控制和处理。防火墙就是通过网关通信,针对不同应用提高安全性的产品
各种设备及其对应网络分层概览
TCP/IP的发展
为个人、公司和教育机构等提供互联网接入服务的供应商叫ISP(internet service provider)
TCP/IP的标准化
20世纪90年代,ISO开展了OSI这一国际标准协议的标准化进程。然而OSI协议并没有得到普及、真正被广泛使用的是TCP/IP协议 究其原因,是由TCP/P的标准化所致。TCP/IP的标准化中有其他协议的标准化没有的要求。这一点就是让TCP/IP更迅速地实现和普及的原动力
TCP/IP不是指TCP、IP两种协议,而是包括这两种协议在内的一堆协议,也叫做网际协议族,具有开放性和注重实用性两大特点
Internet就是表示终端通过网络连接的一种拓扑结构,TCP/IP就是让这个拓扑结构能通讯的协议
- 互联网的每个网络都是由backbone骨干网和stub末端网组成
- 每个网络之间通过network operation center网络操作中心NOC组成
- 连接方式和使用方式不同的异构网络连接需要Internet exchange网络交换中心IX的支持
- Internet就是众多异构网络通过IX互连的一个巨型网络
OSI参考模型注重通信协议必要的功能是什么,而TCP/IP则更强调在计算机上实现协议应该开发哪种程序
-
物理层主要负责数据传输,没有任何协议上的要求
-
网卡层(数据链路层)
- 与上一层进行数据交换,添加MAC地址,适应硬件的数据传输方式
-
互联网层(网络层)
- 网络层是基于IP地址的数据转发分包
- IP协议的作用就是将分组数据发送到目的主机,IP是分组交换的一种协议,但没有重发机制,属于非可靠性传输协议
- IP数据包在发送途中一旦发生异常导致无法到达对端目标地址时,需要给发送端发送一个发生异常的通知。ICMP就是为这一功能而制定的,它有时也被用来诊断网络的健康状况
- ARP是从分组数据包的IP地址解析出MAC地址的一种协议
-
传输层
- 最主要的功能是让应用程序之间实现通信
- TCP是面向有连接的传输层协议,可以保证两端通信主机之间的通信可达,能正确处理在传输过程中丢包、传输顺序乱掉等异常情况,还能够有效利用带宽、缓解网络拥堵
- 但建立与断开连接都需要至少7次的发包收包,,且为了提高网络利用率定义了各种复杂的规范,交换方式效率不高,实现大吞吐量数据传输难,安全性高
- UDP是面向无连接的传输层协议,不会关注对端是否收到数据,如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,需要在应用程序中实现
-
应用层
不同的应用有着各自的协议解析方式
-
浏览器与服务端之间通信所用的协议是 HTTP(HyperText Transfer Protocol)
所传输数据的主要格式是HTML(HyperText Markup Ianguage)
WWW中的HTTP属于OSI应用层的协议,而HTML属于表示层的协议
-
发送电子邮件的协议为SMTP(SImple Mail Tranfer Protocol),经MIME扩展后,就不止能发送文本格式了,该协议属于表示层
-
文件传输协议FTP(File Transfer Protocol)
传输过程中可以选择用二进制方式还是文本方式 在FTP中进行文件传输时会建立两个TCP连接,分别是发出传输请求时所要用到的控制连接与实际传输教据时所要用到的数据连接
-
TCP/IP网络远程登录常用TELNET(TELetypewriter NET work)和SSH(Secure SHell),还有许多可实现远程登录的协议
-
网络管理SNMP(Simple' Network Management Protocol)
使用SNMP管理的主机、网桥、路由器等称作SNMP代理Agent 而进行管理的那一段叫做管理器Manager。SNMP正是这个Manager与Agent所要用到的协议
-
每个分层中都会对所发送的数据附加一个首部,这个首部中包含该层必要的信息,为协议提供的信息为包首部,所要发送的内容为数据,在下一层的角度看,从上一层收到的包全部都被认为是本层数据
- 包是全能性述语
- 帧是数据链路层中包的单位
- 数据包是IP和UDP等网络层以上的分层中包的单位
- 段是TCP数据流中的信息
- 消息是应用协议中数据的单位
数据链路指OSI参考模型中的数据链路层、有时也指以太网、无线局域网等通信手段,数据链路的知识对于深入理解TCP/IP与网络起着至关重要的作用
数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范,而通信媒介包括双绞线、同轴电缆、光纤、电波等;各设备之间有时也通过交换机、网桥、中继器等中转数据
数据链路的段指一个被分割的网络,如果引入中继器将两条网线相连组成一个网络
- 从网络层的概念看,它是一个网络,两条网线组成一个段
- 从物理层的概念看,它是两个物体,一条网线是一个段
网络的连接和构成的形态称为网络拓扑Topology,拓扑一词不仅用于直观可见的配线方式上,也用于逻辑上网络的组成结构。两者有时可能会不一致
数据链路层通过MAC地址寻址,MAC地址长48bit,一般用十六进制表示,在使用NIC的情况下,MAC地址一般会烧入ROM,任何一个网卡的MAC地址都是唯一的,每个物理设备都有一个独一无二的地址编码
即使MAC地址相同,只要不是同属一个数据链路就不会出问题
从通信介质的使用方法来看网络可分为共享介质型和非共享介质型
共享介质型网络指由多个设备共享一个通信介质的一种网络,有两种介质访问控制方式
-
争用方式,争夺获取数据传输的权力,也叫CSMA载波监听多路访问,就是先到先得的方式占用信道发送数据
但如果多个站同时发送帧,则会产生冲突现象,会导致网络拥堵与性能下降
使用CSMA/CD方式来改良,它要求每个站提前检查冲突,一旦发生冲突,则尽早释放信道
-
令牌传递方式,有令牌的站才能发送信号,特点是不会有冲突,每个站都有通过循环平等获得令牌的机会,即使网络拥堵也不会导致性能下降
但这样在网络不拥堵情况下数据链路的利用率达不到100%
非共享介质网络
指不共享介质,对介质采取专用的一种传输控制方式,网络中每个站直连交换机,由交换机负责转发数据帧,发送端和接收端不共享通信介质
以太网交换机就是持有多个端口(此处指计算机设备的外部接口)的网桥,它们根据数据链路层中每个帧的目标MAC地址决定从哪个网络接口发送数据,这时所参考的,用以记录发送接口的表就是转发表Forwarding Table
转发表的内容不需要使用者在每个终端或交换机上手工设置,而是可以自动生成。数据链路层的每个通过点在接到包时,会从中将源MAC地址以及曾经接收该地址发送的数据包的接口作为对应关系记录到转发表中
交换机自学原理
MAC地址没有层次性,转发表中的入口个数与整个数据链路中所有网络设备的数量有关。当设备数量增加时,转发表也会随之变大,检索转发表所用的时间也就越来越长。当连接多个终端时,有必要将网络分成多个数据链路,采用类似于网络层的 IP地址一样对地址进行分层管理
交换机转发方式
-
存储转发
检查数据帧末尾的FCS位后再转发,可以避免发送由于冲突而被破坏的帧或噪声导致的错误帧,支持不同速度的端口间的转换,保持高速端口与低速端口间的协同工作
-
直通转发
收到数据帧后不缓存和校验,直接转发到目的端口,延迟低,但不可避免的会发送错误帧,且不能在不同速率的端口之间转发
环路检测技术
通过网桥连接网络时,一旦出现环路该如何处理,最坏的情况下,数据帧会在环路中被一而再再而三地持续转发,一旦这种数据帧越积越多将会导致网络瘫痪(由于异常的数据帧遍布网络,造成无法正常通信的状态,大多数情况下只能关掉网络设备的电源或断开网络才能恢复)
解决网络中的环路问题。具体有生成树与源路由两种方式。如果使用具有这些功能的网桥,那么即使构建了一个带有环路的网络,也不会造成那么严重的问题。只要搭建合适的环路,就能分散网络流量,在发生某一处路由故障时选择绕行,可以提高容灾能力
-
生成树方法
每个网桥必须在每1~10秒内互相交换BPDU包,以此判断哪些端口使用哪些端口不使用,以便消除环路。一且发生故障,则自动切换通信线路,利用那些没有被使用的端口继续进行传输
弊端就是在发生故障切换网络时需要几十秒的时间,RSTP(Rapid Spanning Tree Protocol)方法能将发生问题时的恢复时间缩短到几秒以内
-
源路由方法
该方式可以判断发送数据的源地址是通过哪个网桥实现传输的,并将帧写入RIF。网桥则根据这个RIF信息发送帧给目标地址。即使网桥中出现了环路,数据帧也不会被反复转发,可成功地发送到目标地址在这种机制中发送端本身必须具备源路由的功能
VLAN
VLAN(Virtual Local Area Network)是一种将局域网设备从逻辑上划分成一个个网段,从而实现虚拟工作组的技术
会遇到分散网络负载、变换部署网络设备的位置等情况。而有时管理员在做这些操作时,不得不修改网络的拓扑结构,这也就意味着必须讲行硬件线路的改造
如果采用带有VLAN技术的网桥、就不用实际修改网络布线、只需修改网络的结构即可。VLAN技术附加到网桥/2层交换机上就可以切断所有VLAN之间的所有通信。因此相比一般的网桥/2层交换机,VLAN可以过滤多余的包,提高网络的承载效率
半双工和全双工通信
-
半双工指只发送或只接受的通信方式
收发数据共享同一个介质
-
全双工允许同一时间发送和接收
收发数据时每个站有各自专用的通信介质,站是数据链路中的节点
跟随帧头后面的是数据。一个数据帧所能容纳的最大数据范围是46~1500个字节。帧尾是一个叫做FCS(frame Check Sequence帧检验序列)的4个字节 在目标MAC地址中存放了目标工作站的物理地址,源 MAC地址中则存放构造以太网的发送端工作站的物理地址 类型通常跟数据一起传送,它包含用以标识协议类型的编号,即表明以太网的再上一层网络协议的类型。在这个字段的后面。则是该类型所标识的协议首部及其数据
通过检查FCS字段的值可以错误帧丢弃
数据链路层可细分为介质访问控制层和逻辑链路控制层
介质访问控制层根据以太网或FDDI等不同数据链路所特有的首部信息进行控制。逻辑链路层则根据以太网或FDDI等不同数据链路所共有的顿头信息进行控制
LLC和SNAP字段包含上层协议类型的消息,只要查找到SNAP以后才能继而判断上层协议的类型
网络层是TCP/IP的核心内容,IP(Internet Protocol)网际协议是关键所在,通过该协议实现了终端节点间的数据交换
数据链路层是实现相邻两个节点之间的通信,若要跨越多种数据链路就需要网络层来实现
-
配有IP地址,但不进行路由控制的设备叫主机
-
配有IP地址,并且进行路由控制的设备叫路由器
-
节点是主机和路由器的统称
计算机通信中为了识别通信对端,必须要有一个类似于地址的识别码进行标识。数据链路的MAC地址正是用来标识同一个链路中不同计算机的一种识别码IP地址属于网络层地址
IP地址如同链路层的MAC地址,IP地址用于在连接到网络中的所有主机中识别出进行通信的目标地址,在TCP/IP通信中所有主机或路由器必须设定自己的IP地址,无论一台主机与哪种数据链路连接,其IP地址都保持不变
-
路由控制指将分组数据发送到最终目标地址的功能,即使网络非常复杂,也可以通过路由控制确定到达目标地址的通路
-
为了将数据表发给目标主机,所有主机都维护着一张路由控制表,该表记录IP数据在下一步应该发给哪个路由器,IP包将根据这个路由表在各个数据链路上传输
-
IP属于面向无连接,即在发包之前,不需要建立与对端目标地址之间的连接。上层如果遇到需要发送给IP的数据,该数据会立即被压缩成IP包发送出去,面向无连接是为了简化和提速
-
为了提高可靠性,上一层的TCP采用面向有连接型,IP只负责将数据发给目标主机,TCP则只负责保证对端主机确实接收到数据
IP地址
-
IP(IPv4地址)使用32位正整数表示,每8位为1组,分为4组
-
IP地址由网络标识(网络地址)和主机标识(主机地址)两部分组成
- 网络标识在数据链路的每个段配置不同的值,网络标识必须保证相互连接的每个段的地址不重复,相同段内相连的主机必须有相同的网络地址
- 主机地址则不允许在同一个网段内重复出现
前24位为网络标识,路由器看见这个就可以进行转发
IP地址分类
-
A类IP地址是首位以0开头的地址
0.0.0.0 ~ 127.0.0.0,1 ~ 8位为网络标识,后24位为主机标识
-
B类IP地址是前两位为10的地址
128.0.0.1 ~ 192.255.0.0,1 ~ 16位为网络标识,后16位为主机标识
-
C类IP地址是前三位为110的地址
192.168.0.0 ~ 239.255.255.0,1 ~ 24位为网络标识,后8位为主机标识
-
D类IP地址是前四位为1110的地址
224.0.0.0 ~ 239.255.255.255,1 ~ 32位为网络标识,没有主机标识,常被用于多播
在分配IP地址时关于主机标识有一点需要注意。即要用比特位表示主机地址时,不可以全部为0或全部为1。因为全部为只有0在表示对应的网络地址或IP地址不可获知的情况下才使用。而全部为1的主机地址通常作为广播地址。在分配过程中,应该去掉这两种情况。这也是为什么C类地址每个网段最多只能有254(28-2= 254)个主机地址的原因
广播地址
用于在同一个链路中相互连接的主机之间发送数据包,将IP地址中的主机部分全部设置为1,就是广播地址
广播地址分为两种
- 在本网络内的广播叫本地广播
- 在不同网络之间的广播叫直接广播
IP多播
多播用于将包发送给特定组内的所有主机,由于直接使用IP协议,因此不存在可靠传输
多播使用D类地址
子网掩码
一个IP地址只要确定其分类,就能确定它的网络标识和主机标识
用1表示IP地址的比特范围,用0表示IP主机地址范围
现在一个IP地址的网络标识和主机标识不受限于该地址的类别,而是使用叫子网掩码的识别码通过子网网络地址细分出比ABC类更小粒度的网络,这种方式就是将原来分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络
子网掩码用二进制表示是一个32位的数字,对应IP地址网络标识部分全为1,对应主机标识部分全为0
子网掩码可以灵活指定网络标识的长度
私有地址和全局地址
对于没有连接互联网的独立网络的主机,只要保证在这个网络内地址唯一,可以不用考虑互联网即可配置相应的IP地址,私有网络的IP地址地址范围如下:
包含在这个范围内的IP地址都属于私有IP,在此之外的IP地址称为全 局IP
私有IP最早没有计划连接互联网,而只用于互联网之外的独立网络。然而当一种能够互换私有IP与全局的NAT技术诞生以后,配有私有地址的主机与配有全局地址的互联网主机实现了通信 现在有很多学校、家庭、公司内部采用在每个终端设置私有IP,而在路由器或在必要的服务器上设置全局IP地址的方法。而如果配有私有IP的地址主机连网时,则通过NAT进行通信
全局IP地址基本上要在整个互联网范围内保持唯一,而私有地址只需要在同一个域里保证唯一即可。在不同的域里出现相同的私有IP不会影响使用
保存指明路由器或主机信息,以便发往目标地址的表就是路由控制表Routing Table,实现IP通信的主机和路由器都必须持有一张这样的表,它们也是在该表基础上进行数据包发送
该路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者也叫静态路由控制,而后者叫做动态路由控制。为了让动态路由及时刷新路由表,在网络上互连的路由器之间必须设置好路由协议,保证正常读取路由控制信息
IP协议始终认为路由表是正确的。然而IP本身并没有定义制作路由控制表的协议。即IP没有制作路由控制表的机制。该表是由一个叫做路由协议的协议制作而成
路由控制表与IP包发送
路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址(相同位数最多)
默认路由
如果一张路有表中包含所有的网络及其子网的信息会造成无端的浪费,默认路由是指路由表中任何一个地址都有与之匹配的记录
一般为0.0.0.0/0,它不是指IP地址,0.0.0.0的IP地址为0.0.0.0/32,有时默认路由也被标记为default
主机路由
IP地址/32就是主机路由,意思是整个IP地址的所有位都将参与路由
进行主机路由,意味着要基于主机上网卡上配置的IP地址本身,而不是基于该地址的网络地址部分进行路由
环回地址
指在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址
计算机使用特殊的IP地址127.0.01作为环回地址,与该地址具有相同意义的是一个叫localhost的主机名,使用这个IP或主机名时,数据包不会流向网络
路由控制表的聚合
利用网络地址的比特分布可以有效地进行分层配置。对内即使有多个子网掩码,对外呈现出的也是同一个网络地址。这样可以更好地构建网络,通过路由信息的聚合可以有效地减少路由表的条目,路由表的聚合也叫路由汇总
能够缩小路由表的大小是它最大的优势。路由表越大,管理它所需要的内存和CPU也就越多。并且查找路由表的时间也会越长,导致转发IP数据包的性能下降,如果要构建大规模、高性能网络、则需要尽可能削减路由表的大小
而且路由聚合可以将已知的路由信息传送给周围其他的路由器、以达到控制路由信息的目的,下例的路由器C就是将已知192.168.2.0/24与192.168.3.0/24的网络这一信息聚合成为对192.168.2.0/23的网络也已知,从而进行公示
每种数据链路的MTU之所以不同是因为每个不同类型的数据链路的使用目的不同。因此可承载的MTU也就不同。IP属于数据链路上一层,它必须不受限于不同数据链路的MTU大小。IP抽象化了底层的数据链路
各种数据链路及其MTU
最初的解决方法是IP报文的分片与重组
分片机制存在不足:
- 路由器的处理负荷加重,高速的链路对路由器和计算机网络提出更高的要求
- 对网络安全的要求提高,路由器需要做的其他处理越来越多
- 一旦某个分片丢失就会造成整个IP数据报作废
路径MTU发现
指从发送端主机到接收端主机之间不需要分片时最大MTU的大小。即路径中存在的所有数据链路中最小的 MTU
而路径MTU发现从发送主机按照路径MTU的大小将数据报分片后进行发送。进行路径MTU发现,就可以避免在中途的路由器上进行分片处理、也可以有TCP中发送更大的包
TCP情况下
IPv6地址长度是IPv4的4倍,即128bit,一般写为8个16位字节
特点
- IP地址的扩大与路由控制表的聚合 IP地址依然适应互联网分层构造。分配与其地址结构相适应的IP地址,尽可能避免路由表膨大
- 性能提升 包首部长度采用固定的值(40字节),不再采用首部检验码。简化首部结构,减轻路由器负荷。路由器不再做分片处理(通过路径MTU发现只由发送端主机进行分片处理)
- 支持即插即用功能 即使没有DHCP服务器也可以实现自动分配IP地址
- 采用认证与加密功能 应对伪造IP地址的网络安全功能以及防止线路窃听的功能(IPsee)
- 多播、MobileIP成为扩展功能 多播和Mobile IP被定义为IPv6的扩展功能。由此可以预期,曾在IPv4中难于应用的这两个功能在IPv6中能够顺利使用
IPv6地址结构
-
全局单播地址是指世界上唯一的一个地址
-
链路本地单播地址是指在同一个数据链路内唯一的地址,用于不经过路由器在同一个链路中的通信,通常接口ID保存64比特版的MAC地址
-
唯一本地地址是不进行互联网通信时使用的地址,为了安全性,内部网络与互联网通信通常通过NAT和网关进行,唯一本地地址就是在不联网或通过NAT和代理联网的环境下使用
唯一本地地址虽然不会与互联网连接,但是也会尽可能地随机生成一个唯一的全局D。由于企业兼并、业务统一、效率提高等原因,很有可能会需要用到唯一本地地址进行网络之间的连接
IP首部包含用于IP协议进行发包控制时的所有必要信息
IPv4数据报格式
-
版本version
4bit标识IP首部的版本号
-
首部长度Internet header length
4bit表示IP首部的大小
-
区分服务Type Of Service
8bit构成,都不用
-
总长度total length
16bit表示IP首部与数据部分的总字节数
-
标识identification
16bit构成,用于分片重组,同一分片的标志值相同,不同分片的标志值不同。发送一个IP包,它的值也逐渐递增。如果ID相同而目标地址、源地址或协议不同,也被认为是不同的分片
-
标志flags
3bit表示包被分片的相关信息
-
片位偏fragment offset
13bit标识被分片的每一个分段相对于原始数据的位置
-
生存时间time to live
8bit构成,指可以中转多少个路由器的意思,每经过一个路由器TTL便减1,变为0则丢弃该包
-
协议protocol
8bit表示IP首部的下一个首部隶属于哪个协议,常用的协议编号如下表
-
首部校验和header check sum
16bit构成,该字段只校验首部,不校验数据部分,主要用来确保IP数据报不被破坏
校验和的计算过程:首先要将该校验和的所有位置设置为0,然后以16 比特为单位划分IP首部并用1补数计算所有16位字的和。最后将所得到这个和的1补数赋给首部校验和字段
-
源地址sourse address
32bit表示发送端IP地址
-
目标地址destination address
32bit表示接受端IP地址
-
可选项options
长度可变,通常只在进行实验或诊断时使用,该字段包含如下信息,安全级别、源路径、路径记录和时间戳
-
填充padding
也称作填补物。在有可选项的情况下,首部长度可能不是32比特的整数,通过向字段填充0,调整为32比特的整数倍
-
数据data
存入数据,IP上层协议的首部也作为数据进行处理
IPv6数据报格式
省略了首部校验和字段,因此路由器无需计算校验和,从而提高包的转发效率,分片处理所用的识别码都成为可选项,IPv6首部及可选项都由8byte构成
-
版本version
4bit构成
-
通信量类
相当于IPv4的TOS字段,也由8bit构成
-
流标号flow label
20bit构成,准备用于QoS服务质量控制,不使用QoS时每一位可全设置为0
在进行服务质量控制时,将流标号设置为一个随机数,然后利用一种可以设置流的协议RSVP(Resource Reservation Protocol)在路由器上进行QoS设置。当某个包在发送途中需要QoS时,需要附上RSVP预想的流标号。路由器接收到这样的IP包后先将流标号作为查找关键字,迅速从服务质量控制信息中查找并做相应处理 此外,只有流标号、源地址以及目标地址三项完全一致时,才被认为是一个流
-
有效载荷部分payload length
指包的数据部分,该字段长度为16bit,也有大型有效载荷选项,该选项为32bit
-
下一个首部next header
相当于IPv4的协议字段,8bit构成,通常表示IP的上一层协议是TCP或UDP。不过在有IPv6扩展首部的情况下,该字段表示后面第一个扩展首部的协议类型
-
跳数限制hop limit
8bit构成,相当于IPv4的TTL
-
源地址source address
128bit构成,表发送端IP地址
-
目标地址destination address
128bit构成,表接收端IP地址
-
IPv6扩展首部
IPv6的首部长度固定,扩展首部可以是任意长度,当中还可包含扩展首部协议以及下一个扩展首部字段
IPv6首部中没有标识以及标志字段,需要对IP数据报进行分片时可以使用扩展首部
Domain Name System域名系统是一种用于将域名转换为IP地址的分布式数据库系统。它是由一组计算机和软件组成的网络服务,用于将用户友好的域名(主机名)转换为计算机能够理解的IP地址
域名服务器是管理域名的主机和相应的软件,它可以管理所在分层的域的相关信息
DNS根据IP地址进行检索时,需要从根域名服务器开始按顺序查找,因此所有的域名服务器都必须注册根域名服务器的IP地址
-
解析器resolver
进行DNS查询的主机和软件就是DNS解析器,用户所使用的个人电脑就属于解析器,一个解析器至少要注册一个以上域名服务器的IP地址
DNS查询
只要确定了IP地址,就可以向这个目标地址发送P数据报。但在底层数据链路层,进行实际通信时需要了解每IP地址所对应的MAC地址
address resolution protocol地址解析协议是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址
不过ARP只适用于IPv4,不能用于IPv6。IPv6中可以用ICMPv6替代ARP发送邻居探索消息
ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的
APR工作机制
从一个IP地址发出ARP请求包以了解其MAC地址,目标地址将自己的MAC地址填入其中的ARP响应包返回到IP地址
根据ARP可以动态地进行地址解析,因此在TCP/P的网络构造和网络通信中无需事先知道MAC地址,只要有IP地址即可
如果每发送u=一个IP数据报都要进行一次ARP请求以此确定MAC地址,那将造成不必要的网络流量,通常做法是把获取的MAC地址缓存(指预见到同样的信息可能会再次使用,从而在内存中开辟一块区域存储这些信息)一段时间
ARP包格式
RARP
是将ARP反过来,从MAC地址定位IP地址的一种协议,例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用到
代理ARP
通常ARP包会被路由器隔离,采用代理ARP的路由器可以将ARP请求转发给邻近网段
Internet Control Message Protocol互联网控制消息协议,主要功能包括确认IP包是否成功送达目标地址,通知在发送过程中IP包被废弃的具体原因,改善网络设置等
在IP通信中如果某个IP包因为某种原因未能达到目标地址,那么这个具体的原因将由ICMP负责通知,ICMP的这种通知消息会使用IP进行发送
ICMP的消息大致可以分为两大类:一类是通知出错原因的错误消息,一类是用于诊断的查询消息
ICMP消息类型
Dynamic Host Configuration Protocol动态主机配置协议是一个用于自动分配IP地址给网络中主机,统一管理IP地址分配的协议
有了DCHP,计算机只要连接到网络就可以进行TCP/IP通信
DHCP工作原理
DHCP在分配IP地址有两种方法:一种是由DHCP服务器在特定的IP地址中自动选出一个进行分配。另一种方法是针对MAC地址分配一个固定的IP地址。这两种方法可以并用
DCHP中继代理
有了DHCP中继代理以后,对不同网段的IP地址分配也可以由一个DHCP服务器统一进行管理和运维
NAT
Network Address Translation网络地址转换,是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术
IP隧道
允许在两个网络之间使用网际协议进行通信的技术
TCP/IP中有两个具有代表性的传输层协议,TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输
两种传输层协议
-
TCP
面向连接、可靠的流协议,流是不间断的数据结构
-
UDP
不具有可靠性的数据报协议,只确保发送消息的大小,不保证消息一定会到达
端口号
数据链路和IP的地址分别是MAC地址和IP地址,前者识别同一链路中不同的计算机,后者识别TCP/IP网络中互连的主机和路由器
端口号就是类似于这种地址的概念,端口号用于识别同一台计算机中进行通信的不同应用程,因此也称为程序地址
传输层协议就是利用端口号识别本机中正在进行通信的应用程序,并准确地将数据传输
仅凭目标端口识别某一个通信是不够的,TCP/IP或UDP/IP通信中通常采用5个信息来识别一个通信
- 源IP地址
- 目标IP地址
- 协议号
- 源端口号
- 目标端口号
只要其中某一项不同则认为是其他通信
确定端口号的方法分为两种
-
标准既定的端口号
也叫静态方法,指每个应用程序都有其指定的端口号。但并不是随意使用任何一个端口号。每个端口号都有其对应的使用目的
-
时序分配法
也叫动态分配法,服务端有必要监听端口号,但接受服务的客户端没必要确定端口号。这种方法下,客户端应用程序可以完全不用自己设置端口号,而全权交给操作系统进行分配。操作系统可以为每个应用程序分配互不冲突的端口号
User Datagram Protocol不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它将应用程序发来的数据收到那一刻,立即按照原样发送到网络上的一种机制
- 网络拥堵,UDP无法进行流量控制等避免网络拥塞的行为
- 传输途中出现丢包,UDP不负责重发
- 包到达顺序混乱也不会纠正
- 如果需要这些细节控制,交由采用UDP的应用程序去处理
UDP面向无连接,随时可发送数据,且本身处理简单高效,因此常用于以下几个方面:
- 包总量较少的通信(DNS、SNMP等)
- 视频、音频等多媒体通信(即时通信)
- 限定于LAN等特定网络中的应用通信
- 广播通信(广播、多播)
Transmission Control Protocol是面向有连接的协议,只有确定通信对端存在时才会发送数据,从而控制通信流量的浪费
- 可以解决网络拥塞
- 可以进行丢包时的重发控制
- 可以对次序乱掉的分包进行顺序控制
连接管理
面向有连接是指在数据通信开始之前先做好通信两端之间的准备工作
UDP是一种面向无连接的通信协议,因此不检查对端是否可以通信,直接将UDP包发送出去。TCP与此相反,它会在数据通信之前通过TCP首部发送一个SYN包作为建立连接的请求等待确认应答。如果对端发来确认应答,则认为可以进行数据通信。如果对端的确认应答未能到达,就不会进行数据通信。
此外在通信结束时会进行断开连接的处理(FIN包) 可以使用TCP首部用于控制的字段来管理TCP连接。一个连接的建立与断开,正常过程至少需要来回发送7个包才能完成,三次握手建立连接,四次挥手断开连接
TCP以段为单位发送数据
在建立TCP连接的同时,也可以确定发送数据包的单位,我们也可以称其为最大消息长度MSS(Maximum Segmemt Size),最理想的情况是,最大消息长度正好是IP中不会被分片处理的最大数据长度 TCP在传送大量数据时是以MSS的大小将数据进行分割发送,进行重发时也是以MSS为单位 MSS是在三次握手的时候,在两端主机之间被计算得出。两端的主机在发出建立连接的请求时,会在TCP首部中写入MSS选项,告诉对方自己的接口能够适应的MSS的大小。然后会在两者之间选择一个较小的值投入使用
接入以太网主机与接入FDDI主机之间的通信情况
TCP以1个段为单位,每发一个段进行一次确认应答的处理,但如果包的往返时间越长通信性能就越低
数据包进行确认应答
滑动窗口方式并行处理
发送端主机在发送一个段之后不必要一直等待确认应答,而是继续发送
窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。图中窗口大小为4个段 这个机制实现了使用大量的缓冲区(在此处表示临时保存收发数据的场所),通过对多个段同时讲行确认应答的功能
滑动窗口方式
白色区域为窗口,窗口内的数据即使没有收到确认应答也可以继续发送,当收到确认应答等候,窗口就会滑动到确认应答的序列号位置。这样可以顺序地将多个段同时发送提高通信性能,这种机制叫做滑动窗口控制
段丢失有两种可能
- 未收到数据
- 收到数据了,但确认应答丢失
确认应答未返回的情况下,数据已经到达对端,是不需要进行重发的,但如果没有使用窗口控制,没有收到确认应答的数据都会被重发
高速重发控制
在窗口比较大,又出现报文段丢失的情况下,同一个序号的确认应答会不断重复返回,而发送端主机如果连续3次收到同一个确认应答,就会将其所对应的数据进行重发
流控制
发送端根据自己的实际情况发送数据。但是接收端可能收到的是一个亭无关系的数据包又可能会在处理其他问题上花费一些时间。因此在为这个数据包做其他处理时会耗费一些时间、甚至在高负荷的情况下无法接收任何数据。如果接收端将本应该接收的数据丢弃的话,就又会触发重发机制,从而导致网络流量的无端浪费。 为了防止这种现象的发生,TCP提供一种机制可以让发送端根据接收端的实际接收能力控制发送的数据量。这就是所谓的流控制
它的具体操作是接收端主机向发送端主机通知自己可以接收数据的大小,于是发送端会发送不超过这个限度的数据。该大小限度就被称作窗口大小。窗口大小的值就是由接收端主机决定的
TCP首部中专门有一个字段用来通知窗口大小。接收主机将自己可以接收的缓冲区大小放人这个字段中通知给发送端。这个字段的值越大,说明网络的吞吐量越高
当接收端的这个缓冲区一旦面临数据溢出时,窗口大小的值也会随之被设置为一个更小的值通知给发送端,从而控制数据发送量
拥塞控制
计算机网络都处在一个共享的环境,因此也有可能会因为其他主机之间的通信使得网络拥堵,在网络拥堵时,如果突然发送一个较大量的数据,极有可能会导致整个网络的瘫痪
TCP为了防止该类问题的出现,在通信一开始就会通过一个叫做慢启动的算法得出的数值,对发送数据量进行控制
UDP数据报格式
-
源端口号Sourse Port
表示发生端端口号,字段长16bit,为可选项,有时可能不会设置源端口号,没有源端口号时字段设为0,可用于不需要返回的通信中
-
目标端口号Destination Port
表示接收端端口,字段长16bit
-
包长度Length
该字段保存UDP首部长度与数据长度之和,8bit
-
校验和Checksum
为了提供可靠UDP首部和数据而设计
TCP数据段格式
TCP没有表示包长度和数据长度的字段,可由IP层获知TCP的包长度,由TCP的包长可知数据的长度
-
源端口号Sourse Port
表示发生端端口号,字段长16bit
-
目标端口号Destination Port
表示接收端端口,字段长16bit
-
序列号Sequence Number
32bit,指发送数据的位置,每发送一次数据就累加一次该数据字节数的大小
序列号不会从0或1开始,而是在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机。然后再将每转发过去的字节数累加到初始值上表示数据的位置
在建立连接和断开连接时发送的SYN包和FIN包虽然并不携带数据,但是也会作为一个字节增加对应的序列号
-
确认应答号Acknowledgemnt NUmber
32bit,指下一次应该收到的数据的序列号,发送端收到这个确定应答以后可以认为在这个序号之前的数据都已被正常接收
-
数据偏移Data Offset
4bit,单位为32bit(4bytes),表示TCP所传输的数据部分应该从TCP包的哪个位开始计算,如果该字段值为5,那说明从TCP包最开始到20字节都是TCP首部,余下为TCP数据
-
保留Reserved
4bit,主要是为了以后扩展时使用,一般设置为0
-
控制位Control Flag
8bit,对应位上值为1时
-
窗口大小Windows Size
16bit,用于通知从相同TCP首部的确定应答号所指位置开始能够接收的数据大小(8bytes),TCP不允许发送超过此处所示大小的数据
如果窗口为0,则表示可以发送窗口探测,以了解最新的窗口大小,但这个数据必须是1byte
-
校验和Checksum
TCP的校验和与UDP相似,区别在于TCP的校验和无法关闭
-
紧急指针Urgent Pointer
16bit,只有在URG控制位为1时有效,该字段的数值表示本报文段中紧急数据的指针,从数据部分的首位到紧急指针所指示的位置为止为紧急数据。因此也可以说紧急指针指出了紧急数据的末尾在报文段中的位置
一般在暂时中断通信,或中断通信的情况下使用,也用作表示数据流分段的标志
-
选项Options
用于提高TCP的传输性能,因为根据数据偏移进行控制,长度最大为40bytes
路由控制分静态和动态两种类型
-
静态路由
指事先设置好路由器和主机中并将路由信息固定的一种方法
-
动态路由
指让路由协议在运行过程中自动地设置路由控制信息的一种方法
-
距离向量算法
根据距离和方向决定目标网络或目标主机位置的方法
路由器之间可以互换目标网络的方向及其距离的相关信息,并以这些信息为基础制作路由控制表
由于只有距离和方向的信息,所以当网络构造变得分外复杂时,在获得稳定的路由信息之前需要消耗定时间,也极易发生路由循环等问题
-
链路状态算法
路由器在了解网络整体连接状态的基础上生成路由控制表的一种方法
每个路由器必须保持同样的信息才能进行正确的路由选择
距离向量算法中每个路由器掌握的信息都不相同。通往每个网络所耗的距离也根据路由器的不同而不同。因此,距离向量算法的一个缺点就是不太容易判断每个路由器上的信息是否正确
而链路状态算法中所有路由持有相同的信息,对于任何一台路由器、网络拓扑都完全一样。因此只要某一台路由器与其他路由器保持同样的路由控制信息,就意味着该路由器上的路由信息是正确的。只要每个路由器尽快地与其他路由器同步路由信息,就可以使路由信息达到一个稳定的状态。因此即使网络结构变得复杂,每个路由器也能够保持正确的路由信息、进行稳定的路由选择,这也是链路状态算法的一个优点
为了实现上述机制,链路状态算法付出的代价就是如何从网络代理获取路由信息表。这一过程相当复杂,特别是在一个规模巨大而又复杂的网络结构中,管理和处理代理信息需要高速CPU处理能力和大量的内存