Linux网络编程--网络传输

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.mzph.cn/bicheng/712.shtml

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

相关文章

终极版商城平台 涵盖虚拟商品全功能的商城平台 全能商城小程序 智慧商城系统 全品类百货商城服务

终极版商城平台 涵盖虚拟商品全功能的商城平台 全能商城小程序 智慧商城系统 全品类百货商城服务 含uniapp源码 全功能商城系统:完美运营版,简洁无冗余 这款商城系统完美集成了拼团、团购、秒杀、积分兑换、砍价活动,同时支持实物商品与虚拟…

2010年认证杯SPSSPRO杯数学建模B题(第一阶段)交通拥堵问题全过程文档及程序

2010年认证杯SPSSPRO杯数学建模 交通拥堵问题 B题 Braess 悖论 原题再现: Dietrich Braess 在 1968 年的一篇文章中提出了道路交通体系当中的Braess 悖论。它的含义是:有时在一个交通网络上增加一条路段,或者提高某个路段的局部通行能力&a…

深度学习知识点:循环神经网络(RNN)、长短期记忆网络(LSTM)、门控循环单元(GRU)

深度学习知识点:循环神经网络(RNN)、长短期记忆网络(LSTM)、门控循环单元(GRU) 前言循环神经网络(RNN)RNNs(循环神经网络)训练和传统ANN&#xff…

VulBG: 构建行为图加强基于深度学习的漏洞检测模型

近年来,人们提出了基于深度学习(DL)的漏洞检测系统,用于从源代码中自动提取特征。这些方法在合成数据集上可以实现理想的性能,但在检测真实世界的漏洞数据集时,准确率却大幅下降。此外,这些方法…

OpenHarmony网络协议通信—nanopb

简介 nanopb是一种小代码量的协议缓冲区实现,适用于任何内存受限的系统。 下载安装 直接在OpenHarmony-SIG仓中搜索nanopb并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 将下载的Nanopb库代码存在以下路径:./third_party/nanopb 修改添…

docker安装并跑通QQ机器人实践(3)-bs-nonebot搭建

NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架(下称 NoneBot),它基于 Python 的类型注解和异步优先特性(兼容同步),能够为你的需求实现提供便捷灵活的支持。同时,NoneBot 拥有大…

如何在 Netlify 上手动部署 React 和 TypeScript 项目

在本教程中,我将教你如何使用 Vite 在 Netlify 上手动部署 React 和 TypeScript 项目。我将向你展示一些快速简单的步骤,让你的项目能够立即运行。 要跟着本教程操作,有几个先决条件: 一个现有的 React 和 TypeScript 项目&…

bug(警告):[vue-router] Duplicate named routes definition: …

查看警告:[vue-router] Duplicate named routes definition——翻译[vue-router]重复命名路由定义 小编劝诫:当我们在开发过程中警告也一定不要忽略,虽然你在本地跑代码时这些警告影响项目的正常运行,但是会让你产生误区&#xff…

OSPGF高级实验综合

1.实验拓扑 二.实验要求 1、R4为ISP,其上只配置IP地址;R4与其他所直连设备间均使用公有IP; 2、R3-R5、R6、R7为MGRE环境,R3为中心站点; 3、整个OSPF环境IP基于172.16.0.0/16划分;除了R12有两个环回&#x…

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。

java CMS,G1垃圾收集器工作流程原理浅析 JVM内存空间基础知识点(基于JDk1.8) 1.方法区:逻辑概念,元空间,方法区主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分&#xf…

java实现chatGPT SDK

搭建一个 ChatGPT-SDK 组件工程,专门用于封装对 OpenAI 接口的使用。由于 OpenAI 接口本身较多,并有各类配置的设置,所以开发一个共用的 SDK 组件,更合适我们在各类工程中扩展使用 整个流程为:以会话模型为出口&#x…

C++笔试强训day3

目录 1.简写单词 2.dd爱框框 3.除2! 1.简写单词 链接 我的思路超级简单,就是将输入的每个string存入vector,然后遍历每个string的第一个元素,如果为小写字母,就-32存入,若为大写,则直接存入。…

Docker in Docker的原理与实战

Docker in Docker(简称DinD)是一种在Docker容器内部运行另一个Docker实例的技术。这种技术允许用户在一个隔离的Docker容器中创建、管理和运行其他Docker容器,从而提供了更灵活和可控的部署选项。以下是DinD的主要特点: 隔离性&am…

Maven实战—搭建微服务 Maven 工程架构

需求案例:搭建一个电商平台项目,该平台包括用户服务、订单服务、通用工具模块等。 项目架构: 用户服务:负责处理用户相关的逻辑,例如用户信息的管理、用户注册、登录等。订单服务:负责处理订单相关的逻辑…

使用示例解释.NET中的Mocking是什么?

让我们踏上探索.NET软件开发中Mocking概念的旅程,让我们深入了解Mocking是多么简单易懂、易于访问。请与我一起穿越这个主题,我将涵盖以下内容: 理解Mocking:为何它对于构建强大的测试策略至关重要。探索一些最常见的Mocking库&a…

Ansible组件说明

1.Ansible Inventory 工作当中有不同的业务主机,我们需要在把这些机器信息存放在inventory里面,ansible默认的inventory的文件是/etc/ansible/hosts,也可以通过ANSIBLE_HOSTS环境变量来指定或者运行ansible和ansible-playbook的时候用-i参数临…

视频教程下载:用ChatGPT玩转海外抖音TikTok

CHATGPT for TikTok是一门前沿课程,旨在帮助您充分发挥TikTok广告活动的全部潜力。随着数字营销的爆炸性增长,企业需要使用先进的工具来保持竞争优势。在这门课程中,您将学习如何利用CHATGPT——一种先进的人工智能工具——来创建与目标受众产…

有没有手机上使用的库存软件

库存软件是一种仓库的信息管理系统,它主要针对出库与入库这些数据进行管理,传统的库存管理都是在电脑上安装一个专门的数据库管理系统进行管理,这也是一种比较成熟的管理方式,那么有没有手机上使用的库存软件。 手机上使用的库存软…

k8s配置configmap指定到容器的指定文件

我们需要将名称为walletkey.properties的文件做成configmap,然后将walletkey.properties文件单独挂载出来到/data/walletkey.properties,且不能覆盖/data目录,具体如下 1、创建configmap configmap文件内容 其中walletkey.properties: >-引…

python语言零基础入门——注释、print()函数、input()函数

目录 一、注释 1.块注释 2.行内注释 3.多行注释 二、打印变量 1.print()函数:输出/打印指定内容 2.input()函数:输入指定内容 三、编程题:个人名片 一、注释 1.块注释 以#开始,直到本行结束都是注释为了保证代码的可读性…