当前位置: 首页 > news >正文

【TCP】高频面试题

图片

前言

在IT行业的求职过程中,传输控制协议(TCP)作为网络通信的核心协议之一,其相关面试题常常出现在各大公司面试中。TCP的稳定性和可靠性是支撑互联网数据传输的基石,因此,对TCP有深入理解不仅能够帮助求职者获得面试官的青睐,更是每一个网络工程师必备的技能。本文将列出27个高频出现的TCP面试题及其答案,帮助求职者在面试前做好准备。

问题1:什么是TCP协议

TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义,为互联网中的数据通信提供了稳定的传输机制。TCP在不可靠的IP层之上实现了数据传输的可靠性,通过使用确认、重传和错误检测等技术来确保数据的正确到达。

TCP的特点:

  1. 面向连接:TCP在数据传输之前需要建立连接,通信结束后会断开连接。

  2. 可靠传输:TCP确保数据包正确无误地从源点传送到目的地,若数据包在传输过程中丢失或出错,会被重新发送。

  3. 全双工通信:TCP允许数据在两个方向上同时传输,提高了通信效率。

  4. 流量控制:TCP通过滑动窗口机制进行流量控制,避免快速发送方压倒慢速接收方。

  5. 拥塞控制:TCP实施拥塞控制策略来避免网络拥塞,如慢启动、拥塞避免、快速重传和快速恢复等。

  6. 有序传输:TCP保证数据按发送时的顺序到达接收端。

  7. 可变大小的滑动窗口:TCP使用可变大小的滑动窗口来动态调整数据传输速率。

问题2:TCP如何保证数据的可靠性

TCP通过序列号、确认应答、重传机制、流量控制和拥塞控制等机制来保证数据的可靠传输。

问题3:为什么说TCP是一种面向字节流的协议

TCP将数据视为一连串无边界的字节流,而不是一系列的消息,这意味着消息的边界不会在TCP头部中被保留。

问题4:TCP如何实现全双工通信

答案:TCP通过两个独立的缓冲区和两套不同的序列号来实现全双工通信,每个方向的数据传输互不干扰。

问题5:什么是TCP的头部结构

TCP头部至少包含源端口号、目的端口号、序列号、确认号、数据偏移、标志位、窗口大小、校验和、紧急指针和选项字段。

问题6:什么是滑动窗口机制

滑动窗口是一种流量控制机制,它允许发送方根据接收方的接收能力动态调整发送速率。

问题7:TCP的窗口缩放因子是什么

窗口缩放因子用于扩展TCP窗口的大小,使得在高速网络环境下可以更有效地利用带宽。

图片

问题8:解释三次握手过程

三次握手是建立TCP连接的过程,包括SYN(同步序列编号)、SYN-ACK(同步和确认)、ACK(确认)三个步骤。

问题9:TCP为什么需要三次握手

TCP需要三次握手的主要原因是防止旧的重复连接引起连接混乱问题,以及同步初始化序列号。在网络状况比较复杂或者网络状况比较差的情况下,发送方可能会连续发送多次建立连接的请求。如果TCP握手的次数只有两次,那么接收方只能选择接受请求或者拒绝接受请求,但它并不清楚这次的请求是正常的请求,还是由于网络环境问题而导致的过期请求,如果是过期请求的话就会造成错误的连接。三次握手可以实现TCP初始化序列号的确认工作,TCP需要初始化一个序列号来保证消息的顺序。如果是两次握手则不能确认序列号是否正常,如果是四次握手的话会浪费系统的资源,因此TCP三次握手是最优的解决方案。

图片

问题10:四次挥手是指什么

四次挥手是TCP关闭连接的过程,包括FIN(结束)、ACK(确认)、FIN(结束)、ACK(确认)四个步骤。

问题11:为什么挥手需要四次

TCP的四次挥手是为了确保数据流的正确和可靠地关闭。这需要双方都明确地确认关闭请求,并确保所有的数据包都已接收或处理。通过四次握手,每一方都可以确认对方已经完成了数据传输和接收的准备工作。

问题12:为什么TIME_WAIT等待的时间是2MSL

TIME_WAIT状态是TCP四次挥手中的一个重要状态,其持续时间通常是2MSL(最大段生存期)。这是为了确保在网络中的所有数据包都已过期并被丢弃,防止出现旧的数据包在网络中循环并导致连接错误关闭的问题。TIME_WAIT状态也提供了一个机会让发送方等待一段时间,以确保接收方已经收到了关闭连接的请求。

问题13:什么是TIME_WAIT状态

TIME_WAIT状态是TCP连接关闭过程中的一个状态,它确保最后一个数据包被对方成功接收,同时允许新的连接使用相同的端口号。

问题14:TCP中的拥塞控制是如何工作的

TCP的拥塞控制主要包括慢启动、拥塞避免、快速重传和快速恢复算法,目的是防止网络拥塞导致丢包。

问题15:解释TCP的拥塞窗口和接收窗口的区别

拥塞窗口是发送方用来限制发送速率以避免网络拥塞的窗口,而接收窗口是接收方根据自身接收能力设置的窗口,用来告知发送方自己能够接收的数据量。

问题16:TCP的超时重传机制是如何工作的

当TCP发送数据后,如果在规定时间内没有收到对方的确认应答,则会认为数据丢失并重新发送该数据包。

问题17:TCP的延迟确认是如何工作的

延迟确认是为了提高网络效率,接收方在收到数据后不立即发送确认应答,而是等待一段时间后再发送。

问题18:TCP的最大报文段长度(MSS)是什么意思

最大报文段长度(MSS)是指在不分段的情况下,TCP层能够接受的最大数据包大小。

问题19:TCP如何处理丢包的情况

TCP通过序列号和确认应答来检测丢包,一旦发现丢包,就会启动重传机制。

问题20:TCP的紧急数据是什么

TCP的紧急数据是指需要立即传输的数据,它由URG标志位标识,并使用紧急指针字段指示紧急数据的结束位置。

问题21:什么是Nagle算法

Nagle算法是一种减少网络中小规模数据包数量的算法,它尝试将多个小的数据包合并成一个大的数据包进行发送。

问题22:TCP和UDP的主要区别是什么

TCP是面向连接的、可靠的协议,而UDP是无连接的、不可靠的协议。TCP提供数据的顺序传输和错误校验,UDP则更加注重速度和效率。

问题23:TCP和HTTP之间有什么关系

HTTP是一种应用层协议,它通常运行在TCP之上,利用TCP提供的可靠数据传输服务来进行网页内容的传输。

问题24:什么场景下服务端会主动断开连接

第一个场景:HTTP 没有使用长连接 (Keep-Alive)机制 客户端或服务端禁用了 HTTP Keep-Alive;

第二个场景:HTTP 长连接超时 假设设置了 HTTP 长连接的超时时间是 60 秒,nginx 就会启动一个「定时器」 如果客户端在完后一个 HTTP 请求后,在 60 秒内都没有再发起新的请求,定时器的时间一到,nginx 就会触发回调函数来关闭该连接,那么此时服务端上就会出现 TIME_WAIT 状态的连接。

第三个场景:HTTP 长连接的请求数量达到上限。

问题25:已经建立了连接,客户端突然出现故障了怎么办

服务端的 TCP 连接将一直处于 ESTABLISH 状态,占用着系统资源。为了避免这种情况,TCP 有一个保活机制。

定义一个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP 保活机制会开始作用,每隔一个时间间隔,发送一个探测报文,该探测报文包含的数据非常少,如果连续几个探测报文都没有得到响应,则认为当前的 TCP 连接已经死亡,系统内核将错误信息通知给上层应用程序。

问题26:已经建立了连接,服务端的进程崩溃会发生什么

TCP 的连接信息是由内核维护的,所以当服务端的进程崩溃后,内核需要回收该进程的所有 TCP 连接资源,于是内核会发送第一次挥手 FIN 报文,后续的挥手过程也都是在内核完成,并不需要进程的参与,所以即使服务端的进程退出了,还是能与客户端完成 TCP 四次挥手的过程。

问题27:什么是SYN攻击?如何防御

SYN攻击是一种利用TCP协议缺陷进行的攻击,它通过发送大量的半连接请求来耗尽CPU和内存资源。SYN攻击属于DDoS攻击的一种,攻击者通常利用中病毒、木马的机器组织流量进行攻击。为了防御SYN攻击,可以采用多种方法,包括但不限于以下几种:

  1. 过滤网关防护:主要包括超时设置、SYN网关和SYN代理三种方法。其中,网关超时参数设置不宜过小也不宜过大,需根据网络应用环境来设置此参数。SYN网关使SYN网关连接数目增加,能够有效减轻攻击。SYN代理实际上代替了服务器去处理SYN攻击,此时要求过滤网关自身具有很强的防范SYN攻击能力。

  2. 加固TCP/IP协议栈:主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等。但tcp/ip协议栈的调整可能会引起某些功能的受限,管理员应该在进行充分了解和测试的前提下进行此项工作。

  3. 使用高防服务器:这是一种有效的防御手段,高防服务器或者接入高防产品可以进行防御。通常这些高防都有相对应的硬件防火墙可以有效抵抗市面上的SYN攻击,保障业务在遭遇攻击的同时还能有效的运行,不让客户遭受损失。

  4. 减少系统SYN等待时间:这只能缓解攻击。

  5. 对攻击源地址进行过滤拉黑:但是对于伪造精细的报文无效。

  6. 修改系统SYN-back-log上限:这只能缓解攻击。

  7. 将系统SYN的重发次数降低:这可以缓解攻击。

  8. 如果是linux系统,可以升级内核并设置SYN-cookies:这极大缓解攻击。

TCP 协议的例子

TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。在Java中,可以使用java.net包中的Socket和ServerSocket类来实现TCP协议的客户端和服务端通信。 以下是一个简单的Java TCP客户端和服务端的示例代码:

服务端代码:

import java.io.*;
import java.net.*;public class TCPServer {public static void main(String[] args) throws IOException {// 创建一个ServerSocket对象,监听8080端口ServerSocket serverSocket = new ServerSocket(8080);System.out.println("服务器启动,等待客户端连接...");// 调用accept()方法等待客户端连接Socket socket = serverSocket.accept();System.out.println("客户端已连接,IP地址:" + socket.getInetAddress().getHostAddress());// 获取输入流,读取客户端发送的数据BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));String msg = in.readLine();System.out.println("收到客户端消息:" + msg);// 获取输出流,向客户端发送数据PrintWriter out = new PrintWriter(socket.getOutputStream(), true);out.println("你好,客户端!");// 关闭资源out.close();in.close();socket.close();serverSocket.close();}
}

客户端代码:

import java.io.*;
import java.net.*;public class TCPClient {public static void main(String[] args) throws IOException {// 创建一个Socket对象,连接到服务器Socket socket = new Socket("localhost", 8080);System.out.println("客户端已启动,连接到服务器...");// 获取输出流,向服务器发送数据PrintWriter out = new PrintWriter(socket.getOutputStream(), true);out.println("你好,服务器!");// 获取输入流,读取服务器发送的数据BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));String msg = in.readLine();System.out.println("收到服务器消息:" + msg);// 关闭资源out.close();in.close();socket.close();}
}

结语

掌握TCP协议的相关知识对于网络工程师和IT从业者至关重要。本文列出的27个高频面试题旨在帮助求职者更好地准备面试,深入理解TCP协议的工作原理和关键特性。通过对这些问题的学习和思考,求职者不仅能够在面试中展现出自己的专业水平,还能够在实际工作中更加游刃有余地处理网络通信问题。

图片

相关文章:

【TCP】高频面试题

前言 在IT行业的求职过程中,传输控制协议(TCP)作为网络通信的核心协议之一,其相关面试题常常出现在各大公司面试中。TCP的稳定性和可靠性是支撑互联网数据传输的基石,因此,对TCP有深入理解不仅能够帮助求职…...

Python||五城P.M.2.5数据分析与可视化_使用华夫图分析各个城市的情况(中)

目录 1.上海市的空气质量 2.成都市的空气质量 【沈阳市空气质量情况详见下期】 五城P.M.2.5数据分析与可视化——北京市、上海市、广州市、沈阳市、成都市,使用华夫图和柱状图分析各个城市的情况 1.上海市的空气质量 import numpy as np import pandas as pd impor…...

使用PDFBox实现pdf转其他图片格式

最近在做一个小项目&#xff0c;项目中有一个功能要把pdf格式的图片转换为其它格式&#xff0c;接下来看看用pdfbox来如何实现吧。 首先导入pdfbox相关依赖&#xff1a; <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</a…...

【技术预研】StarRocks官方文档浅析(4)

背景说明 基于starRocks官方文档&#xff0c;对其内容进行一定解析&#xff0c;方便大家理解和使用。 若无特殊标注&#xff0c;startRocks版本是3.2。 下面的章节和官方文档保持一致。 参考文档 产品简介 | StarRocks StarRocks StarRocks 是一款高性能分析型数据仓库&…...

时序数据库 Tdengine 执行命令能够查看执行的sql语句

curl是 访问6041端口&#xff0c;在windows系统里没有linux里的curl命令&#xff0c;需要用别的工具实现。我在cmd里是访问6030端口 第一步 在安装是时序数据库的服务器上也就是数据库服务端 进入命令窗口 执行 taos 第二步 执行 show queries\G;...

LeetCode、746. 使用最小花费爬楼梯【简单,动态规划 线性DP】

文章目录 前言LeetCode、746. 使用最小花费爬楼梯【简单&#xff0c;动态规划 线性DP】题目与分类思路 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。…...

[香橙派开发系列]使用蓝牙和手机进行信息的交换

文章目录 前言一、HC05蓝牙模块1.HC05概述2.HC05的连接图3.进入HC05的命令模式4.常用的AT指令4.1 检查AT是否上线4.2 重启模块4.3 获取软件版本号4.4 恢复默认状态4.5 获取蓝牙的名称4.6 设置蓝牙模块的波特率4.7 查询蓝牙的连接模式4.8 查询模块角色 5.连接电脑6.通过HC05发送…...

Jmeter 01 -概述线程组

1、Jmeter:概述 1.1 是什么&#xff1f; Jmeter是Apache公司使用Java 开发的一款测试工具 1.2 为什么&#xff1f; 高效、功能强大 模拟一些高并发或多次循环等特殊场景 1.3 怎么用&#xff1f; 下载安装 1、下载jmeter&#xff0c;解压缩2、安装Java环境&#xff08;jmet…...

大数据Zookeeper--案例

文章目录 服务器动态上下线监听案例需求需求分析具体实现测试 Zookeeper分布式锁案例原生Zookeeper实现分布式锁Curator框架实现分布式锁 Zookeeper面试重点选举机制生产集群安装多少zk合适zk常用命令 服务器动态上下线监听案例 需求 某分布式系统中&#xff0c;主节点可以有…...

VS编译器对scanf函数不安全报错的解决办法(详细步骤)

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…...

vscode连接ssh报错

关于vscode更新版本至1.86后&#xff0c;导致无法连接服务器问题的记录 原因&#xff1a;vscode1.86更新了对glibc的要求&#xff0c;需要最低2.28版本&#xff0c;导致各种旧版本的linux发行版&#xff08;比如最常见的centos 7&#xff09;都无法用remote-ssh来连接了&#…...

C++ 哈希+unordered_map+unordered_set+位图+布隆过滤器(深度剖析)

文章目录 1. 前言2. unordered 系列关联式容器2.1 unordered_map2.1.1 unordered_map 的概念2.1.2 unordered_map 的使用 2.2 unordered_set2.2.1 unordered_set 的概念2.2.2 unordered_set 的使用 3. 底层结构3.1 哈希的概念3.2 哈希冲突3.3 哈希函数3.4 哈希冲突的解决3.4.1 …...

深入理解Netty及核心组件使用—下

目录 ChannelHandler ChannelHandler 接口 ChannelInboundHandler 接口 ChannelHandler 的适配器 Handler 的共享和并发安全性 资源管理和 SimpleChannelInboundHandler Bootstrap ChannelInitializer ChannelOption ChannelHandler ChannelHandler 接口 从开发人员的…...

vscode 突然连接不上服务器了(2024年版本 自动更新从1.85-1.86)

vscode日志 ll192.168.103.5s password:]0;C:\WINDOWS\System32\cmd.exe [17:09:16.886] Got some output, clearing connection timeout [17:09:16.887] Showing password prompt [17:09:19.688] Got password response [17:09:19.688] "install" wrote data to te…...

element-ui link 组件源码分享

link 组件的 api 涉及的内容不是很多&#xff0c;源码部分的内容也相对较简单&#xff0c;下面从以下这三个方面来讲解&#xff1a; 一、组件结构 1.1 组件结构如下图&#xff1a; 二、组件属性 2.1 组件主要有 type、underline、disabled、href、icon 这些属性&#xff0c;…...

序列化和反序列化、pytest-DDT数据驱动

序列化 序列化就是将对象转化成文件 python转成json import jsondata {"数字": [1, 1.1, -1],"字符串": ["aaaa", bbbb],"布尔值": [True, False],"空值": None,"列表": [[1, 2, 3], [4, 5, 6], [7, 8, 9]],&…...

Spring Boot整合MyBatis Plus实现基本CRUD与高级功能

文章目录 1. 引言2. 项目搭建与依赖配置2.1 添加MyBatis Plus依赖2.2 配置数据源与MyBatis Plus 3. 实现基本CRUD功能3.1 创建实体类3.2 创建Mapper接口3.3 实现Service层3.4 控制器实现 4. 高级功能实现4.1 自动填充功能4.2 乐观锁功能4.3 逻辑删除功能 5. 拓展&#xff1a;My…...

CSS 闪电按钮效果

<template><view class="const"><div class="voltage-button"><button>闪电按钮</button><svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox=&q…...

【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案

【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案 大家好 我是寸铁&#x1f44a; 总结了一篇Error: only one service expected goctl一键转换生成rpc服务错误解决方案的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 问题背景 今天寸铁在…...

从头开始构建和训练 Transformer(上)

1、导 读 2017 年&#xff0c;Google 研究团队发表了一篇名为《Attention Is All You Need》的论文&#xff0c;提出了 Transformer 架构&#xff0c;是机器学习&#xff0c;特别是深度学习和自然语言处理领域的范式转变。 Transformer 具有并行处理功能&#xff0c;可以实现…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

python基础语法Ⅰ

python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器&#xff0c;来进行一些算术…...

PLC入门【4】基本指令2(SET RST)

04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C)&#xff0c;从 文件 - 主画面&#xff0c;“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...