Linux网络编程--网络传输

news/2024/5/18 15:57:54

Linux网络编程--网络传输

  • Linux网络编程
    • TCP/IP网络模型
    • 网络通信的过程
      • 局域网通信
      • 跨网络通信:
      • 问题总结:

Linux网络编程

TCP/IP网络模型

在这里插入图片描述

发送方(包装):

  1. 应用层:HTTP HTTPS SSH等 —> 包含数据,然后传递给传输层
  2. 传输层:TCP UDP ----> 封装时包装源端口和目标端口,然后传递给网络层
  3. 网络层:IP ----> 封装时包装源IP地址和目标IP地址,然后传递给链路层
  4. 链路层:封装成数据帧(以太网帧),封装后发送到物理网络中传输

接收方 (解包):

  1. 链路层:数据包到达目标机器,目的机器得到数据包,去掉数据包的头尾,然后传递给网络层
  2. 网络层:确认IP报文的目标是否是自己,如果是则继续处理,如果不是则抛弃,如果数据包分片则收集全部分片,然后传递为传输层
  3. 传输层:检查相应的端口字段,然后传递给应用层
  4. 应用层:消息抵达

数据封装成以太网帧格式流程:
在这里插入图片描述

以太网帧格式:

在这里插入图片描述

以太网目的地址:目的地的MAC地址 --> 硬件地址 --> 网卡编号 例如:00:0c:29:ec:46:18

以太网帧首部的硬件地址(也就是目的地址)填FF:FF:FF:FF:FF:FF表示广播

以太网源地址:自己的 MAC地址

类型:通过类型变换实现发送不同的数据包

  • 0800 数据段存放发送的内容 如 “你还欠我两块钱”
  • 0806 数据段存放ARP请求/应答 作用:请求下一个路由节点的地址
  • 0835 数据段存放RARP请求/应答

以太网IP地址:如192.168.190.129

网络通信的过程

IP地址:在网络上唯一标识一台主机

端口号:在主机中唯一表示一个进程

IP+port:在网络环境中唯一标识一台主机的一个进程(socket)

局域网通信

ARP协议

作用:根据目标IP地址得到目标的MAC地址

原因:我们知道目的机器的IP地址,但不知道目的机器的MAC地址

注意:ARP协议只能在同一个局域网内使用

工作原理:

本地机器会先查询自己的路由表,如果与目标机器在同一个局域网时,本地机器向局域网发送ARP请求广播,局域网上的所有设备都能接收到这个请求,目的机器接收到广播后会比较以太网帧格式中的目的IP地址,如果与自己的IP地址相同,那么直接向本地机器返回自己的应答包(里面包含自己的MAC地址,与本地机器发送广播的流程相同),如果与自己的IP地址不同则抛弃。请求者得到回应后会更新自己的ARP缓存(这是一个存储IP地址对应MAC地址的映射表)。下次再发送数据给同一个IP地址时,就可以直接查看自己的ARP缓存获取目标机器的MAC地址,而不是再次广播ARP请求。有了目标MAC地址后,发送设备可以构造以太网帧,并通过物理媒体发送数据给目标设备。

跨网络通信:

在这里插入图片描述

default:默认网关,为默认网关IP地址

路由表:

在这里插入图片描述

路由表记录着局域网的相关信息

  • 第一行指示网络192.168.0.0/24可以通过直接连接的方式(direct)来访问,这个网络连接到了接口lan1
  • 第二行显示网络192.168.1.0/24也是直接可达的,通过接口lan2

每个/24表示子网掩码是255.255.255.0,意味着每个网络可以容纳256个IP地址(包括网络和广播地址),其中192.168.0.0/24和192.168.1.0/24就是路由表记录的局域网信息

过程:

本地机器会先查询自己的路由表,发现与目标机器不在同一个局域网内,本地机器会找到自己配置中默认网关(见上面第一张图)的地址IP,由于在同一个局域网内,所以能通过APR请求得到默认网关的MAC地址,然后将TCP/IP数据包发送给这个MAC地址,但TCP/IP数据包的目标IP还是原来的目标机器IP(但需要根据NAT映射映射为公有IP地址,一般时路由的公有IP,会有一个新的IP和新的端口号,最后入站时通过映射转换为原来的IP,但目标机器IP不会映射,这需要注意),因为他们封装在网络层,只不过后面通过网关地址发送ARP请求的源地址IP和目标地址IP会变,在TCP/IP数据包到达路由器后,路由器会对TCP/IP数据包解包,解包到网络层获得目标地址IP,然后查询自己的路由表(路由表是用于决定如何将数据包从一个网络路由到另一个网络的指南。它包含了目标地址、下一跳地址和通过哪个接口转发数据包的信息,里面包含着局域网的信息,见上面第二张图。路由器使用路由表来决定数据包的转发路径,它并不会进行广播,ARP只会在寻找网关和目标地址时才进行),如果路由表查询到对应的局域网信息就将数据包发送给对应的路由节点,然后通过ARP协议寻找目标机器MAC地址,实现数据传递,然后更新本地机器的ARP缓存。如果找不到对应局域网的信息,路由器就会通过自己的默认网关向更高层级的网络发送ARP数据包,得到写一个路由的MAC地址,重复直到找到对应局域网,找到目标机器MAC地址。

问题总结:

  1. 进行网络传输前需要做什么(没有ARP缓存)?

在进行传输前我们需要封装成以太网格式,在以太网格式形成之前我们需要进行ARP请求,在进行ARP请求前,我们需要根据路由表判断是否在同一个局域网内,如果再同一局域网,则先查询ARP缓存,如果不在同一个局域网还是先查询ARP缓存看有没有默认网关的MAC地址,如果没有再发送ARP请求。所以第一步需要根据路由表判断是否在同一个局域网内

2.数据传输是根据哪个地址进行传输的?

根据MAC地址进行传输

3.ARP请求/应答成功后做什么?

更新本地机器的ARP缓存,以后的传输直接根据MAC地址传输,不会再发送ARP请求广播

4.ARP请求在什么时候进行?

在用一个局域网内:ARP请求一次

不在同一个局域网时:会在请求默认网关MAC地址和最后一跳时执行,至少请求两次

5.非局域网通信寻址进行的依据是什么?

通过使用默认网关和分层的网络结构,加上各种路由协议在网络中传播路由信息,数据包可以被有效地从源头路由到目的地。

6.目标机器对比ARP包中的目标IP,是因为我们解压到了ARP包的”网络层“了吗?

不是,虽然ARP包是以以太网帧的格式发送的,但他的封装过程与我们所认为的TCP/IP数据包并不相同,ARP包的实现只是在链接层进行的,并没有进行一层一层的包装,所有并没有网络层这一说法。

7.目标机器解包时进行到了哪一层?

链接层,对于ARP来说,尽管它处理的是网络层的地址信息(对比IP地址),但ARP请求和响应的生成和处理主要发生在链路层,对于ARP来说,尽管它处理的是网络层的地址信息,ARP请求和响应的生成和处理主要发生在链路层,不经过上层协议栈的其他层次。IP对比是计算机操作系统进行的,计算机操作系统利用链接器内部解决IP到MAC的映射问题。

8.TCP/IP数据包传输的过程中什么变什么不变?

TCP/IP数据包网络层封装的目标地址IP不变,但是在发送TCP/IP数据包传递过程中的ARP数据包的源地址IP和目标地址IP会变,每个路由都会对TCP/IP数据包解包到网络层,但并不会改变目标机器的IP地址。

9.什么时候会进行NAT地址映射?

NAT地址映射通常在流量从私有网络出站到公共网络(如互联网)时进行,用于将私有IP地址转换为公共IP地址(一般路由器的IP)。此外,对于入站流量(即从互联网到私有网络),通过特定的NAT规则(如端口转发),公共IP地址和端口号也可以被映射回内网的特定私有IP地址和端口号。

10.NAT地址映射进行的几次?

对于每个单独的连接,NAT转换通常在数据包离开私有网络时发生一次。对于入站连接,如果通过端口转发来指定,NAT转换同样会在数据包进入私有网络时发生一次,以将数据包导向内网中的特定设备。

11.链接层在公网和局域网中发生的作用?

链路层在局域网(LAN)中的作用

  • 数据帧传输:在局域网内,链路层主要负责在直接相连的设备之间传输数据帧。这包括处理帧的封装、帧的定界以及错误的检测和纠正。
  • MAC地址使用:链路层使用MAC地址来标识网络上的设备,这在局域网环境中尤其重要,因为设备间的通信通常是基于这些物理地址进行的。

链路层在广域网(WAN)/公网中的作用

  • 物理传输:虽然在广域网或公网环境中,数据包需要通过许多跳(即路由器)来到达目的地,每一跳之间的传输依然依赖于链路层协议和标准。每个路由器到下一个路由器的传输过程都是通过链路层完成的。
  • 不同技术标准:公网或广域网涉及更多种类的物理介质和数据链路协议(如光纤、DSL、以太网等),链路层为这些不同的传输技术提供了统一的数据传输服务。

http://www.mrgr.cn/p/23140206

相关文章

玩转 AIGC!使用 SD-WebUI 实现从文本到图像转换

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 基于大家…

差速机器人模型LQR 控制仿真——路径模拟

LQR路径跟踪要求路径中带角度,即坐标(x,y,yaw),而一般我们的规划出来的路径不带角度。这里通过总结相关方法,并提供一个案例。 将点路径拟合成一条完整的线路径算法 将点路径拟合成一条完整的线路径是一个常见的问题…

【Web】2022DASCTF X SU 三月春季挑战赛 题解(全)

目录 ezpop calc upgdstore ezpop 瞪眼看链子 fin#__destruct -> what#__toString -> fin.run() -> crow#__invoke -> fin#__call -> mix.get_flag() exp <?php class crow {public $v1;public $v2;}class fin {public $f1; }class what {public $a; }…

嵌入式day03

按键控制LED步骤: 复制工程,新建Hardware文件夹 打开工程管理,新建Hardware文件夹 打开配置按钮,添加文件夹路径 右键Hardware文件夹添加新文件LED.c与LED.h文件,并选择存放路径 在LED.c文件里添加#include "stm32f10x.h" 编写LED初始化函数(时钟和端口初始化 …

插入一个元素x于递增顺序表并使其有序排列

数据结构 顺序表 笔试题:知一个顺序表L,其中的元素递增有序排列,设计一个算法,插入一个元素x(x为int型)后保持该顺序表仍然递增有序排列(假设插入操作总能成功)。/*************************************************************************************** file name: …

RK3568 学习笔记 : u-boot 通过 tftp 网络更新 u-boot自身

前言 开发板型号&#xff1a; 【正点原子】 的 RK3568 开发板 AtomPi-CA1 使用 虚拟机 ubuntu 20.04 收到单独 编译 RK3568 u-boot 使用 rockchip Linux 内核的设备树 【替换】 u-boot 下的 rk3568 开发板设备树文件&#xff0c;解决 u-boot 下千兆网卡设备能识别但是无法 Pi…

润石科技(RUNIC)汽车电子应用方案和物料选型

一、润石科技&#xff08;RUNIC&#xff09;简介 江苏润石科技有限公司是一家专注于高性能、高品质模拟/混合信号集成电路研发和销售的高科技半导体设计公司。公司主要产品线分为两类&#xff1a;信号链和电源管理&#xff0c;其中信号链包含运算放大器、比较器、模拟开关、数…

C++初阶学习第二弹——C++入门(下)

C入门&#xff08;上&#xff09;&#xff1a;C初阶学习第一弹——C入门&#xff08;上&#xff09;-CSDN博客 目录 一、引用 1.1 引用的实质 1.2 引用的用法 二、函数重载 三、内敛函数 四、auto关键字 五、总结 前言&#xff1a; 在上面一章我们已经讲解了C的一些基本…

AI预测福彩3D第9套算法实战化测试第1弹2024年4月22日第1次测试

经过前面多套算法的测试&#xff0c;总结了一些规律&#xff0c;对模型优化了一些参数&#xff0c;比如第8套算法的测试&#xff0c;7码的命中率由最开始的20%提高到了50%。虽然命中率有了很大的提高&#xff0c;但是由于咱们之前的算法只是为了测试和记录&#xff0c;提供的方…

findImg找图工具

findImg 安装 npm install findImg -g 启动 findImg run 介绍 找出当前目录下的所有图片&#xff08;包括svg的symbol格式&#xff09;在浏览器中显示出来 源码 https://github.com/HuXin957/find-img 场景 例如前端项目中的img目录&#xff0c;大家都在往里面放图片&#xff…

安全屋和主菜单

目的创建一个安全屋的地图 创建一个互传的传送门 创建主菜单 创建暂停菜单1.创建一个安全屋的地图2.创建传送门 创建传送门蓝图 在玩家角色蓝图中创建一个接口用来作为玩家交互的调用(注意这里调用传送门接口是传送逻辑的接口)在传送门蓝图中调用交互接口(进入范围则可交互,…

【C语言】strstr函数刨析-----字符串查找

目录 一、strstr 函数介绍 ✨函数头文件&#xff1a; ✨函数原型&#xff1a; ✨函数解读 ✨功能演示 二、函数的原理以及模拟实现 ✨函数原理 ✨函数的模拟实现 三、strstr函数的注意事项 四、共勉 一、strstr 函数介绍 strstr函数是在一个字符串中查找另一个字符…

C语言项目实践——贪吃蛇

引言&#xff1a;本篇博客中&#xff0c;我将会使用结构体&#xff0c;链表&#xff0c;WIN32 API等一系列知识完成C语言项目——贪吃蛇的实现。在观看此篇博客之前&#xff0c;请将这些知识所熟悉&#xff0c;不然可能会造成理解困难。 更多有关C语言的知识详解可前往个人主页…

文件上传技术总结

文件上传技术总结 XMindChEPTpEere4pPp3.8h2试用要式Sa44十年.听元汽狂节产方生左车析上传ItaorFSs改文件解行方式方利!xP打统学/麻x绿部成I足让tAD.coENLRCoiD中国汽的折时语言特性系统特性中间件化析漏逅CVE-2015-444.ter1.jpo1寄户端文件上传漏洞绕过MIME过3083省rd0文大小…

程序员缓解工作压力的小窍门

目录 1.概述 2.工作与休息的平衡 3.心理健康与自我关怀 4.社交与网络建设 1.概述 作为程序员&#xff0c;缓解工作压力是非常重要的。压力太大有可能会写很多bug。我们可以采取以下方法来保持高效和创新&#xff0c;同时维护个人健康和工作热情。 定时休息&#xff1a;保持…

删除单链表中的最小值结点

数据结构 链表 笔试题1:设计一个算法删除单链表L(有头结点)中的一个最小值结点。/*************************************************************************** file name: 2.c* author : lu.ciana.598393@gmail.com* date : 2024/04/21* function : 设计一个…

hexo配置教程、主题使用及涉及的技术学习

一、背景 最近,一直想做一个属于自己的网站.可以从零开始搭建一个网站,顺便可以把日常中学到的技术用于实战,还可以顺便记录自己的所思所感,记录成长的过程. 方案 一开始的方案是从零开始,模仿常见个人博客的设计,基于vueSpringbootMySQL的去实现网站. 新建项目之后,发现vu…

使用GitHub Actions和GitHub pages实现前端项目的自动打包部署

简要记录使用GitHub Actions和GitHub Pages实现Vue项目的自动构建与发布1. 引言 As we all know,前端部署项目是比较简单的,通常情况下只需要将打包的产物(index.html、.js文件、.css文件等)放在Web服务器下就🆗,这种叫静态资源托管,成本是比较低的 那有没有免费的静态…

【学习】软件压力测试对软件产品的作用

在信息化高速发展的今天&#xff0c;软件产品已经成为各行各业不可或缺的一部分。然而&#xff0c;随着软件功能的日益复杂和用户需求的不断增长&#xff0c;软件产品的稳定性和可靠性问题也愈发凸显。在这样的背景下&#xff0c;软件压力测试作为软件质量保障的重要手段之一&a…

OpenCV与AI深度学习 | OpenCV如何读取仪表中的指针刻度

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;OpenCV如何读取仪表中的指针刻度 最近遇到一个问题&#xff0c;如何读取仪表中的指针指向的刻度。 解决方法有多种&#xff0c;比如&#xff…