【Linux】:网络通信

news/2025/2/22 7:33:44/

朋友们、伙计们,我们又见面了,本期来给大家带来网络通信相关的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!

C 语 言 专 栏:C语言:从入门到精通

数据结构专栏:数据结构

个  人  主  页 :stackY、

C + + 专 栏   :C++

Linux 专 栏  :Linux

目录

1. 局域网通信 

1.1 Mac地址

1.2 局域网传输的基本流程

2. IP地址

2.1 IP地址和Mac地址 

3. 跨网络通信


1. 局域网通信 

1.1 Mac地址

MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)

同一局域网中,多台主机可以直接通信吗?如何通信呢?

  • 同一局域网中,两台主机可以直接通信;
  • 原理就是:每一个网卡都有Mac地址

在一个局域网中,会有多台主机,A主机发送的数据其他所有的主机都可以看到,那么此时这些主机就可以通过自己的Mac地址来进行判别接收。

但是需要注意的是,如果同一时间有多个主机在发数据呢?

此时就会造成数据碰撞的问题,在局域网中叫做碰撞域,一旦发生碰撞,数据就失效了,所以就需要执行避免碰撞的算法,所以要正确的发送数据,任何时刻,只允许一台主机在局域网中发送消息!

所以在一个网络中,进行碰撞检测,碰撞避免这种网络方式叫做以太网。

因此局域网就是一块临界资源,碰撞检测和碰撞避免,重发的就是完成互斥访问。        

1.2 局域网传输的基本流程

同一个网段内的两台主机进行文件传输:

接下来对上面的图片进行细节处理:

假设这两个主机就传输的是“你好”,那么A主机发送了这个数据,此时数据并不是直接到达B主机,而是要从上向下进行数据的交付,在交付到应用层时,此时就会添加应用层的报头,添加完成之后的数据就是由报头 + 有效载荷构成的了,此时也并不是直接传输到B主机的应用层,而是继续向下交付,到达传输层时,添加传输层的报头,此时也并不是直接传输到B主机的传输层,而是继续向下交付,添加报头,以此类推,这个过程就叫做封装报头,当交付到数据链路层时,添加数据链路层的报头,然后通过以太网传输给B主机的数据链路层,B主机拿到这个数据时,就要对报头进行解包,将报头和有效载荷分离,然后继续向上交付,每一层都解包对应的报头,直到主机B拿到原始数据,这个过程就叫做解包和分用

我们通常把应用层的报文叫做:request&response

传输层的报文叫做:数据段

网络层的报文叫做:数据报

数据链路层的报文叫做:数据帧

对于封装一定要考虑的是后面解包的问题,每一层协议都要解决的两个问题就是:

① 如何将报文中的报头和有效载荷进行分离;

② 如果将自己的有效载荷交付给上一层。 

2. IP地址

IP地址是在IP协议中,用来标识网络中不同主机的地址;
对于IPv4来说,IP地址是一个4字节,32位的整数;
我们通常也使用 "点分十进制" 的字符串表示IP地址,例如 192.168.0.1 ;用点分割的每一个数字表示一个字节,范围是 0 - 255;

IP地址分为公网ip和内网ip公网ip用于来标识互联网中唯一的一台主机。 

2.1 IP地址和Mac地址 

IP地址是一个最终目标,从哪里来,去往哪里,永远不变的;

Mac地址是一个当前目标,上一站从哪里来,下一站去哪里,一直在变的。

IP地址的意义就是进行路径的选择。 

3. 跨网络通信

跨网段的主机的文件传输。数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。

那么令牌环网:拥有令牌的的主机可以向局域网中发送数据(相当于局域网中的一把锁)

接下来对上面的图片进行细节处理:

  • 假设这两个主机就传输的是“你好”,那么A主机发送了这个数据,此时数据并不是直接到达B主机,而是要从上向下进行数据的交付,在交付到应用层时,此时就会添加应用层的报头,添加完成之后的数据就是由报头 + 有效载荷构成的了;
  • 此时也并不是直接传输到B主机的应用层,而是继续向下交付,到达传输层时,添加传输层的报头,此时也并不是直接传输到B主机的传输层,而是继续向下交付,添加报头;
  • 当交付到IP层时,添加IP层的报头,IP报头中就需要有起始IP和目的IP,但是报文并不能直接传输到对方IP层,继续向下交付;
  • 到达链路层时,也需要添加数据链路层报头,数据链路层的报头中有起始Mac地址和目的Mac地址,然后通过以太网传输给中间路由器,路由器是可以识别Mac报头,路由器也是个设备,也要有自己的IP地址和Mac地址,路由器将数据通过令牌换网交付给B主机,并封装令牌环报头;
  • 到达主机B的数据链路层,B主机拿到这个数据时,就要对报头进行解包,将报头和有效载荷分离,然后继续向上交付,每一层都解包对应的报头,直到主机B拿到原始数据。

         

同层协议要发的就是同层协议要接受的;

在发送报文时,Mac报头字段一直在变,IP报头一直不变;

IP层以上:网络报文无差异!所以一切皆IP,网络IP地址屏蔽了底层网络的差异。 


http://www.ppmy.cn/news/1573185.html

相关文章

Spring Boot框架知识总结(超详细)

前言 本篇文章包含Springboot配置文件解释、热部署、自动装配原理源码级剖析、内嵌tomcat源码级剖析、缓存深入、多环境部署等等,如果能耐心看完,想必会有不少收获。 一、Spring Boot基础应用 Spring Boot特征 概念: 约定优于配置&#…

nlp|微调大语言模型初探索(1),LLaMA-Factory

前言 微调模型通常比从零开始训练一个模型的技术要求低。公司不需要拥有大量的深度学习专家,利用现有的开源工具和库(如Hugging Face的Transformers等),中小型公司可以轻松地使用和微调大型模型,从而快速实现AI能力的集…

Linux下的Python开发环境

以下是在Ubuntu 22.04上安装XFCE桌面、配置中文环境、中文输入法、远程桌面;安装anaconda、PyCharm、谷歌浏览器等的步骤: 首先,正常安装完毕 Ubuntu 22.04 Linux。如果选择某些云平台的ECS服务器,可以用十几秒钟完成Ubuntu 22.0…

【Python】如何在 Linux/Windows 系统中设置 PYTHONPATH 环境变量

什么是 PYTHONPATH? PYTHONPATH 是一个环境变量,它告诉 Python 解释器在哪些目录中查找要导入的模块。这对于包含不在标准目录中的自定义模块非常有用。 Linux 系统中设置 PYTHONPATH 环境变量 在 Python 开发环境中,正确设置 PYTHONPATH …

【工具】CRAmed微生物数据的中介分析

文章目录 介绍使用安装教程案例 参考 介绍 许多微生物组研究揭示了微生物组与人类健康和疾病之间的重要联系。这些发现促使研究人员探索微生物组在人类复杂特征和疾病中的因果作用。然而,微生物组数据的复杂性给统计分析和因果关系的解释带来了挑战。 引入了一个新…

【私人笔记】Web前端

*内容网址1Vue官网Vue.js - 渐进式 JavaScript 框架 | Vue.js2Next.js 官网(英文)Next.js by Vercel - The React Framework3Next.js 文档(中文)简介 | Next.js 中文文档4React官网(中文)https://react.doc…

NAT(网络地址转换)技术详解:网络安全渗透测试中的关键应用与防御策略

目录 NAT的作用 NAT类型 NAT工作流程示例 NAT 转换技术的原理 源地址转换(SNAT,Source NAT): 目标地址转换(DNAT,Destination NAT): 端口地址转换(PAT&#xff0c…

基于Python的Django+Hive白酒数据推荐系统+毕业论文+指导搭建视频

技术栈:pythondjangohivemysqlvue 当人们打开系统的网址后,首先看到的就是首页界面。在这里,人们能够看到系统的导航条,通过导航条导航进入各功能展示页面进行操作。在个人中心页面可以对个人中心、修改密码、我的收藏等进行详细操…