Linux:网络基础(协议数据的封装与分用)
Posted It‘s so simple
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux:网络基础(协议数据的封装与分用)相关的知识,希望对你有一定的参考价值。
文章目录
1. 协议
1.1 协议的概念
协议的概念
协议是双方约定同一种语言,从而可以进行沟通。
网络协议
那么网络协议就是通信双方在约定通信时使用的一种数据格式,从而进行网络通信。
碎片知识:网络是按照区域进行划分的,可以划分为局域网、城域网和广域网。
1.2 协议的分层
网络是有分层结构的,每一个分层当中有不同的网络协议,不同的网络协议完成不同的事情,不同的分层都有自己要完成的事情。
再说协议的分层之前,我们先来看看网络协议簇和网络的体系结构
网络协议簇:顾名思义,就是由很多网络协议组成,称之为协议簇。
体系结构:体系结构规定了网络的分层以及每一个分层所要完成的功能,以及每一个分层所拥有的协议,还规定了每一个分层与自己上下层之间的关系。
1.2.1 OSI 七层模型
对于该模型,我们只需要记住七个字即可:物数网传会表应
物 | 数 | 网 | 传 |
---|---|---|---|
物理层 | 数据链路层 | 网络层 | 传输层 |
会 | 表 | 应 | |
会话层 | 表示层 | 应用层 |
由于划分的太繁琐,因此在工业当中并没有广泛的应用。
1.2.2 TCP/IP四层(五层)模型
分层 | 作用 |
---|---|
应用层 | 程序员写的代码都是应用层的代码,换句话来说,程序员都是工作在这一层的 |
传输层 | 端与端之间的传输,端指的是端口(端点) |
网络层 | IP地址管理和路由选择,该层的典型设备是路由器 |
数据链路层 | 网络数据帧的传输,负责相邻设备之间的传输,典型的设备是交换机 |
物理层 | 将二进制数据转化成为光电信号,并进行传输,典型的设备是集线器 |
四层和五层的区别就是四层模型没有物理层,其他的都有。
2. 数据的封装与分用
2.1 数据的流向
就拿个简单的例子来说把,张三在地区A用手机里的微信给在地区B的李四发了一条消息,在这个过程中,首先,微信是一个应用程序,由它产生的数据也是应用数据,我们知道这些应用数据、应用程序都存在于应用层的,所以微信的消息也是微信这个程序产生的一条数据,那么,这条消息是如何到达李四的手机上的呢?
其实也不难理解,根据TCP/IP五层模型,这条消息首先从张三手机网络上的应用层->传输层->网络层->数据链路层->物理层(该过程统称为网络协议栈),到物理层之后,这条消息被转为光电信号从光缆中传输到李四所在地区B,然后再被李四的手机所捕获到,再经过物理层->数据链路层->网络层->传输层->应用层,最终被李四所接收到,这就是一个宏观上的数据的流向。
总结一下就是
网络数据的转发,需要先经历自己的网络协议栈,进而通过网络将数据转化为光电信号传输到对端机器中去。
对端机器收到数据之后,需要经历自己的机器网络协议栈的层层向上提交,一直将数据提交到应用程序当中。
2.2 ip,端口的本质和作用
① ip地址
我们通常所说的ip地址,基本上都是ipv4版本的ip地址,ipv4的地址本质上是一个uint32_t的整数,它的范围也就是(0~232),也就是最多有42亿多个ip地址,并且这些地址通常都是按照点分十进制的方式来表示的,举个例子就是192.168.32.2
它是以点来分隔出了四部分,即每个部分只占用了一个Byte,换句话说每一个部分的每一个数字的范围都是(0~255)。
它的作用就是可以在网络中唯一标识一台主机,一个公网ip只能被一台机器所占有,并且一个机器可以拥有多个ip地址。
这里需要注意的是,ip地址中有三段地址是不能进联网的,但是是可复用的,被称为私网ip。
② 端口
端口的本质就是以一个uint16_t的整数,范围是 [0~65535] (也就是216)。
它的作用就是在一台机器中唯一的标识一个进程,它所引申出来的含义就是:一个端口只能被一个进程所绑定,并且一个进程可以绑定多个端口。
2.3 数据的封装和分用
之前也讲了网络数据的流动,是需要经过网络协议栈的,那么,网络协议栈在进行数据转发的时候,到底做了哪些事情呢?
还是用之前的那个张三给李四发消息的例子,现在具体一点,张三给李四发送了一个"abcdef"的消息,现在我们来具体的看一下网络协议中具体做了哪些事情。
首先看发送方,如下图
再看接收方:
整体来看就是
2.4 常见的问题
① 一条网络数据需要网络转发的时候,需要具备哪些条件?
解答:网络数据中需要包含五元组信息,{源ip地址,源端口,目的ip,目的端口,协议},网络数据中是一定是要存在五元组信息的,否则网络就没有办法进行转发。
② 对于接收方而言,所有的网络数据都是需要经历网络协议栈的,但是,怎么去区分网络数据到底是哪一个应用数据的?
解答:我们可以通过前面所提到的端口来对其进行区分。
以上是关于Linux:网络基础(协议数据的封装与分用)的主要内容,如果未能解决你的问题,请参考以下文章
计算机网络湖科大微课堂笔记 p57-59 运输层概述运输层端口号复用与分用的概念UDP和TCP的对比