1 tcp协议20问

1什么是TCP网络分层

在这里插入图片描述

1.1分层描述

在这里插入图片描述
网络访问层:
在这里插入图片描述
在这里插入图片描述

2 TCP的三次握⼿中为什么是三次?为什么不是两次、四次?

在这里插入图片描述
两次握手的话,服务端会单方面认为建立已经成功,但是对于客户端而言,可能只是开个玩笑的,这样对于服务端来说是不公平的,也是链接资源的浪费.
4次呢,有点浪费资源了,完全没必要,3次就够了

3TCP的四次挥⼿为什么是四次?为什么不能是三次?

在这里插入图片描述
首先,tcp的挥手是终止一次tcp的链接。也就是说在断开一次tcp的链接的时候,客户端和服务端总共需要发送4次报文。用来确认链接已经断开。
如图: 客户端发送的报文种FIN给服务端,服务端进行确认并响应ACK给客户端表示可以断开。
同时 服务端表示我也需要断开,因此向客户端也发送了一个FIN,客户端接收到服务端的FIN之后也进行了响应ACK=y+2.这就是4次挥手的报文.

why不能优化成3次呢?

假设优化成3次,那么就是在服务端发送客户端的响应ACK和服务端发送自己的FIN的地方,合并成一个报文,但是合并之后,可以实现么?
当服务端接收到客户端的断开请求后FIN,服务端只是进入了CLOSR_WAIT的状态(也就是再等等的意思,首先针对这个请求进行确认即发送ACK确认,其次的话就是服务端可能有些资源还没释放,请求请求没有处理掉,所以ACK,FIN之间可能有大的延迟)
服务端最终的LAST_ACK发送出去的时候,由于响应时间长(30S),会导致客户端进行重发,进行重试请求.

断开请求FIN
确认请求ACK
4、为什么 SYN/FIN 不包含数据却要消耗⼀个序列号?

凡是需要对端确认的,⼀定消耗TCP报⽂的序列号。
SYN 和FIN需要对端的确认,所以需要消耗⼀个序列号。
在这里插入图片描述
在这里插入图片描述
如果没有seq,则有可能会导致重发,因此只要的需要端的确认,必须有seq

5、什么是半连接队列?什么是SYN Flood攻击?

客户端⼤量伪造 IP 发送 SYN 包,服务端回复的 ACK+SYN 去到了⼀个「未知」的 IP 地址,势必会造
成服务端⼤量的连接处于 SYN_RCVD 状态,⽽服务器的半连接队列⼤⼩也是有限的,如果半连接队列满,也会出现⽆法处理正常请求的情况。
在这里插入图片描述
客户端大量伪造的ip,发起第一次链接SYN,那么服务端进行响应ACK+SYN去,这样服务器就会处于半连接状态。成为SYN FLOOD攻击或洪范攻击。

6、说说TCP快速打开(TFO)的原理!

TCP 快速打开(TCP Fast Open,TFO)
TFO 是在原来 TCP 协议上的扩展协议,它的主要原理就在发送第⼀个 SYN 包的时候就开始传数据了,
不过它要求当前客户端之前已经完成过「正常」的三次握⼿
快速打开分两个阶段:请求 Fast Open Cookie 和 真正开始 TCP Fast Open

Fast Open Cookie
我们知道tcp建立连接需要进行3次握手,这里的是一种快速打开方式TFO。
在这里插入图片描述
当发送SYN包的时候,head种包含一个cookie,只不过这个时候还是空的,表明客户端要请求fast open cookie .
服务端收到SYN包的时候,生成cookie的值并且连同ACK_SYN_COOKIE一起发送给客户端
客户端在收到cookie会缓存在本地,这个阶段就是fast open cookie

TCP Fast Open

在这里插入图片描述
在该阶段,客户端就会携带了cookie,并由服务端进行确认cookie的合法性,如果合法,就发送ack确认,如果不合法就丢弃包,走正常的3次握手
在这里插入图片描述
在这里插入图片描述

7、TCP报⽂中的时间戳有什么作⽤?

在这里插入图片描述
上图是报文的头部,时间戳就是加在head的选项中
下图是时间戳的构成,分别是:类别,长度,发送方时间戳,回显时间戳
在这里插入图片描述
RTT
在这里插入图片描述
假设在没有启动时间戳的时候,发送重传的情况下,计算时延是比较尴尬的,如上图所示,但是开启了时间戳就不一样了,可以进行计算.
在启⽤ Timestamps 选项以后,因为 ACK 包⾥包含了 TSval 和 TSecr,这样⽆论是正常确认包,还是
重传确认包,都可以通过这两个值计算出 RTT。

在这里插入图片描述
当seq满了以后,会从来开始,也就是回绕
在这里插入图片描述

8、TCP 的超时重传时间是如何计算的?

TCP 具有超时重传机制,即间隔⼀段时间没有等到数据包的回复时,重传这个数据包。
这个重传间隔也叫做超时重传时间(Retransmission TimeOut, 简称RTO)
在这里插入图片描述
RTO设置的太小的话,没必要,有可能导致不必要的重传,因为服务端可能是延迟,但是设置太大,需要很久才会重传.
在这里插入图片描述
在这里插入图片描述

9、能不能说⼀说 TCP 的流量控制?

在这里插入图片描述
通过设置服务端的缓冲区的大小来决定tcp的数据传输大小。
服务端响应的ack中就有窗口大小,用于通知客户端缓存区的大小.

接收窗⼝(接收缓冲区中空闲的部分)
在这里插入图片描述
buffer中可能存在上一次发送,但是还没有处理完的数据。如上图所示
在这里插入图片描述
在这里插入图片描述
发送端比较慢的情况就是:发送的buffer中有可以待发送的数据
发送到比较快的情况就是:buffer中的全都发出去了,但是可能还没有收到ack.
因为接收端的响应ACK中包含了窗口大小,发送端就可以进行控制.

10、如何理解 TCP 的keep-alive的原理?

在这里插入图片描述
TCP 协议的设计者考虑到了这种检测⻓时间死连接的需求,于是乎设计了 keepalive 机制。
它的作⽤就是探测对端的连接有没有失效,通过定时发送探测包来探测连接的对端是否存活,不过默认
情况下需要 7200s 没有数据包交互才会发送 keepalive 探测包,往往这个时间太久了,我们熟知的很多组件都没有开启 keepalive 特性,⽽是选择在应⽤层做⼼跳机制。

11、聊⼀聊TCP中的端⼝号

端⼝号的英⽂叫Port,英⽂原意是"港⼝,⼝岸"的意思
端⼝号与⽹络分层
端口号位于传输层,并且是在TCP的头里面
分别由源断开,目标端口
在这里插入图片描述
TCP ⽤两字节的整数来表示端⼝,⼀台主机最⼤允许 65536 个端⼝号的
在这里插入图片描述
已登记的端⼝号:范围1024~49151
● MySQL:3306
● Redis:6379
● MongoDB:27017

临时端⼝号:范围49152~65535
一般访问目标服务器,自己的主机开通的源端口一般使用临时端口号

12、TCP场景问题1

在这里插入图片描述

13、TCP场景问题2

服务端收到 IP 数据包解析以后,它怎么知道这个分组应该投递到上层的哪⼀个协议(UDP 或 TCP)?
在这里插入图片描述
在这里插入图片描述

14、TCP场景问题3

在这里插入图片描述

15、讲⼀讲telnet的⽤法

在这里插入图片描述
在这里插入图片描述

16、讲⼀讲netstat的⽤法

netstat 命令⽤于显示各种⽹络相关信息
在这里插入图片描述

17、讲⼀讲tcpdump的⽤法

tcpdump 则是⼀个命令⾏的⽹络流量分析⼯具,功能⾮常强⼤,⼀般我们⽤来抓TCP的包。

tcpdump -i any

以上命令表示监听所有的网卡,一般不这么用

tcpdump -i any host 192.168.0.1

表示监听这个IP

18、讲⼀讲wireshark的⽤法

tcpdump,它是命令⾏程序,对 linux 服务器⽐较友好,简单快速适合简单的⽂本协议的分析和处理。
wireshark 有图形化的界⾯,分析功能⾮常强⼤,不仅仅是⼀个抓包⼯具,且⽀持众多的协议。

19、TCP 和 UDP 的区别?

在这里插入图片描述

20、如果要你来设计⼀个QQ,在⽹络协议上你会考虑如何设计?

在这里插入图片描述

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

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

相关文章

[人工智能-综述-12]:第九届全球软件大会(南京)有感 -1-程序员通过大模型增强自身软件研发效率的同时,也在砸自己的饭碗

目录 前言: 一、什么是软件工程 1.1 什么软件工程 1.2 影响软件开发效能的三大因素 1.3 AI大模型是如何提升软件工程全过程效率的 二、AI大模型如何提升软件项目管理效率 2.1 概述 2.2 案例或工具 三、AI大模型如何提升软件开发工具的效率 3.1 概述 3.2 …

蓝桥每日一题(day 3: 蓝桥587.约数个数)--数学--easy

题目 解题核心&#xff1a; 分解质因数&#xff0c;每个质因数的次方1的累乘积就是anscode #include <iostream> #include<algorithm> #include<unordered_map> //# #include<> typedef long long LL; const int N 110, MOD 1e9 7;using namespac…

小程序原生代码转uniapp

写了一份小程序原生代码&#xff0c;想转为uniapp 再转为其他平台发布 1、在命令行里&#xff0c;运行【 npm install miniprogram-to-uniapp -g 】进行安装&#xff0c;因为这个包是工具&#xff0c;要求全局都能使用&#x…

《动手学深度学习 Pytorch版》 9.2 长短期记忆网络(LSTM)

解决隐变量模型长期信息保存和短期输入缺失问题的最早方法之一是长短期存储器&#xff08;long short-term memory&#xff0c;LSTM&#xff09;。它与门控循环单元有许多一样的属性。长短期记忆网络的设计比门控循环单元稍微复杂一些&#xff0c;却比门控循环单元早诞生了近 2…

【Linux】进程概念与进程状态

文章目录 一、进程概念1.进程的概念2.进程的描述-PCB 二、进程相关的基本操作1.组织进程2.查看进程3.结束进程4.通过系统调用获取进程标示符5.通过系统调用创建进程-fork初识 三、进程状态1.普遍操作系统层面的进程状态2.Linux操作系统的进程状态 四、两种特殊的进程状态1.僵尸…

软考高级系统架构设计师系列之:数学与经济管理

软考高级系统架构设计师系列之:数学与经济管理 一、数学与经济管理二、图论应用-最小生成树三、图论应用-最短路径四、图论应用-网络与最大流量五、运筹方法-线性规划六、运筹方法-动态规划七、运筹方法-转移矩阵八、运筹方法-排队论九、运筹方法-决策-不确定决策十、运筹方法…

14-bean创建流程5-初始化和循环依赖

文章目录 1.初始化和循环依赖1.1 初始化步骤1.2 循环依赖问题的产生1.3 如何解决循环依赖问题1.4 解决循环依赖二级缓存即可完成,为什么需要三级缓存1.5循环依赖有时报错1.初始化和循环依赖 1.1 初始化步骤 填充属性执行Aware执行BeanPostProcessor的postProcessBeforeInitia…

单点登录与网络犯罪生态系统

这不仅仅是你的感觉&#xff0c;网络犯罪正以惊人的速度增长。在Flare&#xff0c;我们发现2023年的数据勒索勒索软件攻击比2022年增加了112&#xff05;&#xff0c;并且网络犯罪生态系统的活动也在不断增加。 导语&#xff1a;网络犯罪的惊人增长 网络犯罪在当今社会中变得越…

chatgpt图片识别、生成图片、语音对话多模态深度试玩

大模型替代人的工作的能力&#xff0c;越来越明显了。最近chatgpt支持多模态了&#xff0c;看这大佬们玩的不易乐乎&#xff0c;手痒也想试一试&#xff0c;因此有给openai上供了20刀。 另外我是gpt的拥护者&#xff0c;但是周围的同事有对此担忧&#xff0c;因为他们长期积累的…

python学习7

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

Flutter 与 Dart 的市场应用

本文来自《2023年中国谷歌教育合作项目—武汉城市学院—面向Flutter框架的Dart语言师资培训与教学研讨》内容文字版。 Hello&#xff0c;大家好&#xff0c;我是 Flutter GDE 郭树煜&#xff0c;也是《Flutter 开发实战详解》的作者&#xff0c;同时也是 Github GSY 项目的负责…

由Django-Session配置引发的反序列化安全问题

漏洞成因 漏洞成因位于目标配置文件settings.py下 关于这两个配置项 SESSION_ENGINE&#xff1a; 在Django中&#xff0c;SESSION_ENGINE 是一个设置项&#xff0c;用于指定用于存储和处理会话&#xff08;session&#xff09;数据的引擎。 SESSION_ENGINE 设置项允许您选择不…

SQL INSERT INTO 语句(在表中插入)

SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新的数据行。 SQL INSERT INTO 语法 INSERT INTO 语句可以用两种形式编写。  第一个表单没有指定要插入数据的列的名称&#xff0c;只提供要插入的值&#xff0c;即可添加一行新的数据&#xff1a; INSERT INTO table_n…

【C语言必知必会| 第七篇】循环结构入门,这一篇就够了

引言 C语言是一门面向过程的、抽象化的通用程序设计语言&#xff0c;广泛应用于底层开发。它在编程语言中具有举足轻重的地位。 此文为【C语言必知必会】系列第七篇&#xff0c;介绍C语言的循环结构&#xff0c;结合专题优质题目&#xff0c;带领读者从0开始&#xff0c;深度掌…

【算法|动态规划No.22】leetcode115. 不同的子序列

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

构建跨平台应用程序:Apollo在移动开发中的应用

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

ubuntu终端命令行下如何使用NetworkManager(netplan)来配置wifi网络

最近在给家里折腾一个文件共享服务器给家里的小米摄像头保存监控视频用。树莓派太贵了&#xff0c;找来找去发现香橙派orangepi zero3 是最低成本的替代解决方案&#xff08;网络足够快&#xff0c;CPU的IO能力足够强&#xff09;&#xff0c;香橙派orangepi zero3的操作系统是…

electron学习笔记

electron&#xff1a;大前端背景下&#xff0c;用node.js做桌面端app的工具 1、安装&#xff1a;npm i electron 实际上是chromium Node.js 2、创建一个窗口 3、主进程&#xff08;操作硬件等&#xff0c;commonJS&#xff09;与渲染进程&#xff08;渲染页面&#xff0c;E…

凉鞋的 Godot 笔记 202. 变量概述与简介

202. 变量概述与简介 想要用好变量不是一件简单的事情&#xff0c;因为变量需要命名。 我们可以从两个角度去看待一个变量&#xff0c;第一个角度是变量的功能&#xff0c;第二个是变量的可读性。 变量的功能其实非常简单&#xff0c;变量可以存储一个值&#xff0c;这个值是…

Godot2D角色导航-自动寻路教程(Godot获取导航路径)

文章目录 开始准备获取路径全局点坐标 开始准备 首先创建一个导航场景&#xff0c;具体内容参考下列文章&#xff1a; Godot实现角色随鼠标移动 然后我们需要设置它的导航目标位置&#xff0c;具体关于位置的讲解在下面这个文章&#xff1a; Godot设置导航代理的目标位置 获取…