一、 计算机网络
1.1基本概念
三网指的是:电信网络、有线电视网络、计算机网络
网络:由若干结点(包含计算机、集线器、路由器、交换机等)与连接这些结点的链路组成
互联网internet:网络与网络之间再通过路由器进行相互连接形成的网,是网络的网络,它代表的是一个概念
因特网Internet:即世界上最大的互联网,它是连接世界上所有网络的网
因特网服务提供商ISP:提供连接因特网的服务商,如移动联通等。
因特网标准:RFC文档决定
因特网的组成:
边缘部分:由连接到因特网的主机组成
核心部分:由大量网络和网络连接的路由器组成
1.2因特网服务提供商(InternetService Provider,ISP)
1、提供因特网服务的管理机构,ISP向IP管理机构购买IP地址,再转而为用户提供IP服务。用户只能通过ISP的接入才能上网。
2、ISP分为3层:
主干ISP:服务覆盖面积最大,拥有高速主干网,由少数几个公司维持。
地区ISP:速度相对更慢,面积相对更小
本地ISP:直接给用户提供服务,它可能是拥有网络的公司向员工提供服务,也可能是运营自己网络的一个大学给学生提供服务。
3、三层ISP的连接方式一般是 本地ISP->地区ISP->主干ISP--->其他主干ISP这种树状结构,上层ISP为下层提供服务。因为两个本地ISP之间通信需要先到达地区、主干,再回到地区才能到达另外一个ISP,因此通信方面会存在不足。由此诞生了地区ISP之间的因特网交换点IXP,IXP非常难建,只有一部分国家才具有IXP。
1.3因特网边缘部分(主机)的通信方式
1、主要分为2种:client/server(即C/S以及B/S browser/server)、peer to peer(P2P)
2、C/S:是在服务器和客户机运行的程序之间,客户机可以向服务器发送数据也可以读取数据。如QQ客户端和服务器的方式。
3、B/S:其实是C/S的一种特殊形式,其更强调将程序尽量放置在服务端运行,而客户端就相当于一个浏览器。
4、P2P:指的是对等连接网络,即这种连接方式的网络主机中,每一个都是服务器,而每一个同时也是客户机。
1.4因特网核心部分的交换方式
常见的交换方式有:电路交换、报文交换、分组交换(因特网交换方式)
1、电路交换:主要用于电话通信网络,占用一对一的通信线路,缺点是在通话期间,两端的用户会始终占用端到端的通信资源。优点在于保障了通信质量。
2、报文交换:报文是要发送的整块数据,报文交换是一次发送一整个报文,不通过固定的线路,而是通过中间的网络结点进行转发来传递到接收端。当两个端点进行数据交换时,中间经过的端点每次要等待报文全部接收完才能进行下一步转发,存在的这个等待时间会让交换速度变慢。
3、分组交换:将报文分成更小的分组再进行交换,接收端会根据分组的首部信息将报文还原。由于中间结点基本上可以立得立转,因此大大提高了交换速度。
1.5网络性能指标
1、速率:即网络的传输速度。如多少Mb/s
2、带宽:在计算机网络中带宽表示网络中一点到另一点的最高传送速率
3、吞吐量:表示单位时间通过一个网络的最大的数据量,因为受实际影响网络往往不能到达最高速率,因此用吞吐量来表示实际最高的传输速度。
4、时延:包含发送时延、传播时延、处理时延、排队时延,总时延为4者相加。
5、时延带宽积:等于 传播时延*带宽,表示的是链路中可以容纳的比特数。
6、往返时间RTT:表示从发送方发送数据到收到接收方的确认所用的时间。
7、利用率:包含信道利用率和网络利用率
信道利用率:指信道中有百分之几的时间是被利用的
网络利用率:指全网的信道利用率的加权平均值。可用简单公式表示
为,网络利用率 = 1-空闲时刻时延/当前时延
1.6网络的划分(按范围)
广域网WAN:范围几十到几千公里,用于长距离传输,比如跨越不同国家。
城域网MAN:范围几公里到几十公里,一般为一个城市或者几个街区范围的大小,主要是将局域网连接起来。目前城域网主要使用的是局域网技术,因此在一定程度上也相当于一个更大型的局域网。
局域网LAN:范围局限在几公里以内,多用于公司机构、学校里。局域网绝大部分采用以太网技术,因此以太网几乎成为局域网的代名词。
个人区域网PAN:一般指个人通过电子设备利用无线网进行连接起来的网络,也称无线个人区域网WPAN。
1.7OSI标准(开放系统互联基本参考模型)
1、OSI标准分为7层,从上往下依次包含:应用层、表示层、会话层、运输层、网络层、数据链路层、物理层
2、OSI的并没有被因特网采用,失败原因为:实现起来过分复杂,运行效率低,层次划分不合理,功能在多层重复出现,没有商业化驱动等。
1.8TCP/IP协议体系结构
因特网采用的协议方式,主要分为4层:
应用层:包含多种应用层协议,HTTP、FTP、SMTP、TELNET等
运输层:包含TCP、UDP等协议
网际层:即IP层
网络接口层:相当于包含了数据链路层和物理层
1.9计算机网络学习的五层划分协议
1、该划分将OSI协议与TCP/IP协议进行折中,分为5层,主要以TCP/IP内容为主:
应用层:包含一些应用层协议,如网页的HTTP协议、邮箱的SMTP协议
运输层:主要是会建立连接的TCP(传输控制协议)和无连接的UDP(用户数据报协议)
网络层:主要是IP协议,路由器的工作主要就是在这一层
数据链路层:将IP层的数据报包装成帧,再在链路上进行传播,主要的有MAC帧。
物理层:主要指的是一些传播的物理媒介、传输方式等。
2、数据链路层传输单元称为帧,网络层传输单元称为IP数据报/数据报,运输层的传输单元称为报文段(TCP)或用户数据报(UDP),应用层的数据单元称为报文。同时每一层的数据单元都可以笼统的用分组来称。
3、物理层使用的中间设备为转发器,数据链路层的中间设备为网桥/交换机,网络层的中间设备为路由器,网络层以上使用的中间设备为网关。
二、 物理层
2.1信道
1、信道是指信号传播的通道
2、信道的信息交互方式分为:单工、半双工、全双工 三种方式
3、信道的通信速度会有极限,极限的原因是“码间串扰”导致的,即当发送端的信号频率到达某一个值时,接受端无法准确识别发送端的高低电平变化,此时就是信道的传输极限(这种极限代表信道每秒可以传输的数据,由频率决定,而不是指的信号在信道中的传播速度,相当于对应的是发送延时而不是传播延时)
4、信道常用编码方式:
不归零制:高电平为1,低电平为0
归零制:正脉冲为1,负脉冲为0
曼彻斯特:位周期中间电平向上跳变为1,向下跳变为0
差分曼彻斯特:位周期中间始终跳变,位开始有跳变为0,没有跳变为1
可以看出曼彻斯特编码方式会比一般的不归零制的频率高一倍,相当于同样的频率下,信息量少一半了,但好处是曼彻斯特编码方式具有自同步能力。以太网使用的就是曼彻斯特方式来进行自同步,同时也省去了添加额外转义字符来透明传输的需求。
2.2信道复用包含:频分复用、时分复用、波分复用、码分复用。
2.3信道传输媒体
有线信道:双绞线、同轴电缆、光缆
无线信道:无线电微波传输(微波主要用于手机、卫星等)
2.4宽带接入技术
ADSL技术:用数字技术对现有的模拟电话用户线进行改造,使用上网用的猫(调制解调器)来进行转换处理
HFC网(光纤同轴混合网):HFC网将原先的广播电视网主干部分的同轴电缆改为光纤,而连接到用户的一部分仍然是同轴电缆。中间的光信号转换为电信号通过光纤结点实现。而一般的机顶盒可以将同轴电缆传输过来的数字信号转换为模拟信号供电视机使用。同时通过电缆调制解调器来实现HFC的上网功能。
FTTH(光纤到户)技术:即直接将光纤通道用户家庭,是最快的上网方式,但是成本相对更高,而且存在速率高过普通用户需求,导致浪费的问题。
三、 数据链路层
3.1数据链路层使用的主要信道
点对点信道:使用点对点协议PPP,一对一的通信方式。
广播信道:使用共享信道协议CSMA/CD,一对多的通信方式。也是以太网的通信信道方式。
3.2链路层协议的基本问题
1、封装成帧
1>封装成帧即为需要在接受了网络层的数据报之后,需要添加首部和尾部来构成一个帧,并通过首部和尾部的帧定界符来界定帧的开始和结束。
2>为了提高帧的效率会使数据报的在帧中的占比尽量高,但是数据报会有一个不能超过长度上限MTU(由各自链路层协议决定)
3>PPP帧在封装成帧时通过在帧的首尾添加0x7E来作为帧定界符。
4>MAC帧由于使用的是曼彻斯特编码方式,在帧头先进行同步后再添加一个帧开始的定界符,但是由于是曼彻斯特编码,只要使得位周期中间没有跳变就可以表明结束,因此MAC帧不需要帧尾。
2、透明传输
1>由于封装成帧需要帧界定符,而当帧的内容中出现和帧定界符一样的字节时,为了不使帧的界定出错,需要在帧定界符前面使用转义字符来表明这是中间数据。转义字符之前也要使用转义字符
2>PPP帧由于使用的是首尾定界符,因此需要使用转义字符
3>MAC帧由于使用曼彻斯特编码方式不需要转义字符就可以透明传输。
3、差错检测
1>一般使用循环冗余检验CRC算法对帧进行差错检测。
2>PPP帧和MAC帧都需要进行差错检测。
3.3PPP协议
1、PPP协议主要由RFC1661规定,包含三个部分
1>一个封装数据报的方法,即基本帧格式。
2>一个链路控制协议LCP,用于建立、配置、测试数据链路的连接。
3>一系列网络控制协议NCPs,用于建立、配置不同的网络层协议
2、PPP协议的帧格式
字段名 | 标志 | 地址 | 控制 | 协议 | 数据 | FCS | 标志 |
字节数 | 1 | 1 | 1 | 2 | <=MRU | 2 | 1 |
标志位:前后标志位为0x7E,是帧的定界符。在异步通信时,由于是按照单个字符挨个发送数据的形式(将PPP帧拆成一个个字节进行发送),PPP需要使用转义字符来实现透明传输,其转义字符为0x7D。而在同步通信时,由于是一次性发送一连串的二进制数据,可以使用对非标志位的数据每连续5个1添加一个0的方式来避免重复出现帧定界符(01111110,定界符为6个1)
地址位:由于是点对点协议,地址为默认0xFF
控制位:控制位暂时没有意义,默认0x03
协议位:用于标识数据部分的数据报是来自什么协议。其中协议位为0x0021时代表IP数据报,为0xC021代表LCP协议数据,为0x8021表示NCP协议数据。
数据部分:存放控制协议或者网络层的数据报。长度上限不可以超过MRU(默认1500字节)
FCS位:用于检验数据是否有差错,使用CRC算法。
3、PPP协议工作流程(从链路静止到链路打开的过程)
链路静止状态(Link Dead):是PPP链路的起始和终止状态。此时链路处于物理层未连接的状态。
链路建立状态(Link Establish):在链路静止状态下,通信两端建立物理层连接(PC与路由器建立信号连接)就可以进入到链路建立状态。
鉴别状态(Authenticate):在链路建立状态下通过LCP协议(PPP帧的协议位为0xC021)进行配置协商,配置成功则进入鉴别状态,失败则返回静止状态。发送端通过LCP协议配置最大帧长、鉴别协议(也可以设置无)、是否使用PPP帧的地址位和控制位等等选项。接受端则发回配置确认、配置否认、配置拒绝三种LCP帧来进行配置的协商。
网络层协议配置状态(Network-Layer Protocol):在鉴别状态下使用鉴别协议进行鉴别,鉴别成功则进入网络层协议配置状态,失败则进入链路终止状态,若没有设置鉴别协议也直接进入网络层协议配置状态。鉴别协议有密码鉴别协议PAP、握手鉴别协议CHAP等(这些协议由PPP帧的协议位标识,是独立于LCP协议外的协议)
链路打开状态(Link Open):在网络层协议配置状态下使用NCPs协议(PPP帧的协议位为0x8021)来配置网络层协议,配置完则进入链路打开状态开始正常的链路通信。每一种网络层协议对应一种NCPs控制协议,如网络层若使用IP协议,对应的控制协议为IPCP。
链路终止状态(Link Terminate):在链路打开状态下发送终止请求的LCP信号或者链路故障,以及在鉴别状态下鉴别失败会进入到终止状态。而终止状态下断开了物理层的连接后会进入链路静止状态。
3.4以太网标准(基于共享信道协议CSMA/CD)
1、以太网基础知识
1>两种标准:实际使用的以太网为一种符合DIX EthernetV2标准的局域网标准,而他=它还有对应的IEEE标准802.3。两者的区别主要在于IEEE中的会将数据链路层再分出一个逻辑链路层LLC。
2>拓扑类型:以太网的拓扑类型为总线型。由于目前有集线器的存在,拓扑类型变为星型,但是实质上还是总线型通信方式。(集线器工作在物理层,它不包含以太网的任何协议,仅仅是一种物理连接工具)
3>以太网的信道传播方式:遵循共享信道协议CSMA/CD
4>以太网的通信方式为:串行同步通信,并使用曼彻斯特编码方式。曼彻斯特编码方式具有自同步能力,因此可以实现单线同步通信。
2、以太网的网络适配器(网卡)作用主要:
1> 将串行的以太网数据转换成并行数据;
2> 在适配器的ROM里固定每一个适配器全球唯一的MAC地址。即MAC地址为嵌入在硬件中的地址。
3> 能够实现以太网协议,如CSMA/CD协议、MAC帧格式标准等。
3、共享信道协议CSMA/CD(带有碰撞检测的载波监听多点接入)
1>主要内容
主要运用于总线型多点接入的网络,当总线上的发送端要发送广播信号时,在发送前和发送过程中都必须进行载波监听,即监听总线上是否有信号在传递或者有碰撞发生。若没有则进行信号发送,有则进行相应处理。
2>工作流程
1. 发送帧之前先检测信道。
若信道忙,则继续不停检测;
若通道空闲,且在帧间最小间隔(为了保证接收端处理上个数据的缓冲时间)的时间内保持空闲则发送这个帧。
2.发送时不断监听信道。
若在争用期(争用期为碰撞窗口,具体计算为信号最远两端往返程传输时间,碰撞只可能在这个时间内发生。争用期大于帧间最小间隔)期间未检测到碰撞,则代表帧会发送成功;
若在争用期间检测到碰撞,则代表发送失败。此时立即停止帧发送,再发送规定时长的人为干扰信号来进行强化碰撞(保证所有主机都知道碰撞发生)。之后适配器执行指数退避算法(用于随机产生重发等待时间来避免再次碰撞冲突)来执行等待,等待完后再回到第一步检测信道来准备发送帧。
3>信道利用率
在CSMA/CD协议下,信道传输一帧的时间包含单程传输时间τ和一帧的发送时间T。若τ/T越小则信道的利用率越高,因此需要限定一个最小帧长,以及限制局域网最大线长来保证利用率。同时碰撞也会造成利用率的下降。
4、MAC帧
1>MAC帧格式
字段名 | 目的地址 | 源地址 | 类型 | 数据 | FCS |
字节数 | 6 | 6 | 2 | 46<length<1500 | 4 |
目的地址:目标主机的网卡MAC地址,若地址全1则代表是广播帧。
源地址:发送数据的主机网卡MAC地址
类型:标识网络层的协议类型。如0x0800为IP协议
数据:存放来自网络层的数据报
FCS:为检验序列,一般用CRC检验
2>MAC帧的物理层插入字段
字段名 | 前同步码 | 帧定界符 |
字节数 | 7 | 1 |
前同步码:为101010…的序列,由于以太网使用的是曼彻斯特编码,因此需要一段交替信号来进行自同步
帧定界符:为10101011,最后一个为1来标识帧的开始。前面部分仍然可以用于同步。
3>MAC帧会对不满足下限46的数据报进行填充到46再发送。而填充部分会利用在IP层记录的长度来进行剥离,因此MAC帧不需要记录数据长度等等信息。而由于曼彻斯特编码直接可以知道帧尾所在,也不需要记录帧长。
5、网桥
1>以太网扩展方式
1.集线器扩展:若使用工作在物理层的集线器对以太网进行扩展,只会使多个子以太网的碰撞域扩展成一个整体的碰撞域,即最大吞吐量会保持不变,当主机越多时,工作效率就会变低。
2.网桥扩展:网桥工作在数据链路层,且仅有两个端口。网桥的接口连接多个子以太网的集线器。当一个接口收到MAC帧时,对照网桥中的转发表查询帧的目的地址,再将帧通过接口传输到目的地址对应的以太网中去。
2>透明网桥
1.透明指的是以太网上的主机都不清楚自己发出去的帧经过了哪些网桥,即对主机不可见。
2.工作方式:当透明网桥的一个接口收到MAC帧,首先在转发表查询MAC帧的源地址,若没有则将地址和对应接口刷新到表上;接下来在转发表上查询MAC帧的目的地址,若有则转发到其对应接口(当其接口是发送过来的接口时,则丢弃MAC帧),若无则向除了接受帧的接口以外的接口转发MAC帧。
3.为了防止网桥连接网络环状连接时数据在中间循环传递,透明网桥还使用生成树协议STP,在每一个网桥里构建连接图的生成树,保证两个网桥之间只有一个路径。
3>源路由网桥
1.源路由网桥对于主机不是透明的,主机在发送帧到目标主机时需要知道所要经历的路径(经过的网桥连起来的路径)。
2.工作方式:每一个主机在发送数据之前先要发送包含目标地址的发现帧,发现帧会以广播形式传播到目标地址,再原路返回到主机,主机从发送帧中选取路径最优的路径,插在MAC帧的前面,再开始数据发送。源路由网桥根据这个路径进行转发选择。
4>两种网桥的区别
透明网桥对主机透明,工作量主要在网桥上,而且相当于是完全自动配置即插即用。而源路由网桥则对主机不透明,工作量主要在主机上,同时不能自动配置,但好处是帧的传递路径一般是最优的,而透明网桥则不能保证最优,同时相对能保证信道的负载均衡。最终网桥标准都必须支持透明网桥,但是可以附加源路由的特性。
5>交换机
交换机实质上相当于是一种多接口网桥。其与普通网桥的主要区别在于:接口数量上交换机具有多个接口,而网桥一般只有两个接口;交换机的连接点往往是单独的主机(若是多个主机连接到交换机上,就可以实现一对一独占式传输信息)或者集线器上面,而网桥则是连接在两个网段上(连在网线上对两个网络进行扩展);交换机利用专门的硬件芯片,传输效率更高,且交换机有对帧直接转发的工作方式,不需要缓存检错,因此可以达到速度更快。
3.5PPPoE协议(PPPover Ethernet)
1、PPPoE协议是使用以太网协议来传输PPP协议内容。
2、PPPoE协议主要用在宽带接入的过程中。由于以太网帧格式中不能实现接入时要使用的用户名,身份验证过程等功能。因此将PPP协议与以太网协议相结合来实现宽带接入技术。PPPoE常用与ADSL拨号上网(网线传输到调制解调器的过程中)、FTTH光纤到户(直接利用交换机实现以太网接入网络)等接入方式。
四、 网络层
4.1网络层的特点
网络层提供简单无连接的、尽最大努力交付的数据报服务(IP协议)。数据报到达接收端时可能是无序的、错误的、重复的或者是丢失的,保证可靠传输的机制在网络层的上一层运输层来实现。
4.2网际协议IP(Internet Protocol)
1、主要任务
互联网需要将各种各样的网络连接起来,而物理层的多种物理传输方式和数据链路层的多种通信协议导致各种各样的异构网络,因此需要一种协议将各种异构网络进行连接。而网络层IP协议通过分配全球唯一的IP地址的方式,利用路由器实现将各种异构网络进行互联。
2、IP地址
1>常用IPv4的地址定义为“网络号”和“主机号”,一共32位地址。这种分类方式主要是方便在申请IP地址时,可以根据申请IP数量的大小选择使用多大的网络
2>IP地址分为5类
A类地址:网络地址8位(0开头),主机地址24位
B类地址:网络地址16位(10开头),主机地址16位
C类地址:网络地址24位(110开头),主机地址8位
D类地址:以1110开头,其余的地址被用于多播地址
E类地址:以1111开头,用于保留
其中由于路由器广泛使用无分类IP地址进行选择(即利用子网掩码进行划分),因此ABC分类已经不再具有太大意义。
同一个局域网上面的主机或者路由器的IP地址的网络号应该是一样的(通过主机号来进行区分)。通过IP的网络号来进行划分一个网络,不同的网络之间通过路由器进行互联,因此路由器具有多个端口,且每个端口一般都对应一个不同网络号的IP地址。
3>子网划分
1.针对ABC类划分网络大小的不合理,提出了新的一种划分方式,通过子网掩码对IP地址进行划分,优势在于几乎可以划任意长度的网络地址,但是多出了子网掩码。
2.子网掩码将IP地址划分为“网络号”、“子网号”和“主机号”,若网络地址为n位,则掩码为左侧n个1右侧为0的32位二进制数,通过与IP地址与运算来得到网络地址(网络号+主机号)。
3.协议规定所有网络都必须使用子网掩码,若一个网络没有划分子网,则用默认子网掩码。A类网默认子网掩码为255.0.0.0,B类、C类同理。
4>CIDR无分类编址
即不再划分ABC与子网,仅通过位数来分成“网络前缀”和“主机号”,用\来分割IP地址和位数(如255.255.1.1/20表示前20位为网络前缀),原理与子网掩码分割网络地址和主机地址实质上相同,因此一般仍沿用子网掩码进行分割。
3、IP数据报格式
字段名 | 版本 | 首部长度 | 区分服务 | 总长度 | 标识 | 标志 | 片偏移 |
大小 | 4bit | 4bit | 1byte | 2byte | 2byte | 3bit | 13bit |
字段名 | 生存时间 | 协议 | 首部检验和 | 源地址 | 目的地址 | 可选字段 | 填充 |
大小 | 1byte | 1byte | 2byte | 4byte | 4byte | 不定 | 不定 |
字段名 | 数据部分 | ||||||
大小 | 建议不超过512字节 |
版本:IP的版本号,如IPv4、IPv6
首部长度:数据部分之前的部分为首部,标示首部的字节数=首部长度*4,由于最大为15,因此首部最长为60个字节。同时首部长度最少为5。
区分服务:使用区分服务时使用该字段,一般不使用
总长度:整个数据报的长度,是首部长度加上数据部分长度之和。若进行分片,则为每个分片的长度总和(此时每个分片都包含首部)。
标识:每发送一个数据报标识位就加一。主要用于当IP数据报长度大于链路层协议最大长度MTU时,会被IP协议分成多片,每一片都具有一个首部(但首部的标识位相同而不加一),通过对标识位相同的数据报进行拼接还原。
标志:第一位为MF,第二位为DF,第三位暂时无用。DF标识数据链路层能否进行分片,MF位用于标识后面是否还有分片。
片偏移:指出当前分片的在总报文中的位置,即该片之前应该有多少数据。片偏移=之前数据部分字节/8
生存时间TTL:当报文经过一次路由器,TTL就会减一,到0时则丢弃报文。避免报文在网络中兜圈子。
协议:表明传输层所使用的协议类型。如常见的TCP、UDP、ICMP、IGMP、EGP、BGP、IGP、RIP、OSPF等协议
首部检验和:仅对报文的首部进行检验以减少计算量。
源地址:发送端IP地址
目的地址:接收端IP地址
1>IP数据报包含首部和数据部分,其中首部分为20字节的固定部分和最大40字节的不固定部分
2>其中标识、标志、片偏移三个字段决定数据报的分片工作。因此IP层也提供分片功能,在传输层TCP也具有将数据分段传输的功能。
4、IP数据报转发流程
1>地址解析协议ARP
1.ARP协议数据由MAC帧直接携带,不通过IP协议封装。其主要用于在转发IP数据报给目标主机或者中间的路由器时,解析对应主机或者路由器的硬件地址以用于数据链路层传输。
2.每个主机都设有一个ARP高速缓存(代表关机清空表),存放该局域网各主机IP与MAC地址的映射表。该表用于查找IP地址的主机对应的MAC地址,以便在以太网上传输数据帧到对应IP地址的主机。
3.ARP工作方式为:当主机要传输给某个IP地址的主机时,若ARP缓存中有IP与MAC的对应项,则向对应的MAC地址传递IP数据报(只有有了MAC地址才能传递IP数据报);若ARP缓存中没有对应项,则广播ARP请求给该局域网上所有主机,对应IP地址的主机会发送ARP响应,将MAC地址传递给请求主机。若是目的主机不是该局域网的主机,则发送主机会ARP找到路由器的MAC地址,将IP数据报发送到路由器,之后由路由器的ARP协议来进行下一步地址解析,直到传递到目的主机。
4.APR协议需要结合路由表分组转发算法一起工作,最终将数据报传递到目的地址。路由器会根据目的IP地址解析下一跳的IP地址,而ARP会将对应下一跳的IP地址转换成MAC地址封装成帧再进行传输
2>分组转发算法(基于路由表)
1.路由表存在于主机和路由器中,用于转发IP数据报时进行路由选择。
2.路由表主要包含“网络地址”、“子网掩码”和“下一跳地址”等,其中网络地址为IP地址中的网络地址部分,可以通过子网掩码进行计算得到,下一跳地址为若要传输数据到该网络地址的网络中去,则需要先传输到下一跳IP地址对应的主机或者路由器中
3.转发流程为:首先检查目的IP地址,通过与表上各个网络的子网掩码进行计算,得到对应的网络地址。查询路由表,若该网络地址的下一跳地址为直接连接的网络,则进行直接交付;若路由表中有网络地址直接为目的IP地址的特定主机路由(特定的路由器),则转发到该特定路由;若查找到该网络地址对应的下一跳地址为路由器,则转发给下一个路由器;若未在路由表上找到对应的网络地址,则转发下一跳地址到默认路由器地址;若未找到下一跳地址且没有默认路由地址,则报告分组出错。
4.3网际控制报文协议ICMP
1、ICMP协议的报文封装在IP数据报中,但是它是IP层协议。ICMP协议主要通过一些控制报文来对IP层的信息传输进行控制和管理。
2、ICMP报文格式
字段名 | 类型 | 代码 | 检验和 | 取决于类型部分 | 数据部分 |
字节数 | 1 | 1 | 2 | 4 | 取决于类型 |
1>类型为ICMP报文的类型,代码为该类型下的具体情况代码,检验和为数据校验,后面的4个字节取决于具体类型,数据部分为报文传递的有用信息。
2>ICMP类型有多种,具体分为差错报告报文(发给源主机)和询问报文(源主机发出)。
常见差错报告报文:
终点不可达(类型3):当主机或者路由器不能够转发一条IP数据报时,就向源地址发送该报文
源点抑制(类型4):当主机或者路由器因为堵塞导致数据报丢失时,向源点发送该报文要求源点降低发送速率
时间超时(类型11):当路由器因为IP数据报的生存时间为0而丢弃数据报时,向源点发送该报文。
参数问题(类型12):当IP数据报的首部校验错误时,丢弃数据报,并向源点发送该类型报文
改变路由(类型5):路由器将该报文发给源点来使主机将该数据报发给另外的路由器进行转发(往往是更适合的路由)
常见询问报文:
回送请求和回答(类型8/0):向路由器或者主机发送该报文,对应的接收端若收到需要回复相应报文,从而源主机可以得到相关的传输状态信息。PING就是基于这个原理对网络进行测试。
时间戳请求和回答(类型13/14):向路由器或者主机发送该报文,请求回复携带当前时间信息的响应报文。可用于时间同步或者测量传输时间。
4.4路由选择协议
1、路由选择协议主要用于建立路由表,以特定算法来使路由表记录最佳的路由,提高数据报的转发效率。
2、由于互联网由无数个小的网络(比局域网大)组成,这些网络内部路由选择可能会不相同,这些网络叫做自治网络(一般规模相当于一个当地的ISP),自治网络内部使用内部网关协议IGP(常见有IGP、RIP、OSFP等协议),自治网络之间使用外部网关协议EGP(常见有EGP、BGP等协议)
3、内部网关协议RIP
1>RIP协议的报文封装在UDP报文中,但它是网络层协议。其基于距离最短来更新路由选择信息,距离指的是跳数,即经过的路由器节点个数,节点个数越少,路径越优先。这种协议的路由表中记录的是到各个目的网络的距离和对应的下一跳地址,路径是唯一的。
2>实现方式是:路由器定期向相邻的路由器传递RIP报文,报文中包含该路由器的路由表信息,主要包含目的网络,下一跳地址,以及到达该目的网络的距离多项信息。相邻路由器对收到的路由表信息进行自己的距离加一运算,再根据自己路由表的已有信息更新有效信息到自己的路由表上。
3>RIP规定最大跳数只能为15,因此只适用于小型网络的路由选择。由于其更新的方式会导致对于故障信息发现较慢,因此相对更新过程收敛较慢。好处是实现简单,网络开销小。
4、内部网关协议OSPF
1>OSPF协议报文直接封装在IP数据报中,是网络层协议。其基于多种因素如时间、距离、费用、带宽等等度量来决定路由的选择。将全网的链路状态记录到数据库中,能够知道全网的拓扑结构,因此可以负载均衡地多路传递数据报。
2>实现方式主要是基于泛洪法,一个主机在其邻近的链路状态发生改变时,会将自己新的链路状态信息通过广播传递的形式,发送给自治网络里面的每一个路由器来对其他的路由器进行更新。
3>OSPF协议相对RIP协议更加复杂,实现代价也相对较大。但是可以更均衡的传输IP数据报,同时路由信息更新收敛更快,更适合于更大且更复杂的网络。
5、外部网关协议BGP
1>BGP协议报文封装在TCP报文中,也是网络层协议。需要外部网关协议来决定路由信息的主要原因是,要将各个大大小小的自治网络连接起来形成整个互联网,路由器中的路由表记录的网络地址数量会变得非常庞大,若对如此庞大的数据进行诸如OSPF协议形式的数据库寻找路径,计算量会非常大;同时由于各个自治网络不同的内部网关协议,路径的代价也变得不好评判,路径择优的策略也需要改变。
2>主要方式是每个自治网络都会有至少一个路由器作为BGP发言人,BGP发言人之间发送BGP报文传递到达各个网络地址要沿经的自治网络信息。这时更新路由信息的数量级就转变到相对较小的自治网络的数量级上,而不再是网络地址的数量级上,使路由表信息更新变为可行。
4.5IP多播技术
1、IP多播主要用于当需要将一份数据同时传递给多个目标主机的时候,若发送多份数据到网络中,会占据相对较大的通信资源。IP多播则是传递一份数据到网络中,路由器对多播地址进行判断,若存在多个不同的相连网络中都存在接受该数据的主机,则路由器对数据进行复制再分别传播来整体上降低对带宽的占用。
2、由于IP多播的目标地址是多个主机组成的多播组,因此设计使用IP的D类地址来用作IP多播的目标地址(该目标地址不指向任意一个主机,而是代表一个多播组的地址,路由器使用该地址进行判断,再传递数据到在这个多播组中的主机的局域网中),同时MAC地址也有相应的一部分用于硬件多播的目标地址(硬件多播的目标MAC地址由多播的目标IP地址转换过来,主要用于以太网的多播,实际上也是在以太网上广播形式传播,网卡会对收到的多播数据报进行判断接收)。
3、IP多播技术主要用到网际组管理协议IGMP和多播路由选择协议。IGMP主要用于主机向局域网上的多播路由器交换连入或退出多播组的控制信息,而多播路由选择协议相当于一般IP数据报的路由选择协议,用于更新路由器的多播路由选择,不过相对前者更加复杂。
4.6虚拟专用网VPN技术
VPN主要作用是在互联网上建立虚拟的专用网络进行通信,主要用于企业的内网远程通信。当要借助互联网进行内网的远程通信时,需要在收发两端都具有一个连接在互联网上的路由器。该路由器在发送数据时,会将数据报用另一端路由器的IP地址进行加密打包,再先传输到另外一端的路由器那里,另一端路由器再进行解包,传到最终的目的地址中去(因为目的地址很可能是内网地址,因此不能直接在互联网中传输)。
4.7网络地址转换NAT技术
由于IP地址数目的有限,不可能每一个主机就拥有一个IP地址,为了解决这个问题,专门分别指定了ABC类地址中的一部分用于内网地址,这一部分地址可以用于内部主机进行IP通信,而互联网中则不会转发到达这部分地址的数据报。当内网主机想要和外网进行通信时,则需要使用到NAT技术。连接到外网的路由器利用IP和运输层的端口号,与每一个内网主机的IP与端口号对应连接,内网主机通过该路由器的IP地址对外网进行通信,收到的数据再通过端口号对应传递回内网主机。
五、 运输层
5.1运输层的功能
运输层向应用层提供服务,它可以提供对报文数据进行差错检测(IP数据报只检测首部)、流量控制、拥塞控制等服务,同时可以提供尽最大努力交付的UDP传输服务与可靠有连接的TCP传输服务,同时提供端口号来实现主机之间的进程通信。
5.2端口
1、主要作用:主机之间的通信实际上是主机上面的应用之间的互相通信,也即进程之间的通信,不同进程之间的通信内容需要从IP层的数据报中区分开来,因此在运输层设置端口属性来代表各个进程的通信数据。
2、端口号范围为十六位(端口实际上是软件端口,物理上并不存在),其中0到1023端口为系统端口号,用于一些系统应用,1024到49151端口为登记端口号,用于一些其他应用,其余的端口号是用于客户端使用的短暂端口号,有客户连接时使用这种端口,连接完毕则释放端口。
5.3用户数据报协议UDP
1、UDP的主要特点为:
1>通信方式是无连接的,在发送数据前不需要建立连接,同时还能进行一对多、多对多、多对一多种方式的通信。
2>尽最大努力交付数据,但并不保证可靠交付,因为没有建立连接
3>数据内容是面向报文的,即对应用层传递下来的报文不会进行拆分就直接进行打包传递到网络层(由于UDP不会保证数据的有序性,因此需要保证一个报文的整体意义)。因此使用UDP时应用层报文大小需要调整适中,若太长IP层需要分片而降低效率;若太短导致首部占比太大也会降低传输效率。
4>没有流量控制、拥塞控制等功能,因此大量使用UDP通信可能造成网络拥挤。
5>由于功能简单,因此首部开销小,仅为8个字节
2、UDP数据报格式
字段名 | 源端口 | 目的端口 | 长度 | 检验和 | 数据部分 |
字节数 | 2 | 2 | 2 | 2 |
|
源端口:发送方的端口号
目的端口:接收方的端口号
长度:UDP报文的长度,包含首部
检验和:对UDP报文的校验值
5.4传输控制协议TCP
1、TCP的主要特点为:
1>通信方式是有连接的,需要通过三次握手协议建立连接,同时只能支持一对一的连接通信。
2>提供可靠交付服务,传送的数据是无差错且不丢失、按序接收的。
3>数据内容是面向字节流的,仅将数据看作字节数据,自动选择合适长度发送报文段,不保证发出的TCP报文段大小和收到的应用层报文大小有对应关系,因此接收方必须有识别报文段内容的能力。
4>TCP协议还提供流量控制、拥塞控制等功能,因此首部也相对较长较复杂,首部最少为20字节,最多扩展到40字节。
2、TCP报文段格式
字段名 | 源端口 | 目的端口 | 序号 | 确认号 | 数据偏移 | 保留 |
长度 | 2byte | 2byte | 4byte | 4byte | 4bit | 6bit |
字段名 | 控制位 | 窗口 | 检验和 | 紧急指针 | 选项/填充 | 数据部分 |
长度 | 6bit | 2byte | 2byte | 2byte | <40byte |
|
源端口:发送方的端口号
目的端口:接收方的端口号
序号:占4个字节,TCP报文段面向字节,会对发送的字节数进行编号,每一次发送时,会将当前报文段的第一个字节的序号写入序号字段中。
确认号:占4个字节,也是一个序号值,向另一端发送表示期望收到的下一个报文段的第一个字节的序号值为多少,即该序号值之前的报文段都已经成功接收(是一种TCP保证可靠传输的一种方式,传输数据时需要收到对方的确认才继续向前发送数据)。
数据偏移:只有4bit,代表首部长度。具体计算为首部长度=数据偏移*4。因此选项和填充部分最多只有40字节。
保留:暂时保留功能
控制位:包括6个位,依次为
1>URG:若该位置于1,表示当前的报文段存放的是紧急数据,发送方会将紧急数据插入到报文段的最前面进行发送(因此需要指明插入长度,以区分非紧急数据,需要和紧急指针配合使用),同时接收方一旦收到该报文段,由于紧急数据在最前面,因此得以优先处理。
2>ACK:只有置1时确认号才有效,因此在建立连接之后ACK基本上都是置1的。
3>PSH:当PSH置一时,代表发送方希望接收方能对该报文段进行立即的响应,接收方会在收到该报文段后尽快交由应用程序处理。
4>RST:当RST置一时表示连接出现严重差错,需要断开并重建连接。
5>SYN:主要用于在建立连接时同步序号,与ACK配合使用。
6>FIN:置一时表明发送方已经发送完数据,要求释放连接
窗口:窗口值代表的是发送方从该报文段的确认号开始可以接收的数据长度,用于告诉接收方发送多少数据,同时也是接收方设置窗口大小的依据。
检验和:对TCP报文段的校验值
紧急指针:配合URG使用,仅当URG为1时有效。主要用于指出紧急数据在一个报文段中的字节长度
选项/填充:用于一些多余的选项信息,如设置报文段的最大长度MMS(避免IP层进行分片),窗口扩大选项来设置更大的窗口值等。
数据部分:即TCP报文段存放的应用层数据
3、TCP运输连接管理
1>运输连接包含三个阶段,连接建立、数据传送、连接释放。
2>连接建立:主要使用三次握手的方式建立连接。具体过程为,当主机A要向主机B主动建立连接之前,双方需要先建立传输控制块,此时B会处于LISTEN监听状态;主机A处于SYN-SENT同步发送状态,并向B发送SYN=1ACK=0的请求同步报文段;B在收到改报文段后状态变为SYN-RCVD同步收到状态,并向A发送SYN=1 ACK=1的同步收到报文段;A在收到同步收到报文后,状态变为ESTAB-LISHED已建立监听状态,并向B发送SYN=0 ACK=1的确认报文;B在收到确认报文后状态也变为ESTAB-LISHED已建立监听状态,此时即可开始数据传输。(三次握手指的是3此报文段的传递过程,其作用在于前两次握手是互相通知建立连接,第三次确认则可以防止失效的请求报文导致错误建立连接的情况)
3>连接释放:当A主机要向B主机释放连接时,A先向B发送FIN=1的报文段,并进入终止等待状态;B收到报文段后,向A发送ACK=1的报文段将剩下要向A发送的数据发送完毕,并进入关闭等待状态;当B发送完报文后向A发送ACK=1 FIN=1的终止报文,并进入最终确认状态;A在收到B的终止报文后发送ACK=1的确认报文,并进入时间等待状态(主要防止确认没有传到B的情况还需要进行重传);B收到确认报文后就可以关闭连接了,A则在等待时间结束后也进入关闭连接状态。
4、TCP的滑动窗口协议
1>由于TCP在传输的过程中是使用流水线传输的方式(发送方连续发送多个分组,接收方对接收数据发回确认保证接收可靠),为了避免接收缓存的不足,以及对传输数据的控制来避免网络拥塞并保证传输可靠,TCP使用了滑动窗口协议。
2>滑动窗口是面向字节的,TCP的发送端和接收端都具有一个滑动窗口。其具体工作方式是:发送方可以发送窗口范围内的字节数据到接收方,当接收方收到发送方的报文段后,将累计已经收到的报文段序号作为确认号,并将确认号通过报文段传递回发送端,此时发送方可以根据该确认号得知接收方已经收到了多少数据,从而向前移动发送窗口来发送新的数据。
3>发送窗口大小必须时刻小于或等于接收窗口,才不会导致发送数据的丢失,一般来说窗口会在建立连接时进行同步,使窗口大小相等。当拥塞控制时则会减小发送窗口
4>若接收端有不按顺序到达的数据存在,返回的确认号仍然以连续到达数据的最后一个字节序号作为确认号发回发送端。因此确认号的缺陷在于不能告诉发送端具体哪一个数据暂时没到达或者丢失了,所以发送端重发未确认数据时就需要全部重发。
5>接收端的确认号必须是累计确认,以减小网络负担。但累计确认的推迟时间不能太长,否则会导致发送端重传数据。同时接收端也可以配合自己要发送的报文段将确认号携带到发送端,避免不必要的单独确认报文。
6>滑动窗口可以用于流量控制,流量控制指的是控制发送端的发送,使接收端来得及接收和处理缓存数据。具体过程为,当接收端接收了一定数据后,由于应用程序还没对缓存数据进行处理,接收缓存窗口实际上变小了,此时接收端发送的确认报文段中还要包含新调整的窗口大小,以避免发送端发送超出接收窗口的报文段而造成丢失。