关于网络协议的若干问题(三)

1、当发送的报文出问题的时候,会发送一个 ICMP 的差错报文来报告错误,但是如果 ICMP 的差错报文也出问题了呢?

答:不会导致产生 ICMP 差错报文的有:

  • ICMP 差错报文(ICMP 查询报文可能会产生 ICMP 差错报文);
  • 目的地址是广播地址或多播地址的 IP 数据报;
  • 作为链路层广播的数据报;
  • 不是 IP 分片的第一片;
  • 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。

2、ping 使用的是什么网络编程接口?

答:网络编程接口是 Socket,对于 ping 来讲,使用的是 ICMP,创建 Socket 如下:

socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)

SOCK_RAW 就是基于 IP 层协议建立通信机制。

如果是 TCP,则建立下面的 Socket:

socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)

如果是 UDP,则建立下面的 Socket:

socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)

3、ICMP 差错报文是谁发送的呢?

答:ICMP 包是由内核返回的,在内核中,有一个函数用于发送 ICMP 的包。

void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info);

例如,目标不可达,会调用下面的函数。

icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PROT_UNREACH, 0);

当 IP 大小超过 MTU 的时候,发送需要分片的 ICMP。

if (ip_exceeds_mtu(skb, mtu)) {icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, htonl(mtu));goto drop;}

4、NAT 能建立多少连接?

答:SNAT 多用于内网访问外网的场景,鉴于 conntrack 是由{源 IP,源端口,目标 IP,目标端口},hash 后确定的。

如果内网机器很多,但是访问的是不同的外网,也即目标 IP 和目标端口很多,这样内网可承载的数量就非常大,可不止 65535 个。

但是如果内网所有的机器,都一定要访问同一个目标 IP 和目标端口,这样源 IP 如果只有一个,这样的情况下,才受 65535 的端口数目限制,根据原理,一种方法就是多个源 IP,另外的方法就是多个 NAT 网关,来分摊不同的内网机器访问。

如果你使用的是公有云,65535 台机器,应该放在一个 VPC 里面,可以放在多个 VPC 里面,每个 VPC 都可以有自己的 NAT 网关。

5、公网 IP 和私网 IP 需要一一绑定吗?

答:公网 IP 是有限的,如果使用公有云,需要花钱去买。但是不是每一个虚拟机都要有一个公网 IP 的,只有需要对外提供服务的机器,也即接入层的那些 nginx 需要公网 IP,没有公网 IP,使用 SNAT,大家共享 SNAT 网关的公网 IP 地址,也是能够访问的外网的。

6、路由协议要在路由器之间交换信息,这些信息的交换还需要走路由吗?不是死锁了吗?

答:OSPF 是直接基于 IP 协议发送的,而且 OSPF 的包都是发给邻居的,也即只有一跳,不会中间经过路由设备。BGP 是基于 TCP 协议的,在 BGP peer 之间交换信息。

7、多线 BGP 机房是怎么回事儿?

答:BGP 主要用于互联网 AS 自治系统之间的互联,BGP 的最主要功能在于控制路由的传播和选择最好的路由。各大运营商都具有 AS 号,全国各大网络运营商多数都是通过 BGP 协议与自身的 AS 来实现多线互联的。

使用此方案来实现多线路互联,IDC 需要在 CNNIC(中国互联网信息中心)或 APNIC(亚太网络信息中心)申请自己的 IP 地址段和 AS 号,然后通过 BGP 协议将此段 IP 地址广播到其它的网络运营商的网络中。

使用 BGP 协议互联后,网络运营商的所有骨干路由设备将会判断到 IDC 机房 IP 段的最佳路由,以保证不同网络运营商用户的高速访问。

8、TCP 的连接有这么多的状态,你知道如何在系统中查看某个连接的状态吗?

答:可以使用netstat或者lsof命令grep一下establish listen close_wait等来查看。

9、TIME_WAIT 状态太多是怎么回事儿?

答:如果处于 TIMEWAIT 状态,说明双方建立成功过连接,而且已经发送了最后的 ACK 之后,才会处于这个状态,而且是主动发起关闭的一方处于这个状态。

如果存在大量的 TIMEWAIT,往往是因为短连接太多,不断的创建连接,然后释放连接,从而导致很多连接在这个状态,可能会导致无法发起新的连接。解决的方式往往是:

  • 打开 tcp_tw_recycle 和 tcp_timestamps 选项;
  • 打开 tcp_tw_reuse 和 tcp_timestamps 选项;
  • 程序中使用 SO_LINGER,应用强制使用 rst 关闭。

当客户端收到 Connection Reset,往往是收到了 TCP 的 RST 消息,RST 消息一般在下面的情况下发送:

  • 试图连接一个未被监听的服务端;
  • 对方处于 TIMEWAIT 状态,或者连接已经关闭处于 CLOSED 状态,或者重新监听 seq num 不匹配;
  • 发起连接时超时,重传超时,keepalive 超时;
  • 在程序中使用 SO_LINGER,关闭连接时,放弃缓存中的数据,给对方发送 RST。

10、起始序列号是怎么计算的,会冲突吗?

答:起始 ISN 是基于时钟的,每 4 毫秒加一,转一圈要 4.55 个小时。

TCP 初始化序列号不能设置为一个固定值,因为这样容易被攻击者猜出后续序列号,从而遭到攻击。 RFC1948 中提出了一个较好的初始化序列号 ISN 随机生成算法。

ISN = M + F (localhost, localport, remotehost, remoteport)

M 是一个计时器,这个计时器每隔 4 毫秒加 1。F 是一个 Hash 算法,根据源 IP、目的 IP、源端口、目的端口生成一个随机数值。要保证 Hash 算法不能被外部轻易推算得出,用 MD5 算法是一个比较好的选择。

11、epoll 是 Linux 上的函数,那你知道 Windows 上对应的机制是什么吗?如果想实现一个跨平台的程序,你知道应该怎么办吗?

答:epoll 是异步通知,当事件发生的时候,通知应用去调用 IO 函数获取数据。IOCP 异步传输,当事件发生时,IOCP 机制会将数据直接拷贝到缓冲区里,应用可以直接使用。

如果跨平台,推荐使用 libevent 库,它是一个事件通知库,适用于 Windows、Linux、BSD 等多种平台,内部使用 select、epoll、kqueue、IOCP 等系统调用管理事件机制。

12、ping是如何nat的呢?

答:通过 nf_conntrack_tuple 里面的内容,可以唯一地标识一个连接:

src:包含源 IP 地址;如果是 TCP 或者 UDP,包含源端口;如果是 ICMP,包含的是 ID;

dst:包含目标 IP 地址;如果是 TCP 或者 UDP,包含目标端口;如果是 ICMP,包含的是 type, code。

此文章为10月Day12学习笔记,内容来源于极客时间《趣谈网络协议》,推荐该课程。

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

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

相关文章

UI自动化测试:Selenium+PO模式+Pytest+Allure整合

本人目前工作中未涉及到WebUI自动化测试,但为了提升自己的技术,多学习一点还是没有坏处的,废话不多说了,目前主流的webUI测试框架应该还是selenium,考虑到可维护性、拓展性、复用性等,我们采用PO模式去写我…

【ElasticSearch】更新es索引生命周期策略,策略何时对索引生效

大家好,我是好学的小师弟,今天和大家讨论下更新es索引生命周期策略后,策略何时对索引生效 结论: 若当前索引已应用策略A(旧),更新完策略A后,新的策略A会立即对原来的已经应用该策略的索引生效;若当前索引…

OPPO realme 真我 一加 刷机工具下载 ColorOS Upgrade Tool

Download Realme Upgrade Tool for Windows Download ColorOS Upgrade Tool for Windows Realme升级工具是由Realme开发的Windows应用程序,可帮助用户升级其Realme设备上的固件。此工具支持在Realme Ul 3.0或更高版本上运行的Realme 设备。OPPO realme 真我 一加 …

GienTech动态|入选软件和信息技术服务竞争力百强;参展世界计算大会、网络安全博览会

———— GienTech动态 ———— 中电金信参展广东省网络安全博览会、世界计算机大会 近期,中电金信跟随中国电子参展2023年广东省网络安全博览会(下简称“博览会”)和2023世界计算大会。在两大峰会上,中电金信展出了金融级数字底…

【虹科干货】Redis Enterprise 自动分层技术:大数据集高性能解决方案

越来越多的应用程序依赖于庞大的数据集合,而这些应用程序必须快速响应。借助自动分层,Redis Enterprise 7.2 帮助开发人员轻松创建超快的应用程序。何乐而不为? Redis将数据存储在内存中,因此应用程序能以最快的速度检索和处理数…

“过度炒作”的大模型巨亏,Copilot每月收10刀,倒赔20刀

大模型无论是训练还是使用,都比较“烧钱”,只是其背后的成本究竟高到何处?已经推出大模型商用产品的公司到底有没有赚到钱?事实上,即使微软、亚马逊、Adobe 这些大厂,距离盈利之路还有很远!同时…

精品Python的计算机科学研究话题管理系统-可视化大屏

《[含文档PPT源码等]精品Python的计算机科学研究话题管理系统设计与实现-爬虫》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等! 软件开发环境及开发工具: 开发语言:python 使用框架:Django 前端技术…

Vue 中 KeepAlive 内置缓存使用

KeepAlive 介绍及使用场景 KeepAlive 是 vue 中的内置组件&#xff0c;当多个组件动态切换时可以对实例状态进行缓存&#xff0c;用法如下 <router-view v-slot"{ Component }"><keep-alive><component :is"Component" /></keep-al…

让 Visual Studio 用上 ChatGPT

一、简介 Visual chatGPT Studio 是 Visual Studio 的一个免费扩展&#xff0c;它直接在 IDE 中添加了 chatGPT 功能。它允许用户以可以根据菜单功能的方式使用 chatGPT。 二、功能介绍 该扩展提供了一组使用 ChatGPT 命令&#xff0c;可以在编辑器中选择你需要处理的代码或…

火伞云Web应用防火墙的特点与优势

在前文中&#xff0c;我们已经介绍了Web应用防火墙&#xff08;WAF&#xff09;的基本原理和重要性。接下来&#xff0c;我们将深入探讨火伞云Web应用防火墙的特点与优势&#xff0c;了解它如何为企业提供更为完善和专业的网络安全保障。 一、强大的防御能力 火伞云Web应用防火…

SSM - Springboot - MyBatis-Plus 全栈体系(二十六)

第六章 SpringBoot 快速启动框架&#xff1a;SpringBoot3 实战 一、SpringBoot3 介绍 1. SpringBoot3 简介 SpringBoot 版本&#xff1a;3.0.5 到目前为止已经学习了多种配置 Spring 程序的方式。但是无论使用 XML、注解、Java 配置类还是他们的混合用法&#xff0c;都会觉…

Git版本控制管理

Git基础_环境配置 当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的&#xff0c;因为每次Git提交都会使用该用户信息。 设置用户信息 git config --global user.name "Bandits" git config --global user.email "gb010704163.com"查…

【安全】linux audit审计使用入门

文章目录 1 audit简介2 auditctl的使用2 audit配置和规则3 工作原理4 audit接口调用4.1 获取和修改配置4.2 获取和修改规则4.3 获取审计日志 5 audit存在的问题5.1 内核版本5.2 审计日志过多造成的缓存队列和磁盘问题5.2 容器环境下同一个命令的日志存在差异 6 参考文档 1 audi…

【算法|双指针系列No.6】leetcode LCR 179. 查找总价格为目标值的两个商品

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

Rule-Engine-Starter V1.0.0

一个轻量级的规则引擎、搜索引擎&#xff0c;让条件匹配简单、优雅。 GIT地址 https://gitcode.cosmoplat.com/15011240224/rule-engine-starter 介绍 Rule-Engine-Starter 是一个轻量级规则引擎&#xff0c;V1.0.0主要解决条件匹配问题。比如飞书文档&#xff0c;每个文档都…

电脑系统升级Win11变卡顿?如何解决!

关于Win11系统更新的相关问题&#xff0c;Win11每一次更新之后会给大家带来更多功能&#xff01;但是每次更新也可能会出现掉驱动、无法打开应用、甚至是蓝屏或者进不去主页等问题&#xff01;所以为了帮助大家预防这些更新出现的后遗症&#xff0c;分享了一些小的方法&#xf…

[Error]在Swift项目Build Settings的Preprocessor Macros中定义的宏无效的问题

问题 如图&#xff0c;在Build Settings -> Preprocessor Macros中添加了ISADEMO1。但在代码中判断无效&#xff0c;还是会输出“isn’t ADemo” #if ISADEMOprint("is ADemo") #elseprint("isnt ADemo") #endif解决 如图&#xff0c;要让Preproces…

【已解决】MySQL:执行sql查询出错误数据(MySQL隐藏机制-类型转换导致)

目录 问题现象&#xff1a; 问题分析&#xff1a; 结论&#xff1a; 解决方法&#xff1a; 拓展&#xff1a; 问题现象&#xff1a; 今天在项目开发中发现了一个非常奇怪的bug&#xff1a; 如图&#xff0c;我在数据库中以“dept_id 1712651046956421123”为条件&#xff…

WEEX编译|加密市场三季度回顾及未来展望

作者&#xff1a;Greg Cipolaro&#xff0c;NYDIG 全球研究主管 编译&#xff1a;WEEX 唯客交易所 本文要点&#xff1a; ● 在充满挑战的第三季度&#xff0c;比特币价格下跌 11.1%&#xff0c;因为众多资产类别都在努力应对利率上升的影响和对经济衰退的担忧。 ● 比特币…

CentOS 7 基于C 连接ZooKeeper 客户端

前提条件&#xff1a;CentOS 7 编译ZooKeeper 客户端&#xff0c;请参考&#xff1a;CentOS 7 编译ZooKeeper 客户端 1、Docker 安装ZooKeeper # docker 获取zookeeper 最新版本 docker pull zookeeper# docker 容器包含镜像查看 docker iamges# 准备zookeeper 镜像文件挂载对…