目录

    • 网络协议
      • 网络协议的概念
      • 网络协议的组成
    • 协议分层
      • OSI七层模型
      • TCP/IP五层模型(四层模型)
    • 数据封装与分用
      • 封装
      • 分用
    • 地址管理
      • IP地址与端口
      • MAC地址
      • 网络字节序与主机字节序

网络协议

网络协议的概念

协议,即是约定,是计算机网络中进行数据交换而建立的规则、标准或约定的集合。

若是通信双方的数据格式,传输方式,字符集不一样,那么两者之间很难进行通信,因为双方都不认识对方的标准,要想传递不同的信息,双方就得约定好一个协议,按照这个协议的规定,双方统一好数据的格式,这样就可以完成通信。打个比方,你在网上与一个日本网友交流,你讲中文,他讲日语,谁都听不懂对方的语言。但是如果双方约定好一起讲英语,这样两者就可以进行正常的交流。


网络协议的组成

网络协议由三部分组成,语义,语法,时序。
1. 语义
语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。
(即要做什么)
2. 语法
语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。(即要怎么做)
3. 时序
时序是对事件发生顺序的详细说明。(即做的顺序)


协议分层

在网络通信中,因为通信是个极为复杂的过程,它包含了很多步骤,各个步骤之间又存在着许多关联。
所以为了将问题简单化,按照服务、协议、接口等将复杂的通信划分成层次结构,通过封装的方式,将底层的实现封装为接口提供给上层,上层也不关心底层的实现,只管去用。把原来的一个大问题,划分为一个一个的小问题,每一层分工明确,形成标准化的结构。这样不仅灵活性高,之间的耦合度也降低了,可维护性和实现的难度也得到了优化。

常见的层次模型有两种,一种是OSI七层模型,一种是TCP/IP五层模型(四层模型)。

这里可以学习一下这篇文章,写的非常好
TCP/IP四层模型和OSI七层模型的概念


OSI七层模型

  • OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型, 是一个逻辑上的定义和规范**
  • OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输; 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯

OSI七层模型自上而下分别是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
在这里插入图片描述

应用层:网络服务与最终用户的一个接口
表示层:数据的表示、安全、压缩
会话层:建立、管理、终止会话
传输层:负责进程之间的数据传输
网络层:负责地址管理和路由选择
数据链路层:负责相邻设备之间的数据传输
物理层:负责物理光电信号的传输

但是这种模型既复杂又不实用,因为他把功能相近的应用层,表示层和会话层分开实现,所以现在大部分都使用将这三层合为一体的TCP/IP五层模型。


TCP/IP五层模型(四层模型)

物理层一般考虑较少,有时候也会称为四层模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求

这也是如今常用的分层模型

在这里插入图片描述
在TCP/IP五层模型中,他将功能相近的应用层,表示层和会话层合并为应用层。

应用层:负责应用程序之间的数据沟通 ——(常用协议:HTTP、FTP、DNS、DHCP)
传输层:负责进程之间的数据传输 ——(常用协议:TCP、UDP)
网络层:负责地址管理和路由选择 ——(常用协议与设备:IP、ICMP、IGMP、路由器)
数据链路层:负责相邻设备之间的数据传输 ——(常用协议与设备:以太网协议、交换机)
物理层:负责物理光电信号的传输 ——(常用协议与设备:以太网协议、集线器)


数据封装与分用

数据包利用网络在不同设备之间传输时,为了可靠和准确地发送到目的地,并且高效地利用传输资源(传输设备和传输线路),事先要对数据包进行拆分和打包,在所发送的数据包上附加上目标地址,本地地址,以及一些用于纠错的字节,安全性和可靠性较高时,还要进行加密处理等等。这些操作就叫数据封装。而对数据包进行处理时通信双方所遵循和协商好的规则就是协议。与邮寄物品相比,数据包本身就如同物品,而封装就如同填写各种邮寄信息,协议就是如何填写信息的规定。

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链 路层叫做帧(frame)
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装 (Encapsulation)
  • 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议 字段” 将数据交给对应的上层协议处理

封装

这里我就简要的画一个图
在这里插入图片描述

1.用户信息转换为数据,以便在网络上传输
2.数据转换为数据段,并在发送方和接收方主机之间建立一条可靠的连接
3.数据段转换为数据包或数据报,并在报头中放上逻辑地址,这样每一个数据包都可以通过互联网络进行传输
4.数据包或数据报转换为帧,以便在本地网络中传输。在本地网段上,使用硬件地址唯一标识每一台主机。
5.帧转换为比特流,并采用数字编码和时钟方案


分用

同样也是画一个图
在这里插入图片描述
分用很简单,就是按照直接封装的顺序,将封装的首部和尾部去掉,恢复成原来的数据。其实就是封装的反操作,又称为解封装


地址管理

在网络通信中,每台通信的主机之间都应该有属于自己的标志,就如同名字一样,只有拥有这种标志,才能够进行交流。就好比你想要在茫茫人海中找到一个人,就得知道他的名字,才能找到这个人。
而在网络通信中,也不例外。


IP地址与端口

IP地址
IP地址就是网络中主机的唯一标识,无论哪个主机与哪个主机之间进行通信,都需要用到IP地址来进行定位。并且在通信时,每条数据中都会包含源端地址和对端地址,他们指定了通信的两个对象
对于我们常用的IPV4来说,IP地址是一个uint32_t类型的数据,也就是无符号32位的整数。
我们通常也采用点分十进制的字符串来表示IP地址,如192.168.0.1。每一个字节的范围是0-255

端口号:
端口号则是主机上进程的唯一标识,在编写程序时,需要告知计算机应该处理发往哪个端口的数据。
一个端口只能被一个进程占用,但是一个进程可以同时使用多个端口。 并且在通信时,每条数据也都会包含源端端口和对端端口,来指定从哪个进程发送数据,交给哪个进程进行处理
端口号是uint16_t,也就是无符号16位的整数。


MAC地址

MAC地址用来识别数据链路层中相连的节点,通常也可以认为是物理地址。在网卡出厂时就确定了, 不能被修改,mac地址通常是唯一的。
MAC地址由48位组成,一般是16进制数字加上分割符:,如08:00:27:03:fb:19。


网络字节序与主机字节序

在网络通信时,还需要注意字节序的问题。
字节序就是CPU对数据再内存中以字节为单位的存取顺序也就是我们通常所说的大端小端问题。
关于大小端的问题我之前有写过一篇博客
大端小端存储解析

这里就简要说一下
大端存储模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。
小端存储模式:是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。

在网络通信中,网络字节序采用大端的存储模式,而主机字节序根据主机不同也不一样,我们现在的家用机一般都是小端,但网络上的通信不能确保主机字节序的唯一性,因为受众是整个网络,而一旦通信的双方主机字节序不同,就会造成通信时的数据二义,所以需要确保字节序相同,就需要在通信时将主机字节序转换为通用的网络字节序。

原文链接:https://blog.csdn.net/qq_35423154/article/details/106628886

最后修改日期:2020年6月11日