美文网首页
关于一条数据流经协议栈各层的思考

关于一条数据流经协议栈各层的思考

作者: 盈朔 | 来源:发表于2020-07-13 15:38 被阅读0次

我究竟想弄明白什么事情?

我想去知道一条数据(不定长)在经历协议栈的各层都会发生什么样的变化?我想说一下我对这块的我知道的,我了解的。

1,数据链路层:去判断数据包中的目标的mac是否是自己,如果是,去掉数据链路层头,然后把数据提交上层(网络层),如果不是那么就转发,以上是收包的操作,如果是本机发包,当数据从上层提及过来,先查arp表目的是获取目标的mac,如果没查到发arping包,得到目标mac之后组装上数据链路层头,发送出去。这里补充一点,如果是二层交换机,那么数据链路层会维护一个mac学习表。如果想了解的更细节,那么请找一些mac学习的资料吧。

2,网络层:去判断数据包头目标ip是否是自己的,如果是,那么去掉ip头,然后继续往上层去提交。如果不是,那么查询自己ip路由表,找到下一跳的IP地址,然后调用数据链路层。

3,传输层:tcp,udp。tcp会在ip层的基础上有应答,重传,流量控制,滑动窗口等机制。udp就是在ip层基础上按个udp的头就发出去了。

4,应用层:自定义协议程序,http协议。ftp协议等。

以上只是两台机器之间实现相互通信各层提供基本功能说明。只是理论知识。难道发20个字节和发20000个字节经过协议栈各层的处理都是一样的么?这是我想整明白的问题。

首先我们来看数据链路层的格式 

这个46-1500的范围是一个规定肯定有它渊源生动的原因,比较有意思的就是crc这个字段,就是在数据发送的最底层如果区分上一个包和下一个包。哈哈,通过一个特殊结尾标示。那么一个完整的数据包从一台机器上发出去最大为1500+18个字节,1500为数据,这1500个字节还需要包括ip包头,传输层包头。真正能发送出去的更少了。那么发送超过了各层都需要干什么?

ip层就需要分片和进行重组:

这里我们需要关注的就是ip头共有20个字节,然后会有2个字节表示ip数据的长度,2个字节的最大值2个字节的最大值-1 也就是65535.就是说ip层不会按照数据链路层来,它有允许发送的最大长度,相对于传输层来说,然后它在调用数据链路层的时候在进行对应的数据分片,在接收端在进行对应的重组。

ip层分片和重组疑惑和解答:一个很大的数据包进行分片发送的过程中会存在几个问题。

第一个问题:分片之后可能乱序到达。目前能够知道的就是根据ip头中的信息(例如位移偏移量去处理)。

第二个问题:重组的时机,如果最后一片先到了,然后其他分片后到怎么办?目前我对这里的理解就是如果有分片标示,那么应该会创建一个缓存队列,然后当收到最后一片的时候进行一下重组操作,如果没有成功,在根据一个定时器时间判断是否达到时间。然后在去进行重组,如果超时,则销毁队列。

第三个问题:如果中间有丢片的情况,那么重组就会失败,就会存在丢包问题了。

tcp层进行分段和重组:

因为tcp协议的定位是可靠性传输,但是它的下一层ip层由于包过大会进行分片进而导致丢包这种不稳定的因素。所以智慧的人类就在tcp做了一些事情,他们在tcp建立连接进行三次握手的时候就会确定一个mss的值。这个mss的值会比mtu值小一点,并且在对应的tcp头中加入了序列号,在接收端会有一个对应的缓存链表。当收到一个包就插入链表中,然后去判断这个链表的第一个和最后一个包中的标识,如果有初始和结束表示表示可以进行重组了。

补充:tcp协议头共占20个字节。这里就不对tcp协议中重传机制,应答,滑动窗口,拥塞控制去做研究了,想深入理解可以看图解tcp/ip这本书。

udp层:

对于这一层个人的理解就是在ip层的基础上加上了8个字节的udp协议头。不知道udp这一层在ip层的基础上会进行超时重传的一些处理么?这里先做为一个问题,去看书从书中找答案吧。

相关文章

  • 关于一条数据流经协议栈各层的思考

    我究竟想弄明白什么事情? 我想去知道一条数据(不定长)在经历协议栈的各层都会发生什么样的变化?我想说一下我对这块的...

  • 蓝牙协议栈架构梳理

    目录 芯片架构方案 协议栈框架分析 数据传输过程 协议栈各层详解 L2CAP层详解 SMP层详解 ATT层详解 G...

  • 用户态协议栈的实现

    协议栈,指的是TCP/IP协议栈。linux系统中,协议栈是内核实现的。 Client发送数据给server,数据...

  • 2.3收发数据

    2.3收发数据 将HTTP消息交给协议栈 应用程序调用socket库中的write将发送的数据交给协议栈协议栈收到...

  • HTTP协议栈中各层数据流

    首先我们看看客户端请求的时候,数据在各层协议的数据组织如下图: 而服务器解析客户机请求就是反向操作的过程,如下图:...

  • 2.3 收发数据

    2.3.1 将HTTP请求消息交给协议栈 首先,协议栈不关心应用程序传来的数据是什么内容,在协议栈看来,发送的数据...

  • 协议栈和网卡的相关知识——基本概念

    协议栈和网卡的相关知识 问题代入 什么是协议栈? 协议栈的内部结构是什么? 协议栈是如何配合网卡进行数据收发的? ...

  • 四七层网络与网络协议

    四/七层网络协议 对应协议 各层的协议分类 数据在上下层之间的封层与解封过程 RFC(Request For Co...

  • BLE入门03

    虽然BLE空中包(packet)涉及BLE协议栈link layer,L2CAP,SMP和ATT等各层次,但lin...

  • 《图解http阅读笔记一》

    摘要: 关于TCP/IP协议的大致划分 协议族的分层管理 各层在一个网络请求当中充当的作用 TCP/IP协议族: ...

网友评论

      本文标题:关于一条数据流经协议栈各层的思考

      本文链接:https://www.haomeiwen.com/subject/jenacktx.html