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内的字段进行资源的准备加载进回应报文的正文字段,接着向下交付在通过计算机网络返回给请求方。而当请求方获取到回应报文时,向上交付给应用层的浏览器,接着浏览器对正文字段进行渲染,获取到网页!!!

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

api网关kong对高频的慢接口进行熔断

一、背景 在生产环境,后端服务的接口响应非常慢,是因为数据库未创建索引导致。 如果QPS低的时候,因为后端服务有6个高配置的节点,虽然接口慢,还未影响到服务的正常运行。 但是,当QPS很高的时候&#xff0c…

vue3 递归循环展示下级盒子

index.vue主文件 <template><div><RecursiveCard :data"rootTask" /></div> </template><script> import { reactive } from vue; import RecursiveCard from ./test.vue; // 递归组件的路径export default {components: {Recu…

广东智慧物流2024年端午节放假安排

广东智慧物流2024年端午节放假安排

使用HTML、CSS和JavaScript编写一个注册界面(一)

倘若文章或代码中有任何错误或疑惑&#xff0c;欢迎提出交流哦~ HTML和CSS 首先&#xff0c;我们需要编写一个简洁的注册界面。 简单编写下&#xff0c;如下&#xff1a; 呈现效果为&#xff1a; <!DOCTYPE html> <html lang"en"><head><me…

从普通篮球场到高端气膜馆:全新运动体验的打造—轻空间

在现代体育设施的发展中&#xff0c;气膜馆以其独特的优势和创新设计&#xff0c;正在改变我们对运动场所的传统认知。将一片普通的篮球场转变为高逼格的气膜馆&#xff0c;不仅可行&#xff0c;而且能提供极大的便利和众多的好处&#xff0c;让运动体验更上一层楼。 气膜馆的优…

巨详细Linux卸载Redis教程

巨详细Linux卸载Redis教程 1、检查系统残留redis数据2、卸载系统残留redis数据 1、检查系统残留redis数据 redis等数据相关中间件安装前一定要进行残留数据检查&#xff0c;排除后期存在的各种隐患。 #检查有没有残留客户端 whereis redis-cli #检查有没有残留服务 whereis r…

Git 版本控制系统详解

目录 Git 版本控制系统详解一、Git 的作用1. 版本控制2. 分支管理3. 分布式开发4. 协作开发 二、Git 的安装和基本使用1. 安装 Git1.1 Windows1.2 macOS1.3 Linux 2. 配置 Git3. 创建和克隆仓库3.1 创建本地仓库3.2 克隆远程仓库 4. 基本操作4.1 添加文件到暂存区4.2 提交更改4…

开发项目功能开发设计模板

功能开发设计是一个系统化的过程&#xff0c;旨在确保新功能的开发既满足用户需求又符合技术标准。以下是一个适用于大多数软件开发项目功能开发设计模板&#xff1a;

94、python-第三阶段-4-数据计算-map方法

直接运行会报错&#xff0c;需要配置下python环境变量 from pyspark import SparkConf,SparkContext import os os.environ[PYSPARK_PYTHON]"D:/Program Files/Python/Python3.13/python.exe" conf SparkConf().setMaster("local[*]").setAppName("…

解析!领先的Web应用程序安全测试工具—Burp Suite

Burp Suite 是一款领先的Web应用程序安全测试工具。它被广泛用于识别和修复Web应用程序中的漏洞。 通过使用Burp Suite&#xff0c;组织可以显著提升其Web应用程序的安全性&#xff0c;及时发现并修复漏洞&#xff0c;保障业务的持续运行和数据安全。 Burp Suite 最新版下载h…

go中的指针详解

因为大一的时候c语言没学好,所以看到指针很心烦 ,后来速成了一遍go ,每每写道指针部分就开始遗忘 ,所以专门对指针部分做了此笔记 概念 在 Go 语言中&#xff0c;指针是一种变量类型&#xff0c;它存储的是另一个变量的内存地址。通过指针&#xff0c;你可以访问和修改它指向…

商业代理:利用代理服务器进行市场研究和竞争分析

代理是一种转换设备网络流量并从技术上使用户隐形的工具。个人使用它们来隐藏他们的在线活动并绕过地理限制。企业使用它们来支持他们的市场和竞争对手研究等。 继续阅读以了解代理的特点以及它们为企业研究工作带来的优势。 代理的主要功能 代理服务器是设备和网站服务器之间…

Transformer学习(4)

上篇文章完成了Transformer剩下组件的编写&#xff0c;因此本文就可以开始训练。 本文主要介绍训练时要做的一些事情&#xff0c;包括定义损失函数、学习率调整、优化器等。 下篇文章会探讨如何在多GPU上进行并行训练&#xff0c;加速训练过程。 数据集简介 从网上找到一份中…

出图效率倍增!47个高质量的 Stable Diffusion 常用模型推荐

“选用适当的模型&#xff0c;随随便便出个图&#xff0c;都要比打上一堆提示词的效果要好。” 事实如此&#xff0c;高质量的模型&#xff0c;能够成倍提升出图质量。目前 CivitAI&#xff08;俗称 C 站&#xff0c; https://civitai.com/ &#xff09;是业内比较成熟的一个 …

E10:流程主表表单字段值变化触发事件

效果– //window.WeFormSDK.showMessage("这是一个E10的提示", 3, 2); const onClickCreate () > console.log("create"); const onClickSave () > console.log("save"); const onClickCancel () > dialogComponent?.destroy();/…

如何学习提示词?

随着人工智能技术的飞速发展&#xff0c;AI已经成为我们生活中不可或缺的一部分。从智能助手到专业领域的应用&#xff0c;AI正在以前所未有的速度和规模改变着我们的工作与生活。而在AI的众多应用中&#xff0c;提示词&#xff08;Prompt&#xff09;的作用日益凸显。提示词&a…

【Python】 Python应用的最佳项目结构解析

基本原理 在Python开发中&#xff0c;一个清晰且结构化良好的项目布局对于项目的可维护性、可扩展性和团队协作至关重要。项目结构不仅影响代码的组织方式&#xff0c;还影响到开发流程和部署策略。一个优秀的项目结构应该能够方便地进行模块化开发&#xff0c;易于理解&#…

47、Flink 的 Data Source 原理

1.Data Source 原理 a&#xff09;核心组件 一个数据 source 包括三个核心组件&#xff1a;分片&#xff08;Splits&#xff09;、分片枚举器&#xff08;SplitEnumerator&#xff09; 以及 源阅读器&#xff08;SourceReader&#xff09;。 分片&#xff08;Split&#xff…

第二证券炒股知识:美股的交易规则有哪些?

在经济全球化的浪潮中&#xff0c;美股以其开放的商场体系和完善的买卖规则吸引了不少出资者的关注。关于美股的买卖规则有哪些&#xff0c;第二证券下面就为大家详细介绍一下。 1、美股的买卖时刻&#xff1a;美股的买卖时刻依照美国东部时刻核算&#xff0c;分为夏令时和冬令…

elementUI el-table高度heght和总结summary 同时使用 表格样式异常

背景 同时使用height和 show-summary 样式错位 解决方案 在钩子函数updated 中重新渲染此表格 <el-table :height"autoHeight" show-summary ref"dataTable" >updated() {this.$nextTick(() >{this.$refs.dataTable.doLayout();})},更改后的效果 …