网络的发展
网络的发展有下面几个阶段:
- 独立模式:计算机最开始是以单机模式被广泛使用的。每一台计算机都是独立的,之间不能够进行数据共享与通信
- 网络互联: 计算机之间可以链接在一起,完成数据共享,计算机之间还可以进行相互通信
- 局域网(LAN): 一片区域内的计算机通过路由器和交换机连接在一起,可以用来相互通信的计算机数量增多
- 广域网(WAN): 多个局域网通过路由器连接起来,构成一个广域网,也可以说是一个更大的局域网
“广域网”和“局域网”是一个相对的概念,例如:一座城市的网络的网络布局可以说是城域网,从大的方面讲,城市里面有许许多多的局域网,构成了这个大的广域网,对于一个国家的网络而言,整个国家的网络可以看作是由许许多多的城市的局域网构成的一个更大的广域网,而每一个城市的网络就看作是一个局域网。同样地,这个国家的网络也可以看作是一个更大的局域网。
协议
认识协议
协议就是一种 “约定”。它是多方协商出来的一种通信方案,达成一种“共识”。双方想要进行通信,就需要按照双方事先都知道的约定进行通信。例如:两方之间发送电报,事先约定了0代表收到,1代表发起进攻等,这个约定是两方都知道的。
协议的好处:
- 统一标准,通信双方能够通过某种标识把数据识别出来
- 提高通信的效率和可靠性
计算机之间想要传递各种不同的信息,就需要约定好双方的数据格式。
协议分层
整个网络协议栈被分成层状结构的一个个的小模块,具体到实例有OSI七层参考模型和TCP/IP五层模型
协议分层的好处:
- 每一层做不同的工作,下一层为上一层提供特定的服务,同一层之间交互使用相同的“协议”
- 同一层之间进行交互会使用下一层提供的服务(接口服务),且不会关心下一层的实现细节,层与层之间通过接口实现通信,实现了“解耦”
举例:两个人在打电话,都是用汉语进行交流,表面上看是两人直接进行通信。仔细思考会发现,在人通信层的下一层在为两人通信提供服务,电话层与对端的电话层通过电话协议进行通信,电话层需要将人说话的声音进行处理,转为电信号,然后发送给对端的电话层,对端的电话层收到电信号之后进行处理,转为人的声音,这样,对端的人就听到的是人的声音。两个人通信的时候是不会关心下一层服务细节,就可以直接进行通信。
协议分层的本质: 实现了软件工程上的解耦,层与层之间只有接口相互接口调用关系。
OSI七层模型
什么是OSI七层模型
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范
- 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯
需要注意,随着时代的发展,OSI已经被TCP/IP 4层模型淘汰,在当今世界上并没有大规模的使用。
那么对于OSI,人们按照功能不同,分工不同,人为的将OSI的分为七层。实际上这七层是并不存在的,也就是说没有这些概念,而我们今天提到的七层概念,只是人为的划分而已。目的只是为了让大家更好地理解这些都是用来做什么的。
快速理解OSI七层模型
分层 | 功能 |
---|---|
应用层 | 直接向用户提供服务,完成用户希望在网络上完成的各种工作(可理解程人机交互) |
表示层 | 处理用户的数据:数据格式处理、数据的编码、压缩和解压缩、数据的加密和解密 |
会话层 | 组织和协调两个会话进程之间的通信 ,并对数据交换进行管理 |
传输层 | 定义传输数据的协议和端口号 |
网络层 | 在处于不同地理位置的网络中的两个主机系统之间提供连接和路径选择 |
数据链路层 | 定义了如何让格式化数据以帧为单位进行传输,以及如何控制对物理介质的访问 |
物理层 | 利用传输介质为数据链路层提供物理连接,实现比特流的透明传输 |
举例:甲某通过计算机的电脑端微信给乙某发了两个字“你好”。
- 应用层 (人机交互)
最直观的理解就是人机交互界面,或者说是系统程序窗口。甲某将“你好”两个字输入电脑微信软件。
- 表示层 (数据处理)
计算机如何处理“你好”两个字? 答案就是“翻译”! 人类有人类的语言,计算机也有自己的语言。计算机是不懂汉语的,他只知道二进制的 0 和 1 ,那么贾某在计算机的微信上打了“你好”这两个字,计算机接收到后开始通过二进制转换成自己的语言。这一步就是翻译,当然,表示层还有其他的功能,例如安全加密,压缩等。
- **会话层 **(建立连接)
计算机知道你要发送的东西之后,就需要准备发送了。那么,第一步就是要找到对方(乙某),并和对方建立会话关系。直接理解:会话属于软件层面,允许不同机器上的用户之间建立会话关系。
- **传输层 **(定义协议和传输端口)
传输层可理解为是同一个软件中的两个端口进行数据传输。我用微信发送的消息,你也需要用微信来接收。那么就是电脑端微信用户之间的传输。
- **网络层 **(选择路径进行传输:提供IP)
传输层已经准备就绪了,可是我们知道微信用户千千万,甲某和乙某中间还存在很多的其他用户,我们怎么实现甲某的文字就能准确的发送到乙某的微信上呢? 这就是需要网络层的 IP 地址了。只要知道了乙某的 IP 地址,就可以选择最佳路径进行准确的数据传输了。
- **数据链路层 **(mac收发数据)
网络层接收到数据后需要继续往下传输,需要使用工具,就是数据链路层的网卡,继续进行传输。
- 物理层
数据到达物理层后,变成信号传输。
数据到达目标主机后,开始进行一个逆向的过程。
即数据到达对方主机后,从物理层传输到数据链路层–网络层–传输层–会话层–表示层–应用层。
此时,数据到达乙某的电脑,乙某就可以看到甲某发送的“你好”两个字了。
深入理解OSI七层模型
-
第一层:物理层。
是参考模型的最低层。该层是网络通信的数据传输介质,由连接不同结点的电缆与设备共同构成。
主要功能:利用传输介质为数据链路层提供物理连接,负责处理数据传输并监控数据出错率,以便数据流的透明传输。传输数据的单位是比特(Bits),这主要是和硬件有关,与软件关系不大。
-
第二层:数据链路层。
是参考模型的第二层。主要功能:在物理层提供的服务基础上,在通信的实体间建立数据链路连接,传输的数据单位是“帧”,并采用差错控制与流量控制方法,使有差错的物理线路变成无差错的数据链路。
内容包括介质访问控制、连接控制、顺序控制、流量控制、差错控制和仲裁协议等。
链路层协议有:协议有面向字符的通讯协议(PPP)和面向位的通讯协议(HDLC)。
仲裁协议:CSMA/CD(Carrier Sense Multiple Access with Collision Detection)、Token Bus、Token Ring
链路层数据单位是帧,实现对MAC地址的访问,典型设备是交换机SWITCH。
-
第三层:网络层。
是参考模型的第三层。主要功能:为数据在节点之间传输创建逻辑链路,通过路由选择算法为分组通过通信子网选择最适当的路径,以及实现拥塞控制、网络互连等功能。
网络层管理连接方式和路由选择。
连接方式:虚电路和数据报服务。
虚电路是面向连接的,数据通讯一次路由,通过会话建立的一条通路。数据报是非连接的,每个数据报都有路由能力。网络层的数据单位是包,使用的是IP地址,典型设备时路由器Router。
-
第四层:传输层。
是参考模型的第四层。主要功能:向用户提供可靠地端到端服务,处理数据包错误、数据包次序,以及其他一些关键传输问题。传输层向高层屏蔽了下层数据通信的细节。因此,它是计算机通信体系结构中关键的一层。
提供端到端的服务,可以实现流量控制、负载均衡。
传输层信息包括端口、控制字和校验。
传输层协议主要是TCP和UDP。
-
第五层:会话层。
是参考模型的第五层。主要功能:负责维扩两个结点之间的传输连接,以便确保点到点传输不中断,以及管理数据交换等功能。
会话层主要内容时通过会话进行身份验证、会话管理和确定通讯方式。一旦建立连接,会话层的任务就是管理会话。
-
第六层:表示层。
是参考模型的第六层。主要功能:用于处理在两个通信系统中交换信息的表示方法,主要包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。
表示层主要是解释通讯数据的意义,如代码转换、格式变换等,使不同的终端可以表示。
还包括加密与解密、压缩与解压等。
-
第七层:应用层。
是参考模型的最高层。主要功能:为应用软件提供了很多服务,比如文件服务器、数据库服务、电子邮件与其他网络软件服务。
应用层应该是直接面向用户的程序或服务,包括系统程序和用户程序,比如www、FTP、DNS、POP3和SMTP等都是应用层服务。
总结:
- 数据再发送时是数据从应用层至物理层的一个大包的过程,接收时是数据从物理层至应用层的一个解包过程。
- 从功能角度可以分为三组:1/2层解决网络通信问题,3/4层解决传输问题,5/6/7层处理对应用进程的访问。
- 从控制角度可分为二组:1/2/3层是通信子网,4/5/6/7是主机控制层。
TCP/IP五层(或四层)模型
OSI七层模型既复杂又不使用,所以就有了TCP/IP五层(或四层)模型。TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。物理层有时候不做讨论,所以有时候也叫四层模型。
- 物理层: 负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub,加强信号,让数据传的更远)工作在物理层。
- 数据链路层: 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网, 无线LAN等标准。交换机(Switch)工作在数据链路层。
- 网络层: 负责地址管理和路由选择。 例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。
- 传输层: 负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
图解:
数据通信的本质就是两个协议栈之间进行通信
。
总结:
- 应用层解决的传输数据的目的,根据特定的通信目的,进行数据分析与处理,达到某种业务性的目的
- 传输层和网络层处理数据传输遇到的问题,保证数据的可靠性
- 数据链路层和物理层负责数据真正发送的过程,完成以太网和局域网的通信
- 下三层处理的是通信细节,应用层处理的是业务细节
一般而言
- 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容
- 对于一台路由器,它实现了从网络层到物理层(有些可到应用层)
- 对于一台交换机,它实现了从数据链路层到物理层
- 对于集线器,它只实现了物理层
- 但是并不绝对,很多交换机也实现了网络层的转发;很多路由器也实现了部分传输层的内容(比如端口转发)
每一层都有对应的协议:
- 应用层协议:
- FTP 文件传输协议
- HTTP 超文本传输协议
- NFS 网络文件系统
- 传输层协议:
- TCP 传输控制协议
- UDP 用户数据报协议
- 网络层协议:
- IP 因特网互联协议
- ICMP 因特网控制报文协议 ping
- IGMP 因特网组管理协议
- 链路层协议:
- ARP 地址解析协议,通过ip找mac地址
- RARP 反向地址解析协议,通过mac找ip
网络传输的基本流程
- 不同的协议层对数据包有不同的称谓,在传输层叫做数据段(segment),在网络层叫做数据报 (datagram),在链路层叫做数据帧(frame),应用层叫做请求和响应
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息
因每一层的传输数据单元不同,所以需要封装报文头部,以此使下一层能够看懂识别。
传输层:传输层有TCP/IP两个协议,TCP(传输控制协议)和UDP(用户数据报协议)。TCP协议传输更加稳定可靠,UDP协议传输效率更高。所以,上层数据到达传输层后需要封装TCP头部或者UDP头部。
网络层:同理,上层数据到达这里需要封装IP头部。
TCP/IP定义了网络互联协议(IP)(英文是Iternet Protocol)。而IP又由四个支撑协议组成:ARP(地址解析协议),RARP(逆地址解析协议),ICMP(网际控制报文协议)和IGMP(网际组管理协议)。
数据链路层:同理,上层数据到此需要封装MAC头部。
物理层:到达物理层就直接由计算机通过信号接收了。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理
问题:
- 每一协议层的数据包是什么?
数据包=报头+有效载荷
- 协议的共性是什么?
1.如何将数据包中的报头和有效载荷分离的问题,这个过程叫做解包。
2.自底向上,要确认自己的有效载荷交付给上层的那个协议,这个过程叫做分用。
- 如何解决将数据包中的报头和有效载荷分离的问题?
1.定长报头。报头的长度是确定的,这样就可以实现二者分离。
2.自定义描述符字段。报头中添加一个字段,表示报头的长度。
数据封装的过程:
局域网通信
局域网内的主机是通过路由器和交换机连接在一起的,局域网内的两台主机通信本质就是两个协议栈之间在进行通信,下面是两台主机通过TCP/IP协议进行文件传输的过程:
数据在自身协议栈自顶向下进行封装:
- 数据包交给应用层,应用层添加上对应的应用层协议报头,然后把整个数据包向下交付给传输层
- 传输层再添加上对应的传输层协议报头,然后把整个数据包向下交付给网络层
- 网络层再添加上对应的网络层协议报头,然后把整个数据包向下交付给数据链路层
- 数据链路层再添加上对应的数据链路层协议报头,然后把整个数据包通过网络交付给对端数据链路层
数据在对端协议栈自底向上进行分用:
- 数据链路层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的网络层
- 网络层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的传输层
- 传输层将数据包的报头和有效载荷进行解包分离,然后将有效载荷交付给上层的应用层
- 应用层将数据包的报头和有效载荷进行解包分离,将最后的数据进行相关处理然后交付给用户
思考下面几个问题:
1.局域网中,所有的主机可以直接通信,它们是如何确定数据是发给哪一台主机,目标主机又是如何确认数据是发给自己的?
在数据链路层,有一个MAC地址(48位),网卡硬件地址或者序列号,是全球唯一的,用来标识主机的唯一性。每一台主机都要一个MAC地址,且都知道,发送方将数据发出去,这个数据里面包含目标主机的MAC地址信息,每个主机都可以收到这一份数据,且用自己的MAC地址与数据中的目标主机MAC地址进行比较,如果不同,表明该数据不是发给自己的,就将数据丢掉,相同就表明该数据是发给自己的,就收下。
2.局域网中,如何将数据发送给所有主机?
主机发送数据是,将MAC地址设置为一个广播地址,这样所有的主机都认为这个数据是发给自己的
3.局域网通信原理
局域网中,有多台主机直接通信,有可能会发生数据碰撞,这样就会影响其它主机间的通信,所以一个局域网可以看作是一个碰撞域。
碰撞后的数据就是垃圾数据量,局域网中的所有主机都可以收到发出去的数据,包括发数据的主机本身也是如此,该主机会将收到的数据和此前发出去的数据进行对比,如果不同,代表此前发出去的数据发生了碰撞,这就是碰撞检测
数据发生碰撞后,发送方不会立即将数据进行重写发送,而是等一段数据,在重新发生,这就是碰撞避免算法,也是碰撞避免的一种机制
所以说,局域网的数据通信时在一个碰撞域中不断地碰撞,然后进行碰撞检测,碰撞避免。
局域网通信的本质就是基于碰撞域、碰撞检测和碰见避免实现通信,局域网内主机越多,碰撞几率越多,交换机在局域网中的作用就是划分碰撞域,解决碰撞问题,降低碰撞几率
跨网络通信
跨网络通信就是分别处于不同局域网的两台主机之间进行通信,根据前面的知识我们可以知道,两个局域网之间是通过路由器进行通信的,所以这两台主机进行通信要经过至少一台路由器,更多的时候是多台路由器,下面是跨网段的两台主机的文件传输,中间会经过很多台路由器,下面的过程只经过一台路由器:
可以看到的是,这里的通信比局域网内通信多了一个封装和分用的过程,数据封装完毕不是把数据包直接通过网络交付给对端的数据链路层,而是交付给路由器,这是为什么呢?
路由器横跨两个局域网,两个局域网负责设备之间的数据帧传送的网络协议可能是不同的,有以太网、令牌环网和无限LAN等通信协议标准。在上面的图片中显示,一个局域网使用的是以太网协议标准,两一个局域网使用的是令牌环网,双方的标准有差异不能够直接通信,所以就需要有中间媒介处理进行处理,这个媒介就是路由器。前面说过了,路由器是从网络层到物理层,所以数据封装完毕会把数据包交付给路由器,最后一次封装会添加路由器的mac帧(这样局域网内的主机就可以找到对应的那一台路由器,局域网的主机都认为路由器是自己所在局域网的一台主机)。
路由器处于数据链路层的以太网驱动会把数据包中的以太网协议(路由器mac帧)报头去掉,将剩下的有效载荷交付给路由器的网络层,路由器根据目的IP地址,查询路由表进行路由转发,然后将数据包进行向下交付给令牌环网的驱动程序,它会给数据添加上对端的令牌环网协议报头信息,最后将数据包传送给对端协议栈的数据链路层
总结:数据包在路由器中不断调整mac帧协议报头,也就是,数据包的源mac地址和目的mac地址是在不断变化的,但是源IP和目的IP是不变的。可以看到的是IP层往上的数据报头信息是不变的,变的是IP层往下的协议报头信息,这就体现了IP层协议的好处:通过IP地址虚拟化了底层协议的差异,这样就不需要关心底层使用的是那种通信协议,只要有源IP地址和目的IP地址就可以将数据转发出去
网络中的地址管理
IP地址
IP协议有两个版本,IPv4和IPv6。我们整个的课程,凡是提到IP协议,没有特殊说明的,默认都是指IPv4
- IP地址是在IP协议中,用来标识网络中不同主机的地址;
- 对于IPv4来说,IP地址是一个4字节,32位的整数;
- 我们通常也使用 “点分十进制” 的字符串表示IP地址,例如 192.168.0.1 ;用点分割的每一个数字表示一个字节,范围是 0 - 255;
- IP地址可以由人手动静态分配,也可以让路由器来动态分配
IP地址表示方式
IP地址 = 网络位+主机位(网络位相同的IP地址,为同一网段)
IP地址的类型:
国际标准组织ISO定义地址分类:五大类(是以IP地址的第一位进行区分的)
A类:1-126默认子网掩码:255.0.0.0
B类:128-191默认子网掩码:255.255.0.0
C类:192-223默认子网掩码:255.255.255.0
D类:224-239组播地址
E类:240-254科研使用
特点:
- 不同网段的设备不能直接通信,如果需要通信需要通过路由器转发
- 主机ID全为0的IP地址代表网段地址
- 主机ID全为1的IP地址表示该网段的广播地址
还有几类特殊的IP地址:
- 私有地址
Internet管理委员会规定如下地址段为私有地址,私有地址可以自己组网时用,但不能在Internet网上用,Internet网没有这些地址的路由,有这些地址的计算机要上网必须转换成为合法的IP地址,也称为公网地址。下面是A、B、C类网络中的私有地址段。你自己组网时就可以用这些地址了。
10.0.0.0~10.255.255.255
172.16.0.0~172.131.255.255
192.168.0.0~192.168.255.255
- 回环地址
A类网络地址127是一个保留地址,用于网络软件测试以及本地机进程间通信,叫做回环地址(loopback address)。无论什么程序,一旦使用回环地址发送数据,协议软件立即返回之,不进行任何网络传输。含网络号127的分组不能出现在任何网络上。
- 广播地址
TCP/IP规定,主机号全为"1"的网络地址用于广播之用,叫做广播地址。所谓广播,指同时向同一子网所有主机发送报文。
子网
引入子网掩码(NetMask),(子网掩码是连续全1的网络地址加上主机地址)从逻辑上把一个大网络划分成一些小网络。
知道ip地址和子网掩码后,可以通过与运算计算相关地址
- 网络地址
- 广播地址
- 地址范围
- 本网有几台主机
举个例子:
子网id:被子网掩码连续的1覆盖的ip地址的部分,在此例中被子网掩码连续1覆盖的部分就是10.1.1
网段地址:在子网id后面全部补上0就是网段地址,本例中就是10.1.1.0
广播地址:在子网id后面全部补上0就是广播地址,在本例中就是10.1.1.255
主机id分配的范围:10.1.1.1 ---> 10.1.1.254
注意:子网和网段是完全不同的概念,不要混淆了概念
网段是一个物理层概念(使用同一物理层设备可以直接通讯的部分),或者一个不严格的数据链路层概念(一个网段是一个冲突域)。
子网是一个则网络层概念(由路由设备划分的,或者由掩码划分的)。
网关
大家都知道,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。
网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。
- PC间想要通信要保证在同一网段
- 若在同一网段,则直接发出去,不去找网关
- 若不在同一网段,则直接发包给网关,这就是上面介绍的跨网络通信
MAC地址
- MAC地址用来识别数据链路层中相连的节点
- 长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了,不能修改,mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突; 也有些网卡支持用户配置mac地址)