Linux网络编程:回顾网络通信

1.数据从应用层到数据链路层的本质

数据的封装:

  1. 用户在用户级缓冲区输入数据,经过应用层协议进行序列化成字节流数据,拷贝到传输层的缓冲区。
  2. 而操作系统在传输层维护了sk_buff这一个结构体,然后data指针指向这段数据的开头,接着再封装TCP/UDP报头,然后head指针指向报头位置。
  3. 当进入IP层后,此时的TCP报文即为IP层的“数据”,我们也可以在图中明显看出data指针并不是不变的,不断偏移。然后不断重复2、3间的head、data指针指向

这时我们就能够清晰的理解,除了在应用层需要拷贝到传输层,其他场景下我们都是对sk_buff指针进行偏移,然后不断向下交付,最终从网络中发送。


那么我们在另一台主机对接收到的数据报文,那么是如何从数据链路层到应用层被我们看到的呢?

数据的解包分用:

  1. 当我们从网络中获取到一个数据报文,我们在数据链路层通过定长的报头,将这个head指针向后偏移,就获得了相对于数据链路层的“有效载荷”,即网络层的报文
  2. 同理我们也是这样子不断地移动head指针来实现报头的分离,但是实际上我们进行解包时还是需要对某一层协议进行分析,来判断数据的合法性和可靠性
  3. 最终字节流数据到了传输层缓冲区,最后传输到应用层,借助应用层协议找到对应接收的用户级缓冲区,并显示在我们面前。

所以数据的封装和解包分用的实现都是通过指针的偏移,这也是因为在传输层数据已经经过了应用层协议的序列化而形成了字节流数据,本质上就是char* 数组维护的一段数据,所以我们将不同形式的数据转化成了字节流,并且实现了不同主机的统一!!!

2.四层协议在网络通信扮演的角色

简单来说:扮演的四个角色就是数据报文经由TCP、IP体系的四层结构,在网络通信中对各自协议的遵守和实现协议的功能 

具体来说: 

 

  1. 应用层(Application Layer)
    • 用户接口:应用层为用户提供了与网络应用进行交互的接口。例如,浏览器是HTTP应用层协议的用户接口,允许用户浏览网页内容。
    • 服务支持:应用层协议定义了网络应用所需的服务和支持,如文件传输、电子邮件发送和接收、远程登录等。
    • 数据表示:应用层协议还规定了数据的表示方式,即如何对应用数据进行编码和解码,以确保数据在发送和接收端都能被正确理解和处理。
  2. 传输层(Transport Layer)
    • 端到端可靠性:传输层为应用层提供了可靠的、端到端的数据传输服务。通过TCP协议,应用层可以确保数据在传输过程中不会丢失、损坏或乱序,从而保证了应用数据的完整性和顺序性。
    • 流量控制:传输层还负责流量控制,以避免发送方发送数据过快导致接收方无法及时处理,造成数据丢失或网络拥塞。
    • 复用与分用:传输层通过端口号实现多个应用进程之间的复用和分用,使得不同的应用进程可以在同一台主机上同时使用网络资源。
  3. 网络层(Network Layer)
    • 路由与转发:网络层负责将数据从源主机路由到目的主机,通过选择最佳路径实现跨网络的数据传输。路由器是网络层的关键设备,它们根据路由表进行数据包的转发。
    • 地址转换:网络层使用IP地址来标识网络中的设备,并通过DNS(域名系统)将域名转换为IP地址,方便用户记忆和访问网络资源。
    • 数据分组:网络层将传输层的数据包封装成IP数据报,并在数据报头部添加源IP地址、目的IP地址等信息,以便在网络中进行路由和转发。
  4. 链路层(Link Layer)
    • 物理传输:链路层负责将数据报通过物理介质进行传输,如以太网、Wi-Fi等。它处理与物理介质相关的通信细节,如帧的封装、错误检测等。
    • 设备接入:链路层还负责设备的接入和管理,如交换机和集线器等网络设备用于连接不同的物理设备并实现数据的交换和转发。
    • 介质访问控制:链路层通过介质访问控制(MAC)协议来管理设备对物理介质的访问权限,确保设备在共享介质上能够有序地发送和接收数据。

而内部实现的细节,可以在以往的博客上进行深层次的学习…… 

3.浏览器输入url后,发起请求到获得页面,发生的事情

首先,进行域名解析获取IP地址,接着进行三次握手建立连接,在应用层浏览器发出访问请求,填写正文数据,通过系统调用接口发出这个请求报文,向下交付到物理层,通过计算机网络到达远端主机,经过TCP、IP四层体系到服务器的应用层进行解析请求报文,获取请求、提取正文,接着做出回应,并通过Url内的字段进行资源的准备加载进回应报文的正文字段,接着向下交付在通过计算机网络返回给请求方。而当请求方获取到回应报文时,向上交付给应用层的浏览器,接着浏览器对正文字段进行渲染,获取到网页!!!

另外,因为传输过程中我们需要满足各个协议之间的约定,比如数据传输是否出现丢包,或者是出现数据差错如何解决,这些就是各个协议层需要解决的问题,如果我们需要解答,就可以询问是在什么场景下发生了什么问题,这时在这个大背景下补充各个层发生的事情。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/683829.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用Conda配置Pytorch环境 (pytorch==2.2.1)

用Conda配置Pytorch环境 (pytorch==2.2.1) 本文主要讲解: 如何用Conda搭建Pytorch环境,用Conda的方式安装,不需要单独去安装Cuda了。 1. 安装miniconda https://docs.anaconda.com/free/miniconda/index.html 2. 搭建虚拟环境 激活python虚拟环境 conda create -n env…

618哪些品牌好入手?四款主流数码产品,必看!

随着618购物狂欢节的钟声逐渐敲响,你是否在面对繁多的商品时感到一丝迷茫,想要找到那些既引领潮流又极具实用价值的商品?团团精心为你准备了一份个人实测后的好物推荐清单。这些商品不仅紧跟时尚潮流,更是你生活中的得力助手&…

全域外卖推广怎么做才能赚钱?

当前,全域外卖行业的热度持续飙升,许多创业者在了解完全域外卖项目的基本信息之后,便开始将目光转向与全域外卖推广相关的各项事宜之中,誓要将全域外卖行业彻底摸清后再行入局。 从理论层面上来说,这种思路并没有任何问…

sqlilabs靶场安装

05-sqllabs靶场安装 1 安装 1 把靶场sqli-labs-master.zip上传到 /opt/lampp/htdocs 目录下 2 解压缩 unzip sqli-labs-master.zip3 数据库配置 找到配置文件,修改数据库配置信息 用户名密码,修改为你lampp下mysql的用户名密码,root/123456host:la…

OrCAD17.4原理图DRC各选项注释

OrCAD17.4原理图DRC各选项注释 一、旧版本OrCAD原理图DRC选项注释 链接:https://pan.baidu.com/s/1bq59A-PoXHC0YNVdX9k-bQ?pwdyqcg 提取码:yqcg 二、Options Online DRC:在线设计DRCDRC Action:DRC运行模式。Run on Design—…

YOLOv5改进 | 主干网络 | 用SimRepCSP作为主干网络提取特征【附完整代码 + 降本增效】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 SimRepCSP 类似于 YOLOv7的主干网络,由卷积模块和重参数化卷积(RepConv)模块组合而成,以 Cro…

搭建Vulnhub靶机网络问题(获取不到IP)

搭建好靶场后,在攻击机运行arp-scan -l无法发现靶机IP。 这时候去看下靶机网络有没有问题。 重新启动客户机,一直按e进入安全模式(要是直接开机了就先按shift进入grub界面,再按e)找到ro,将ro改为rw signie…

大坝监测资料分析的新规范与实践

在大坝安全管理中,监测资料分析是一个至关重要的环节。为确保大坝的长期稳定性和安全性,新的规范对监测资料分析的内容和方法进行了详细的规定和改进。本文将探讨这些改进的具体内容及其实施方法。 点击输入图片描述(最多30字) 监…

2024年最新测评,6款好用的在线代码编辑器推荐

前言 在线IDE对于每一位开发来说都是一种福利,无需下载安装到本地进行安装,安装完成以后还要配置环境,极其繁琐,在线IDE很好的规避了这些琐事,除此之外在线IDE无需占用本地内存以及本地计算计算资源,还能实…

【python】ValueError: If using all scalar values, you must pass an index

成功解决“ValueError: If using all scalar values, you must pass an index”错误的全面指南 在Pandas库中,当你尝试创建一个新的DataFrame或Series时,如果所有值都是标量(scalar,即单个值而非列表、数组或Series)…

SpringBoot+Vue课程作业管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 系统角色 学生教师管理员 系统功能截图

Go 1.19.4 语法基础-Day 02

1. 注释 1.1 多行注释 1.1.1 方式一(不推荐使用) package main/* 多行注释test函数的作用参数a类型和作用参数b类型和作用参数c类型和作用 */ func test1(a int, b string, c bool){}1.1.2 方式二(推荐) go的源码库中也是使用这…

Aigtek高压放大器在纳米材料中的应用研究

随着纳米材料科学的迅速发展,纳米材料在各个领域中的应用也逐渐扩展。而高压放大器作为一种重要的电子元件,在纳米材料研究中起着至关重要的作用。下面将介绍高压放大器在纳米材料研究中的应用以及相关的研究进展。 高压放大器是一种能够将输入信号放大到…

【论文精读】DCRNN-扩散图卷积循环神经网络

DCRNN 模型是南加州大学的 Li 等人发表在 I C L R 2018 ICLR 2018 ICLR2018 会议上一个用于交通预测的时空预测模型,论文题目为: 《DIFFUSION CONVOLUTIONAL RECURRENT NEURAL NETWORK: DATA-DRIVEN TRAFFIC FORECASTING》,文章地址为: https://arxiv.o…

算法导论实战(三)(算法导论习题第十六章)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀算法启示录 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 前言 算法导论的知识点学习将持续性更新在算…

ARM32开发--GPIO输入模式

知不足而奋进 望远山而前行 目录 文章目录 前言 浮空输入 上拉输入 下拉输入 模拟输入 总结 前言 在数字电路设计和嵌入式系统开发中,理解输入信号的处理方式对确保系统稳定性和可靠性至关重要。不同的输入处理方式包括上拉输入、下拉输入、浮空输入和模拟输…

【C#学习笔记】属性和字段

文章目录 前言属性和字段的区别字段访问修饰符和关键字定义变量类型的定义变量命名变量的赋值 属性 不同的使用情况 前言 最近在工作的过程中常常会觉得自己在程序设计方面的能力还是有欠缺。例如一直对于变量的声明感到不足,在工作中为了图方便总是直接public定义…

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:无人机自主飞行软件平台

案例简介 北京泛化智能科技有限公司(gi)所主导开发的 Generalized Autonomy Aviation System (GAAS) 是为无人机以及城市空中交通 (UAM, Urban Air Mobility) 所设计的开源无人机自主飞行框架。通过 SLAM、路径规划和 Global Optimization Graph 等功能…

骨传导耳机有哪些是值得入手的?看完这篇推荐就懂了!

骨传导耳机在运动圈非常的受欢迎,因为佩戴运动的时候,骨传导耳机能够稳固佩戴,无论是跳跃或者是摇晃身体等,耳机都不会轻易掉落!而很多朋友对于骨传导耳机总是想尝试却又害怕掉坑!于是为了给大家提供更多的…

分布式事务Seata中XA和AT模式介绍

Seata中XA和AT模式介绍 分布式事务介绍分布式解决方案解决分布式事务的思路Seata的架构Seata中的XA模式Seata的XA模型流程XA模式优缺点实现XA模式 Seata中的AT模式Seata中的AT模式流程实现AT模式AT模式优缺点 AT模式与XA模式的区别 分布式事务介绍 分布式事务,就是…