【网络八股】TCP八股

news2024/11/29 4:31:04

网络八股

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

请简述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如何提高传输效率

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

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

相关文章

时序数据库 TimescaleDB 安装与使用

TimescaleDB 是一个时间序列数据库,建立在 PostgreSQL 之上。然而,不仅如此,它还是时间序列的关系数据库。使用 TimescaleDB 的开发人员将受益于专门构建的时间序列数据库以及经典的关系数据库 (PostgreSQL),所有这些都具有完整的…

收款码的费率都是多少

不管是微信还是支付宝,商户最低的收款手续费率可以达到0.2%费率。一般我们普通商户的收款费率一般在0.6左右,当然也有使用0.3的,也就是1万元的费率是30-60块钱,对于一些流水比较大的商家来说,确实很有必要把这个手续费…

【Java 基础篇】Java字节字符流详解:轻松读写文本与二进制数据

在Java编程中,对文件和数据的读写操作是非常常见的任务。为了满足不同需求,Java提供了多种流类来处理输入和输出。本篇博客将详细介绍Java中的字节流和字符流,以及它们的使用方法,帮助初学者更好地理解和运用这些流来处理文件和数…

三个月备考浙大MEM项目笔试的主要提分机会

随着各个专业陆续公布今年的硕士招生计划,2024年在职备考研究生也到了最后的倒计时阶段,距离MEM联考三个月时间开始备考,有哪些关键的提分机会可以关注?专注联考的杭州达立易考教育认为三个方面需要特别关注。 第一个提分机会来自…

Jenkins学习笔记4

配置构建流程: Jenkins任务创建: 1)创建新任务: 把这个Accept first connection改成 No Validation。问题得到解决。 说明下,要确认下主分支的名称是master还是main。 构建触发器这块暂时没有需要配置的。 传输文件…

notepad++编辑多个位置

在notepad设置多次点击不同的位置,然后同时操作这多个位置的方法: 1、选择编辑,首选项: 2、选择多点编辑:

如何使用Java爬取指定链接的网页内容

在当今信息时代,互联网上的数据量庞大且不断增长。为了获取特定网页的内容,爬虫技术成为了一种非常有用的工具。本文将介绍如何使用Java编程语言来实现爬取指定链接的网页内容。 首先,我们需要准备好Java开发环境。确保你已经安装了Java Deve…

全新运营策略+针对性落地方案,尖庄·荣光成都战略高地市场打造范式“曝光”

执笔 | 姜 姜 编辑 | 萧 萧 9月19日,“百年尖庄 荣光征程”尖庄荣光上市会成都站在成都举行,现场超600位成都各区县优质经销商、终端商共同举杯尖庄荣光,品味香飘百年的匠心味道。 长江酒道注意到,此次发布会是川渝地区首场…

《Web安全基础》08. 漏洞发现

web 1:漏洞发现1.1:操作系统1.2:WEB 应用1.3:APP 应用1.4:API 接口 & 系统端口1.4.1:API 关键字1.4.2:服务&端口1.4.3:相关资源 2:总结 本系列侧重方法论&#x…

Redis 面试常见问答

本文出自:https://thinkinjava.cn 作者:莫那 鲁道 1. 什么是缓存雪崩?怎么解决? 一般而言,我们会利用缓存来缓冲对数据库的冲击,假如缓存无法正常工作,所有的请求便会直接发送至数据库&#xf…

Rust踩雷笔记(7)——两个链表题例子初识裸指针

目录 leetcode 234leetcode 19 leetcode 234 题目在这https://leetcode.cn/problems/palindrome-linked-list/,leetcode 234的回文链表,思路很简单,就是fast和slow两个指针,fast一次移动两个、slow一次一个,最后slow指…

2023年华数杯数学建模A题隔热材料的结构优化控制研究解题全过程文档及程序

2023年华数杯全国大学生数学建模 A题 隔热材料的结构优化控制研究 原题再现: 新型隔热材料 A 具有优良的隔热特性,在航天、军工、石化、建筑、交通等高科技领域中有着广泛的应用。   目前,由单根隔热材料 A 纤维编织成的织物,…

这可是网络工程师零基础学习路线最完整,最详细的版本,没有之一

文章篇幅较长,耐心看完你一定有所收获。 相比IT类的其它岗位,网络工程师的学习方向是比较明亮的。想要成为网络工程师,华为认证就是最好的学习方法。而网络工程师的从零开始学习就是从华为认证的初级开始学起,也就是HCIA&#xff…

【Linux基础】第28讲 Linux Vi编辑器

在Linux下一班使用Vi编辑器来编辑文件vi既可以查看文件也可以编辑文件而vim是vi的升级版本,具备更多的功能。vi如果目标文件不存在,会创建新的文件。但如果新文件没做编辑,退出后还会消失。 VI的三种模式介绍 三种模式(状态&…

rv1126-rv1109-NFS功能

//adb可以直接放,优先使用,nfs是另一种调试方法 adb push E:\111\RkLunch.sh /data//放进data文件夹 / 打开Network File Systems </

常见web漏洞原理整理

文章目录 一、SQL注入1.1SQL注入漏洞原理1.2 SQL注入的两个关键点1.3 与Mysql注入相关的知识点1.4 SQL注入的主要分类1.5 SQL注入的流程1.5.1 普通SQL注入1.5.2 盲注 1.6 SQL注入总结 二、文件上传2.1 文件上传漏洞原理2.2 客户端检测及绕过&#xff08;JS检测与绕过&#xff0…

虹科CiA演讲回顾 | CAN(FD)总线协议转换原理及其在汽车行业的应用

2023年9月14日&#xff0c;CiA中国技术日直播活动在线上举行&#xff0c;该活动致力于开展与CAN总线相关领域的技术工作&#xff0c;演讲者都是CAN领域的专家。虹科首席工程师陈皓受邀参与活动&#xff0c;并带来以“CAN和CAN FD总线协议转换”为主题的演讲。 本次演讲内容主要…

【完美世界】烧烤小队!天元甲胄,石昊铭刻万灵图,斩杀仙殿传人

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析完美世界。 完美世界动画最新集预告更新了&#xff0c;天元秘境的最高殿堂正式开启&#xff0c;里面有无数珍宝&#xff0c;更有无上传承&#xff0c;于是又将是一场腥风血雨的争夺战。尤其是魔王荒与仙殿传人的终极决战&…

2D游戏开发和3D游戏开发有什么不同?

2D游戏开发和3D游戏开发是两种不同类型的游戏制作方法&#xff0c;它们之间有一些显著的区别&#xff1a; 1. 图形和视觉效果&#xff1a; 2D游戏开发&#xff1a; 2D游戏通常使用二维图形&#xff0c;游戏世界和角色通常在一个平面上显示。这种类型的游戏具有平面的外观&…

Docker文档阅读笔记-How to Commit Changes to a Docker Image with Examples

介绍 在工作中使用Docker镜像和容器&#xff0c;用得最多的就是如何提交修改过的Docker镜像。当提交修改后&#xff0c;就会在原有的镜像上创建一个新的镜像。 本博文说明如何提交一个新的Docker镜像。 前提 ①有一个可以直接访问服务器的运行终端&#xff1b; ②帐号需要r…