Linux网络协议栈深度解析:从数据封装到子网划分的底层架构

知识点5

1、封装和解封装的流程

封装 数据报文:发送数据

解封装 数据报文:接收报文

以后我们的网络编程过程 中,只需要告知IP与端口号,链路层的MAC地址 有协议栈帮我们提供。

2、链路层报文格式(mac报文)

IEEE802是无线网卡

以太网是有线网卡

无线网卡被接收后,首部数据也会转换为有线网卡(以太网)的格式

这里我们分析一下 以太网 网卡的数据格式

首部:14Byte:6Byte目标mac地址,6Byte源mac地址,2Byte类型

类型:判断去处,上图中有详细介绍(结合下图)

3、IP,TCP,UDP报文格式

其中ICMP IGMP在中间层,但设有中间层的话层次会增多,因此将其归属于网络层

IP报文的数据部分:从传输层接收到的数据

IP报文组成:数据+报头

知识点6【应用层协议开发流程】

我们是在应用层进行开发,需要经过传输层,传输层就两种协议:TCP与UDP

如果实在网络层开发,利用ICMP,跳过端口,直接通过IP进行操作。

链路层类似。

注意:开发位置上方自己组包,下方由协议栈帮忙组包

因此在这里 我们在应用层组包,自应用层开始,无需自己组包,便利。

但是之后我们会从链路层开始操作,组包过程会变得复杂,带来的好处是 可以自行组我们想要形式的数据

1、面向连接(TCP)

电话系统服务模式的抽象

每一次完整的数据传输都要经过建立连接、使用连接、终止连接的过程

本质上,连接是一个管道,收发数据不但顺序一致,而且内容相同

保证数据传输的可靠性

2、面向无连接(UDP)

邮件系统服务模式的抽象

无需建立连接

每个分组都携带完整的目的地址

不能保证分组的先后顺序 不进行分组出错的恢复和重传 不保证数据传输的可靠性

知识点7【应用层协议开发架构】

1、C/S架构 client/server

客户端服务器模型

QQ LOL 微信都是C/S架构

客户端、服务器都需要用户去实现。客户端和服务器同等重要。

服务器:被客户端连接

1、服务器必须指定在固定的端口等待客户端的连接

2、客户端的连接到来,必须启动新的线程/进程 服务 客户端(形成并发服务器)

原因:如果任务1需要执行10min,如果不建立新的线程,任务2 就只能等待,一次只能执行一个任务。而一个任务一个进程,多任务一起执行。

3、服务完记得关闭和客户端连接

客户端:主动连接服务器

1、客户端端口无需固定,只需给服务器发出请求

2、获取完请求,关闭连接(关闭顺序不确定,根据服务不同,可能是客户端先关闭连接,也可能是服务器先关闭连接)

2、B/S架构 browser/server

浏览器服务器模型

WebQQ 浏览器版QQ,网页游戏都是B/S模型

重心都是服务器上。浏览器是其他公司设计的。好处是便于移动

知识点8【划分网段】

现代技术

VLAN技术:虚拟局域网划分

解释:就是交换机,交换机有很多端口,交换机就可以指定端口的网段。注意交换机是有层的概念的。

现在的划分网段技术是VLAN是比较简单的。

传统技术 ~重点

我们要讲的是传统划分网络的方式

解释一下上图:

10.9.11.0/24 需要一个网卡,因为只有网卡才能接网线。

选择我们的目标是将其划分为6个子网

6个子网就需要6个网卡。可见一共需要7个网卡(1 + 6)

那么如何划分子网呢?

通过牺牲主机位,划分子网

牺牲的主机位的位数x 与 划分子网的数量y 的关系

2^x > y

对应会造成掩码的改变,掩码的改变 就是多了x个1,又因为掩码的1,0需要连续,大家就能推出掩码了。(图中的27 就是表示划分后的掩码)

子网的数量为跨分 网段的个数。如上子网的个数是8,但是我们只需要6个

每个网段都有自己的IP范围,如上图

6个网卡 分别属于 哪个子网需要人为规定了

6个子网 只需要从8个网段中选择6个。需要看我们网卡的IP是什么,根据6个网卡的IP选择对应的网段

网卡的地址一般设置为网段中的最大和最小(网关),如上图都是选择的 每个网段的最小有效的IP地址

  • 注意

    有效IP 主机ID 全0 全1不能使用

    主机ID全0:网段地址

    主机ID全1:广播地址

我们可以观察到,划分的子网越多,主机数目就越少。

总结

  • 子网数目 决定可用的独立网段数量
  • 子网划分的本质是通过调整子网掩码,将一个大网段拆分为多个小网段
  • 子网数目与网段数目一一对应,每个子网拥有唯一的网络地址和广播地址。

结束

今日 博客内容承接上篇博客,大家请有序观看,希望大家能够有所收获

代码重在练习!

代码重在练习!

代码重在练习!

今天的分享就到此结束了,希望对你有所帮助,如果你喜欢我的分享,请点赞收藏夹关注,谢谢大家!!!

相关推荐
Nuyoah11klay1 小时前
华清远见25072班网络编程day1
linux·服务器·网络·网络编程
努力学习的小廉1 小时前
深入了解linux系统—— 日志
linux·运维·服务器
胡耀超1 小时前
大模型架构演进全景:从Transformer到下一代智能系统的技术路径(MoE、Mamba/SSM、混合架构)
人工智能·深度学习·ai·架构·大模型·transformer·技术趋势分析
MilesShi4 小时前
从 scheduler_tick 到上下文切换:深入解析 Linux 内核的 TIF_NEED_RESCHED 标志设置流程
linux·运维·单片机
liulilittle6 小时前
OPENPPP2 —— IP标准校验和算法深度剖析:从原理到SSE2优化实现
网络·c++·网络协议·tcp/ip·算法·ip·通信
我爱云计算7 小时前
K8S详解(5万字详细教程)
linux·运维·云原生·容器·kubernetes
小马哥编程9 小时前
【软考架构】第七章 系统架构设计基础知识-7.2基于架构的软件开发方法:Architecture-Based Software Design,ABSD
架构·系统架构
阿昭L9 小时前
HTTP原理
网络·网络协议·http
2301_794333919 小时前
实验室服务器配置|通过Docker实现Linux系统多用户隔离与安全防控
linux·服务器·docker·实验室
西陵10 小时前
Nx带来极致的前端开发体验——任务编排
前端·javascript·架构