Linux网络基础5(链路层---以太网)

2023-10-27

链路层:负责相邻设备之间的数据传输

以太网协议:ethernet

        协议格式:

         48位源端-对端mac地址:识别指定相邻设备

                mac地址:uint8_t mac[6]---网卡的物理硬件地址,在出厂时设定

        16位数据类型:用于数据分用时上层解析协议的选择

        32位数据帧尾:校验和进行差错校验...

        如何获取相邻指定设备的MAC地址:ARP协议

ARP协议:介于网络层与链路层之间的协议---通过IP地址获取MAC地址

        在局域网广播ARP请求(smac+sip+0+dip)(以太网帧中的对端mac地址全为1---广播地址)

        相邻设备收到ARP请求后,检测目的IP地址是否与自己符合,不符合则直接丢弃,符合则组织ARP应答,将自己的MAC地址填充进行回复。

        两端都会将mac-ip的映射关系保存一段时间(20~30分钟)

ARP欺骗攻击:伪造IP进行ARP响应---通过防火墙白名单解决

MTU:链路层限制的最大传输单元---以太网默认1500字节

MSS:最大数据段大小,MSS=MTU-IP最小报头长度-TCP最小报头长度

tcp:mtu=1500,则mss=1460

udp:mtu=1500;则mss=1472

MTU对于TCP传输的影响:tcp传输三次握手阶段会协商mss,双方取较小一方的mss作为最大数据段大小进行传输,每次从发送缓冲区中取出不大于mss大小的数据封装报头进行传输。因此tcp在传输层会自动进行数据分段,不会再网络层进行数据分片。

MTU对于UDP传输的影响:udp没有mss协商,只要数据段大小小于64k-28就可以传输,但是若大于mtu大小,则会在网络层进行数据分片。而分片在对端会进行分片重组,一旦一个分片出问题整个报文都会被丢弃(udp不保证可靠传输,丢弃就没了)。因此分片越多,传输出问题的几率就越高。所以在使用udp传输时,程序员最好在上层分包时就计算mss大小分包,尽量减少分片概率。

DNS:domain name system 域名系统

域名:是一个便于记忆的字符串,一个服务器的别名,访问服务器时通过解析得到服务器的IP地址进行访问

记录域名信息的文件:

        windows下:\windows\system32\drivers\etc\hosts

        linux下:/etc/hosts

域名服务器等级:根 --> 顶级 --> 二级...

一个域名服务器支撑不了所有人的访问,因此采用分布式存储,将域名信息分散存储到世界各地。

域名的划分:

        顶级域名(根据使用性质以及地域进行划分):.com / .org / .gov...   .cn / .en/ .jp...

        二级域名: .baidu.com / .qq.com

        三级域名: .zhidao.baidu.com

域名解析流程:

问题:浏览器中输入URL,回车后都发生了什么?

1.域名解析 --> 2.搭建tcp客户端 --> 3.组织http请求 --> 4.发送请求,等待回复 --> 5.服务器收到请求进行解析 --> 6.业务处理 --> 7.组织http响应 --> 8.客户端收到回复,解析http响应 --> 9.根据content-type解析处理正文

ICMP协议:是一个网络层协议,通常用于进行网络探测(ping这个工具使用的就是ICMP协议)

        问题:telnet默认使用的是23号端口,ssh使用的是22号端口,那么ping用的多少端口?

        ping使用的是ICMP协议实现的,而ICMP协议是网络层协议,只有传输层的协议才会涉及到端口

NAT/NAPT:网络地址转换技术

        用于组建私网,私网中的主机对外通信时,部署于网关设备上的NAT服务进行源端地址转换(建立映射关系),转换为对外地址后进行数据转发。私网中的主机使用同一个对外公网地址上网,节省公网地址的使用。

代理服务:VPN翻墙

        代理是一个应用,可以部署在任意设备上,工作在应用层

        NAT是一个服务,部署在网关设备上,工作在网络层进行地址转换

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux网络基础5(链路层---以太网) 的相关文章

  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • 如何修复“iptables:没有该名称的链/目标/匹配”?

    我在我的 Linux 嵌入式系统上构建并安装了 iptables 如果我列出所有规则 则一切正常 iptables list Chain INPUT policy ACCEPT target prot opt source destinat
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 为什么 Linux perf 使用事件 l1d.replacement 来处理 x86 上的“L1 dcache misses”?

    在英特尔 x86 上 Linux用途 https stackoverflow com a 52172985 149138事件l1d replacements来实施其L1 dcache load misses event 该事件定义如下 计数
  • 大多数 Linux 系统头文件与 C++ 兼容吗?

    大多数 Linux 系统头文件 API C 兼容吗 今天我试图做这样的事情 include
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp

随机推荐