计算机网络八股文(四)

news2024/11/13 12:41:59

目录

61.客户端调用close()后的断开流程是怎样的?

62.没有accept可以建立TCP连接吗?

63.没有listen可以建立TCP连接吗?

64.什么是TCP半连接队列(SYN队列)和全连接队列(accept队列)?

65.TCP是怎样实现可靠传输的?

66.说说TCP的重传机制?

67.滑动窗口的大小由哪一方决定的?

68.接收窗口和发送窗口大小是相等的吗?

69.什么是流量控制?

70.SYN报文什么时候被丢弃?

71.客户端拔掉网线后,原本的TCP连接还存在吗?

72.HTTP-Keepalive和TCP Keepalive是一个东西吗?

73.TCP协议的缺陷?

74.服务端没有listen,客户端发起连接请求,会发生什么?

75.TCP四次挥手,可以变成三次挥手吗?

76.TCP序列号和确认号是如何变化的?

77.断网了还能ping通127.0.0.1(回环地址)吗?

78.127.0.0.1和localhost以及0.0.0.0有区别吗?


61.客户端调用close()后的断开流程是怎样的?

62.没有accept可以建立TCP连接吗?

        可以。

        accept系统调用并不参与三次握手过程,它的作用主要是将已经建立连接的socket取出来,然后对该socket进行读写操作。

63.没有listen可以建立TCP连接吗?

        可以。

        客户端可以进行TCP自连接(自己连接自己),也可以两个客户端同时向对方请求连接(TCP需同时打开)。这两种情况没有服务端参与,就不需要listen。

64.什么是TCP半连接队列(SYN队列)和全连接队列(accept队列)?

        服务端收到客户端的SYN请求后,内核会将该连接放在半连接队列中,然后发送SYN-ACK报文给客户端,客户端回复ACK报文给服务端,服务端收到ACK后,会将该连接从半连接队列中移除,然后创建一个新的完全连接,并添加到accept队列中,进程调用accept函数时就会取出该连接。

        半连接和全连接队列都有大小限制,如果超过限制,内核就会丢弃连接或者返回RST报文。

65.TCP是怎样实现可靠传输的?

        TCP通过序列号、确认应答、超时重传、窗口控制等机制实现可靠传输。

66.说说TCP的重传机制?

        1)超时重传:发送数据时会设定一个计数器,超过指定时间后没有收到对方的ACK应答,则会重发该数据。

        2)快速重传:当连续收到三个相同的ACK报文时,就会在定时器过期之前,重传丢失的报文段。

        3)SACK:在TCP首部字段的“选项”中添加SACK,它会将已收到的数据信息发送给发送方,发送方就可以只重传丢失的数据

        4)DSACK:用来告诉发送方,哪些数据被重复发送了。

67.滑动窗口的大小由哪一方决定的?

        接收方的Windows字段。

68.接收窗口和发送窗口大小是相等的吗?

        接收窗口大小约等于发送窗口大小。窗口大小并不是不变的。

69.什么是流量控制?

        发送方根据接收方的实际接收能力来控制发送的数据数量。

70.SYN报文什么时候被丢弃?

        TCP半连接队列满了、全连接队列满了。

71.客户端拔掉网线后,原本的TCP连接还存在吗?

        情况1:拔掉网线后有数据传输:

                如果服务端发送了数据,在服务端到达最大重传次数之前,客户端重新插回网线,那么原本的TCP连接正常存在;如果服务端达到了最大重传次数时,服务端就会断开连接。当客户端重新插回网线后,发送数据给服务端,服务端会回复RST报文,客户端收到后就会断开连接

        情况2:拔掉网线后没有数据传输:

                如果双方都没有开启TCP保活机制,如果客户端的网线一直没有重新插回,那么客户端和服务端的TCP连接将会一直保持存在;如果双方都开启了TCP保活机制,客户端一直不插回网线,TCP保活机制就会探测对方的TCP连接没有存活,就会断开连接而在TCP探测期间,客户端插回了网线,那么双方的TCP连接还能正常存在。

72.HTTP-Keepalive和TCP Keepalive是一个东西吗?

        不是。

        HTTP-Keepalive:也叫HTTP长连接,该功能由应用程序实现,可以使得同一个TCP连接来发送和接收多个HTTP请求/响应。

        TCP Keepalive:也叫TCP保活机制,该功能由内核实现,当客户端与服务端长时间没有数据交互时,内核会发送探测报文来检查对方是否在线,来决定是否关闭TCP连接。

73.TCP协议的缺陷?

        升级困难、建立连接的延迟、队头阻塞、网络迁移需要重新建立TCP连接。

74.服务端没有listen,客户端发起连接请求,会发生什么?

        服务端如果只bind了ip和端口,没有调用listen,客户端发起连接请求,服务端会回RST报文。

75.TCP四次挥手,可以变成三次挥手吗?

        当被动关闭方没有数据要发送,并且使用了TCP延迟确认机制,那么第二次挥手和第三次挥手可以合并传输,TCP可以变成三次挥手

        Tips:什么是TCP延迟确认机制?

                1)有响应数据要发送时,ACK会随着响应数据一起发送给对方

                2)没有响应数据要发送时,ACK将会延迟一段时间,以等待是否有响应数据一起发送

                3)如果在延迟等待发送ACK期间,对方的第二个数据报文到达了,这时会立刻发送ACK

76.TCP序列号和确认号是如何变化的?

        万能公式:

        序列号 = 上一次发送的序列号 + len(数据长度)。特殊情况,如果上一次发送的报文是 SYN 报文或者 FIN 报文,则改为 上一次发送的序列号 + 1

        确认号 = 上一次收到的报文中的序列号 + len(数据长度)。特殊情况,如果收到的是 SYN 报文或者 FIN 报文,则改为 上一次收到的报文中的序列号 + 1

77.断网了还能ping通127.0.0.1(回环地址)吗?

        可以。

        Tips:ping 127.0.0.1 和 ping 本机地址 没有区别

78.127.0.0.1和localhost以及0.0.0.0有区别吗?

        localhost不叫ip,它叫域名,默认解析为127.0.0.1;

        ping 0.0.0.0 是会失败的,因为在IPV4中它表示是无效的目标地址

        

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

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

相关文章

质量问题到底是谁的责任?

在竞争日益激烈的市场环境中,产品质量是企业生存与发展的基石。每当谈及生产企业的质量问题,我们往往不由自主地思考:在这一复杂而精细的生产链条中,究竟是谁该为质量问题负责? 必须明确一个无可争议的事实&#xff1…

MySQL多实例的配置

步骤1 环境准备 安装多实例数据库 1)安装好数据库mariadb yum -y install mariadb-server 2)创建mysql多实例数据文件目录 mkdir /data/mysql/3307/{data,etc,socket,log,bin,pid} -pv mkdir /data/mysql/3308/{data,etc,socket,log,bin,pid} –pv ch…

51单片机15(直流电机实验)

一、序言:我们知道在单片机当中,直流电机的控制也是非常多的,所以有必要了解一些这个电机相关的一些知识,以及如何使用单片机来控制这个电机,那么在没有学习PWM之前,我们先简单的使用GPIO这个管脚来控制电机…

【MySQL】Ubuntu22.04 安装 MySQL8 数据库详解

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》《MySQL》《Qt》 ❤️感谢大家点赞👍收藏⭐评论✍️ 一、安装目录 1.1 更新软件源 sheepAron:/root$ sudo apt update1.2 安装mysql_ser…

手持式气象监测设备

手持式气象监测设备以其小巧轻便、功能齐全的特点,逐渐成为了现代气象观测的便携新选择。 一、手持式气象监测设备的优势 手持式气象监测设备最大的优势在于其便携性。相比传统的气象监测站,手持式气象监测设备体积小巧、重量轻,用户可以轻松…

聊一聊 Node.js V22.5 有啥重要更新

大家好,今天我们来聊聊 Node.js 最新发布的 V22.5 版本。作为一名开发者,每次看到新的版本更新,总是让人期待不已。V22.5 中新增了许多强大且实用的功能,让我们的开发工作更加高效便捷。在这篇文章中,我们将重点讨论以…

压测实操--kafka-consumer压测方案

作者:九月 环境信息: 操作系统centos7.9,kafka版本为hdp集群中的2.0版本。 Consumer相关参数 使用Kafka自带的kafka-consumer-perf-test.sh脚本进行压测,该脚本参数为: thread:测试时的单机线程数&…

心率血氧传感器 - 从零开始认识各种传感器【第十三期】

1、什么是心率血氧传感器 心率传感器是一种用于测量人体心跳频率的设备或传感器。由于脉搏或者心率是生命体征的重要参数之一,所以心率测量是目前可穿戴产品必备的一个测量和健康监控功能。 而血氧传感器是一种用于测量人体血液中氧气饱和度的设备或传感器。血氧饱…

c# 端口监控 Helper 以及写一个端口监控工具

c# 端口监控 Helper 以及写一个端口监控工具 介绍核心代码:工具完整编码:1、编写界面2、打开定时控件的属性设置。3、编写定时控件的 Tick 事件结果(运行效果) 介绍 由于最近做上架比较多,会经常来确保服务器的服务&a…

分享从零开始学习网络设备配置--任务6.1 实现计算机的安全接入

项目描述 随着网络技术的发展和应用范围的不断扩大,网络已经成为人们日常生活中必不可少的一部分。园区网作为给终端用户提供网络接入和基础服务的应用环境,其存在的网络安全隐患不断显现出来,如非人为的或自然力造成的故障、事故&#xff1b…

第八讲:Sysmac Studio控制器设置

控制器设置 一、控制器设定-操作设置 1、启动模式(运行模式/编程模式) 控制器上电后,希望程序运行还是不运行。如果说希望程序运行,那么就选择运行模式。如果说希望上电后程序不运行就选择编程模式。 通常情况下选运行模式可能会比较多一些。 2、SD内存卡设置 当控制…

科研绘图系列:R语言和弦图 (Chord diagram)

介绍 和弦图(Chord Diagram)是一种用于展示多个实体之间相互关系的数据可视化方法。它通常用于表示网络或系统中不同节点(实体)之间的连接强度或流量。和弦图由一个圆形布局组成,每个节点在圆周上占据一个扇形区域,节点之间的连接通过圆内的线条(和弦)来表示。 特点:…

获取本地时间(Linux下,C语言)

一、函数 #include <time.h> time_t time(time_t *tloc);函数功能&#xff1a;获取本机时间&#xff08;以秒数存储&#xff0c;从1970年1月1日0:0:0开始到现在&#xff09;。返回值&#xff1a;获得的秒数&#xff0c;如果形参非空&#xff0c;返回值也可以通过传址调用…

判断字符串,数组方法

判断字符串方法 在JavaScript中&#xff0c;可以使用typeof操作符来判断一个变量是否为字符串。 function isString(value) {return typeof value string; } 判断数组 在JavaScript中&#xff0c;typeof操作符并不足以准确判断一个变量是否为数组&#xff0c;因为typeof会…

Soul App创始人张璐团队参与公益活动,帮助年轻人正视并管理情绪需求

最近,“脆皮年轻人”在社交平台上持续走红。该词指年轻人常因别人一些无意的动作而导致身体或心理创伤,反映出“Z世代”年轻人面临着心理健康挑战。在此背景下,Soul APP创始人张璐团队携手上海市精神卫生中心(宛平南路600号),共同发起了一场别开生面的青年心理健康公益活动,旨在…

JDBC操作MySQL数据

一准备、 1、首先在IDEA中导入导入包&#xff1a;mysql-connector-java-8.0.23 2、写初始化语句 &#xff08;1&#xff09;在目录下找到driver类 &#xff08;2&#xff09;在JDBCUtil函数中把驱动器的类路径改掉 ①打开driver类 ②按住类名 Driver用快捷键 CtrlAltshiftC …

学懂C语言(十八):C语言中数组及其应用

目录 一、数组的概念 二、数组的声明、初始化及访问 1、声明 2、初始化 3、访问数组元素 三、数组的应用 1. 存储和处理数据 2. 字符串处理 3. 多维数组 4. 函数参数 5、注意事项 一、数组的概念 C语言中的数组是一种数据结构&#xff0c;用于存储一…

开源邮箱套件介绍系列1:SOGo

项目网站&#xff1a;SOGo | Free Open Source Webmail 提示&#xff1a;如下内容大部分来自官方网站&#xff0c;通过AI智能翻译而来。 1. SOGo功能概述 SOGo提供了多种访问日历和消息数据的方式。您的用户可以使用网页浏览器、Microsoft Outlook、Mozilla Thunderbird、Ap…

连接hive库增加相关包

连接hive库增加相关包 例如&#xff1a;java.lang.NoClassDefFoundError: com/ctc/wstx/io/InputBootstrapper org.apache.hadoop.hive.common.auth.HiveAuthUtils java.lang.NoClassDefFoundError: org/codehaus/stax2/XMLInputFactory2

Windows系统上Git详细图文安装及使用教程

Git 是一种高效、分布式的版本控制系统&#xff0c;用于代码的跟踪、分支管理和协同工作&#xff0c;支持快速提交、合并和回滚操作。它是开发者工具箱中必不可少的工具之一&#xff0c;广泛应用于软件开发和其他需要版本控制的领域。 1. Git的安装 1.1 Git下载 可以通过以下…