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:网络基础(协议数据的封装与分用)的主要内容,如果未能解决你的问题,请参考以下文章

Linux操作系统原理—内核网络协议栈

网络安全协议

计算机网络湖科大微课堂笔记 p57-59 运输层概述运输层端口号复用与分用的概念UDP和TCP的对比

计算机网络—— 运输层(123):运输层概述运输层端口复用与分用的概念UDP和TCP的对比

Linux从青铜到王者第十四篇:Linux网络基础第一篇

Linux--网络(网络协议,传输及地址管理)