什么是网络?
计算机网络由若干的节点和连接这些节点的链路组成,计算机网络的节点可以是计算机,集线器,交换机等
网络有什么作用?
信息传递,但是我们要知道仅仅有网络是无法进行信息传递的,我们还需要在计算机上安装相应的软件才可以
什么是互联网?
如果把网络再通过路由器连在一起就形成了互联网(众多的电信运营商共同组成)。世界上最大的互联网就是因特网
信息在网络中的传输流程
常见的网络的划分形式有三种协议如下所示:
我们在研究的时候通常使用的是五层协议,下面我们看看这五层协议的流动过程:
下面我们看看每层具体做的事情:
1.2 各层介绍
每一层的工作都会借助协议完成
1.2.1 应用层
能够和用户交互,所有能够产生网络流量的程序。
它使得应用程序能够直接运行在传输层上,直接为用户提供服务。(包含的协议有HTTP等)
表示层: 信息传输前对数据进行处理;网络安全和保密管理,文件的压缩等;虚拟终端协议(VTP)
会话层: 将会话地址映射为运输地址;选择需要的传输服务质量参数;识别各个会话连接;传输有限的透明用户数据等
1.2.2 运输层
负责两个主机中进程之间的通信提供服务,由于一个主机可以运行多个进程,因此运输层有复用和分用的功能。复用就是多个应用进程可以同时使用下面的运输层的服务,分用则是运输层把收到的信息分别交给上面的应用层中的相应进程
运输层主要使用UDP和TCP两种协议,主要目的是将数据发送给指定的应用(后面详细讲)
1.2.3 网络层
选择最佳的路径和规划IP地址 路由表 通过IP协议进行地址划分,基于IP地址转发,负责把数据传送给服务器/计算机。(只有TCP协议)传输层会负责重传和顺序问题,也可以保证传给对应的进程。UDP 只负责传送给对应的进程,不保证重传和信息问题
1.2.4 数据链路层
数据链路层传送的是帧
数据链路层不必考虑物理层如何实现比特传输的细节。甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方
1.2.4.1 数据链路层的三个基本问题
封装成帧
封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧
首部和尾部的一个重要作用就是进行帧定界
对于定界而言,我们可以使用控制字符进行帧定界
当数据是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符
控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT (End Of Transmission) 表示帧的结束
当然了,我们有可能会想到当我们的首部和尾部在数据中就已经出现的时候,那么我们的帧怎么定界呢???
解决方法:字节填充 (byte stuffing) 或字符填充 (character stuffing)
发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC” (其十六进制编码是 1B)。
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个
差错检测
在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施
常用: CRC 的检错技术
1.2.5 物理层
确定与传输媒体的接口的一些特性,物理层中承载的是比特流单位是比特
机械特性: 指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。
电气特性 :指明在接口电缆的各条线上出现的电压的范围。
功能特性 :指明某条线上出现的某一电平的电压表示何种意义。
过程特性:指明对于不同功能的各种可能事件的出现顺序
简洁:
1、某进程(也就是在应用层)准备好待传输数据,若目的地址是域名则要先通过DNS解析成IP地址
2、交付到运输层(TCP/UDP层),运输层对数据进行适当的分组等操作,后对每一个分组数组加上首部形成报文段(或用户数据报)首部包括源地址、源端口、目的地址、目的端口和一些其他的诸如校验和等数据
3、交付到网际层(IP层),对分组数据加上首部形成IP数据报,首部包括源地址、目的地址(跟运输层的目的地址不同,运输层的目的地址是数据要传送的最终地址,而该目的地址是通过路由表信息得出,是该数据下一步该转移的目的计算机)和校验和等数据
4、交付到数据链路层(mac层),先是对把数据封装成帧(也就是添加首部[SOH]和尾部[EOT]),然后进行透明传输(也就是封装的数据里面,如果出现首部SOH和尾部EOT这样的数据,对其进行转义,也就是加上ESC转义字符,这种方法称为字节/字符填充)
5、交付到物理层,根据数据链路层的mac知道要传输到目的计算机,通过特定的传输介质传送到下一个地址
6、若源主机与最终目的主机在同一个网段,则该地址是最终的目的主机,开始接收数据,进入第7步骤,若源主机和最终目的主机不在同一个网段,进入第11步骤
7、交付到数据链路层,对数据进行卸装,该层会对接收的数据进行差错检测,有差错的数据都会被丢弃 8、交付到IP层(网络层),解帧校验
9、交付到运输层,在该主机上,根据端口找到对应的应用,当使用的TCP协议时,提供一种面向连接的可靠的传输服务,可以说是建立了一个虚拟通道,源主机的数据通过该虚拟通道进行传输;若是使用的UDP协议时,提供一种面向的非连接的尽最大努力的不可靠的传输服务,数据传输快,但是无法保证数据100%传输。
10、建立了传输连接后,应用开始接收数据,发送方数据和接收方都必须满足相同的标准应用层协议,如http、ftp、smtp等,通过标准协议应用即可正确的接收源主机发送过来的数据。
11、该计算机不是最终主机,那该计算机就是路由器也就是用于转发分组数据的中转站,首先接收数据的处理同步骤7和8一样,然后接下来的流程又是如同步骤3,
12、如此循环直至找到最终主机,将数据传送到目的应用
TCP/IP 虚拟互联的方式
TCP/IP体系在网络上采用的做法是在网络层(及就是IP层)采用的标准化协议,但相互连接的网络可以是异构的,我们许多的计算机网络通过一些路由器进行互连,由于互连的计算机网络都是采用相同的国际协议IP,因为我们可以把互连以后的计算机网络堪称一个“虚拟互连网络”
这种使用IP协议的虚拟互连网络简称为IP网,使用IP网通信的好处:当IP网上网的主机进行通信时,就好像在一个单个网络上通信一样,他们看不见互连的各网络的具体细节。下面我们看看IP地址的结构
整个因特网就是一个单一的抽象的网络。IP地址就是因特网上的每一个主机(或者路由器)的每一个接口分配的全世界唯一的32位标识符。分类IP地址就是:将IP地址划分为若干类,每一个类地址都由两个固定的字段组成,其中一个是网络号(net-id),它标志主机(路由器)所连接到的网络。一个网络号在整个因特网是唯一的。第二个字段是主机号(host-id),它标志该主机。一个主机号在它前面的网络号所指明的网落范围是唯一的。 由此可见,一个ip地址在整个网络范围内是唯一的
点分十进制计法
:对于主机/路由器来说,IP地址都是32位的二进制代码。当然不好书写,也不好看,我们就用等效的十进制数字表示,方法如下:
接下来我们谈谈IP的发展史
这两级IP地址可以记为:IP地址 <网络号 主机号>,下图给出了常用的各种IP地址网络号字段和主机号字段,我们ABC三类地址都是单播地址,最常用,所以底下重点分析
逐一分析A,B,C三类地址
A类地址
1、A类地址的网络号字段占一个字节,但是只有7位可用(第一个固定0),可以指派的网络号是:2^7-2 = 126个。减2的原因是:网落号字段全为0的IP地址是保留地址,意思是“本网络”,第二,网络号为127(及就是01111111)保留作为本地软件环回测试本机进程间的通信用的。有什么用呢,通俗点:本机发送一个目的地址为环回地址(如:127.x.x.x)的IP数据报,则本机中的协议软件就会处理数据包数据,不会给别的网络发,因为127.x.x.x地址也根本不是网络地址
2、A类地址主机号占用三个字节,所以每一个A类网络的最大主机号为:2^24-2 = 16777214,这里减2的原因是:全0的主机号字段表示的IP地址是“本主机”所连接到的单个网络地址;全1表示所有的(all),因此全1的主机号表示的就是该网络的所有主机
B类地址
B类地址网络号占用2字节,但是前面(10)固定好了,所以不会出现全0或者全1的情况。但是实际上B类网络地址:128.0.0.0是不指派,可以指派B类最小的地址为:128.1.0.0.因此B类的可指派网络数:2^14-1 = 168383。B类地址每一个网络上的最大主机数:2^16-2 = 65534,减去的是全0或1的
C类地址
C类地址有三个字节的网络号字段,最前面(110),还有21为可以分配。C类网络地址192.0.0.0也是不指派的,可以指派的最小地址:192.1.0.0,因此C类可指派的网络总数:2^21-1 = 2097151,每一个C类地址最大的主机数:2^8 -2 = 254
分析:两级划分方式的缺点
1、IP地址的空间利用率低
2、路由表太大降低网络性能
3、两级IP地址不够灵活
IP地址::={<网络号>,<子网号>,<主机号>}
直接上栗子来看:下面这个图表示某个单位拥有一个B类IP地址,网络地址是145.13.0.0(网络号是145.13)。凡目的地址为145.13.x.x的数据报都被送到这个网络上的路由去R1
现在把上图的网络划分为三个子网(如下图)。这里假定子网号占用8位,因此在增加子网号后,主机号只有8位。所以划分的三个子网如下图所示。划分完子网,整个网络对外仍然是一个网络,其网络地址仍然为:145.13.0.0 。网络号145.13.0.0 上的路由器R1在收到外来数据报后,再根据数据包的目的地址,把他转发给相应的子网
图一到图二 说白了:当没有划分子网时,IP地址是两级结构,划分子网后IP地址变为三级结构。划分子网只是把IP地址的主机号这部分进行在划分,而不改变原来的网路号
问题:给一个网络如何判断那部分是网络号,那部分是子网,是主机号?
如果不知道,请继续往下看
作用:子网掩码是一种用来指明一个IP地址所标示的主机处于哪个子网中。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分
问题:假定我们有一个数据报(目的地址是:145.13.3.10),已经到达了路由器R1,那么这个路由器如何把它转发到子网145.13.3.0呢?所以引入了子网掩码
(1)一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网,划分子网纯属一个单位内部的事情,本单位以外的网络看不见这个网络是由多少个子网组成。
(2)从网络的主机号中借用若干位作为子网号,当然主机号也就相应的减少了同样的位数。于是两级IP地址在本单位内部就变为三级IP地址。
IP地址::={<网络号>,<子网号>,<主机号>}
(3)凡是从其它网络发送给本单位某台主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。但此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网,把IP数据报交付目的主机
默认子网掩码:
子网掩码有两个特殊地址,当子网掩码的主机地址全为0时,表示该网络地址,当子网掩码的主机地址全为1时,表示该网络的广播地址