一文彻底掌握用户态协议栈,一看就懂的

用户态协议栈

那我们先跟大家解释这个协议栈这个东西啊协议栈这个东西呢或多或少啊各个朋友应该都听过,我们站在一个设计者的角度,站在一个设计者的角度,站在tcpip的个人的角度,我们怎么去设计这个协议的? 设计队的角度来设计这个网络协议战。

​就是各位朋友们你想一下这个网络协议战,

有很多朋友就会想到一个点,那为什么我们还需要去设计一个网络协议栈,我们不是去学这个东西就可以吗?其实我也跟大家解释一下,

其实你在那把网络协议上理解的很透彻的话,你一定要站在一个设计者的角度,

就是你抛开所有的东西,抛开所有的那些框架性的东西,就是你自己去想这个两台PC机之间他们如何通信的,他们通信是a发一段数据b如何收到?

收到完了之后如何去想这个过程是怎么样的,以及发送的数据格式是怎么样的,啊那我们今天就站在这么一个角度来跟大家讲。

当然在讲这个的时候,

我们还会引入一个概念,站在一个设计者的角度去设计一个协议栈的话那怎么去设计?呢那当然我们就跟大家讲到这个用户态协议栈,

因为用户态的协议栈呢他是把协议账当做一个应用程序 来运行,就好比我们很多时候我们写了一个服务器,我们写了一个代码,好,我们跑的时候我们调用网络的接口是调用send,recive,

这个我们在之前讲网络编程的时候给大家讲过,就是我们调用的调用的connect Listen accept 啊这些接口我们是调用的这些接口,这些接口呢是我们系统早就已经帮忙完成的这些接口。

那如果做一个用户态的协议栈呢请大家注意,就是把网络的这一层把我们网络协商对于网络数据解析的这一层, 把它重新拎出来,跟我们的应用程序坐在一起,就把这个网络协议的解析放到进程里面的一部分。

就这么个意思好吧?

就是

好,把协议栈这是协议栈这是我们的应用程序,如果不是这么做,呢 本来的做法呢是这样的,是把网络协议,但它是在操作系统的,把这一部分跟我们的应用程序分开, 放到操作系统里面就这么一种情况,现在用户态协议栈就是把这个协议栈放到应用程序跟应用程序放在一起,这么明显的这个能理解吧。

好,那我们现在再来分析一下,

为什么会要有这个用户态协议栈,呢啊为什么会要有这个用户态协议栈?呢 好,我在这里问一下大家,好减少拷贝,我在这里问一下大家大家有没有接触过或者有用过用户态协议栈的

好,这里有朋友说应该是很多朋友是没有用的,没有用过是很正常的,啊串口通信串口通信不是走的网络吧,应该绝大多数朋友是没有用过的。

那我们接着来跟大家讲一讲,如果没有在这种场景下面,但是你是很难用得上的,就是跟大家解释一下,为什么会有用户态协议栈。

就是

啊各公司私有协议算了,

呃私有协议这是应该是属于用户的协议,就是类似于在TCP的上面去定义的协议,好吧?

好减少CPU上下文切换,那好,

我们来给大家解解释一下为什么是这么个说法,我们这里要跟大家解释一下,首先第一个这里是一个网卡,这里是一个网卡,然后在对应上

中间这一层是我们的协议栈。

好,还有这边是我们的应用程序,应用程序就是我们自己编译出来的进程这么一个概念。

这三个点

第一个数据是从哪里来的?这三个这三个我们用一个框把它框加入,就是我们

在服务端也好或者在客户端也好,就是我们能够进行网络通信的也好,就这样一个一个应用程序就是把它放到了一起,就这一段。

好,现在比如说我们应用程序通过一个客户端一个应用程序就是一个进程,没错,应用程序就是一个进程进程是运行阶段,

现在一个客户端也好,然后我们通过来通信就是一个客户端,就是我pc机现在给百度访问百度这个过程也好,或者去访问淘宝这个过程也好,就这样的。

访问先数据是先到达网卡,先到达网卡,这边是客户端也好,就是对端的一台对端的机器,然后发送数据先经过网卡网卡先接收到这个数据,

然后网卡把它处理完了之后,再把这个数据然后copy到协议栈里面,然后协议栈再把这个数据

我们通过系统调用都从协议栈里面copy到我们应用程序上面来。

好,这个过程能不能理解?这个过程应该能理解,就是

我们先把数据先到了网卡那这里,我们问一下网卡的作用用来做什么?

好,

网卡资源大家打开这个7层模型啊打开这个7层模型,

​网卡是属于哪一层的,大家看吧打开这7层模型,大家可能很多朋友说的网卡属于哪一层,其实我跟大家讲一下 就是在光纤里面传的时候,在光纤里面传的时候传的是

光信号在双绞线里面传的是电信号,这个物理层的什么物理层就是所说的我们光信号或者电信号 网卡的作用呢就是把这个光电信号转换为数字信号,

转化为数字信号,也就是说一个AD在三个的过程中呢就是把数字信号转化为

我们的模拟信号转化为光电信号,光电就是模拟信号,那也就是说一个AD转化和da转换作用。

好,那地方它所以网卡它不是在任何一层,

它既不是在物理层,也不是在数据链路层,它是在物理层数据链数据链路层之间做这个物理层转化为数据链路层这么一个概念,等于说就是把这个模拟信号转化为数字信号数字信号转化为模拟信号这么一个概念

来理解,如果大家能理解这个网卡的作用

那我们网卡对象在这一版对端机器接收完之后,我们不管是网卡,不管是光纤还是双绞线

网卡接收完这个数据之后,通过AD转化

把模拟信号转为数字信号,然后把这个数据放到协议上,怎么把这个数据从网卡迁移到协议上,请大家注意这里有个东西也要跟大家解释一下,这有个工具

不是叫工具,有一个东西叫做 SK Buffer叫做SK buffer。

好sk_buff这个东西就是就是用来从网卡里面

数据运到协议栈里面,协议栈里面主要对网卡数据进行解析的。

这就是网卡的数据,这就是协议栈

协议栈把网卡数据解析完之后,把SK包的数据解析完之后,对应的这一帧一帧的数据,

然后放到这个recv缓冲区里面,然后我们通过系统调用调用receive这个函数

要用receive,好,然后从协议栈里面把数据从协议栈上发到我们的应用程序,所以我们就能够读到这个数据来理解,这就是中间经过这么两个方面,

就是从网卡copy到协议栈,再从协议站copy到我们的应用程序,这是我们现在操作系统,他工作方式就是这样的,

来理解一个网卡对应一个Mac地址没错,一个网卡对应一个Mac。

好,就是以我们现在的linux我们为例,他就是这么工作的,

就是我们现在每接收一堆数据,就是你现在写的服务器也好,你写的客户端也好,你把数据发送出去接收数据也好,

它都是这么一个过程,每一帧从网卡里面需要copy到协议栈上,再从协议栈上copy再用程序每一次都用,所以很多朋友就在想一个方法,想一个方法,

就是这里面从网卡里面copy到协议栈再从协议栈copy到应用程序,这个过程它有两次拷贝,两次copy, 两次拷贝来理解,这两次拷贝分别是从网卡copy到协议栈,再从协议栈copy到应用程序,其他的我们还没算,就是大家你是因为里面我们copy多,

消息队里面他的消消息对列把copy数据库它的数据库里面拿出来,那这个东西没算,就是每一次系统调用都需要经过这么两次,所以很多问题就在考虑一个问题,

就是我们能不能简化一下,好,后面就出现了一个新的方法,就是这样的。

好,这里是一块内存,这是一块内存,然后通过这么一个方法, 就是通过网卡的这个 dma的方式,就是将网卡映射到内存中间。

好,将网卡映射到内存中间,就是网卡里面解析完的数据这里有块存储,把这块存储的空间映射到内存中间,跟内存的空间是一一对应的,

也就是说接收数据网卡解析完之后,数据就直接映射到内存中间这一个方法来理解,这个方法呢就是跟大家讲到的一个叫做内存映射叫m map的方式,

它底层是走的一种叫做dma的方式,叫做内存直接从直接通道这么一个方法。

这里跟大家讲的大家可以看到从网卡里面的数据到达内存中间,然后应用程序是直接在内存中间可以直接读取这个数据的直接读取

映射过来的这一块数据了,所以在这个过程中间就减少了这么一次拷贝ÿ

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SIP(Session Initiation Protocol)是一种用于建立、修改和终止多媒体会话的网络通信协议。它是一种轻量级的协议,用于在IP网络上进行语音、视频、聊天和即时通信等多媒体应用的交互。 SIP协议是基于请求-响应模型的,它使用文本格式的消息进行通信。SIP消息分为请求消息和响应消息,请求消息用于请求执行某个动作,而响应消息则是对请求的响应。 SIP的基本功能包括:发起请求建立会话,邀请参与会话的用户,接受或拒绝邀请,修改会话参数,并终止或撤销会话。它允许用户进行注册和注销,以便在网络上发现对方,并提供一系列的功能和服务以增强会话的质量和效果。 SIP协议使用URI(Uniform Resource Identifier)来标识参与会话的用户和资源。它利用一个SIP服务器来处理请求,这个服务器可以进行注册、转发和路由。SIP还可以与其他应用协议如SDP(Session Description Protocol)和RTP(Real-time Transport Protocol)等配合使用,以实现媒体传输和会话控制。 SIP协议的优点在于其灵活性和可扩展性。它允许用户自己定义不同的请求方法和头部字段,以满足各种复杂的通信需求。此外,SIP还支持使用代理服务器和重定向来提高系统的可用性和可靠性。 总之,SIP协议是一种用于建立和管理多媒体会话的通信协议。通过使用请求-响应模型和文本消息格式,SIP实现了用户注册、会话发起、修改和终止等功能,提供了灵活、可扩展和与其他应用协议配合使用的特点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值