Linux网络编程--网络传输

news2024/11/18 9:08:51

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.coloradmin.cn/o/1610549.html

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

相关文章

如何在Windows安装Ollama大语言模型工具并实现无公网IP异地远程使用

文章目录 前言1. 运行Ollama2. 安装Open WebUI2.1 在Windows系统安装Docker2.2 使用Docker部署Open WebUI 3. 安装内网穿透工具4. 创建固定公网地址 前言 本文主要介绍如何在Windows系统快速部署Ollama开源大语言模型运行工具,并安装Open WebUI结合cpolar内网穿透软…

pycharm已有项目增加pipenv

pycharm已有项目增加pipenv 第一步 第一步 python base 需要安装pipenv pip install pipenv在设置,project 之后 会自动查找项目下的pipfile 和pipfile.lock 进行pip配置 如果网络较慢,可以修复pipfile下的url 为国内的pip源 [[source]] name "…

centos7安装openGauss数据库企业版

本文章是在CentOS7虚拟机上安装openGauss企业版数据库流程 1.下载安装包: https://opengauss.org/zh/download/ openGauss-5.0.1-CentOS-64bit-all.tar.gz 2.安装python3.6.9 见我的另一篇文章 CentOS7安装Python3-CSDN博客 3.检查工具依赖: 分别检查以下工具是…

符文协议的演变历程:从挑战到创新

在比特币网络长期面临的挑战中,与主流去中心化金融功能的兼容性一直是一大难题。相比之下,以太坊通过ERC-721和ERC-1155代币标准,为NFT和去中心化金融应用提供了支持,而比特币的应用范围却相对有限。然而,近年来&#…

2024燃动智火-业务视角的中国企业AI+学习发展报告

来源:新华三 学习型组织的数字化转型是众多企业关注的焦点,数字战略需要人才升级,数字 化学习加速人才培养。AI 技术在学习中的运用,为企业学习型组织的数字化转型插 上了飞翔的翅膀。这份报告解码了AI 时代企业的学习发展&#…

Docker(七):容器监控工具(Portainer、CAdvisor)

一:轻量级可视化监控工具Portainer 可视化监控工具, 可以通过docker安装,用于管理和监控docker,基本上的docker命令都有对应的按钮来操作。 # always 表示docker重启了该容器也跟着重启 docker run -d --name portainer -p 8000:8000 -p 90…

torch.gather用法详解

torch.gather是PyTorch中的一个函数,用于从源张量中按照指定的索引张量来收集数据。 基本语法如下, torch.gather(input, dim, index, *, sparse_gradFalse, outNone) → Tensor input:输入源张量dim:要收集数据的维度index&am…

多头蜗杆的轴截面和端截面的关系

最近有一个点,之前没有注意,就是多头蜗杆的导程与齿距的关系,它们会影响蜗杆断截面的形状,是不是听的有点别扭,往下看: 上图是一个蜗杆的轴剖面齿形,看到这个图形,如果看不到蜗杆实物或者有明显的标准,我们是没办法判断这个蜗杆的头数是多少。 从下面几张图可以看到,…

A-1:树状数组

A-1:树状数组 1.介绍Q1:树状数组解决什么问题?Q2:树状数组的使用1.前置知识:lowbit(x)2.单点修改3.求[1,n]的和4.区间查询5.hh Q3:树状数组是否优化了Q4:上图上例子解释上面说的东西(Important) 2.习题练习 1.介绍 树状数组是一个比较难以理解的高级数据…

希亦、追觅、石头洗地机哪一款更实用?爆款产品性能全名测评

洗地机行业正在经历突飞式的发展,各大品牌商家纷纷推出功能丰富、性能卓越的产品,不断升级和优化洗地机的各个方面。如今,洗地机的功能配置已经变得十分完善,为用户提供了更多选择和更优质的清洁体验。那么,洗地机型号…

产品推荐 | 基于Lattice用于原型和FPGA设计和开发的Avant-E 评估板

01 产品概述 莱迪思半导体Avant-E评估板使设计人员能够快速进行原型设计和FPGA设计测试。它提供对所有 I/O 的访问,以及广泛的内存选项,以实现更快的原型设计和开发。 Avant-E评估板采用LFG1156封装的Avant-E FPGA。该板可以通过 FMC HPC、PMAD 和 Ras…

团队协作:如何利用 Gitee 实现多人合作项目的版本控制

文章目录 前言一、名词解释1、Git是什么?2、Gitee、GitHub和GitLab 二、操作步骤1.安装Git2.创建Gitee仓库3.用vscode连接仓库4. 克隆远程仓库 总结 前言 在软件开发中,有效地管理代码是至关重要的。Gitee 是一个功能强大的代码托管平台,提供…

Qt :设置应用的图标

应用不设置图标,怎么都是没灵魂的。 Qt如何设置应用程序图标,一句话搞定: win32: RC_ICONS app.ico本文,笔者 app.ico 文件与pro放到同一级目录。各位可以根据自己的实际情况~

Java -集合-知识点

本文详细介绍了Java中集合的基本概念、常用数据结构和核心特性。通过学习本文,读者可以了解到Java集合框架的核心接口和实现类,掌握各种数据结构在不同场景下的应用方法和优劣势,以及如何使用集合框架提供的方法进行数据操作和处理。同时&…

【MATLAB基础绘图第21棒】绘制比例弦图 (Chord Diagram)

MATLAB绘制比例弦图 Chord Diagram 1 简介1.1 弦图简介1.2 比例弦图简介 2 MATLAB绘制比例弦图2.1 数据准备2.2 基本绘制2.3 添加方向箭头2.4 添加绘图间隙2.5 添加刻度2.6 修改标签2.7 颜色设置2.8 弧块及弦属性设置2.8.1 弧块属性设置2.8.2 弦属性设置 2.9 字体设置 参考 1 简…

手写Java设计模式之工厂模式,附源码解读

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。 工厂模式属于创建型…

11.盛最多水的容器(Java,双指针)

目录 题目描述:输入:输出:代码实现: 题目描述: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同…

不同条件累加(C语言)

一、题目&#xff1b; 二、N-S流程图&#xff1b; 三、运行结果&#xff1b; 四、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;float result1 0;float result2 0;float result…

如何查找一篇英文文献的源代码?(论文中没有源代码链接时)如何查找一篇论文的实现代码从而复现论文?

有两个网址&#xff0c;从这两个网址里面能找到论文相关代码&#xff0c;但不确定是不是人家论文里的源代码&#xff0c;但是根据论文实在找不到的情况下&#xff0c;只能试试这两个网址了 1. https://paperswithcode.com/ 2. https://www.catalyzex.com/

Java 集合(ArrayList、LinkedList、HashMap、HashSet、LinkedHashMap、LinkedHashSet)【补充复习】

Java 集合&#xff08;ArrayList、LinkedList、HashMap、HashSet、LinkedHashMap、LinkedHashSet&#xff09;【补充复习】 Java 集合概述Collection 接口继承树Map 接口继承树 Collection 接口方法使用 iterator 接口遍历集合元素使用 forearch 遍历集合元素 List 接口List 实…