Linux网络编程:网络协议及网络传输的基本流程
目录
一. 计算机网络的发展
二. 网络协议的认识
2.1 对于协议分层的理解
2.2 TCP/IP五层协议模型
2.3 OSI七层模型
三. 网络传输的流程
3.1 同一网段中计算机通信的流程
3.2 不同网段中计算机设备的通信
3.3 对于IP地址和MAC地址的理解
3.4 数据的封装和解包
四. 总结
一. 计算机网络的发展
独立模式:每一台计算机之间都是相互独立的,如果几台计算机要协同工作,需要相互之间传输数据,那么就需要人工将数据从一台计算机拷贝到另一台计算机。
网络互联:将多台计算机连接在一起实现数据共享。
局域网:随机互联网技术的发展,计算机数量的增多,通过交换机和路由器,将一定区域内的所有计算机连接起来,让他们可以相互通信。
广域网:随着计算机数量的增多,将更大范围、更多计算机连接起来的网络,可称为广域网。广域网和局域网是相对的概念,在中国境内,我们可以认为,每个省的网络属于局域网,而全国范围的网络是广域网,而在全球范围内,又可以认为中国的网络属于局域网。
二. 网络协议的认识
2.1 对于协议分层的理解
软件的设计是分层的,分为前端和后端,前端就是给用户的界面,后端进行数据处理、数据运算等工作,用户要通过前端将信息交付给后端进行处理,后端也要将处理结果反馈给前端,前端和后端,就可以被视为软件的两层。网络协议的设计也是分层的。
分层设计的好处在于:(1). 更好的适应复杂的场景。 (2).实现不同功能之间的解。
以图2.1所示的用户通信场景为例,上层用户遵循语言协定(汉语、英语等),下层的通信设备也遵守各自的协议,如:采用电脑发微信,不同电脑之间就要遵守特定的电脑协议。此时,如果两名老外要通过英语发送信息,那么就只需要改变上层的用户协议,而底层通信设备的协议不用修改,再比如通信设备变为了卫星电话,那么只需改变通信设备之间的协议即可,用户层协议无需修改。这就是协议的分层设计,能够实现不同功能间的解耦。
2.2 TCP/IP五层协议模型
TCP/IP是一组协议的代名词,TCP表示传输层协议,IP表示网络层协议。TCP/IP协议可分为以下五层,每一层都呼叫下一层网络来实现自身需求。
- 物理层:负责通过光/电信号来传输数据,如光纤、集线器、调制解调器,都属于物理层的设备,集线器的工作是将信号放大,以便实现远距离数据传输,调制解调器则对信号进行变频、转化等操作。
- 数据链路层:负责设备之间数据帧的传送和识别,执行数据帧同步、冲突检测、数据校验等工作,遵循以太网、无线WIFI、令牌环网等标准,交换机是运行在数据链路层的硬件设备,可以通过报文交换实现接受数据和发送数据到指定的计算机网络设备中。
- 网络层:负责明确发送数据的源地址和接受数据的目标ip地址,明确数据传输所经历的路由器路径,路由器就是运行在网络层的设备。
- 数据传输层:负责主机之间的数据传输,如用户数据报协议UDP、控制传输协议TCP。
- 应用层:负责上层用户使用的应用软件间的通信,如电子邮件传输协议SMTP、文件传输协议FTP、远程网络访问协议Telnet。
TCP/IP的5层协议在计算机体系中的实现如图2.2所示,操作系统至少要实现从数据传输层到物理层、路由器至少要实现从网络层到物理层、交换机至少要实现从数据链路层到物理层、而集线器则是仅仅实现在物理层。
2.3 OSI七层模型
OSI七层模型从逻辑上将网络通信分为了七层,每一层都有对应的功能、硬件设施以及协议。
- 物理层:各种底层设备,负责光/点信号的传输,光纤、集线器、调制解调器都属于物理层。
- 数据链路层:负责各个主机之间数据帧的传输,负责帧同步、冲突检测以及准确性校验等工作,这一层的标准有以太网标准、无线WIFI标准、令牌环网标准。交换机是工作在数据链路层的设备。
- 网络层:负责地址的管理和路由的选择,路由器是工作在网络层的设备。
- 传输层:负责主机之间的数据传输,如用户数据报协议UDP、控制传输协议TCP。
- 会话层:对通信进行管理,负责通信的建立、终止和维持。
- 表示层:实现上层设备数据和网络标准数据格式之间的转换。
- 应用层:针对特定应用的协议,如文件传输协议FTP、电子邮件传输协议SMTP、远程网络访问协议Telnet。
综上我们发现,OSI七层模型和TCP/IP五层模型的低四层几乎是相同的,差别在于上层,OSI在操作系统之上的用户层面,划分出了会话层、表示层和应用层,而TCP/IP则直接归一化成应用层,OSI是一种非常理想的理论指导模型,TCP/IP是一种已经在网络工程中被成熟应用的设计模型,这是因为在操作系统之上的用户软件,场景非常复杂,难以同一制定协议,因此上层协议的维护便交给了用户来实现,就有了TCP/IP五层协议模型。
图2.3展示了OSI七层模型每层对应的TCP/IP模型及在计算机体系中的位置。
三. 网络传输的流程
3.1 同一网段中计算机通信的流程
在我们的一般性认识中,同一网段的计算机能够实现直接通信,如电视机投屏,只要手机和电视连接在同一网络下,就可以直接投屏,从手机向电视投屏,本质就是同一网段中的计算机通信。
图3.1展示了统计网段中计算机设备通信的具体流程,可见,两台设备的通信并不是一台设备直接将数据发送给另一台设备,而是要经过层层传输才能够到达。根据TCP/IP五层模型,发送数据的设备,数据压从上层传递至下层,通过以太网将数据发送至另一台设备,另一台设备也要从下层到上层逐步获取数据。
如图3.2所示的常见,同一网段中,可能存在多台计算机设备,那么如何确保同一网段中两台设备之间通信,其余的计算机设备不受干扰呢?
这就要涉及到主机的地址了,在局域网中,每台主机都有唯一的Mac地址,用于标识主机的唯一性,可用于识别数据链路层中相连的节点, 假设图3.2中的设备A要给设备C发送信息,设备B由于处于同一网段中,也会看到设备A发送的信息,但是设备A在传送信息的时候,会带上目标设备的Mac地址,设备B在检测到信息不是发送给它的时候,就会将信息自动屏蔽。
如果某个网络中两台设备一同发生数据,导致数据信号在网络传输中发生碰撞,就会出现数据冲突问题,数据传输层要负责进行冲突检测,如果发生冲突,数据就要重发。如果向某个网络中传入大量垃圾数据,就会不断造成数据冲突,这就是网络攻击的一种方式。
结论:在局域网中,通过Mac地址可以标识主机的唯一性,可用于识别数据链路层中相连的节点。
3.2 不同网段中计算机设备的通信
在广域网中,每台计算机设备都与其专属的IP地址,用于确定不同网段中发送数据的源主机和接收数据的目标主机。如图3.3所示,不同网段中计算机设备的通信,需要由路由器充当连接各个网段的桥梁,实现跨网段的数据传输。
3.3 对于IP地址和MAC地址的理解
对于IP地址的理解:
- IP地址有IPv4和IPv6两种表达方式,主流采用IPv4。
- IP地址用于标识网络中主机的唯一性。
- 对于IPv4,其表达方式为:4个0~255的阿拉伯数字,每个数据之间用 . 分隔,如123.12.4.255就是一个合法的IPv4地址。
对于Mac地址的理解:
- MAC地址用于标识数据链路层相连的节点。
- MAC地址由48个二进制位构成,采用16进制数 + 冒号来表示,如 12:a8:bd:06:00:67 就是一个合法的MAC地址。
- 一般来说,网卡出厂就配置好了MAC地址,但也有些网卡支持用户自行配置MAC地址,甚至在某些虚拟机中,会存在重复的MAC地址。
以图3.4的模型,解释IP地址和MAC地址的区别,在广域网中,我们希望将数据从主机A发送到主机B,那么,主机A和主机B的地址,就是在通信中所讲的IP地址。在数据链路层,主机A发送的数据要依次经过路由器1、2、3才能到达主机B,假设现在数据处于路由器1,那么路由器1的地址就称为当前的MAC地址,而接下来要经过的路由器2的地址,就称为下一个MAC地址。
3.4 数据的封装和解包
源主机向下传输数据的时候,每一层都要添加一些属性信息,在每一层添加的信息被称为报头,自顶向下添加报头的过程,就是数据封装的过程。目标主机在自底向下接受数据的时候,在每一层都要去掉对应的报头,去掉报头的过程过程就是数据的解包过程。
如:源主机数据在经过网络层的时候,要添加对应的IP地址信息,用于查找目标主机,而数据链路层需要添加下一个MAC地址,以便于找到数据传输过程中下一个路由器的位置。
四. 总结
- 网络协议的设计是分层的,这样有利于适应复杂的场景,并且可以实现不同功能之间的解耦。
- TCP/IP五层设计模型是工程实践中常采用的协议设计方案,自顶向下各层依次为:应用层、传输层、网络层、数据链路层和物理层,其中应用层为针对特定上层应用的协议,传输层负责主机之间数据的传输,网络层负责地址的管理和路由的选择,数据链路层负责各个主机之间数据帧的传输,物理层为底层的各种硬件设施。
- OSI七层模型为一种理想的设计模型,其下五层与TCP/IP相同,依次为:传输层、网络层、数据链路层和物理层,差别在于上三层,OSI七层模型的上三层为:应用层、表达层、会话层。其中应用层为针对特定应用的协议,表达层负责向数据转化为网络能够识别的数据格式,会话层负责通信的建立、终止和维护。
- IP地址负责在网络中标识主机的唯一性,MAC地址负责在数据链路层标识相连节点的地址。
- 网络中,数据从上层向下层传输要添加报头,从下层向上层传输要去掉报头,添加报头的过程称为封装,去掉报头的过程称为解包。
相关文章:
Linux网络编程:网络协议及网络传输的基本流程
目录 一. 计算机网络的发展 二. 网络协议的认识 2.1 对于协议分层的理解 2.2 TCP/IP五层协议模型 2.3 OSI七层模型 三. 网络传输的流程 3.1 同一网段中计算机通信的流程 3.2 不同网段中计算机设备的通信 3.3 对于IP地址和MAC地址的理解 3.4 数据的封装和解包 四. 总结…...
【大数据之Kafka】十、Kafka消费者工作流程
1 Kafka消费方式 (1)pull(拉)模式:消费者从broker中主动拉取数据。(Kafka中使用) 不足:如果Kafka中没有数据,消费者可能会陷入循环,一直返回空数据。 &#…...
如何确保ChatGPT的文本生成对特定行业术语的正确使用?
确保ChatGPT在特定行业术语的正确使用是一个重要而复杂的任务。这涉及到许多方面,包括数据预处理、模型训练、微调、评估和监控。下面我将详细介绍如何确保ChatGPT的文本生成对特定行业术语的正确使用,并探讨这一过程中的关键考虑因素。 ### 1. 数据预处…...
行业追踪,2023-09-11
自动复盘 2023-09-11 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…...
LVS + Keepalived群集
文章目录 1. Keepalived工具概述1.1 什么是Keepalived1.2 工作原理1.3 Keepailved实现原理1.4 Keepalived体系主要模块及其作用1.5 keepalived的抢占与非抢占模式 2. 脑裂现象 (拓展)2.1 什么是脑裂2.2 脑裂的产生原因2.3 如何解决脑裂2.4 如何预防脑裂 …...
springboot将jar改成war
一、maven项目 1、修改pom文件 <packaging>war</packaging>2、添加Servlet API依赖,Spring Boot的Starter依赖通常会包含这个依赖,所以你可能已经有了,没有就需要添加 <dependency><groupId>javax.servlet</gr…...
从9.10拼多多笔试第四题产生的01背包感悟
文章目录 题面基本的01背包问题本题变式 本文参考: 9.10拼多多笔试ak_牛客网 (nowcoder.com) 拼多多 秋招 2023.09.10 编程题目与题解 (xiaohongshu.com) 题面 拼多多9.10笔试的最后一题,是一道比较好的01背包变式问题,可以学习其解法加深对…...
搭建自己的OCR服务,第一步:选择合适的开源OCR项目
一、OCR是什么? 光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。 亦即将图像中的文字进行识别,并以文本的形式返回。 二、OCR的基本流程 1…...
【C++】VScode配置C/C++语言环境(简洁易懂版)
目录 一、下载VScode(装好直接跳第五步)二、安装VScode三、VScode设置语言为中文四、VScode切换主题(个人爱好)五、下载C语言编译器(MinGW-W64 GCC)六、配置编译器环境变量七、配置VScode八、使用单独窗口…...
【hive】—原有分区表新增加列(alter table xxx add columns (xxx string) cascade;)
项目场景: 需求:需要在之前上线的分区报表中新增加一列。 实现方案: 1、创建分区测试表并插入测试数据 drop table test_1; create table test_1 (id string, score int, name string ) partitioned by (class string) row format delimit…...
verilog学习笔记7——PMOS和NMOS、TTL电路和CMOS电路
文章目录 前言一、PMOS和NMOS1、NMOS2、PMOS3、增强型和耗尽型4、两者面积大小 二、CMOS门电路1、非门2、与非门3、或非门4、线与逻辑5、CMOS传输门6、三态门 三、TTL电路四、TTL电路 VS CMOS电路五、数字电平六、使用CMOS电路实现逻辑函数1、上拉网络 PUN2、下拉网络 PDN3、实…...
Java知识点二
Java知识点二 1、Comparable内部比较器,Comparator外部比较器2、源码结构的区别:1)Comparable接口:2)Comparator接口: 2、Java反射 1、Comparable内部比较器,Comparator外部比较器 我们一般把Comparable叫…...
基于单片机压力传感器MPX4115检测-报警系统-proteus仿真-源程序
一、系统方案 本设计采用52单片机作为主控器,液晶1602显示,MPX4115检测压力,按键设置报警,LED报警。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 /***************************************…...
Pytorch02 神经网路搭建步骤
文章目录 import numpy as np import torch from PIL.Image import Image from torch.autograd import Variable# 获取数据 def get_data():train_Xnp.asarray([3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,7.042,10.791,5.313,7.997,5.654,9.27,3.1])train_Ynp.asarr…...
【源码】JavaWeb+Mysql招聘管理系统 课设
简介 用idea和eclipse都可以,数据库是mysql,这是一个Java和mysql做的web系统,用于期末课设作业 cout<<"如果需要的小伙伴可以http://www.codeying.top";可定做课设 线上招聘平台整合了各种就业指导资源,通过了…...
Java中级编程大师班<第一篇:初识数据结构与算法-数组(2)>
数组(Array) 数组是计算机编程中最基本的数据结构之一。它是一个有序的元素集合,每个元素都可以通过索引进行访问。本文将详细介绍数组的特性、用法和注意事项。 数组的基本特性 数组具有以下基本特性: 有序性: 数…...
杰哥教你面试之一百问系列:java集合
文章目录 1. 什么是Java集合?请简要介绍一下集合框架。2. Java集合框架主要分为哪几种类型?3. 什么是迭代器(Iterator)?它的作用是什么?4. ArrayList和LinkedList有什么区别?它们何时适用&#…...
【数据结构】树和二叉树概念
1.树概念及结构 树概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点,…...
C盘清理教程
C盘清理教程 首先使用space Sniffer 扫一下c盘,然后看一下到底是哪个文件这么大 第二步,创建软链接。 首先将我们需要移动的文件的当前路径拷贝下来:C:\Users\Tom\Desktop\test-link\abc\ghi.txt 然后假设剪切到D盘下:D:\ghi.…...
【实战-05】 flinksql look up join
摘要 look up join 能做什么? 不饶关子直接说答案, look up join 就是 广播。 重要是事情说三遍,广播。flinksql中的look up join 就类似于flinks flink Datastream api中的广播的概念,但是又不完全相同,对于初次访问…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
