字节面试:连接一个不存在的 IP 地址,会发生什么?

news2024/11/23 19:13:30

分享两个字节面试题,都是基于场景问的网络问题。

  • Q1:客户端连接一个不存在的 IP 地址,会发生什么?

  • Q2:客户端连接一个存在的 IP 地址但是端口不存在,会发生什么?

PS:这里的「连接」指的是 TCP 连接。

这类的场景问题,如果你没有系统化的网络知识体系,只靠背八股文的话,你就遭老罪喽。

接轨 B 站潮流:省流,我直接给出结论

Q1:客户端连接一个不存在的 IP 地址,会发生什么?

这个问题要分两种情况来思考,不同的情况得到的结论是不同的。

第一个情况:目标 IP 地址和客户端的 IP 地址是同一个局域网(网络号相同)。

第一种情况,客户端无法发出 SYN 报文,主要卡在数据链路层。

因为目标地址不存在 IP 地址,客户端的内核在发 arp 请求的时候,广播询问这个目标 IP 地址是谁的,由于网络中不存在该目标 IP 地址,所以没有设备应答客户端的 arp 请求。

由于客户端无法拿到目标设备的 MAC,这样就没办法组装 MAC 头的信息,所以 SYN 报文无法发送出去

第二个情况:目标 IP 地址和客户端的 IP 地址不在同一个局域网(网络号不同)。

第二种情况,客户端会先将 SYN 报文发给路由器,然后路由器会继续转发。

由于目标 IP 地址是不存在的,该 SYN 报文会在网络中消亡,因此客户端是不会收到对 SYN 报文的确认报文的,接着客户端会触发超时重传,重传 SYN 报文,直到重传的次数达到最大次数后,客户端的连接就会被释放

可能有的同学好奇,为什么这种情况客户端的 SYN 报文可以发出来?

因为当目标 IP 地址和客户端 IP 地址不在同一个局域网时,客户端客通过路由表的判断,判断到下一步是要将网络报文发送给路由器。

这时候数据链路层的 arp 请求,会广播询问 IP 地址(路由器 IP 地址)是谁的,路由器发现是自己的 IP 地址,于是就会将自己的 MAC 地址告诉客户端。

然后客户端的网络报文中 MAC 头的「目标 MAC 地址」填入的就是路由器的 MAC 地址,于是 SYN 报文就可以发送出去了。

由于目标 MAC 地址是路由器的,所以就会被路由器接收,然后路由器继续通过路由表的判断,转发给下一个路由器,直到找到目标设备。

Q2:客户端连接一个存在的 IP 地址但是端口不存在,会发生什么?

客户端连接的目标 IP 地址是存在的,那么 SYN 报文就能正确的抵达到目标设备。

目标设备收到 SYN 报文后,发现端口号并没有被进程监听,这时候目标设备的内核就会回 RST 报文。

客户端收到 RST 报文后,就会释放连接。

.......

至此,结论已说完。

不知道你们会不会觉得信息量很大,如果你觉得信息量大,那么你该补补网络知识啦。

第二题不难,难在的是第一题,如果你没有把两台电脑之间是怎么通信的搞清楚,那么你是无从下手回答的,所以建立好体系化的网络知识,面对这类的场景题目,就能做到举一反三了。

最近比较忙,偷懒了,没有画图,如果哪里没理解的,可以先看我以前写的这篇文章:探究!一个数据包在网络中的心路历程,有详细讲解每一层是怎么封装头部的,以及路由表是怎么判断的。

最后再提一个问题:客户端发送了一个目标 IP 地址存在但是端口不存在的 UDP 报文,UDP 没有像 TCP 那样的 RST 报文,此时会发生什么?

就酱,溜啦溜啦!

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

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

相关文章

leetcode:2395. 和相等的子数组(python3解法)

难度:简单 给你一个下标从 0 开始的整数数组 nums ,判断是否存在 两个 长度为 2 的子数组且它们的 和 相等。注意,这两个子数组起始位置的下标必须 不相同 。 如果这样的子数组存在,请返回 true,否则返回 false 。 子数…

快消品行业企业如何选择适合自己的订单管理系统源码

快消品行业企业在选择适合自己的订单管理系统源码时,需要考虑以下五个方面: 首先,企业需要考虑订单管理系统的功能是否能够满足自身的需求。订单管理系统应该具备订单录入、订单查询、订单处理、订单跟踪、进销存管理、临期提醒等基本功能&am…

创业大赛,助力AI创业团队加速发展

AI产业投资人认为,参加AI大模型大赛的企业,无论是大厂还是创业团队,在技术、资本和产品等方面都面临全方位的竞争。特别对于创业团队而言,早期的问题是缺乏资金和技术支持,这让很多创业团队犹豫不决。 大型模型的研发…

2.MySQL- Linux 常见指令

目录 回顾:Linux 常见命令 一、创建目录 make directory (mkdir) 二、创建一个空白的文本文件 (touch) 练习 三、查看文本文件内容相关的指令(cat head tile...) 3.1 cat 3.2 head & tail 3.3 wc -l 3.4 grep 3.5 less & …

电脑城要倒闭?“泰酷辣”

电脑城要倒闭?“泰酷辣” 😇博主简介:我是一名正在攻读研究生学位的人工智能专业学生,我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑,欢迎随时来交流哦!&#x1…

走进Linux世界【一、Linux概述】

第一章 Linux概述 1、操作系统 ​ 定义:操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机程序 ​ 作用:是把计算机系统中对硬件设备的操作封装起来,供应用软件调用,也是提供一个让用户与系统交…

I2C(IIC)总线 物理层

2C 通信设备常用的连接方式如下图: ①它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个I2C 通讯总线中,可连接多个I2C 通讯设备,支持多个通讯主机及多个通讯从机。 ②一个I2C 总线只使用两条总线线路,一条双向串…

Windows 操作系统架构介绍

Windows 操作系统架构介绍 4 种基本类型的用户模式进程用户进程服务进程系统进程环境子系统服务进程Windows 内核模式组件 重要的系统组件环境子系统和子系统 DLL子系统的启动Windows 子系统Windows 10 和 Win32k.sys 其他子系统执行体内核内核对象内核处理器控制区&#xff08…

掌握这些写简历投简历的“黑魔法”,告别简历已读不回!

“哎,我还能找到工作吗?” 这是最近加我微信的好友,问的最多的一句话。 太卷了 最近加我微信的朋友很多,我都很奇怪,最近也没怎么发文章,怎么会有这么多人加我。 大概就是因为太卷了,之前写的…

右键pdf文件没有打印

问题描述 右键点pdf文件,弹出的菜单找不到打印选项。网上找了很多办法,然并卵啊。还是得靠自己慢慢摸索。 原因分析 新安装的win11系统,pdf文件默认可以用windows自带的edge浏览器打开。但是edge浏览器没有能力提供右键打印功能。 解决办法…

(一)ESP32基于MicroPython平台——环境搭建

一. 获取固件 我们要使用MicroPython平台进行ESP32程序的编写,您需要做的第一件事是下载最新的 MicroPython 固件.bin 文件以加载到您的 ESP32 设备上。您可以从 :MicroPython固件链接下载它 。从这里,您有 3 个主要选择: 稳定的…

STM32与RS485

单片机应用实践篇之RS485通信及MODBUS通信协议——MODBUS通信协议简介_哔哩哔哩_bilibili RS485基本认识 1:RS485用于工业控制,与我们使用的USART不同,无法直接与单片机的RXD和TXD直接相连,需要使用转化芯片,将TTL电平…

Halcon——C#中在HWindow上显示字符串遇见的问题及解决方案

Halcon——C#中在HWindow上显示字符串遇见的问题及解决方案 前言一、HWindow上显示字符串的两种方式1. DispText函数2. WriteString函数 二、DispText函数与WriteString函数的区别三、遇见的问题及解决方案“HALCON error #5123: Wrong window type in operator disp_text”“H…

带你【玩转Linux命令】➽ cat chattr 每天2个day01

带你【玩转Linux命令】➽ cat & chattr 每天2个day01 🔻 一、文件管理命令1.1 cat-打印输出文件内容1.2 chattr-改变文件属性 🔻 总结—温故知新 👈【上一篇】 💖The Begin💖 点点关注,收藏不迷路&am…

驱动程序设计 驱动程序函数、驱动控制LED闪烁 7.7

驱动函数 .read() .write() ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);驱动程序 /** 文件名称:mod.c* 创 建 者: memories* 创建日期:2023…

GPU调研之TensorFlow Benchmarks测试GPU

目录 1. 查看服linux服务器信息 2. Linux系统安装pip详细步骤 3. Centos安装python3 4. 安装TensorFlow 5. TensorFlow测试结果解读 6. 参考文档 gpu的占用率为99%,是一种比较正常的使用状态。 gpu是图形处理器的简称,又称显示核心、视觉处理器、…

Java 生成图片验证码

图片验证码使用场景 登录注册&#xff1a;可以区分机器和人类的一种手段&#xff0c;其最大的作用是为了防止机器人程序暴力登录或攻击短信发送&#xff1a;可以有效避免客户网站或APP遭到恶意攻击、预防资金损失 实现方式 1.添加Maven依赖 <dependency><groupId&g…

智能制造与低代码开发:数智时代的强力合击!

说在前面 在当今数智时代的浪潮中&#xff0c;智能制造正在成为制造业的发展焦点。随着科技的不断进步和创新&#xff0c;智能制造为企业带来了全新的发展机遇和挑战。那么&#xff0c;数智时代下的制造业到底是怎样的一个发展盛况&#xff1f;智能制造的新 趋势又是如何展现的…

华为云Astro低代码平台关键能力技术浅析

1 背景介绍 低代码开发基于可视化开发的概念&#xff0c;结合了云原生和多终端体验技术&#xff0c;它可以在大多数业务场景中&#xff0c;帮助企业显著的提升效率。同时为专业开发者提供了一种全新的高生产力开发方式&#xff0c;让不懂代码的人通过“拖拉拽”开发组件来完成…

823. 排列

链接&#xff1a; 链接 题目&#xff1a; 给定一个整数 nn&#xff0c;将数字 1∼n1∼n 排成一排&#xff0c;将会有很多种排列方法。 现在&#xff0c;请你按照字典序将所有的排列方法输出。 输入格式 共一行&#xff0c;包含一个整数 nn。 输出格式 按字典序输出所有排列方案…