一、计算机网络概述
1、Internet网相关概念及发展
- 网络(Network)有若干结点(Node)和连接这些结点的链路(link)所组成,在网络中的结点可以是计算机、集线器、交换机或路由器等
- 多个网络还可以通过路由器连通起来,构成一个覆盖范围更大的计算机网络,这些网络称为互连网(internet或internetwork)
- 因特网(Internet)是世界上最大的互连网络
- internet和Internet的区别
- internet(互联网或互连网)是一个通用名词,他泛指由多个计算机网络互连而成的网络,在这些网络之间的通信协议可以是任意的
- Internet(因特网)是一个专用名词,指全求最大的开发的,有众多网络互连而成的计算机网络,采用的是TCP/IP协议族作为通信的规则,前身是美国的ARPANET
- 如果用一朵云来表示网络有两种情况
- 用云表示的网络已经包含了和网络相连的计算机,
-
- 表示的互连网里面是许多路由器和连接这些路由器的链路,把有关的计算机画在外面(与网络相连的计算机称为主机)
- ISP:互联网服务提供者:例如中国的三大运营商
- ISP可以从互联网管理机构申请很多的IP地址(互联网主机必须要有IP地址才能上网),同时拥有通信线路,所以机构或个人向ISP缴纳规定的费用,就可以从该ISP获取所需IP地址的试用权,通过该isp接入到互联网
- 根据提供服务的覆盖面积和所拥有的IP地址数目的不同,可分为主干ISP(第一层ISP)、地区ISP(第二层ISP)和本地ISP
2、因特网的组成
2.1 功能划分
由所有连接在互联网上的主机(端系统)组成,这部分是用户直接使用的,用来通信和资源共享;边缘部分可以是手机、电脑、智能摄像头等等
(1)通信:两台主机之间的通信实际上指的是两台主机上的两个程序在通信,即“主机A 的某个进程和主机B上的某个进程在进行通信”,简称为“计算机之间的通信”,通信方式主要分为两类
- 客户服务器方式(c/s方式):客户和服务器指通信中设计的两个应用进程,客户是服务请求方,服务器是服务提供方、
客户程序必须指定服务器程序的IP地址,对硬件和操作系统没有要求,但是服务器虽不需要指定客户程序的IP地址,但其硬件和操作系统要求很高
- 对等方式
对等方式指两个主机在通信时并不区分是服务方和服务提供方,只要两个主机都运行了对等连接的软件,就可以进行平等的,对等连接通信,例如两台主机上的QQ通信
由大量网络和连接网络的路由器组成,为边缘部分提供服务的, 网络的核心部分其特殊作用的是路由器
(1)三种交换方式
- 电路交换:电话交换机连通电话线的方式
电话交换机:可以简单看成是一个有多个开关的开关器,可以将需要通信的任意两部电话的电话线路按需截图,减少连接的电话线的数量
电话交换的三个步骤:建立连接(分配通信资源);通话(一直占用通信资源);释放连接(归还通信资源)
电话交换的缺点是:当用户正在输入和编辑一份待传输的文件时,用户所用的通信资源暂时未被利用,但其他的用户也不能利用,被浪费掉,因此其其传输效率非常低,不适用于计算机和计算机之间的通信
- 分组交换(重要):路由器是实现分组交换的关键构件,其任务是转发收到的分组,是网络核心部分最重要的功能
分组交换采用的是存储转发技术,把一个报文划分为几个分组后再进行传送:
报文:即要发送的整块数据称为报文
分组(包):把较长的报文划分为一个个更小的等长数据段,在每一个数据段前面,加上由一些必要的控制信息组成的首部后,就构成了一个分组,分组的首部称为“包头;分组时互联网中传送的数据单元;“首部”中包含了诸如目的地址和源地址等重要控制信息,每一个分组才能在互联网中独立的选择传输路径,并被正确得交付到分组传输终点
分组交换的特点:构成原始报文的一个个分组在各个结点路由器上进行存储转发,并且可以进行差错校验,保证报文的完整性和准确性
- 报文交换
整个报文线传送到相邻的结点,全部储存后查找转发表,转发到下一个节点;因为对报文的大小没有限制,所以对接收报文的设备的缓存空间要求较高
- 三种交换方式的比较
2.2 计算机网络的分类
(1)广域网WAN:作用范围通常为几十到几千公里,因而有时称为远程网;广域网是互联网的核心部分,其任务是通过长距离(例如跨越不同的国家)运送主机所发送的数据。连通广域网各结点交换机的链路一般都是高速链路,具有较大的通信容量
(2)城域网MAN:城域网可以为一个或几个单位所拥有,但也可以是一种公共设施,用来将多个局域网进行互连,目前很多城域网采用的是以太网技术,有事也并入局域网的范围讨论
(3)局域网LAN:局域网一般用于微型计算机或工作站通过高速通信线路相连,例如校园网
(4)个人区域网PAN:个人区域为就是在个人工作的地方把属于个人使用的电子设备用无线技术连接起来,范围很小
(1)星型
星型拓扑结构是目前局域网普遍采用的一种拓扑结构,使用一个结点作为中心节点,其他节点直接与中心结点相连构成的网络,中心节点可以是服务器也可以是连接设备,常见的中心结点为集线器或路由器;他属于集中控制型网络,整个网络由中心节点执行集中式通行来控制管理,各节点间的通信都要通过中心节点,每一个要发送数据的节点都要先把数据发到节点中心,再由节点中心发送到目的节点,所以节点中心很复杂,各个节点的通信处理负担小,只需要满足链路的简单通信要求
优点
- 控制简单,任何一个站点只和中心结点相连接,介质访问控制比较简单,所以访问协议也很简单,易于网络监控和管理
- 故障争端和隔断容易。中央节点对连接线路可以逐一隔离进行故障检测定位,单个连接点的故障只影响一个设备,不会影响全网
- 方便服务,中央节点可以方便对每个站点提供服务和网络重新配置。
缺点:
- 需要耗费大量的电缆、安装、维护的工作量也骤增
- 中央节点负担重,一旦发生故障全网受影响
- 各站点的分布处理能力较低
(2)总线型
总线型的拓扑图中所有的设备都直接和总线相连,介质一般是同轴电缆,现在也有采用光缆作为介质的
总线结构各工作站和设备都在一条总线上,各工作站的地位都是一样的,没有中心节点的控制,公用总线上的信息多以基带形式串行传递,传递方向都是从发送信息的节点开始向两端扩散,因此又称为广播室计算机网络。各节点接收信息时都进行地址检查,看是否与自己的工作站的地址相符,相符则接收网上的信息。
总线结构特点:
- 结构简单:网络各接点通过简单的搭线器即可接入网络,
- 走线量小:与星形网络相比走线简单
- 成本低:总线型因用线量小,无需集线器等昂贵的设备,不用线槽、接线盒等,成本较低
- 扩充灵活:星型网络增加节点很复杂,而总线型只需增加一个头一个光缆就可以增加一个节点
- 故障诊断和隔离比较复杂:当节点发生故障,隔离起来比较方便,但是传输介质出现故障时,就需要将整个总线切段
(3)环型
环型结构由网络中若干节点通过点对点的链路首尾相连形成的一个闭合的环,这种结构使得公共传输电缆组成环型连接,数据在环路中沿着一个方向在各个节点间传输,信息从一个节点传到另一个节点
这种结构主要应用于令牌网中,在这种网络结构中各设备是直接通过电缆来串接的,最后形成一个闭环,整个网络发送的信息就是在这个环中传递,通常吧这类网成为"令牌网"
实际情况下,环的两端是通过一个阻抗匹配器来实现闭环的,因为实际组网时,因地理位置的限制不方便真的做到环的两端物理连接
- 令牌环
令牌环网的媒体接入控制机制采用的是分布式控制模式的循环方式,在令牌网中有一个令牌沿着环型总线以逆时针的方向在入网节点计算机间依次传递,令牌本身不包含信息,仅仅控制信道的使用,确保在同一时刻只有一个节点能够独占信道。当环上节点都空闲时,令牌绕环行进,节点计算机只有取得令牌后才能发数据。令牌在环网上顺序传递,对入网计算机来说访问权是公平的
令牌在工作中有"闲"和"忙"两种状态,"闲"表示令牌没有被占用,即网中没有计算机在传送信息;"忙"表示令牌已经被占用,即网中有信息正在传送。要传信息的计算机拿到令牌后将"闲"状态调整为"忙"状态,才可以在令牌后面传送数据,目的机收到数据后,数据被从网上除去,令牌被重置为"闲"
(4)网状型
网状拓扑结构,主要指各个节点通过传输线互联连接起来,并且每一个节点至少与其他两个节点相连,网状拓扑结构具有较高的可靠性,但其结构复杂,实现起来费用较高,不易维护和管理,不常用于局域网
优点:
- 网络可靠性高,一般通信子网中任意两个节点交换机之间,存在着两条或两条以上的通信路径,当一条路径发生故障时,还可以通过另一条路径把信息传送至节点交换机
- 网络可以组建成各种形状,采用多种通信信道,多种传输速率
- 可选择最佳路径,传输延迟小
缺点:
- 控制复杂,软件复杂
- 线路费用高,不易扩充
- 在以太网中,如果设置不当,会造成广播风暴,甚至网络完全瘫痪
2.3 计算机网络的性能指标
- 计算机发送的信号是以二进制数字形式的;一个二进制数字就是一个比特(bit)
- 字节:Byte,1Byte = 8bit(1B=8b)
- 常用数量单位:
8 bit = 1Byte
KB = 2^10 B
MB = K * KB = 2^10 * 2^10 B= 2^20B
GB= 2^30B
TB=2^40B
- 速率:连接在计算机网络上的主机在数字信道上传送比特数据的速率,也称为比特率或数据
- 常用数据率单位
bit/s (b/s、bps)
kb/s = 10^3 b/s
Mb/s = k * kb/s = 10^3 * 10^3 b/s = 10^6b/s
Gb/s = 10^9 b/s
Tb/s = 10^12 b/s
- 在计算机网络中,带宽用来表示网络中某通道传送数据的能力,因此网络带宽表示在单位时间内网络中的某信道所能通过的"最高数据率"
- 单位:b/s(kbs,Mb/s,Gb/s,Tb/s)
- 宽带的带宽是100兆:出口网速最高100Mb/s
- 吞吐量表示在单位时间内通过某个网络(或信通、借口)的数据量
- 吞吐量是对实际网络的测量,以便了解实际有多少数据量能够通过网络
- 与带宽相比都是用数据量/单位时间,但是一个是衡量标准最大传输速度,一个是实际的通过量
- 吞吐量受带宽或定速率的限制
- 时延(delay)是指数据(一个报文或分组、比特)从网络(或链路)的一端传送到另一端所需的时间。时延是很重要的性能指标,有时也称为延迟或迟延
计算机中的时延是由以下几个不同的部分组成
(1)发送时延
- 主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特开始,到该帧的最后一个比特发完所需要的时间
- 发送时延的计算公式
发送时延= 数据帧的长度(bit)/发送速率(bit/s)
- 主机的发送速率和网卡的发送速率、信道的带宽、接口的速率有关;通常情况下实际的发送速率取这几者中的最小值
(2)传播时延
- 电磁波在信道中的传播一定的距离要花费的时间
- 传播时延的计算公式:
传播时延= 信道的长度(m)*电磁波在信道中传播的速率(m/s)
其中传播速率:自由空间:3*10^8 m/s; 铜线2.3*10^8m/s; 光纤2.0*10^8m/s
(3)处理时延
处理时延指主机或者路由器在收到分组信息时花费的时间,例如分析分组的首部、从分组中提取数据部分、查找合适的路由等,通常是由设备来决定的,一般无法具体计算。
(4)思考:现忽略处理时延,键入有一个长度为100MB的数据块,在宽带为1Mbits的信道上连续发送,其发送时延是多少
100 * 2^20 * 8 /10^6 =838.9s
现把这个数据块用光纤传送到1000km远的计算机。由于在1000km的光线上的传播时延约为5ms,则发送100MB的数据块的总时延= 838.9s +0.005S =838.9005s。可见这种情况,发送时延决定了总时延的数值。
- RTT往返时间表示从发送端将数据发送到传输媒介开始,到发送端收到来自接收端的确认总共经历的时间(不包含发送时延)
- RTT由三个部分决定,链路的传播时间、末端系统的处理时间、路由器的缓存中的排队和处理时间;前两个值作为一个TCP连接相对固定,路由器的缓存的排队时间和处理时间会随着网络拥塞成都的变化而变化。所以RTT的变化在一定程度上反映了网络拥塞程度的变化
- 例如,A向B发送数据,如果数据长度是100MB,发送速率是100Mbit/s,那么
如果B正确收完100MB的数据后,就立即向A发送确认,
再假定A只有在收到B的确认信息后,才能继续向B发送数据,显然,这需要等待一个往返时间RTT(这里假定确认信息的数据帧很短,只包含了关键信息,所以可忽略B发送确认的时间)。如果往返时间= 2 s,那么可以算出A向B发送数据的有效数据率为80Mbit/s,比原来的数据率100Mbit/s小很多
利用率有信道利用率和网络利用率两种
根据排队论,当某信道的利用率增大时,该信道引起的时延也会迅速增大
- 如果令Do表示网络空闲时的时延,D表示网络当前的时延,那么在适当的假定条件下,可以用下面的简单公式来表示D、Do和利用率U之间的关系为:
- 这里的U就是网络利用率,数值在0-1之间
- 当网络的利用率达到50%时,时延就要加倍;当U超过50%时,时延急剧增大
- 当U接近100%时,时延就趋于无穷大
- 因此,一些拥有较大主干网的ISP通常会控制他们的信道利用率不超过50%,如果超过就要扩容,增大线路的带宽。
- 信道利用率并非越大越好
丢包率即分组丢失率,指在一定的时间范围内,传输过程中丢失的分组数量与总分组数量的比率
分组丢失的主要原因:
- 分组在传输过程中出现误码,被结点丢弃
主机发送的分组在传输过程中出现误码,当分组进入传输路径中的结点交换机后,被结点交换机检测处出误码,即被丢弃
- 分组到达一台队列已满的分组交换机时被丢弃,在通信量大的时候就可能造成网络拥塞
在上图中,监视路由器R当前的输入缓冲区已满,此时主机发送的分组到达路由器。路由器没有存储空间暂存该分组,只能将其丢弃。实际上,路由器会依据自身的拥塞控制方法,在输入缓存还未满的时候就主动丢弃分组。
- 因此,丢包率反映了网络的拥塞情况:无拥塞时路径丢包率为0
轻度拥塞时路径丢包率为1%~4%;严重拥塞时路径的丢包率为5%~15%
二、计算机网络体系结构
1、常用的计算机网络体系结构
1.1 OSI体系结构
为了使不同体系结构的计算机网络能够互联,国际标准化组织于1997年成立了专门机构研究该问题,不久他们就提出了一个试图使各种计算机在世界范围内都能够互连成网的标准框架,也就是著名的“开放系统互连参考模型”,简称OSI,OSI体系结构有时候我们也称为OSI模型
OSI是一个七层协议的体系结构:从下往上依次是物理层、数据链路层、网络层、运输层、会话层、表示层、应用层
由于基于TCP/IP的互联网已抢先在全球相当大的范围内成功的运行了,而几乎没有厂家生产出符合OSI标准的商用产品,因此,OSI只获得了一些理论研究的成功,但在市场化方面则事与愿违的失败了
现如今规模最大的、覆盖全球的、基于TCP/IP的互联网并未使用OSI标准;OSI体系结构是法律上的国家标准,TCP/IP体系结构是事实上的国际标准
1.2 具有五层协议的体系结构
1、TCP/IP是一个四层的体系结构,他包含应用层、传输层、网际层和网络接口层
2、在学习计算机网络的原理是采用折中的办法,综合OSI和TCP/IP的优点,采用一种只有五层协议的体系结构。有时也可把最底层的两层称为网络接口层
3、各层主要功能
(1)应用层(application layer)
- 最高层,其任务是通过应用进程间的交互来完成特定网络应用。其协议定义的是应用进程间通信和交互的规则。此处的进程就是指主机中正在运行的程序
- 对于不同的网络应用需要有不同的应用层协议。例如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等
- 把应用层交互的数据单元称为报文
(2)运输层(transport layer)
- 运输层的任务是负责向两台主机进程之间的通信提供通用的数据传输服务层
- 运输层主要使用的两种协议:
- 传输控制协议TCP (Transmission Control Protocol):提供面向连接的、可靠的数据传输服务
- 用户数据报协议UDP (User Datagram Protocol):提供无连接的、尽最大努力的数据传输服务(不保证数据传输的可靠性)
(3)网络层(network layer)
- 主要作用就是实现两个网络系统之间的数据透明传输,具体包括路由选择,拥塞控制和网际互连等
- 在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,由于网络层使用IP协议,因此分组也叫做IP数据报,简称为数据报
- 数据在经过网络层时就会加上IP协议的头部
(4)数据链路层(data link layer)
- 数据链路层常简称为链路层。数据在两台主机之间的传输是一段一段的链路上传送的。
- 在两个相邻的结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在相邻的节点之间的链路上传送帧,每一帧数据和必要的控制信息(如同步信息、地址信息、差错控制等)
(5)物理层(physical layer)
- 利用传输介质为数据链路层提供物理连接,实现比特流的透明传输
- 物理层上所传输的数据单位时比特
1.3 物理层
物理层主要解决各种传输媒体上比特0和1的问题,进而给数据链路层提供透明传输比特流的服务
由于传输媒体的种类太多(如同轴电缆、光纤、无线电波等),物理连接方式也有很多例如对点连广播连接等,因此物理层协议种类也很多。
传输媒体:
同轴电缆的各层都是共圆心的,也就是同轴心的
同轴电缆有两种:
-
- 基带同轴电缆:数字传输,过去用于局域网
- 宽带同轴电缆:模拟传输,目的主要用于有线电视
同轴电缆价格比较贵,而且布线不够灵活和方便,随着集线器的出现,在局域网领域基本上都采用双绞线作为传输媒体
- 双绞线是最常用的传输媒体,把两根相互绝缘的铜导线放在一起,然后按照一定的规则绞合起来就构成了双绞线
- 常用的双绞线包含八根铜导线,每两根铜导线合成一条双绞线,校核组合如下:
- 蓝色线和蓝白双色线绞合
- 橙色线和橙白双色线绞合
- 绿色线和绿白双色线绞合
- 棕色线和棕白双色线绞合
- 绞合的作用:
- 抵御部分来自外界的电磁干扰
- 减少相邻导线的电磁干扰
- 根据有无屏蔽层,双绞线分为:无屏蔽双绞线和屏蔽双绞线
-
-
- 无屏蔽
-
- 屏蔽双绞线
- 常用的绞合线的类别、带宽及典型的应用
一般情况下,家庭一般装5E或6型双绞线即网线
光纤的优点:
- 通信容量大(25000~30000GHz的带宽)
- 传输损耗小,远距离传输时更加经济
- 抗雷电和电磁的干扰性能好。这在大电流脉冲干扰的环境下很重要
- 无串音干扰,保密性好,不易被窃听
- 体积小,重量轻
一般常说的光纤入户,说的就是这个光纤,一般是预装好的
无线电波、微波、红外线、可见光
1.4 数据链路层
a、数据链路层在网络体系结构中所处的位置
如下图:主机H1给主机H2发送数据,中间要经过三个路由器、电话网、局域网、广域网等多种网络
从五层协议的角度来说,主机应该具有体系结构中的各个层次,而路由器只需要具有体系结构中的网络层、传输层和物理层。
网络中的各个设备通过传输媒体进行互连,主机H1将需要传输的数据逐层封装后,通过物理层将构成数据包的各个比特转换成电信号发送到传输媒体,
数据包进入到路由器后,从下往上逐层解封到网络层,路由器根据数据包的目的网络地址和自身的转发表确定数据包的转发端口,然后由网络层向下逐层封装数据包,最后通过物理层将数据包发送到传输媒体,最后到达主机H2,H2在接收到数据包后再逐层解封
所谓的链路(Link)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。要在链路上传输数据,仅有链路还是不够的,还需要一些通信协议来控制这些数据的传输,如果把实现这些协议的软件和硬件加到链路上就构成了数据链路
所以数据链路不止是硬件,还有软件和相关协议
在数据链路上传输的数据包,又称为帧、数据链路层是以帧为单位传输和处理的
数据链路层的协议有很多种,但有三个基本问题是共同的:封装成帧、透明传输和差错检测
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧
- 帧头和帧尾包含有重要的控制信息
- 帧头和帧尾的作用之一就是帧定界
- 例如:PPP帧的第一个字节和最后一个字节就是帧定界,通过这两个字节就能够从物理交付的比特流中提取出一个一个的帧
- 并不是每种数据链路层协议的帧都包含有帧定界标志,例如MAC帧的帧头和帧尾是没有包含帧定界的标志的,那么接收方是如何从物理层交付的比特流中提取出一个个的以太网帧的呢?
- 第一步:物理链路层封装好MAC帧,将其交付给物理层
- 第二步:物理层在MAC帧的前面添加8字节的前导码,前导码的前7个字节为前同步码,其作用是使接收方的时钟同步,之后的1个字节为帧的开始定界符,表明其后紧跟着的就是MAC帧
a、透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样
- 当数据帧中的数据是帧定界标志时,发送端的数据链路层该如何处理呢?
1、当物理链路提供的是面向字符的传输服务时(物理链路以字符为单位传输数据):
SOH即为帧头,EOT为帧尾
数据链路层在交付数据给物理层时,对帧进行扫描,首先扫描到SOH,然后每扫描到一个SOH或EOT就在前面加一个转义字符ESC,直至扫描到最后一个EOT,这种方式称为:字节填充(byte stuffing)或字符填充(character stuffing)
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符
2、当物理层链路提供的是面向比特的传输服务时(物理链路以比特为单位传输数据):
在数据发送前采用零比特填充法:对数据进行扫描,每5个连续的比特1后面就插入1个比特0
b、为了提高帧的传输效率,应当使帧的数据部分长度尽可能大些
c、考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大的传送单元MTU(Maximum Transfer Unit)
a、实际的通信链路都是不理想的,比特流在传输过程中由于受到各种干扰可能会产生差错:1变0,或0变1.这称为比特差错,或称为误码
b、一段时间内,传输错误的比特占所传输比特总数的比率称为误码率
c、接收方使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一
d、在封装好的帧中利用若干个字节来表示帧校验序列FCS字段。FCS:Frame Check Sequence(帧校验序列)。FCS字段由一些差错校验算法计算得出,常用的校验算法围殴:循环冗余校验CRCCRC(CyclicRedundancy Check)。
f、接收方在接收到数据后计算出一个FCS,然后将计算机得出的FCS与接收到的数据帧中的FCS进行比较
由于判断FCS是否正确只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误,接收方可以通过检测重传方式来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向上层提供的是可靠传输服务还是不可靠传输服务
以太网是一种计算机局域网技术。它规定了包括物理层连线、电子信号和介质访问层协议的内容。以太网是应用最普遍的局域网技术,取代了其他局域网技术如令牌环FDDI和ARCNET
以太网是一种有线系统,最初使用同轴电缆进行数据传输,后来发展到使用双绞线和光纤并延续至今。
IEEE 802.3定义了以太网的物理层和数据链路层的介质访问控制部分,其中物理层由两个组件组成:线缆和设备,数据链路层可以分为两部分:逻辑链路控制(LLC)、介质访问控制(MAC)
- 物理层
线缆:以太网的通信线缆由最先的同轴电缆发展到今天的双绞线和光纤
双绞线的两端配有RJ45八针连接器,这种八针连接器用于在半双工和双工模式下进行数据的发送和接收
半双工模式:数据一次沿一个方向传输
全双工模式:数据沿两个方向传输,以太网的全双工模式可以通过使用一对双绞线实现
设备:常用的以太网设备有路由器、交换机、网桥,而工作在数据链路层上的设备为交换机、网桥,路由器工作在五层体系结构中的网络层
- 数据链路层
逻辑链路控制LLC:为网络层提供统一的接口以便数据在设备间传输。很多厂商生产的适配器上就仅装有MAC协议而没有LLC协议
介质访问MAC:使用分配给网接口卡的硬件地址来标识特定的计算机或设备接口,通过这种方式来表示数据传输的源地址和目的地址
MAC地址(英语:Media Access Control Address),直译为媒体存取控制位址,也称为局域网地址(LAN Address),MAC位址,以太网地址(Ethernet Address)或物理地址(Physical Address)
它是一个用来确认网络设备位置的位址,是一种48位(6字节)的全球地址,这个地址会固化在适配器的ROM中
IEEE的注册管理机构RA负责向厂家分配地址字段的前三个字节。字符中的后三个字节由厂家自行指派,称为扩展表示符,必须保证生产出的适配器没有重复的地址。
一个地址块可以生成2^24个(二百八十万亿)不同的地址,这种48位地址称为MAC-48,他的通用名称是EUI-48
一般情况下,用户主机会包含两个网络适配器:有限局域网适配器(有线网卡)和无线局域网适配器(无线网卡).每个网络适配器都有一个全球唯一的MAC地址.而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址.所以,严格的说MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识
通过DOS窗口:ipconfig /all,查看本机网卡的MAC地址
- MAC地址的含义
由于比特位是由右至左读的所以第一字节的b0和b1,分别为第一位和第二位
补充:MAC地址的转换逻辑:
一个字节是由8个比特组成,将八个比特位分为两组,四个一组转化为一个16进制数,即生成6个字节,每个字节两位16进制数,共计12个16进制;
16进制对应的各组2进制数
数据链路层在网络层交付的IP数据包前面加上"目的地址"、"源地址"、"类型"字段,并且在最后加入4字节的FCS字段,组成一个以太网的MAC帧,然后交付给物理层
- 目的地址:接受主机的MAC地址
- 源地址:发送主机的MAC地址
- 类型:类型字段标志上一层使用的是什么协议,以便把收到的MAC帧数据交给上一层的这个协议
注意:当数据字段的长度小于46字节时,应在数据字段后面加入整数字节的填充字段,以保证以太网的MAC帧不小于46字节
当多个主机连接在同一个广播信道上,要实现两个主机之间的通信,每个主机发送的帧中包含了目的地址和源地址,广播信道上的每一个主机都能够收到该帧,接收到帧的主机将帧中的目的地址与保存在网络适配器的电可擦除可编程只读存储器EEPROOM中的MAC地址进行比较,如果匹配则接收该帧,否则丢弃该帧
根据MAC地址为单播MAC地址还是广播MAC地址,在计算机网络"发往本站(本主机)的帧"分为三种:单播帧(一对一)、广播帧(一对全体)、多播帧(一对多)
- 单播MAC地址
- 广播MAC地址(广播地址为FF-FF-FF-FF-FF-FF)
- 多播MAC地址
多播MAC地址的第一字节为单数即b0为一是多播地址
- 随机MAC地址
据斯诺登介绍,美国国家安全局有一套系统通过监视电子设备的MAC地址来跟踪城市中每个人的行动,因此苹果率先在ios系列设备扫描网络时采用随机MAC地址技术
随后Windows10,安卓6.0以及内核版本3.18的Linux系统也提供随机MAC地址功能,目前大多数移动设备都采用了随机MAC地址技术
以太网交换机是基于以太网传输数据的交换机,以太网交换机通常都是有多个接口,每个接口是可以直接与一台主机或另一个以太网交换机相连,一般都工作在全双工方式(此接口可以同时接收和传输)
以太网交换机具有并行性,能同时连通多个对接口,使多对主机能同时通信
以太网交换机工作在数据链路层(也包括物理层),他收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
帧的两种转发方式:
- 存储转发:交换机在转发之前必须接收整个帧,并进行错误校验,如无错误再将这一帧发往目的地址。帧通过交换机的转发时延随帧长度的不同而变化
- 直接交换:采用基于硬件的交叉矩阵(交换机只要检查到帧头中所包含的目的地址就立即转发该帧,而无需等待帧全部的被接受,也不进行错误校验。由于以太网帧头的长度总是固定的,因此帧通过交换机的转发时延也保持不变)
- 首先根据发送信息的源MAC地址来获得帧交换表
- 查看帧中的目标地址是否在表中,若在则直接单播转发;若不在则广播转发
- 帧交换表中的MAC地址对应信息是动态变动的,若将某接口相连的主机改变后,会重新进行写入
刚上电时,以太网交换机内部的帧交换表是空的,随着网络中各主机间的通信,通过自学习算法自动的逐渐建立起帧交换表
主机A发送数据给主机B
1、该帧从交换机1的接口1进入交换机,交换机1首先进行登记工作,将该帧中的源MAC地址A记录到自己的帧交换表中,并且将接口号1与MAC地址A相对应也记录到帧交换表中,以上的登记工作就称之为交换机的自学习
2、交换机1对该帧进行转发,该帧中的目的MAC地址是B,在帧交换表中查找MAC地址B,发现找不到就对该帧进行盲目地转发(也成为泛洪),也就说会将该帧在除接口1以外的其他所有接口进行转发
3、主机B在接收到该帧后,根据该帧的目的MAC地址B与自己的MAC地址比较,发现相等就说明该帧是发送给自己的,于是主机B接受该帧,主机C则会丢弃该帧
4、该帧从交换机1的接口4通过交换机2的接口2进入交换机2,交换机2首先进行登记工作,将该帧中的源MAC地址A记录到自己的帧交换表中,并且将接口号2与MAC地址A相对应也记录到帧交换表中
5、交换机2对该帧进行转发,该帧中的目的MAC地址是B,在帧交换表中查找MAC地址B,发现找不到就对该帧进行盲目地转发(也成为泛洪),也就说会将该帧在除接口2以外的其他所有接口进行转发
6、主机D、E、F丢弃该帧
7、最后帧交换表为:
MAC地址 接口
以太网交换机1:A————1
以太网交换机2:A————2
1、B→C
交换机1:写入B——2的记录,而后盲目转发,主机A丢弃该帧,主机C接收该帧
交换机2:写入B——2的记录,而后盲目转发,主机D、E丢弃该帧
交换机3:写入B——2的记录,而后盲目转发,主机F、H、G丢弃该帧
2、D→A
交换机2写入:D——1的记录,而后盲目转发,主机E丢弃该帧
交换机1:写入D——4的记录,而后盲目转发,主机A接收该帧,主机B、C丢弃该帧
交换机3:写入D——2的记录,而后盲目转发,主机F、H、G丢弃该帧
3、G→D
交换机3:写入G——4,而后由2接口转发给交换机2
交换机2:写入G——4,而后明确转发至接口1的D主机
交换机1:收不到该帧,无操作
添加冗余链路可以提高以太网的可靠性:在交换机B和C之间添加冗余链路。但是冗余链路也会带来负面效应———形成网络环路
网络环路带来的问题:
- 广播风暴:广播帧在各个交换机之间反复转发,分别按顺时针和逆时针同时兜圈,广播风暴会大量消耗网络资源,使得网络无法正常转发其他数据帧
- 主机收到反复的广播帧,会大量消耗主机的资源
- 交换机的帧交换表震荡:同一个MAC地址的记录在其他错误记录之间反复震荡
由于交换机之间组成一个环路,所以帧交换表中的记录会不断的跟新,例如交换机B记录由H1发送过来的信息后,转发给交换机A、C,同时又会不停的接收到来自交换机A、C转发过来的信息,H1的对应接口记录就会不断更新
以太网交换机使用生成树协议STP可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题
不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路)。最终生成的树型逻辑拓扑要确保连通整个网络
当首次连接交换机或网络物理拓扑发生变化时(有可能人为改变或故障),交换机都将进行生成树的重新计算
如上图,橙色方块部分是交换机主动阻塞的接口,当目前使用的某条线路出现问题时,会重新进行树的计算,,
使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一广播域。随着交换式以太网规模的扩大,广播域相应扩大,从而形成一个巨大的广播域
但巨大的广播域会带来很多弊端:
- 广播风暴
- 难以管理和维护
- 潜在的安全问题
广播风暴会浪费网络资源和各个主机的CPU资源,但是在实际应用中网络中会频繁出现广播信息TCP/IP协议栈中的很多协议都会使用广播:
- 地址解析协议ARP(已知IP地址,找出对应的MAC地址)
- 动态主机配置协议DHCP(用于自动配置IP地址)
可以使用分割广播域的方法对广播域进行隔离:
- 使用路由器隔离广播域:但是路由器的成本较高,局域网中如果全部用路由器隔离广播域不大现实。(路由器不转发广播帧,所以可以在需要隔离的广播域中安装路由器,以达到隔离的目的)
- 使用虚局域网VLAN
虚拟局域网VLAN是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某种共同的需求。
若网络中有三个局域网,我们可以使用一个交换机S4将三个局域网连成一个更大的局域网。原来每个局域网成为新的大的局域网中的各个网段。在S4上将整个局域网划分为两个VLAN:VLAN1和VLAN2,这样两个不同的VLAN之间的广播数据包不会互相传输,当然如果是在同一个VLAN中的主机依然是可以进行广播通信的。
注意:并非所有的交换机都能进行VLAN划分,一般需要企业级交换机才可以
a、打开软件界面如图,左上角可新建项目,在拓扑中加入两台S5700的交换机LSW1及LSW2,并且每台交换机上接入两台PC
b、将四台PC设置IP地址在同一网段(从左至右为192.168.1.101至192.168.1.104),子网掩码全部设置为255.255.255.0;网关全部设置为192.168.1.0
c、设置完成后将所有设备启动(包括交换机),使用ping命令查看四台PC都能ping通
d、配置交换机LSW1
1、进入命令行输入system-view命令进入系统视图
2、输入display vlan查看交换机的vlan
默认会有一个vlan1,我们需要创建vlan2和vlan3
3、创建vlan2 和vlan3(直接输入命令即可,但是vlan和数字之间要加空格,否则会报错)
(若创建vlan2后quit后在输入vlan 3报错,则再通过system-view进入一次试图)
4、创建完成后再次通过display vlan查看是否创建成功
5、将连接两台PC的端口设置为access类型:通过access端口的数据包都是不带VLAN tag的,且只属于一个VLAN,在access端口进方向,交换机接收到数据包后,先判断是否带有VLAN tag,有则丢弃数据包,没有则打上该端口已经配置的VLAN tag,在access端口出方向,交换机将打了与端口相同VLAN tag的数据包转发出去,并且去掉VLAN tag变成普通数据包,一般连接计算机。
输入dis cur查看端口名称
设置access类型,并且将端口号分配给不同的VLAN
第一步:直接输入要设置的端口号,跳转至该目录下
第二步:通过port link-type access将端口设置为access模式
第三步:通过port default vlan 2将端口分配给vlan2
端口2及配置与端口1 相同,只是将其分配给vlan3
此时,我们用PC1 ping PC2是不能ping通的,因为他们不在一个局域网中了
6、将连接LSW3的端口3设置为trunk类型:端口可以承载多个VLAN,通过trunk端口的数据包都必须带上VLAN tag,在trunk端口进方向,交换机接收数据包后,先判断是否带有VLAN tag,没有则丢弃数据包,有责按照对应VLAN进行转发,在trunk端口出方向,交换机将带VLAN tag的数据包原封不动的转发出去,没有带VLAN tag的数据包不会从trunk端口转发出去,一般用来接其他交换机
第一步:切换到端口3
第二步:port link-type trunk,设置trunk类型
第三步:port trunk allow-pass vlan 2,允许vlan2的数据通过
第四步:port trunk allow-pass vlan 3,允许vlan3的数据通过
7、再次通过dis cur查看端口设置情况
8、设置完成后,通过同样的方法设置LSW3,设置完成后PC1和PC3属于vlan2,PC2和PC4属于vlan3
9、验证
PC1ping同在VLAN2的PC3可以通,而不在同一局域网的PC4不能ping通,其他PC同理
再接一台交换机同理设置,LSW3的端口4也要设置
验证
1.5 网络层
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输
要实现网络层任务,需要解决以下主要问题:
- 网络层向传输层提供怎样的服务(“可靠传输”还是“不可靠传输”)
- ATM、帧中继和X.25的网络层提供的面向连接的、可靠的虚电服务
- TCP/IP协议体系结构的网际层提供的是无连接的、不可靠的数据包服务
- 网络层寻址服务
- 路由选择问题:路由器根据路由表选择下一跳
因特网是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈。由于TCP/IP协议栈的网络层使用网际协议IP,是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常称为网际层。
在因特网中,为了实现计算机之间的互相通信,通常要为每台计算机分配一个IP地址。一般有两个版本分别为IPv4和IPv6
IPv4的IP地址就是给因特网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内唯一的32比特的标识符,地址总数为2^32
IPv6的IP地址采用128比特地址的长度,地址总数为2^128个
IP地址由因特网名字和数字分配机构ICANN进行分配。我国用户可向亚太网络信息中心APNIC申请IP地址,需要缴费。
由于32位比特IPv4地址不方便,因此IPv4地址采用点分十进制表示方法以方便用户使用
八位无符号二进制数转十进制:二进制表示从右至左分别表示低比特位和高比特位
如上第一题:
(00001010)2 = 0*2^7 +0*2^6+0*2^5+0*2^4+1*2^3+0*2^2+1*2^1+0*2^0=10
(11111110)2 = 1*2^7+1*2^6+1*2^5+1*2^4+1*2^3+1*2^2+1*2^1+0*2^0=254
(11111110)2=(11111111)2-1=255-1=254
(00001111)2=0*2^7 +0*2^6+0*2^5+0*2^4+1*2^3+1*2^2+1*2^1+1*2^0=15
(11110000)2=1*2^7+1*2^6+1*2^5+1*2^4+0*2^3 +0*2^2+0*2^1+0*2^0=240
即00001010 11111110 00001111 11110000 = 10.254.15.240
十进制正整数转8位无符号二进制的方法:
①除2取余法,直到最后商为0
②:凑值法,熟记8位二进制数各位的权值128 64 32 16 8 4 2 1
(171)10= 128+0+32+0+8+0+2+1=(10101011)2
①IPv4的IP地址由网络号(指定主机所属网络)和主机号(指定被寻址的子网中的某节点)组成,IP地址可以分为A、B、C、D、E五类
②注意事项
- 只有ABC类地址可以分配给网络中的主机或路由器的各接口
- 主机号位“全0”的地址是网络地址,不能分配给主机或路由器的各接口
- 主机号为“全1”的地址是广播地址,不能分配给主机或路由器的各接口
③各类IP地址的细节
- A类地址
A类地址,网络号占一个字节即8个比特,最高位固定是0,网络号有2^7=128种组合,除去最小网络号(00000000)即0和最大网络号(01111111)127,不能指派,所以最终A类IP地址能够指派的网络数量为:
A类 地址每个网络中可以分配的地址数量:因为主机号占24比特,主机号有2^24种组合,因为全0的网络号和全1的广播地址不能指派,所以减去2
取值范围:因为最小网络号0,保留不指派,第一个可被指派的网络号为1;最大网络号为127,作为本地环回测试地址,不指派,最后一个可指派的网络号为126
又因为主机号,全0或全1不指派,所以:
A类地址的取值范围为1.0.0.1~126.255.255.254
- B类地址
B类地址可指派的网络数量:因为网络号占16个比特,并且最高位固定为10,网络号有16384种组合
B类地址的每个网络中可以分配的地址数量:因为主机号占16个比特,主机号有2^16种组合,因为全0和全1的广播地址不能被指派,所以需要减2
取值范围:因为最小的网络号也是第一个可被指派的网络号为是(10000000 00000000)即128.0,最大的网络号也是最后一个可以被指派的网络号为(10111111 11111111)191.255; 最大主机号为(11111111 111111110)即255.254 ,最小主机号为(00000000 00000001)即0.1
所以B类IP地址的取值范围为128.0.0.1~191.255.255.254
- C类地址
C类地址可指派的网络数量:因为网络号占24比特,3个字节,并且最高位固定为110,网络号有2097152种
C类地址每个网络中可以分配的地址数量:因为主机号占8个比特,主机号有2^8种组合,因为全0的网络号和全1的广播地址不能被指派,所以减去2
取值范围:因为最小网络号也是第一个可被指派的网络号为(11000000 00000000 00000000)即192.0.0,最大网络号也是第一个可被指派的网络号为(11011111 11111111 11111111)即223.255.255;最大主机号为254,最小主机号为1
所以C类IP地址的取值范围为192.0.0.1~223.255.255.254
- D类、E类
练习:
注:
1、根据地址左起第一个十进制数的值,可以判断出网络类别(小于127的为A类(0和127不指派),128~191为B类,192~223的为C类)
2、根据网络类别,就可以找出地址中的网络号部分和主机号部分(A类左起第一个字节,B类前两个字节,C类前三个字节)
3、以下三种情况的地址不能指派给主机或路由器:
(1)A类网络号0和127
(2)主机号为全0,为网络地址
(3)主机号为全1,是广播地址
(4)一般情况下,主机后最后一个字节为1是留给网关的,一般也不指派
由于主机号最后一个字节为.1的一般留给网关所以在上图中,虽然我们说B类主机号可以有65534种,C类主机号可以有254种,但是实际上只有65533和253种,所以黄色部分只能用A类网络号,蓝色部分只能用B类网络号,不然主机数量会超出;
子网掩码是一个32位地址,又叫网络掩码、地址掩码,用来指明一个IP地址的哪些位标识的之际所在的子网,以及那些位标识的是主机。子网掩码不能单独存在,必须结合IP地址一起使用。子网掩码将某个IP地址划分为网络地址和主机地址两部分
左边是网络位,用二进制数字 1 表示,1的数目等于网络位的长度;右边是主机位,用二进制数字 0 表示,0的数目等于主机位的长度。将掩码与IP地址按位与运算时用0遮住原主机位,而不改变原网络段数字,(因为在位与计算中0与任何数计算都得0),而且很容易通过0的位数确定子网的主机数
- 子网掩码的功能
- 屏蔽IP地址的一部分以区别网络表示和主机标识
- 将一个大的IP网络划分为若干个小的子网络
- 子网掩码的工作流程:将32位的子网掩码与IP地址进行二进制形式的按位逻辑‘与’运算,得到该IPv4地址所在的网络地址
例如:IP地址:192.168.1.215
子网掩码:255.255.255.0
网络号:192.168.1.0
因为十进制255的二进制就是全1,IP与其位与运算后为其本身,而0与IP与运算后是0
子网掩码是为了解决IP地址分配而产生的虚拟IP技术,通过子网掩码可以将A、B、C三类地址划分为若干子网,提高了IP地址的分配效率;还可以人为的将一个较大的企业内部网络划分为更多的小规模的子网,再利用三层交换机的路由功能实现子网互联,解决网络广播风暴和网络病毒等网络管理方面的问题
上图中为B类IP,默认的子网掩码应该为255.255.0.0,若用默认子网掩码,则子网1、2、3都可互相通信,因为他们的网络号都是145.13.0.0,但是此处借用主机号中的8位作为子网号,则子网掩码位255.255.255.0,此时子网1、2、3的网络号分别为145.13.0.0/145.13.1.0/145.12.2.0,则分为三个子网,进行隔离,防止网络风暴或网络病毒的问题
32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号
举例说明划分子网的细节:已知某个网络的地址位218.75.230.0,使用子网掩码255.255.255.128对其进行子网划分,请给出划分细节
流程;
a、因为IP地址左起第一个十进制为218大于192,所以她是一个C类的地址,C类地址的子网掩码默认为:255.255.255.0,而此时的子网掩码为255.255.255.128,说明此时子网掩码向主机号借用了一个比特作为子网号
b、因为子网掩码向主机号借用了一个比特作为子网号,所以可划分出来的子网数量为2^1 = 2个(一位二进制有两种可能为1或为2).因为主机号的最高位被子网掩码借用,所以主机号只有7位,所以最多可分配2^(8-1)=128个地址,但是还需除去主机号为全0(此时的网络地址为218.75.230.(00000000)和218.75.230.(10000000))或全1(此时的网络地址为218.75.230.(01111111)和218.75.230.(11111111))的广播地址,所以还需减去2
c、详细的子网划分
可划分的地址数量计算:子网数:2^1=2;每-个子网的地址数量:2^(8-1)=128;每个子网有全0和全1 不能分配,即每个子网可分配数:128-2=126,共计126*2=252
练习题:
因为180开头是B类地址,所以默认的子网掩码应该是255.255.0.0但是此时在第三个字节借了六位,作为子网号,所以当第三个字节的最后两个比特及第四个字节的比特全为1时,即了作为广播地址
d、子网掩码的CIDR斜线记法
格式为:IP地址/n
说明:n标识子网掩码所使用的bit数,标识子网掩码中网络号的长度,通过n的个数确定子网的主机数=2^(32-n)-2
例如:192.168.1.100/24,其子网掩码为255.255.255.0
172.16.198.12/20,其子网掩码为255.255.240.0
用户数据在网络层中使用IP协议进行封装,然后交付给数据链路层。IP协议提供不可靠无连接的数据报传输服务
使用IP协议封装的数据称为IP数据报
IP数据报的首部:IP数据的首部由20个字节组成,IP数据包的首部常以32个比特为单位进行描述,下图中的每一行都有32个比特即4个字节构成,每个小格子称为字段或域
每个域的含义:
- 版本:占4比特,表示IP协议的版本
- 首部长度:占4比特,表示IP数据报首部的长度。该字段的取值以4字节为单位。最小十进制取值为5,表示IP数据报首部只有20字节固定部分(4*5),最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分(4*15)
- 区分服务:8比特,一般不使用
- 总长度:占16比特,表示IP数据报的总长度(首部+数据载荷)。最大取值为十进制的65535(2^16-1),以字节为单位(实际使用中不会传输这么长的IP数据报)
- 标识、标志、片偏移:这三个字段共同用于IP数据报分片,以太网中数据链路层规定MTU(即最大传输单元)的值为1500字节,如果某个IP数据报总长度超过MTU,需要将原IP数据报分片成多个小的数据报,再将每个小的数据报封装成帧
- 标识:占16比特,属于用一个数据报的各分片数据报应该具有相同的标识。IP软件维持一个计数器,没产生一个数据报,计数器值加一,并将此值赋给标识字段
- 标志:占3个比特,各比特含义:DF位:1表示不允许分片,0表示允许分片;MF位:1表示“后面还有分片”,0表示”这是最后一个分片“;保留位:必须是0
- 片偏移:占13比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置还有多少个单位,片偏移以8个字节为单位
- IP数据报分片举例:
由于原始数据报超过了MTU所以数据报需要分片,分片时每一个分片前都要加上自己对应的首部。其中MF表示自己是否为最后一个分片1表示不是,所以分片1、2MF值为1,而DF表示是否允许分片,因为数据在网络层是要通过很多路由器来传输的,在传输分配过程中可能会需要再次分片,所以DF值为0;片偏移是以8各字节为一个单位的,所以都要除8
- 生存时间:占8各比特,最初以秒为单位,最大生存周期是255秒。路由器转发IP数据报时是将IP数据报首部中的个字段的值减去IP数据报在本路由器上所耗费的时间,若不为0则转发,否则就直接丢弃。现在”跳数为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减一,若不为0就转发,否则丢弃
- TTL可以防止IP数据报在网络中永久兜圈
-
如上图R2的路由表中N2对应的下一跳记录错误,导致数据一直在R1和R2之间兜圈,但是因为有TTL的存在,每转发一次这个数据报就把TTl的值减一,直到减为0时,被路由器丢弃
- 协议:占8比特,指明IPv4数据报的数据部分是何种协议数据单元,常用的一些协议和相应的协议字段如下
- 首部检验和:占16比特,用来检验首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和。IP数据报没经过一个路由器,路由器都要重新计算首部检验和,因为某些字段的取值可能会变化
- 源IP地址:占32比特,表示发送主机的IP地址
- 目的IP地址:占32比特,表示目的主机的IP地址
IP数据报的发送和转发过程包含两部分:主机发送IP数据报、路由转发数据报
同一个网络中的主机是可以直接通信的,叫直接交付,而不同网络间的主机是不能直接通信的,需要通过路由器进行中转,是间接交付。那源主机是如何判断目的主机和自己是否在同一个网络中的呢?
例如,主机C要和主机F通信,主机C将自己IP地址和子网掩码按位与操作得到主机C的网络地址为:192.162.0.0,然后将目的地址主机的IP地址和自己的子网掩码进行按位与计算得到的目的网络地址:192.168.0.128,两个网络地址不相等,说明主机C和主机F不在同一个网络中,不能直接交付,主机C将数据发送给路由器R,由R再转发给主机F,实现主机F与主机C之间的数据通信(间接交付)
主机C如何知道要将数据发送给路由器R呢?我们需要将路由器的接口地址192.168.0.126作为主机C的默认网关,这样当主机C发现目的地址与自己不在同一网络时,直接将数据发送给设置好的默认网关即路由器。因此可以将左边网络中的所有主机默认网关填写为192.168.0.126,右边网络则填写为192.168.0.254
路由器又是如何对数据进行转发的呢?假设主机A需要将数据发送给主机D,因为主机A与主机D不在同一网络(A为192.168.0.0,D为192.168.0.128),所以主机A将数据发送给路由器R,路由器会进行如下操作:
- 首先检查IP数据报首部是否出错:若出错,则直接丢弃该IP数据报并告知源主机,若没有出错则进行转发
- 然后根据IP数据报的目的地址和路由表中查找匹配的条目:若找到匹配的条目,则转发给条目中指示的下一跳,否则,丢弃数据报并通告源主机
-
主机其实在发送数据时也会查自己的路由表,因为查不到主机D的地址,所以将数据发送给默认的网关即路由器,又路由器间接转发;路由器收到目的IP地址后是和路由器上的子网掩码进行位与运算得到目的网络的;路由器将数据发送给S2交换机后,交换机解包,得到目的MAC,再根据帧交换表,得到具体将数据发送给哪台主机
路由:
路由就是报文从源端到目的端的路径。路由器可以根据路由表中最佳路由进行转发。
路由表:
路由表是一个存储在路由器或联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径。路由表建立的主要目的是为了实现路由协议和静态路由选择。路由表就相当于一张地图告诉数据报该如何去往目的地。
路由器会根据路由表进行数据包的转发:
在linux里我们可以使用route -n命令查看系统的路由表:
在windows下使用route print命令查看路由表:
路由表中有一条特殊的路由,其目标地址为0.0.0.0,子网掩码也为0.0.0.0,对应下一跳的地址为网关地址。这条路由的作用是什么呢?
计算机或路由器是如何将一条数据通过网络发送出去的:首先将目的IP地址与自己的子网掩码进行按位与计算得到目的主机的主机号,然后拿该主机号与路由表中的路由进行匹配,如果匹配到了则将数据转发给指定的下一跳,如果没有匹配到,则发送给目标地址为0.0.0.0所对应的下一跳
目标地址为0.0.0.0所对应的那条路由的作用就是:这条路由就是默认路由,是对IP数据包中的目的地址找不到存在的其他路由时,路由器所选择的路由
注:当我们发现主机不能够上网或者不能ping通外网的时候,加入检查了IP地址、DNS等设置都没问题后依然不能解决,可以查看系统路由表中是否没有添加默认路由
不同的路由器查看路由表的命令不一样:思科路由器查看路由表的命令为:show ip route; 华为路由器查看路由表的命令为:display ip routing-table
路由表的类型:
- 动态路由:指动态路由协议(如RIP)自动建立路由,并且能够根据实际情况的变化适时的进行调整
- 动态路由之所以能根据网络的情况自动计算路由、选择转发路径,是由于当网络发生变化时,路由器之间彼此交换的路由信息会告知对方网络的这种变化,通过信息扩散使所有路由器都能得知网络变化
- 路由器根据某种算法,把收集到的路由信息加工成路由表,供路由器在转发IP报文时查阅
- 常见的路由协议有:RIP、OSPF、IS-IS、BGP、IGRP/EIGRP
- 静态路由:由网络管理员手动配置的路由
- Linux系统静态路由操作
- 添加路由:route -n add -net 目标地址/子网掩码位数 gw 下一跳
-
删除路由:rote delete -net 目标地址/子网掩码位数
-
注:上面的-net表示操作的是一个网络,而是某台具体的主机,则可以直接使用-host
- Linux系统静态路由操作
- 路由器静态路由操作:
- 添加路由:ip route 目标地址 子网掩码 下一跳地址,例如:ip route 192.168.3.0 255.255.255.0 192.168.1.1
- 删除路由:no ip route 目标地址 子网掩码 下一跳地址
在数据链路层封装的MAC帧中需要封装目的地址和源地址。当已知目的的主机的IP地址时,可以通过ARP协议获得目的主机的MAC地址
ARP请求报文封装在MAC帧中,目的地址为FF-FF-FF-FF-FF-FF,并且以广播的形式发送的
ARP协议工作流程
ARP高速缓存表,由最近的ARP项组成的一张临时表,表中记录了主机IP地址和MAC地址的对应关系
生命周期的存在是以防主机改变而IP地址不会改变但mac地址会改变的情况,主机间不断的通信两分钟更迭一次ARP缓存表
注意:ARP报文只能在发送主机所在的广播域中被使用
因为路由器有隔离作用,所以不会发送广播形式的ARP报文,但是主机和路由器之间或路由器与路由器之间是可以使用ARP报文获取MAC地址的
ARP欺骗是一种以ARP地址解析协议为基础的网络攻击方式
ARP欺骗的原理:利用ARP协议没有安全认证机制,攻击者发送假的ARP数据包到网上,尤其是送到网关上。让送至特定的IP地址的流量被错误送到攻击者所取代的地方。因此攻击者可将这些流量另行转送到真正的网关(被动式数据报嗅探)或是篡改后再转发(中间人攻击)
ARP欺骗的分类:
- 主机型欺骗:攻击者向其他主机发送ARP响应包,攻击者在响应包中填入网关的IP地址和自己的MAC地址,这样主机A应该发送给网关的数据包就会被发送给主机
- 网关型欺骗:攻击者向网关发送ARP响应包,攻击者在响应包中填入被攻击主机的IP地址和自己的MAC地址,这样网关接收到互联网中发送给主机A的数据时也会转发发给主机B
ARP欺骗的危害:信息安全受到威胁、网络延迟增加、网络通信中断
ARP欺骗防范方法:安装补丁、静态绑定:网内的主机与网关做IP和MAC绑定、使用ARP防火墙、不点来=开通讯工具中的一些可疑链接图片文件等
①127.0.0.1
回环地址,或称为“localhost”无论是哪个程序,一旦使用该地址发送数据,协议软件会立即返回,不进行任何网络传输,除非出错,包含该网络号的分组是不能够出现在任何网络上的
②10.*.*.*/172.16.*.*至172.31.*.*/192.168.*.*
上面三个网段都是私有地址,可以用于自己组网使用,这些地址主要用于企业内部网络中,但不能够在Internet网上使用,Internet网没有这些地址的路由,而使用这三个网段的计算机要上网必须要通过网络地址转换(NAT),将私有地址翻译成公用合法的IP地址
③255.255.255.255
受限制的广播地址,对本机来说,这个地址指本网段内(同一广播域)的所有主机,该地址用于主机配置过程中IP数据包的目的地址,路由器都会进制转发目的地址为受限的广播地址的数据包,这样的数据包仅会出现在本地网络中
④224.0.0.0——239.255.255.255
组播地址
⑤169.254.*.*
如果主机使用了DHCP功能自动获得一个IP地址,那么当DHCP服务器发生故障或响应时间太长而超出系统规定的时间,Windows系统会分配这样一个地址,如果主机IP地址是个诸如此类的地址,十有八九时网络不能正常运行了
⑥114.114.114.114
中国电信的DNS
⑦8.8.8.8
谷歌DNS
1.6 运输层
物理层、数据链路层以及网络层共同解决了将主机通过异构网络互联起来所面临的问题,实现主机到主机之间的通信。两个主机进行通信实际上就是两个主机中的应用进程在互相通信,应用进程之间的通信又称为端对端的通信。
当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端对端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。如何为运行在不同主机上的应用进程提供直接的通信服务是传输层的任务。
运输层提供的是应用进程间的逻辑通信,即,运输层之间的通信好像是沿着水平方向传送数据的,但事实上这两个运输层之间并没有一条水平方向的物理连接。
根据应用需求的不同,因特网的传输层提供了两种不同的传输协议,即面向连接的TCP和无连接的UDP
TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程
端口号的值:
- 端口号使用16比特表示,取值范围0~65535
- 熟知端口号:端口号0~1023,LANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,例如:FTP使用20/21,HTTP使用80,DNS使用53
- 登记端口号:1024~49151,为没有熟知端口号的应用程序使用。使用这类端口号必须要在LANA按照规定的手续等级,以防止重复
- 短暂端口号:49152~65535,留给客户进程选择暂时使用。当服务器进程受到客户进程的报文时,就知道了客户进程所使用的动态端口,通信结束后,这个端口号可提供给其他客户进程以后使用
- 常用端口号及其对应的网络应用程序
- 在Linux中/etc/service文件中保存了知名的服务器端口
- 端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各个进程,在因特网中,不同计算机中的相同端口号是没有联系的。
传输控制协议TCP是一种基于连接的可靠的稳定的无重复的传输协议
TCP头部协议如下:
- 16位源端口号(source port):发送主机中进程的端口号
- 16位目的端口号(destination port):接收主机中进程的端口号
- 32位序列号(sequence number):每一个包中都有一个序列号,序列号被系统初始化为某个随机值ISN。后续的TCP报文段中序号加上该报文段所携带数据的第一个字节在整个字节流中偏移。那么该报文的序号值就是ISN+1025,一般用seq缩写来表示,seq是面向字节流的,如果在传输的过程中,随包没有发送数据,即len是零,则seq是不消耗的。
- 32位确认号(Acknowledgment Number):目的主机返回确认号,使源主机知道某个或几个报文段已被接收,一般用小写的ack来表示,要和大写的ACK区分开
- 四位首部长度(header length):由于TCP首部包含一个长度可变的选项部分,所以需要一个值来指定这个TCP报文段到底有多长
- URG标志:标识紧急指针是否有效
- ACK标志:表示确认号是否有效,赋值为1标识确认,我们称携带ACK标识的TCP报文为确认报文段,
- PSH标志:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间(如果应用程序不把接收到的数据读走,他们就会一直停留在TCP接收缓冲区中)
- SYN标志:标识请求建立一个连接,我们称SYN标志的TCP报文为同步报文段
- RST标志:标识要求对方重新建立连接。我们称携带RST标志的TCP报文段为复位报文段
- FIN标志:表示通知对方本端要关闭连接了。称携带FIN标志的TCP报文段为结束报文段
- 16位窗口大小(window size):是TCP流量控制的一个手段。窗口实际上指接受通告的窗口。可以告诉对方本端的TCP接收缓冲区还能容纳多少个字节的数据,对方可以控制发送数据的速度
- 16位检验和(TCP check sum):由发送端填充,接收端对TCP报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。这个校验不仅包括TCP头部,也包括数据部分,是TCP可靠传输的一个重要保障
- 16位紧急指针(urgent pointer):是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一个字节的序号。因此,这个字段是紧急指针相对当前序号的偏移。TCP的紧急指针是发送端向接收端发送紧急数据的方法
- TCP头部选项:TCP头部的最后一个选项字段是可变长的可选信息。这部分最多包含40字节
- 建立连接
- 数据传输
- 释放TCP连接
③TCP连接的建立
TCP连接的建立需要解决以下三个问题:
- 使TCP双方能够确知对方的存在
- 使TCP双方能够协商一些参数(如最大窗口值,是否使用窗口扩大选项和时间戳选项以及服务质量等)
- 使TCP双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配
三次握手过程:
- 由客户端的某个进程主动发起TCP连接建立,最初两端的TCP进程都处于关闭状态
- TCP服务器被动等待客户进程的TCP请求,所以TCP服务器进入监听状态
- TCP客户进程向TCP服务器进程发送TCP建接请求报文段,并且进入同步已发送状态
- TCP连接请求报文段首部中的同步位SYN被设置为1,表明这是一个TCP连接请求报文段,32位序列号字段seq被设置了一个初始值x,作为TCP客户进程所选择的初始序号。
- TCP服务器进程接收到TCP连接请求报文段后,如果同意建立连接,则向TCP客户进程发送TCP连接请求确认报文段,并且进入同步已接收状态,该报文段首部中的同步位SYN和确认位ACK都设置为1,表明这是一个TCP连接请求确认报文段。序号字段seq被设置了一个初始值y,作为 TCP服务器进进程选择的初始序号,确认号字段ack的值被设置成x+1,表明接收到了TCP客户进程序号为x的报文。
- TCP客户进程收到TCP连接请求确认报文段后,还要向TCP服务器进程发送一个普通的TCP确认报文段,并且进入连接已建立状态,报文段首部中的确认位ACK设置为1,表明这是一个普通的 TCP确认报文段。序列号字段seq设置为x+1,确认号字段ack的值被设置成y+1,表明接收到了TCP服务进程序号为v的报文,TCP服务器进程收到该确认报文段后也进入连接已建立状态。
注:seq每次都有,因为每次发的包中必须要有一个序列号;SNY 表示请求建立一个连接,所以是两端第一次主动发出建立连接是要加;ACK表示确认;ack表示已接收到的序列号
假如TCP连接的建立使用连词握手而不是三次握手可以吗?
不可以,因为如果两次即完成连接的话,若是TCP客户端在发送TCP请求报文段时,该报文被滞留,而TCP传输过程中两端都有超时重传机制,TCP客户端超时未接受到tcp服务端的回复,会重传,而后和TCP服务端建立连接并传输数据;数据传输完成后,TCP客户端会进入关闭状态,而这是之前发送的请求连接报文传输成功被TCP服务端接收,此时他会认为TCP客户端想要和她重新建立连接,于是回复确认连接报文,而这时TCP客户端已经关闭所以不会加以理会,但是TCP服务端会认为连接已完成,一直等待TCP客户进程发来的数据,会浪费TCP服务器主机的很多资源。所以TCP连接的建立必须要采用三次握手。
四次挥手过程:
四次挥手过程即TCP通过四次挥手来释放连接,数据通信结束后,TCP双方都可以释放连接
- 假设由客户进程主动关闭TCP连接
- 客户进程发送连接释放报文段,并且进入终止等待1状态,该报文段中的首部终止位FIN设置为1,ACK设置为1,表明这是一个连接释放报文段,同时也对之前接收打报文段进行确认,seq=u表示TCP客户进程之前已发送过的数据的最后一个字节的序号+1,ack=v表示客户进程之前已收到的数据的最后一个字节的序号+1
- 服务器进程接收到TCP连接释放报文段后,会发送一个普通的TCP确认报文段并且进入关闭等待状态,此时TCP客户进程到服务器进程这个方向的连接就释放了,这时的TCP连接属于半关闭状态,也就是TCP客户进程已经没有数据要发送了,但是TCP服务器进程如果还有数据需要发送,客户进程则还需要接收,这个状态可能会持续一段时间,直到TCP服务器进程将数据发送完毕。
- TCP客户进程收到TCP确认报文段后就进入终止等待2状态,等待TCP服务器进程发出的TCP连接释放报文段。
- 当TCP服务器进程的没有数据要发送了后,释放连接(被动关闭),TCP服务器进程发送TCP连接释放报文段并进入最后确认状态。FIN=1,ACK=1表明这是一个连接释放报文段,seq=w, ack=u+1同时也对之前收到的报文段进行确认。思考:为什么seq=w,而不是seq=v+1呢?因为在这一段时间服务器将之前没有传输完成的数据,发送给了客户端,而每个数据包都要有序号,所以seq=v+1在传输数据时就被用掉了
- TCP客户进程收到TCP连接释放报文段后,必须针对该报文段发送普通的TCP确认报文段,之后进入时间等待状态
- TCP服务器进程收到该报文段后就进入关闭状态
- 而TCP客户进程还需要经过2MSL后才能进入关闭状态。MSL(Maximum Segment Lifetime)意思是最长报文段寿命,RFC793建议为2分钟
思考:为什么TCP客户进程还需要经过2MSL才能进入关闭状态
因为若是TCP客户进程收到TCP连接释放报文段,并且针对该报文段发送普通额度TCP确认报文段后马上进入关闭状态,若是这个确认报文段丢失了,而TCP服务端会误以为客户端没有收到,一直进行超时重传,但是此时TCP客户端已经关闭了,不会理会,那服务端没有收到确认关闭的报文,就无法释放掉连接,一直发送连接释放报文,无法进入关闭状态,所以客户端等待2MSL可以确保服务器进程收到最后一个TCP确认报文
1、分段传输:应用数据根据MSS(MaxitumSegmentSize)最大分段大小,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以往往MSS为1460)值被分割成TCP认为最适合发送的数据段。
注意:在运输层的分段传输(分组传输)和网络层的IP数据报分片传输的区别:分段传输只有 TCP协议才有的,并且分段的依据为MSS,分片传输的依据为MTU。
2、超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
3、CRC校验和:TCP将保持它首部和数据的检验和如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。
4、流量控制:TCP提供一种机制可以让「发送方 根据「接收方的实际接收能力控制发送的数据量,这就是所谓的流量控制。TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。接收方有即时窗口(滑动窗口),随ACK报文发送。(TCP利用滑动窗口实现流量控制)
5、滑动窗口:
应答机制:假如TCP每发送一个数据报,都要进行一次确认应答。当上一个数据包收到了应答了,再发送下一个,这个模式就有点像面对面聊天。这样的传输方式有一个缺点:数据包的往返时间越长,通信的效率就越低。为解决这个问题,我们可以使用累计应答
- 累计应答:接收方在接收到多个数据包后再根据接收到的数据包进行应答,也称为累计确认。
- 窗口:窗口的实现实际上是操作系统开辟的一个缓存空间,接收方根据实际情况在应答数据包中告知自己的接收窗口大小。窗口大小就是指无需等待确认应答,而可以继续发送数据的最大值(以字节为单位)。发送方主机在等到确认应答返回之前,必须在缓冲区(发送窗口)中保留已发送的数据。如果按期收到确认应答,此时数据就可以从缓存区清除。
- 滑动窗口:如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。
- 假设主机A发送数据给主机B,在建立TCP连接时,主机B在确认报文中将自己的接收窗口 rwnd告知主机A。(假设接收窗口大小为400)
- 主机A根据主机B的接收窗口大小创建自己的发送窗口(在内存上开辟一块空间缓存一个接收窗口大小的数据),并且假设每个数据包中载荷数据为100Bytes
- 主机A分别将第一组数据(为了方便讲解假设seq=1,实际上应该为seq=ISN+1),第二组数据(seq=101) 第三组数据(seq=201) 第四组数据(seq=301)发送给主机B,中间不需要等待主机B的应答数据报(累计应答)
- 假设第三组数据(seq=201)在输出过程中被丢失了,尽管主机B接收到了第四组数据,但是因为累计应答时只应答最大连续报文,所以应答数据包中ack=201表示序号201之前的所有数据全部正确接收。假设主机B将接收窗口大小调整为300,在应答报文中rwnd=300
- 主机A接收到应答数据报后,将自己发送窗口中的序号1~200的数据删除,发送窗口往前(向右)移动并且将大小重新设置为300(开辟接收窗口大小的缓存序号为201-500的数据)
- 主机B将序号为201,301,401的数据报发送给主机B
- 假设以上三组数据报没有丢失,主机B在接收到所有数据后发送应答数据报,ack=501,并目将窗口调整为100,rwnd=100A
- 主机A接收到应答数据报后,将自己发送窗口中的序号201~500的数据删除,发送窗口往前(向右)移动并且将大小重新设置为100(开辟接收窗口大小的缓存序号为501-600的数据)
- 主机A将序号位600的数据报发送给主机B,按照以上逻辑知道数据发送完毕
接收窗口为0的处理:当发送窗口被调整为0后,发送方就不能再发送数据了,假如接收方的接收窗口调整为大于0了,如果不采取特殊措施发送方是不知道的,因为接收方不会主动告知发送方自己接收窗口的大小。这时就需要持续计数器了,当发送方接收到接收窗口为0的应答报文时马上启动一个持续计时器,当定时达到时主动向接收方发送一个零窗口探测报文,该报文只携带一个字节的数据,然后这种逻辑直到接收方回复的接收窗口大于0.
UDP(user datagram protocol),是一种无连接的不可靠的传输协议(不需要三次握手四次挥手)
UDP不提供数据包分组、组装和不能对数据包进行排序的缺点,当报文发送后,是无法得知其是否安全完整到达的,因此适合实时数据传输。例如IP电话、网络视频会议等实时应用。
①UDP的头部
②UDP的应用
使用UDP运输协议可以进行单播、多播和广播
- 单播应用:DNS域名解析,域名系统是因特网上作为域名IP(lnternetProtocolAddress)地址相互映射的一个分布式数据库。
- 浏览器如何通过域名去查询URL对应的IP(对应服务器地址)呢?
- 浏览器缓存:浏览器会按照一定的频率缓存DNS记录。
- 操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中找。
- 路由缓存:路由器也有DNS缓存。
- ISP的DNS服务器:ISP是互联网服务提供商(InternetServiceProvider)的简称,ISP有专门的DNS服务器应对DNS查询请求
- 根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询
- 浏览器如何通过域名去查询URL对应的IP(对应服务器地址)呢?
当两个网络应用进程间需要快速传输大文件(音频文件、图片文件等)时也可以使用UDP单播
- 多播应用:网络视频会议、教学视频监控等。IP多播(多址广播或组播)技术,是一种允许一台或多台主机发送单一数据包到多台主机的TCP/IP网络技术。IP多播通信必须依赖IP多播地址,在IPv4中它是一个D类IP地址,范围从244.0.0.0到239.255.255.255
广播的应用:ARP数据报广播
注意:在进行UDP编程时,UDP包的大小可以达到64k,但实际上MTU(1500,要减去UDP的头部和Ip的头部(8+20~60))大小只有1k多,如果直接发一个超过MTU大小的包,就会在网络层被分片,这样的问题是,如果只要有一个分片在传输中出错了即校验不正确(这是较容易发生的),整个传输的udp包就被丢弃。注意是整个而不是单个分片。这就是为什么发送UDP包通常也是1k多大小的原因。
①对比
除了上图所展示的区别外,使用TCP传输协议时,一旦建立好TCP连接后,系统需要实时的维护该连接,所以TCP所消耗的系统资源比UDP要多
因为TCP的可靠传输机制导致TCP传输数据时要比UDP慢得多
②TCP的长连接和短链接
- 长连接:TCP通信双方在建立号连接后,在较长一段时间内保持连接,直至某一方主动关闭连接。长连接多用于操作频繁,点对点的通讯,例如物联网开发中某下位需要定时频繁向服务器发送数据等
- 短链接:通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,短连接多用于操作不频繁,点对点的通讯,例如:在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器没进行一次HTTP操作,就建立一次连接,任务结束后就中断连接
- 长短连接的对比
UDP的灵活应用
应用项目:高压线覆冰监测系统。
监控中心为了较快显示工业摄像头采集到的高清照片,监控子站主机需要使用UDP与监控中心主机进行图像数据的传输,但是因为使用了UDP传输协议可能会导致某些数据报丢失。为了保证图像数据的完整性,我们需要在应用层设计私有协议(为每一组数据编号,若服务端收到序号丢失,则对丢失的序号组进行重传)保障丢失的数据报能够进行重传
a、页面介绍
①网卡选择(根据自己的需求选择)
②首页
常用按钮功能:
③数据包列表,显示捕获到的数据包,从左到右依次为:数据包编号、时间戳、源地址、目的地址、协议、长度、数据包信息
④数据包详细信息,在数据包列表中选择指定数据包,在数据包详细信息中会显示数据包的所有详细信息内容。数据包详细信息面板是最重要的,用来查看协议中的每一个字段。各行信息分别为
Frame:物理层的数据帧概况
Ethernet:数据链路层以太网帧头部信息
Internet ProtocolVersion4互联网层IP包头部信息
User DatagramProtocol:传输层的数据段头部信息,此处是UDP
HypertextTransfer Protocol:应用层的信息,此处是HTTP协议
⑤筛选出http协议相关的数据包,可以查看tcp包的每个字段
b、wireshark过滤器
①设置数据抓取选项
点击常用按钮中的设置选项,就会弹出设置选项对话框。在这个对话框中可以选中需要监听的接口,设置混杂模式,设置抓取数据包的过滤条件。
首先,选中需要监听获取数据包的接口。接口列表区列出了所有可以使用的接口。如果接口前面的
复选框被选中,说明对这个接口监听捕获数据包。
其次,设置混杂模式。设置混杂模式的作用是将网卡设置到混杂模式。如果不设置混杂模式,你的计算机只能获取数据包发往的目标是你计算机和从你计算机出去的数据包。如果设置了混杂模式你就可以捕获局域网中所有的数据包。如果窗口中的"Use promiscuous mode onal
interfaces"前面的复选框被选中,说明对所有的接口使用混杂模式。如果想单独设置,可以双击接口列表中的接口,会弹出如下的对话框。然后选中或者去掉“Capture packetsin promiscuous mode”前面复选框。然后点ok按钮。
②显示过滤器
显示过滤器应用于捕获文件,用来告诉wireshark只显示那些符合过滤条件的数据报。显示过滤比捕获过滤更常用。用来过滤不想看到的数据包,但是不会把数据删除。如果想恢复原状,只要把过滤条件删除即可。
过滤表达式对话框,使wireshark可以很简单的设置过滤表达式。点击expression按钮即可调出
对话框分左中右三部分。左边为可以使用的所有协议域(过滤项)。右边为和协议域相关的条件值(过滤值)。中间为协议域与条件值之间的关系(过滤关系)。
一条基本的表达式由过滤项、过滤关系、过滤值三项组成。
比如:httpcontainsbaiducom,http为过滤项,contains为过滤关系,baiducom为过滤值,表示显示http协议包中包含关键词“baiducom”的所有数据包
比如:wipaddr==192.16811.ipaddr是过滤项==是过滤关系,19216811是过滤值(整条
表达示的意思是找出所有ip协议中源或目标ip、等于、192168.1.1的数据包)
③ 过滤关系
过滤关系就是大于、小于、等于等几种等式关系,我们可以直接看官方表格,注意其中有“English”和“C-ike”两个字段,这个意思是说“Engish”和“C-like”这两种写法在 wireshark中是等价的、都是可用的。
④复合过滤表达式
复合过滤表达式就是指多条基本过滤表达式组合而成的表达式。基本过滤表达式是不变的,符合过滤表达式多出来的东西是基本过滤表达式的“连接词”。可直接参考官方表达
⑤常见用显示过滤需求及其对应表达式
- 数据链路层:
- 筛选mac地址为04:f9:38:ad:13:26的数据包:ethsrc==04:f9:38:ad:13:26
- 筛选源mac地址为04:f9:38:ad:13:26的数据包:ethsrc==04:f9:38:ad:13:26
- 网络层:
- 筛选ip地址为192168 1.1的数据包:ipaddr==192.168.1.1
- 筛选192.168.1.0网段的数据:ipcontains1921681
- 筛选192.168.1.1和192.168.1.2之间的数据包:ipaddr==192168.1.1&&ipaddr==192.168.1.2
- 筛选从192.168.1.1到192.168.1.2的数据包:ipsrc==19216811&&ipdst==192.168.1.2·
- 传输层:
- 筛选tcp协议的数据包:tcp
- 筛选除tcp协议以外的数据包:!tcp
- 筛选端口为80的数据包:tcpport==80
- 筛选12345端口和80端口之间的数据包:tcpport==12345&&tcpport==80
- 筛选从12345端口到80端口的数据包:tcpsrcport==12345&&tcpdstport==80
- 应用层:
- 特别说明:http中httprequest表示请求头中的第一行(如GETindexjspHTTP/1.1)httpresponse表示响应头中的第一行(如HTTP/11200OK),其他头部都用 httpheader name形式。
- 筛选url中包含php的http数据包:httprequesturicontainsphp
- 筛选内容包含username的http数据包:httpcontainsusername
c、使用wireshark分析TCP三次握手
①设置过滤阿里云服务器的IP地址:ip.addr == 47.104.157.132
②使用TCP调试助手连接阿里云服务器上的TCP服务端
③wireshark会捕获3条TCP数据
第一次握手数据包:客户端发送一个TCP,标志位为SYN,序列号为0,代表客户端请求建立连接,如下图:
第二次握手:服务器发回确认包,标志位为SYN,将确认号ack设置为客户的seq+1,即0+1=1,如下图:
第三次握手:客户端再次发送确认包,SYN标志位为0,ACK标志位为1,如下图:
③使用wireshark分析TCP数据包
使用TCP调试助手向阿里云服务器TCP服务端发送hello,并接收到服务器返回的hello world
wireshark捕获到四条tcp数据
- 第一条,由客户端发给服务器,发送“hello”;seq=1是因为第三次握手时客户端发给服务端的确认包不消耗序号;ACK=1,确认;win=517表示窗口大小
- 第二条:由服务器发给客户端是一个确认包;seq=1,因为第二次握手时seq=0此次+1,ack=8,表示收到了上面发给他的7个字符(hello在windows=hello/r/n),win表示窗口大小
- 第三条:服务器发给客户端,回复客户端“hello world” ;seq=1(因为上一条发送给客户端的确认包不消耗序列号);ack=8还是表示客户端发的7个字符收到了,win表示窗口大小;len=11,即回复的“hello world”的长度
- 第四条:客户端发给服务器,是一个确认包;seq=8,上次最后一个字符发送完毕是seq=7,此时+1,ack=12,收到了服务器发过来的11个字符,
需要注意的是:三次握手中的第三次握手中客户端发送给程序端的确认包是不消耗序号的,而
1.7 应用层
应用层是网络体系结构中的最上层,所有的网络应用程序和服务都工作在应用层;常见的网络应用程序有:浏览器、手游、即时通信软件、网站的后台程序、网游的主程等
万维网WWW(WorldWideWeb)并非某种特殊的计算机网络。它是一个大规模的、联机式的信息储藏所,是运行在因特网上的一个分布式应用。
万维网利用网页之间的超链接将不同网站的网页链接成一张逻辑上的信息网。
①统一资源定位符URL
当我们访问某个网页时,在浏览器的地址栏出现的长串字符就是URL,称为统一资源定位符URL
我们访问的网页上的内容,实际是服务器上的某个资源,每个资源在服务器上都对应这一个位置,万维网使用的统一资源定位符URL来指明因特网上任何种类“资源”的位置
URL的一般形式由以下四部分组成:
将某个网页另存为文件,存储后由一个html文件和一个文件夹
文件夹的内容如下:
万维网文档:由HTMLCSS、Javasaript编写的万维网文档
①浏览器发送HTTP请求的过程
②HTTP协议概述
超文本传输协议HTTP(Hyper text transfer protocol)定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。是处理客户端和服务端之间的通信。
③HTTP/1.0
HTTP/1.0采用非持续连接方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接,当接受响应后就立即关闭连接。每请求一个文档就要两倍的RTT的文档。若一个网页有很多引用对象(例如图片等),那么请求每一个对象都要花费2RTT的时间。
为了减少时延,浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是,会大量占用万维网服务器的资源。特别是万维网服务器往往要同时服务于大量客户的请求,会使其负担很重。
④HTTP /1.1
HTTP/11采用持续连接方式。在该方式下,万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上引用的对象,而是只要这些文档都在同一个服务器上就行。
为了进一步提高效率,HTTP/1.1的持续连接还可以使用流水线方式工作,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后,服务器就发回一个接一个的响应报文。这样就节省了很多个RTT时间,使TCP连接中的空闲时间减少,提高了下载文档的效率。
⑤HTTP报文格式
HTTP是面向文本的,其报文中的每一个字段都是一些ASCII码串,并且每个字段的长度都是不确定的。
可以利用浏览器的开发者工具查看某个HTTP请求的报文:
HTTP协议支持的请求方法:
HTTP常见的请求头:
connection:决定HTTP连接(不是TCP连接)是否在当前事务完成后关闭
Keep-Alive:timeout=5,max=1000
User-Agent:这个字段可以帮助统计客户端用了什么浏览器、操作系统等
Content-Type:请求的时候,告知服务端数据的媒体类。返回的时候,告诉客户端数据的媒体类型
Cookie:Cookie提供一种机制使得万维网服务器能够“记住”用户,而无需用户主动提供用户标识信息。也就是说,cookie是一种对无状态的HTTP进行状态化的技术
HTTP是无状态的:协议对于事务处理没有记忆能力,对于同一个URL请求没有上下文关系,每次的请求都是独立的,他的执行情况和结果与前面和之后的请求是无直接关系的,他不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况
使用Cookie在服务器上记录用户信息:
比如:第一次通过浏览器访问B站时,登陆了个人账号,之后再次访问B站时,返回的就是已登录界面
状态码:web服务器告诉客户端请求的状态
常见的状态码为以下四类:
200状态码
- 3XX状态码
- 4XX状态码
- 5XX状态码