【网络八股】TCP八股

网络八股

  • 请简述TCP/IP模型中每层的作用,典型协议和典型设备
  • 介绍一下三次握手的过程
  • 介绍一下四次挥手的过程
  • 必须三次握手吗,两次不行吗?为什么
  • ACK数据包消耗TCP的序号吗
  • 三次握手中可以携带应用层数据吗
  • 四次挥手时,可以携带应用层数据吗?
  • 主动断开连接方,为什么要等待2MSL时间?
  • 如果服务端不进行accept,那么最多可以完成多少个连接
  • 服务端最多可以完成多少个TCP连接?
  • 三次握手中,连接的序号一定从0开始吗?
  • 三次握手中,为什么要协商MSS的长度
  • 服务端出现大量close_wait状态,是什么原因,有什么危害,应该怎么办?
  • TCP维护的序号最大是多少,超出最大值后序号是多少?
  • 什么是确认应答机制?
  • 超时重传时间是固定的吗?怎么计算?
  • 什么是快重传?快重传存在效率问题吗?
  • 理解TCP的缓冲区
  • 理解滑动窗口中的窗口
  • 当收到靠后的ack确认之后,窗口可以向后滑动吗?

请简述TCP/IP模型中每层的作用,典型协议和典型设备

TCP/IP模型中,自顶向下分别为应用层,传输层,网络层,数据链路层、物理层。
应用层典型的协议有:HTTP,HTTPS,FTP协议,SMTP协议,没有典型设备,主要负责产生网络数据,网络数据来源于进程。
传输层典型的协议有:TCP,UDP协议,没有典型设备,主要负责端与端之间的传输,端就指的是端口
网络层典型的协议有:IP协议,ICMP协议,典型的设备是路由器,主要负责路由选择,为网络数据选择一条合适的路由。
数据链路层典型的协议有:以太网协议,典型的设备是交换机,主要负责相邻设备之间的传输。负责将数据从A节点传输到B节点。
物理层典型的协议有:以太网协议,典型的设备是集线器和中继器,主要负责将光电信号转换为二进制数据,或者将二进制数据转换为光电信号。

介绍一下三次握手的过程

要从三个角度来分析:
1.数据包名称
2.双方的状态变化
3.包序的变化

介绍一下四次挥手的过程

要从三个角度来分析:
1.数据包名称
2.双方的状态变化
3.包序的变化

必须三次握手吗,两次不行吗?为什么

不行,从两个角度说明:
1.两次握手之后,站到客户端的角度,认为连接已经建立,但是站到服务端的角度,SYN_RECV状态并没有转换为ESTBASLISH状态,认为连接没有建立
2.只能证明服务端的接收和发送能力是正常的,也能证明客户端的发送能力是正常的,但是不能证明客户端的接收能力也正常

ACK数据包消耗TCP的序号吗

1.纯的ACK数据包是不消耗TCP序号的
2.ACK+SYN,ACK+FIN这类没有包含应用层数据的数据包,消耗1个序号
3.携带应用层数据的数据包,会将应用层数据逐字节进行标记,其消耗的序号为应用层数据的大小

三次握手中可以携带应用层数据吗

可以,但是只能在第三次握手的时候携带数据
如果在第一次和第二次握手的时候携带了数据,如果有人恶意用大量数据访问服务端,就会导致服务端需要消耗大量资源去保存这些数据,是不合理的。
但是在第三次握手的时候,客户端已经认为连接建立了,那么发送数据也是合理的,但是日常在第三次握手的时候就发送数据的场景不多见

四次挥手时,可以携带应用层数据吗?

可以
两次挥手之后,被动断开连接方可以给主动断开连接方发生数据(这个过程发生在两次挥手之后,第三次挥手之前)

主动断开连接方,为什么要等待2MSL时间?

如果是服务端等待2MSL,那么意味着是服务端先断开连接的。
MSL:报文最大生成时间,报文在网络上存在的最长时间
在这里插入图片描述
总结:为了防止主动断开连接方发送的ACK丢失,被动断开连接方会重传FIN报文

详细阐述:主动断开连接方接收到被动断开连接方发送的FIN报文后,变为了TIME_WAIT状态,然后需要等待2MSL,在2MSL的时间内收到被动断开连接方发送的ACK报文后才能变为CLOSED状态,就是由于存在发送的ACK报文在网络中丢失,那么被动断开连接方会重传FIN报文,因此2MSL的时间=自己发送的ACK报文的MSL + 重传FIN报文的MSL。

如果服务端不进行accept,那么最多可以完成多少个连接

listen函数有两个参数

listen(int socket, int backlog)

socket表示的是侦听套接字,是socket函数的返回值,backlog是已完成连接队列的大小
因为服务端会将连接分为未完成连接队列(中放的是正在进行三次握手的连接),已完成连接队列(已经完成三次握手的连接),而未完成连接队列中已经完成的连接会被放入已完成连接队列中

不进行accept的话,最多可以完成backlog+1个连接

服务端最多可以完成多少个TCP连接?

1.服务端完成TCP连接的个数是取决于操作系统的上限
2.操作系统会规定一个值,open files来规定一个进程最多可以打开多少个文件描述符
3.我的机器中看到的是1024,意味着最多能够打开1024个文件描述符,意味着服务端最多可以完成的TCP连接数为1024-3-1,3是一个进程默认的标准输入,标准输出,标准错误,1表示侦听套接字
4.当然open files的值可以通过ulimit -n来进行修改

三次握手中,连接的序号一定从0开始吗?

不一定,初始序号是动态的
1.初始化序号可以看作是32位计数器,这样选择序号的目的在于防止被网络延迟的分组后续又被传输,从而导致错误的解释
2.三次握手中,客户端和服务端互相交换初始化序号,之后的数据包就按照约定的初始化序号向下使用。如果固定为0,则会导致网络攻击者很容易模拟TCP数据包,来攻击服务端。

三次握手中,为什么要协商MSS的长度

MSS:TCP最大传输报文长度,意思是TCP将数据递交给网络层的数据大小。
在三次握手时,双方就MSS大小进行协商,取其较小值。
协商的目的是:
1.如果没有进行协商,如果传递的数据包过大,递交给网络层之后,IP协议会进行分片,而IP协议是不可靠的,如果发生一个分片丢失,那么TCP会认为整个数据包丢失,会重传整个TCP数据包
2.如果TCP交给网络层的数据大小满足MSS,那么IP协议不会进行分片传输

服务端出现大量close_wait状态,是什么原因,有什么危害,应该怎么办?

close_wait状态只会出现在四次挥手的被动断开连接方,也就意味着服务端是被动断开连接方

只有当主动断开连接方发送给被动断开连接方FIN报文之后,被动断开连接方才会从estbalish状态转换到close_wait状态,而进一步转换到last_ack状态需要被动断开连接方调用close函数,进行关闭的操作。

如果服务端出现大量close_wait状态,说明服务端没有调用close函数,进一步的原因可能是:
1.close函数被阻塞
2.执行close函数的线程,在执行到close之前有非常耗时的操作
3.根据实际情况看还有其他的可能导致没有调用到close函数

会导致占用大量的服务端资源

TCP维护的序号最大是多少,超出最大值后序号是多少?

按照TCP包头中32位序号来看,维护的序号范围是0–>4294967295

当超出这个序号的最大范围后,就会发生“序号回绕”,也就是从最大值回到0开始继续向后走。

用无符号char类型来举例:
0-255的范围
如果当前序号在254,接下来有一个4字节的数据包,TCP维护的序号就是255->0->1->2,接下来的序号就是3.

什么是确认应答机制?

当发送方发送一个数据包,接收方需要进行接收确认,返回ack来确认收到了这个数据包
而确认的本质是在确认序号。而序号本质上就是数据,因为TCP对应用层的每个字节都进行了编号

超时重传时间是固定的吗?怎么计算?

超时重传时间(RTO)是不固定的,是随着报文往返时间(RTT)进行动态变化的。
简单的说:RTT时间小,说明网络情况好,则RTO变小,RTT时间长,说明网络情况查,则RTO变大

什么是快重传?快重传存在效率问题吗?

快重传是为了在没有触发超时重传的时候,就触发发送方传递了数据。
本质上是为了提高传输效率的

做法:当发送方连续收到三次同样的确认数据包,就会触发快重传,立即发送丢失的数据包。

是存在效率问题的:主要问题就是当序号为A的数据包已经后续的几个数据包都丢失之后,那么虽然对当前的数据包进行了快重传,但是后续丢失的数据包也需要再次等3次同样的数据包才能触发快重传,这样会导致效率较低。

解决办法 SACK,在TCP头部的40字节选项中,描述接收方收到了哪些数据包,那么在发送方来说,就会知道哪些数据包丢失了,就会触发快重传进行发送。

理解TCP的缓冲区

TCP的缓冲区是操作系统内核中的一块空间。
1.发送缓冲区和接收缓冲区都是环形队列
2.调用send函数,进程产生的数据会被放到发送缓冲区中,TCP会择机将缓冲区的数据发送;
3.调用recv函数,会从TCP的接收缓冲区中将数据拷贝到准备好的空间

理解滑动窗口中的窗口

窗口就是TCP允许暂时不需要收到ACK确认的报文

操作系统会将发送缓冲区分为:已经发送并且已经确认收到的区域,已经发送暂时不需要确认的区域,可以发送但未发送的区域,不能发送的区域

当收到靠后的ack确认之后,窗口可以向后滑动吗?

可以,因为当收到靠后的ack确认之后,意味着靠前的数据包对方是收到的,因此哪些数据包就不需要再保存了,窗口就可以向后滑动了

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

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

相关文章

crypto:丢失的MD5

题目 得到一个md5.py 运行一下,发现报错,修改一下 运行之后又报错 报错原因是算法之前编码 正确的代码为 import hashlib for i in range(32,127):for j in range(32,127):for k in range(32,127):mhashlib.md5()m.update((TASC chr(i) O3RJMV c…

【Java SE】Lambda表达式

目录 ♫什么是Lambda表达式 ♫Lambda表达式的语法 ♫函数式接口 ♫Lambda表达式的使用 ♫变量捕获 ♫ Lambda表达式在集合中的使用 ♪Collection的foreach(): ♪List的sort(): ♪Map的foreach() ♫什么是Lambda表达式 Lambda 表达式是 Java SE 8中一个…

SpringMVC 学习(二)Hello SpringMVC

3. Hello SpringMVC (1) 新建 maven 模块 springmvc-02-hellomvc (2) 确认依赖的导入 (3) 配置 web.xml <!--web/WEB-INF/web.xml--> <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee…

通用CI/CD软件平台TeamCity推出代理终端功能,谁能从中获益?

JetBrains官方在TeamCity中推出代理终端&#xff1a;这项新功能专门用于帮助用户轻松查看代理上的系统日志、检查已安装的软件&#xff0c;以及直接从 TeamCity 的 UI 调试特定代理问题。 TeamCity是一个通用的 CI/CD 软件平台&#xff0c;可以实现灵活的工作流、协作和开发做…

抖音短视频seo矩阵系统源代码开发系统架构及功能解析

短视频seo源码&#xff0c;短视频seo矩阵系统底层框架上支持了从ai视频混剪&#xff0c;视频批量原创产出&#xff0c;云存储批量视频制作&#xff0c;账号矩阵&#xff0c;视频一键分发&#xff0c;站内实现关键词、短视频批量搜索排名&#xff0c;数据统计分类多功能细节深度…

深入MySQL数据库进阶实战:性能优化、高可用性与安全性

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 MySQL是世界上最流行的开…

ruoyi-nbcio增加websocket与测试页面

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 为了后面流程发起等消息推送&#xff0c;所以需要集成websocket。 1、后端增加websoket支持 首先在framework模块里的pom.xml增加websocket <dependency…

Element UI搭建首页导航和左侧菜单以及Mock.js和(组件通信)总线的运用

目录 前言 一、Mock.js简介及使用 1.Mock.js简介 1.1.什么是Mock.js 1.2.Mock.js的两大特性 1.3.Mock.js使用的优势 1.4.Mock.js的基本用法 1.5.Mock.js与前端框架的集成 2.Mock.js的使用 2.1安装Mock.js 2.2.引入mockjs 2.3.mockjs使用 2.3.1.定义测试数据文件 2…

如何优化网站排名(百度SEO指南与优化布局方法)

百度SEO指南介绍&#xff1a;蘑菇号-www.mooogu.cn 首先&#xff0c;为了提高网站的搜索引擎优化排名&#xff0c;需要遵循百度SEO指南的规则和标准。这包括使用符合规范的网站结构、页面内容的质量和与目标用户相关的关键词。避免使用非法技术和黑帽SEO的方法。 增加百度SEO…

Python——— 异常机制

&#xff08;一&#xff09;异常 工作中&#xff0c;程序遇到的情况不可能完美。比如&#xff1a;程序要打开某个文件&#xff0c;这个文件可能不存在或者文件格式不对&#xff1b;程序在运行着&#xff0c;但是内存或硬盘可能满了等等。 软件程序在运行过程中&#xff0c;非常…

【计算机网络】网络层和数据链路层

文章目录 IP协议网段划分分类划分法CIDR 方案路由NAT网络地址转换技术IP报文的另外三个参数mac帧ARP协议交换机ICMP代理服务器 IP协议 TCP有将数据 可靠、高效 发给对方的 策略&#xff0c;而IP具有发送的能力&#xff0c;即将数据从A主机送到B主机的 能力 。 用户要的是100%…

程序员不得不知道的排序算法-上

目录 前言 1.冒泡排序 2.选择排序 3.插入排序 4.希尔排序 5.快速排序 6.归并排序 总结 前言 今天给大家讲一下常用的排序算法 1.冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它重复地从待排序的元素中比较相邻的两个元素&a…

vue event bus 事件总线

vue event bus 事件总线 创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day04\准备代码\08-事件总线-扩展 vue --version vue crea…

【C语言】文件操作(一)

前言 本篇博客讲解对文件的操作&#xff0c;包括打开&#xff0c;关闭操作。在下篇博客将讲解文件的读写。 文章目录 一、 什么是文件&#xff1f;1.1 用于存储数据1.2 文件类型1.3 文件名1.4 二进制文件和文本文件 二、文件的打开和关闭2.1 流和标准流2.2 文件指针2.3文件的打…

你的周末和你一起失去了价值(打工人篇)

花儿在绽放盛开之前&#xff0c;会在无人的清晨吸收甘露&#xff0c;然后赶上第一趟的朝阳&#xff0c;才换来路人赞许 一言指南北 选择你的职业&#xff0c;确认你的方向&#xff0c;没有方向&#xff0c;就无法体验时间感 如果你是打工人&#xff0c;那么请接着往下看 如果是…

React项目中如何实现一个简单的锚点目录定位

小册 这是我整理的学习资料&#xff0c;非常系统和完善&#xff0c;欢迎一起学习 现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 linwu的算法笔记&#x1f4d2; 前言 锚点目录定位功能在长页面和文档类网站中非常常见,它可以让用户快速定位到页面中的某个…

GLTF编辑器也可以转换GLB模型

1、GLB模型介绍 GLB&#xff08;GLTF Binary&#xff09;是一种用于表示三维模型和场景的文件格式。GLTF是"GL Transmission Format"的缩写&#xff0c;是一种开放的、跨平台的标准&#xff0c;旨在在各种3D图形应用程序和引擎之间进行交换和共享。 GLB文件是GLTF文件…

Java之线程的详细解析一

实现多线程 简单了解多线程【理解】 是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程&#xff0c;提升性能。 并发和并行【理解】 并行&#xff1a;在同一时刻&#xff0c;有多个指令在多个CPU上同时执行…

【excel密码】如何给excel设置带有密码的只读模式

大家提起只读模式&#xff0c;应该都不会联想到密码&#xff0c;想起excel密码可能会想到打开密码或者工作表保护。今天给大家分享如何设置带有密码的只读模式。 打开excel文件&#xff0c;将文件进行【另存为】设置&#xff0c;然后停留在保存路径的界面中&#xff0c;我们点…

SourceTree 账号或者密码输入错误 Incorrect username or password ( access token )解决办法

修改来修改去一直解决不了&#xff0c;那就试试查看一下源文件记录的账号密码吧&#xff01;