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、以太网等),链路层为这些不同的传输技术提供了统一的数据传输服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/560628.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二维码门楼牌管理应用平台建设:助力场所整改与消防安全

文章目录 前言一、二维码门楼牌管理应用平台的构建背景二、二维码门楼牌管理应用平台在场所整改中的作用三、二维码门楼牌管理应用平台的意义与价值四、二维码门楼牌管理应用平台的未来展望 前言 随着城市管理的日益精细化,二维码门楼牌管理应用平台的建设成为了提…

正则表达式中 “$” 并不是表示 “字符串结束”

△△请给“Python猫”加星标 ,以免错过文章推送 作者:Seth Larson 译者:豌豆花下猫Python猫 英文:Regex character “$” doesnt mean “end-of-string” 转载请保留作者及译者信息! 这篇文章写一写我最近在用 Python …

【Django】学习笔记

文章目录 [toc]MVC与MTVMVC设计模式MTV设计模式 Django下载Django工程创建与运行创建工程运行工程 子应用创建与注册安装创建子应用注册安装子应用 数据模型ORM框架模型迁移 Admin站点修改语言和时区设置管理员账号密码模型注册显示对象名称模型显示中文App显示中文 视图函数与…

英文面试中如何回答为什么离职?柯桥英语口语学校

面试中,面试官可能会问到如下问题: 1.Why are you looking for another job? 你为什么要换工作? 2.May I ask why you left the company? 可以问一下你为什么要离开那家公司吗? 3.What’s the reason for you to leave your …

基于通达信---做T专用算法

什么是做T? 股票做T是股票市场中常见的一种投资策略,也就是股票进行T+0操作,通过当天买进的股票,在当天卖出,是股市中常见的一种超短线的操作。其中T就是指交易日,利用交易日中的股票涨跌来赚取差价。股票做T常见的类型就是正T和倒T。 1、正T 股票做正t就是指先买后卖,…

历史融资额高达 2.44 亿美元的 Monad,是何方神圣?

以并行 EVM 为特点的 Monad,又一个具备竞争力的“以太坊杀手” 在今年 4 月初,Monad Labs(Monad 的开发团队) 获得了一笔由 Paradigm 领投的高达 2.25 亿美元的巨额融资,本轮融资的其他投资者还包括: Elec…

云服务器需要多少流量?评估支持最大并发量?

一 需要购买多大的流量? 项目上线时,我们需要购买多大的流量的带宽?支持多少设备(支持多少并发量,在设计阶段会计算)?作为架构师我们必须清楚与明确。 二 清楚服务器的流量计算 常见的云服务主机…

Android安卓写入WIFI热点自动连接NDEF标签

本示例使用的发卡器:Android Linux RFID读写器NFC发卡器WEB可编程NDEF文本/网址/海报-淘宝网 (taobao.com) package com.usbreadertest;import android.os.Bundle; import android.view.MenuItem; import android.view.View; import android.widget.EditText; impo…

机器学习系统的设计

1.混淆矩阵 混淆矩阵作用就是看一看在测试集样本集中: 真实值是 正例 的样本中,被分类为 正例 的样本数量有多少,这部分样本叫做真正例(TP,True Positive),预测为真,实际为真真实值…

刷题DAY57 | LeetCode 647-回文子串 516-最长回文子序列

647 回文子串(medium) 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&#xff0c…

【结构型模式】适配器模式

一、适配器模式概述 适配器模式的定义-意图:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。(对象结构模式->对象适配器/类结构模式->类适配器) 适配器模式包含三个角色:目标(Target)角色、适配者(Adapt…

【漏洞复现】云时空社会化商业ERP fileupload/gpy存在任意文件上传漏洞

漏洞描述 云时空社会化商业ERP fileupload/gpy存在任意文件上传漏洞 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进行…

最邻近插值和线性插值

最邻近插值 在图像分割任务中:原图的缩放一般采用双线性插值,用于上采样或下采样;而标注图像的缩放有特定的规则,需使用最临近插值,不用于上采样或下采样。 自定义函数 这个是通过输入原始图像和一个缩放因子来对图像…

面试算法准备:树

这里写目录标题 1.树的基础1.1 首次理解1.2 深入理解1.2.1后序位置的特殊之处1.2.2 二叉树的思维指导 1.3 层序遍历1.4 二叉搜索树 BST 2.二叉树例题2.1 树的最大深度2.2 二叉树的直径2.3 二叉树的翻转2.4 填充每个节点的下一个右侧节点指针2.5 二叉树展开为链表 3 BST例题3.1 …

findImg找图工具

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

9月BTE第8届广州国际生物技术大会暨展览会,全媒体聚焦下的高精尖行业盛会

政策春风助力,共迎大湾区生物医药行业50亿红利 今年3月“创新药”首次写入国务院政府工作报告之后,广州、珠海、北京多地政府纷纷同步出台了多项细化政策,广州最高支持额度高达50亿元,全链条为生物医药产业提供资金支持&#xff…

力扣:104. 二叉树的最大深度(Java,DFS,BFS)

目录 题目描述:输入:输出:代码实现:1.深度优先搜索(递归)2.广度优先搜索(队列) 题目描述: 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从…

排序 “壹” 之插入排序

目录 ​编辑 一、排序的概念 1、排序: 2、稳定性: 3、内部排序: 4、外部排序: 二、排序的运用 三、插入排序算法实现 3.1 基本思想 3.2 直接插入排序 3.2.1 排序过程: 3.2.2 代码示例: 3.2.3…

PMP每年考几次,费用如何?

今年的的考试分别分布在3月、6月、8月、11月,一般来说PMP的考试时间是3、6、9、12月,如果有特殊情况PMI也会及时进行调整,具体看他们官网的通知了。 PMP的考试费用全球是统一的,在国内考试报名费用是3900元,如果考试没…

JVM类加载基本流程及双亲委派模型

1.JVM内存区域划分 一个运行起来的Java进程就是一个JVM虚拟机,这就需要从操作系统中申请一片内存区域。JVM申请到内存之后,会把这个内存划分为几个区域,每个区域都有各自的作用。 一般会把内存划分为四个区域:方法区(也称 "…