文章目录
- 一、计算机网络背景
- 二、计算机网络协议
- (1)网络协议的概念
- (2)协议分层
- (3)数据封装与分用
- (4)地址管理
一、计算机网络背景
学习计算机网络我们首先要有宏观的认识,网络解决的问题是牵扯到双方,数据的发送方以及数据接收方,就是要解决不同计算机之间进程的进程间通信问题。
它经历了四个过程:
第一个是独立模式:
计算机之间相互独立,如下图:
第二个是网络互联: 多台计算机连接在一起, 完成数据共享,如图:
第三个是局域网LAN,计算机数量更多, 用交换机和路由器连接在一起,如图:
第四个是广域网WAN:把远隔千里的计算机都连在一起,所谓 “局域网” 和 “广域网” 只是一个相对的概念.。比如中国的广域网也可以看作一个比较大的局域网。如图:
二、计算机网络协议
(1)网络协议的概念
协议概念:
协议,是约定,是计算机网络中进行数据交换而建立的规则、标准或约定的集合。
若是通信双方的数据格式,传输方式,字符集不一样,那么两者之间很难进行通信,因为双方都不认识对方的标准,要想传递不同的信息,双方就得约定好一个协议,按照这个协议的规定,双方统一好数据的格式,这样就可以完成通信。
网络协议和网络协议簇:
网络协议解决的是网络双方,发送的网络数据格式问题,本质上对发送和接收的数据格式做出约定。
协议总是指某一层的协议。准确地说,它是在同等层之间的实体通信时,有关通信规则和约定的集合就是该层协议,例如物理层协议、传输层协议、应用层协议。网络协议是通信双方,约定通信时使用的数据格式,进行网络通信。
我们的计算机生产厂商有很多,计算机操作系统, 也有很多,计算机网络硬件设备, 还是有很多。如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人规定并约定一个共同的标准来让大家都来遵守, 这就是 网络协议。那么由很多网络协议组成的叫网络协议簇。
网络协议的组成
网络协议由三部分组成,语义,语法,时序。
- 语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。(要做什么)
- 语法是用户数据与控制信息的结构与格式,以及数据出现的顺序(要怎么做)
- 时序是对事件发生顺序的详细说明。(做的顺序)
(2)协议分层
认识协议分层之间首先要先了解一下什么叫做体系结构,它规定了网络的分层,以及每一个分层需要完成的功能,以及每一个分层拥有的协议,还规定了每一个分层与自己上下层的关系。
1、OSI七层模型 如下图:
OSI即开放系统互连七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。
把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机。
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输。
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。。简单来说这七层的功能是:
应用层:网络服务与最终用户的一个接口
表示层:数据的表示、安全、压缩
会话层:建立、管理、终止会话
传输层:负责进程之间的数据传输
网络层:负责地址管理和路由选择
数据链路层:负责相邻设备之间的数据传输
物理层:负责物理光电信号的传输
但是这种模型既复杂又不实用,因为他把功能相近的应用层,表示层和会话层分开实现,所以现在大部分都使用将这三层合为一体的TCP/IP五层模型或四层模型。
2、TCP/IP五层(四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层。
数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层。
网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层。
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层。
简单来将就是在TCP/IP五层模型中,他将功能相近的应用层,表示层和会话层合并为应用层。
-
应用层:负责应用程序之间的数据沟通 ——(常用协议:HTTP、FTP、DNS、DHCP)
-
传输层:负责进程之间的数据传输 ——(常用协议:TCP、UDP)
-
网络层:负责终端节点之间的通信(点对点),具体包括地址管理和路由选择等 ——(常用协议与设备:IP、ICMP、IGMP、路由器)
-
数据链路层:负责相邻设备之间的数据传输 ——(常用协议与设备:以太网协议、交换机)
-
物理层:负责物理光电信号的传输 ——(常用协议与设备:以太网协议、集线器)
3、网络传输基本流程
网络数据的转发需要先经历自己的网络协议栈,进而通过网络将数据转化为光电信号,传输到对端机器,对端机器收到数据之后,需要经历自己的机器网络协议栈的层层向上提交,一直将数据提交到应用层的应用程序当中。
(3)数据封装与分用
1、先形象化了解封装分用与协议:
数据包利用网络在不同设备之间传输时,为了可靠和准确地发送到目的地,并且高效地利用传输资源(传输设备和传输线路),事先要对数据包进行拆分和打包,在所发送的数据包上附加上目标地址,本地地址,以及一些用于纠错的字节,安全性和可靠性较高时,还要进行加密处理等等。这些操作就叫数据封装。而对数据包进行处理时通信双方所遵循和协商好的规则就是协议。与邮寄物品相比,数据包本身就如同物品,而封装就如同填写各种邮寄信息,协议就是如何填写信息的规定。
2、再理解:
不同的协议层对数据包有不同的称谓,在传输层叫做段,在网络层叫做数据报 ,在链路层叫做帧,在物理层叫比特流。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称为封装。
首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部叫分用, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。就如数据包=报头+有效载荷,几乎所有的协议都要解决封装和分用如图:
具体封装图:
- 1.用户信息转换为数据,以便在网络上传输
- 2.数据转换为数据段,并在发送方和接收方主机之间建立一条可靠的连接
- 3.数据段转换为数据包或数据报,并在报头中放上逻辑地址,这样每一个数据包都可以通过互联网络进行传输
- 4.数据包或数据报转换为帧,以便在本地网络中传输。在本地网段上,使用硬件地址唯一标识每一台主机。
- 5.帧转换为比特流,并采用数字编码和时钟方案
具体分用图:
分用就是按照直接封装的顺序,将封装的首部和尾部去掉,恢复成原来的数据。其实就是封装的反操作,又称为解封装。
3、总结:
总结1:发送方与接收方各层之间必须采用相同的协议才能建立连接,实现正常的通信。
- 应用层之间必须采用相同的编码解码规则,才能保证用户信息传输的正确性。
- 传输层之间必须采用相同的端口号与协议关系,才能保证上层应用进程间的通信。
- 网络层之间必须采用相同的逻辑寻址过程才能保证数据不会传输到错误的目的地。
- 数据链路层之间如果协议不同,接收方无法“理解”数据的内容。
- 物理层之间必须硬件接口规格相同,否则接收不到信号。
总结2:在实际的网络环境中,发送方和接受方之间会有很多的硬件设备起到中转的作用,在下图中假设了一种通信结构,在两台计算机之间增加了两台交换机和路由器,发送主机的数据会通过以下中间设备到达接受主机
发送主机先进行数据封装。
- 从发送主机物理网卡发出的电信号通过网线到达交换机,交换机将电信号转换成二进制数据送往交换机的数据链路层。交换机根据数据帧头部的MAC地址将数据智能转发到对应的路由器设备,在转发前要重新将二进制数据转换成物理的电信号。
- 路由器接受到数据后,会拆掉数据链路层的MAC头部信息,将数据包送往网络层,路由器将检测数据包头部的目标IP地址信息,并根据该信息进行路由转发,将数据报文转发到下一路由器上,在转发前要重新封装新的MAC头部信息,并将数据转换成二进制。
- 也就是路由器接受电信号,将电信号转换成二进制数据发往网络层,然后根据MAC地址和IP地址进行重新封装转换为电信号进行转发,然后对应的交换机接受电信号,然后根据MAC地址传送到接收主机的网卡中。
(4)地址管理
1、IP地址:
IP地址就是网络中主机的唯一标识,无论哪个主机与哪个主机之间进行通信,都需要用到IP地址来进行定位。并且在通信时,每条数据中都会包含源端地址和对端地址,他们指定了通信的两个对象。
对于我们常用的IPV4来说,IP地址是一个uint32_t类型的数据,也就是无符号32位的整数。
我们通常也采用点分十进制的字符串来表示IP地址,如192.168.0.1。每一个字节的范围是0-255。
IP地址可以在网络当中唯一标识一台主机,一个公网IP地址只能被一台机器所占有,一个机器可以拥有多个IP地址。
2、端口号:
端口号则是主机上进程的唯一标识,在编写程序时,需要告知计算机应该处理发往哪个端口的数据。
一个端口只能被一个进程占用,但是一个进程可以同时使用多个端口。 并且在通信时,每条数据也都会包含源端端口和对端端口,来指定从哪个进程发送数据,交给哪个进程进行处理
端口号是uint16_t,也就是无符号16位的整数。
3、MAC地址:
MAC地址用来识别数据链路层中相连的节点,通常也可以认为是物理地址。在网卡出厂时就确定了, 不能被修改,mac地址通常是唯一的。
MAC地址由48位组成,一般是16进制数字加上分割符:,如08:00:27:03:fb:19。
对于接收方而言,所有的网络数据都是需要经历网络协议栈的,网络数据到底属于哪一个应用程序的,通过端口进行区分。
4、网络字节序与主机字节序
在网络通信时,还需要注意字节序的问题。
字节序就是CPU对数据在内存中以字节为单位的存储顺序,也就是大端小端问题。
大端存储模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。
小端存储模式:是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
在网络通信中,网络字节序采用大端的存储模式,而主机字节序根据主机不同也不一样,家用机一般都是小端,但网络上的通信不能确保主机字节序的唯一性,因为受众是整个网络,而一旦通信的双方主机字节序不同,就会造成通信时的数据二义,所以需要确保字节序相同,就需要在通信时将主机字节序转换为通用的网络字节序。