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

TCP/IP协议二十问

TCP/IP协议二十问

1. 什么是TCP网络分层?

TCP网络分层一般分为五层:

  1. 应用层(HTTP):组装数据包
  2. 传输层(TCP):增加TCP头部,包含端口号等信息
  3. 网络互联层(IP):增加IP头部,包含IP地址等信息
  4. 网络访问层(ARP):增加以太网头部,包含MAC地址等信息
  5. 物理层

分层的好处

  • 各层独立:限制了依赖关系的范围,各层之间使用标准化的接口,各层不需要知道上下层是如何工作的,增加或者修改一个应用层协议不会影响传输层协议;
  • 灵活性:比如路由器不需要应用层和传输层,分层以后路由器就可以只用加载更少的几个协议层
  • 易于测试和维护:提高了可测试性,可以独立的测试特定层,某一层有了更好的实现可以整体替换掉;
  • 能促进标准化:各层职能清晰,方便标准化;

2. TCP的三次握手?为什么不是两次或者四次?

  1. 客户端向服务端发送SYN,seq = x;
  2. 服务端向客户端发送SYN,seq = y, ACK = x+1;
  3. 客户端向服务端发送ACK = y+1;

两次不行

  1. 如果只做两次无法确定服务端的接收能力;
  2. 两次握手后建立连接,有可能导致由于时延产生的多次连接建立,导致资源浪费;

四次不行

三次足够,没必要资源浪费;

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

  1. 客户端向服务端发送FIN,seq = x+2,ACK = y+1;
  2. 服务端向客户端发送ACK = x+3;
  3. 服务端发送完剩余数据后,再向客户端发送FIN,seq = y+1;
  4. 客户端向服务端发送ACK = y+2;

三次不行

导致服务端的ACK和FIN将延迟发送,如果延迟时间过长,客户端将再次重发断开请求,导致资源浪费。

4. 为什么SYN/FIN不包含数据却要消耗一个序列号?

凡是需要对端确认的,一定消耗TCP报文的序列号;

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

客户端大量伪造IP发送SYN包,服务端回复的ACK+SYN去到了一个【未知】的IP地址,势必会造成服务端大量的连接处于SYN_RCVD状态,而服务器的半连接队列大小也是有限的,如果半连接队列满,也会出现无法处理正常请求的情况。

6. TCP快速打开的原理?

TCP快速打开(TCP Fast Open,TFO)
TFO是在原来TCP协议上的扩展协议,它的主要原理就在发送第一个SYN包的时候就开始传数据了,不过他要求当前客户端之前已经完成过【正常】的三次握手。

快速打开分为两个阶段:请求 Fast Open Cookie 和 真正开始 TCP Fast Open

TCP Fast Open 的优势

可以利用握手去除一个往返的RTT
可以防止SYN-Flood攻击之类的

7. TCP报文中的时间戳有什么用?

TCP Timestamps Option由四部分构成:
类别、长度、发送方时间戳、回显时间戳

  1. 用于计算RTT
  2. 防止序列号的回绕问题,即使使用的序列号相同,也可以通过时间戳来对不同的包进行区分。

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

超时重传时间:Retransmission TimeOut, 简称RTO

经典解决方法

适用于RTT较小的情况,SRTT,smoothed round trip time。
利用最新一次的RTT对SRTT时间进行更新,
SRTT = α × SRTT + (1-α)× RTT

9. TCP流量控制?

把发送的数据放到发送缓冲区,把接收的数据放到接收缓冲区。通过实际接收缓冲区的大小,控制发送端的发送。
接收端会告知客户端自己接收窗口,也就是接收缓冲区中空闲的部分。

发送端的数据包的状态:

  • 已发送且已确认
  • 已发送未确认的
  • 未发送但接收端可以接受的(接收端有空间接受)
  • 未发送且不可以发送(接收端没空间接收)

发送端速度较慢:存在大量待发送的字节;
发送端速度较快:存在大量待确认的字节;

10. TCP的keep-alive原理?

定时发送探测包来探测连接的对端是否存活,但是keepalive默认设置的时间过长,7200s没有实际意义,一般在应用层做心跳机制。

什么是心跳机制?

  • 定时向服务端发送消息
  • 能响应服务端的消息

长链接业务场景

  • 游戏
  • -即时通讯
    在没有心跳包机制的情况下,网络若掉线,对方不可知;
    如果客户端掉线,服务端不知道,还维持链接,就是额外的无效系统开销。

为什么需要心跳包:

  • 在NAT、防火墙网络中装设备,保存信道记录;
  • 及时发现对方网络断开,以便及时采取措施;

如何实现心跳包

  • TCP层面的心跳包,只能够验证网络链接是否异常;
  • 应用层层面的心跳包,验证服务接口是否异常;

为什么不采用TCP层面?

应用层的连接如果成功,那么TCP所在的传输层必定成功。

11. TCP中的端口号

源端口:本地端口
目标端口:服务器端口

最大65536个,所以是0-65535

常见端口:

端口号服务
22SSH
80HTTP
443HTTPS
3306mysql
Redis6379
MongoDB27017

12. TCP场景问题1

AB两个主机之间建立了一个TCP连接,A主机发给B主机两个TCP报文,大小分别是500和300,第一个报文的序列号是200,那么B主机接收两个报文后,返回的确认号是多少?500+300+200 = 1000

13. TCP场景问题2

收到IP数据包解析后,如何知道应该投递到上层中的哪个协议(是TCP还是UDP)?

IP报文头中有协议字段,TCP6,UDP17

14. TCP场景问题3

TCP提供了一种字节流服务,而收发双方都不保持记录的边界,应用程序应该如何提供他们自己的记录标识呢?

应用程序使用自己约定的规则来标识消息的边界,比如有一些使用回车+换行(“\r\n”),比如Redis的通信协议;

15. telnet 的用法

检查远端端口是否打开,其语法如下:
telnet [ip] [port]

16. netstat的用法

主要用于查询网络情况
如: netstat -a -lu -lt

17. tcpdump

用于抓包,例如可以查看三次握手和四次挥手等

18. wireshark

19. TCP和UDP的区别?

TCP是一个面向连接的、可靠的、基于字节流的传输层协议;
UDP是一个面向无连接的传输层协议;

  • 面向连接:指的是客户端和服务端的连接,在通信前通过三次握手建立连接;

  • 可靠性:

    • TCP有状态:TCP会精准记录那些数据发送了,哪些数据已被接收,那些数据未被接收,并且保证数据包按序到达,不允许差错;
    • TCP可控制:如果遇到丢包或者网络不佳,TCP会根据具体情况自行调整,控制自己的发送速度或者重发。

20. QQ的网络协议设计?

  • 登录采用TCP协议和HTTP协议;
  • 好友之间发消息可以采用UDP;
  • 内网传文件可以采用P2P技术;
  1. 登录过程中,客户端client采用TCP协议向服务器发送消息;
  2. HTTP协议下载信息;
  3. 登录后通过TCP来保持在线状态;
  4. 和好友发消息客户端采用UDP协议,但是需要通过服务器转发,但是为了确保传输信息的可靠性,采用上层协议来保证可靠传输;
  5. 内网传输文件时采用P2P技术;

相关文章:

TCP/IP协议二十问

TCP/IP协议二十问 1. 什么是TCP网络分层? TCP网络分层一般分为五层: 应用层(HTTP):组装数据包传输层(TCP):增加TCP头部,包含端口号等信息网络互联层(IP&am…...

常用Array数组操作方法

定义一个测试数组constplayers[{name:科比,num:24},{name:詹姆斯,num:23},{name:保罗,num:3},{name:威少,num:0},{name:杜兰特,num:35}]复制代码1、forEach参数代表含义item:遍历项index:遍历项的索引arr:数组本身Array.prototype.sx_forEach…...

【C++】set/multiset、map/multimap的使用

目录 一、关联式容器 二、set的介绍 1、接口count与容器multiset 2、接口lower_bound和upper_bound 三、map的介绍 1、接口insert 2、接口insert和operator[]和at 3、容器multimap 四、map和set相关OJ 1、前K个高频单词 2、两个数组的交集 一、关联式容器 vector、…...

vue3语法

vue3教程 //ps 这里是基本写法 一般项目不需要ref 因为需要一直return 这里是根据在不使用ts后缀 来在.vue里面写setup 如下图所示:setup setup是启动页面会自动执行的一个函数 项目里定义的所有变量,都要在setup当中 在setup定义的变量和方法,都需要r…...

对象之间的关系

目录1. 依赖2. 关联3. 聚合4. 组合Java的对象/类之间有四种关系:依赖、关联、组合、聚合。 1. 依赖 依赖(Dependency): 一个对象的功能依赖于另一个对象。 类比:人类生存依赖食物和空气 体现:被依赖者体…...

云原生时代顶流消息中间件Apache Pulsar部署实操-上

文章目录安装运行时Java版本推荐Locally Standalone集群启动验证部署分布式集群部署说明初始化集群元数据部署BookKeeper部署BrokerAdmin客户端和验证Tiered Storage(层级存储)概述支持分级存储何时使用工作原理安装 运行时Java版本推荐 Locally Standalone集群 启动 # 下载…...

Python实现基于openCV+百度智能云平台实现《1:N人脸考勤机》文章最后附带源码!

目录 一、 项目介绍 1.1 项目名称 1.2 项目简介 1.3 项目物料 1.4 技术栈 二、 项目架构 三、项目细节 3.1 环境搭建 3.2 利用opencv实现摄像头调取及相关图像的采集 3.3 利用aips上传图像和结果返回 3.4 结果优化和处理 3.5 可扩展性 3.6 遗留问题和…...

因为锁的问题,我们被扣了1万

前言 春节放假期间,一个项目上的积分接口被刷,而且不止一个人在刷,并且东西也被兑走,放假晚上被人叫起来排查问题,通过这个人的积分明细观察,基本一秒就能获取一次,远远超过了积分规则限定的次…...

【STM32笔记】低功耗模式下的RTC唤醒(非闹钟唤醒,而是采用RTC_WAKEUPTIMER)

【STM32笔记】低功耗模式下的RTC唤醒(非闹钟唤醒,而是采用RTC_WAKEUPTIMER) 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录…...

浏览器渲染中的相关概念

渲染 渲染流水线 构建 DOM 树 输入:HTML 文档;处理:HTML 解析器解析;输出:DOM 数据解构。 样式计算 输入:CSS 文本;处理:属性值标准化,每个节点具体样式&#xff08…...

【MySQL】数据类型

1、数据类型描述 类型类型举例整数类型TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT浮点类型FLOAT、DOUBLE定点数类型DECIMAL位类型BIT日期时间类型YEAR、TIME、DATE、DATETIME、TIMESTAMP文本字符串类型CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT枚举类…...

L2-037 包装机

一种自动包装机的结构如图 1 所示。首先机器中有 N 条轨道,放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时,活塞向左推动,将轨道尽头的一件物品推落筐中。当 0 号按钮被按下时,机械手将抓取筐顶部的一件物品&#x…...

MySQL -查询日志、二进制日志、错误日志、慢查询日志

文章目录1.错误日志2.二进制日志3.查询日志4.慢查询日志1.错误日志 错误日志是 MySOL中最重要的日志之一,它记录了当 mvsald 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息当数据库出现任何故障导致无法正常使用时,建议…...

TCP实现可靠传输的实现

TCP实现可靠传输的实现 目录TCP实现可靠传输的实现ARQ协议停止等待协议(古老)连续ARQ协议累计重传(回退N帧的ARQ协议)缓存确认(选择重传ARQ协议)超时重传的时间选择TCP的流量控制零窗口探测报文段Nagle算法…...

2/14考试总结

时间安排 7:30–7:50 看题,T1可能是个数据结构之类的东西,T2是 dp ,T3 构造。 7:50–8:20 T3,仿照样例的构造,可以通过一部分测试点。 8:20–9:20 T1,发现题目实际上要求子树内各儿子的深度信息,可以 dsu ,对于不能暴…...

程序环境和预处理详解

文章目录一、程序环境1.1 - 翻译环境1.1.1 - 编译1.1.1.1 - 预编译(预处理)1.1.1.2 - 编译1.1.1.3 - 汇编1.1.2 - 链接1.2 - 执行环境二、预处理详解2.1 - 预定义符号2.2 - #define2.2.1 - #define 定义标识符2.2.1.1 - 语法2.2.1.2 - 建议2.2.2 - #defi…...

The Social-Engineer Toolkit(社会工程学工具包)互联网第一篇全模块讲解

一、工具介绍 Social-Engineer Toolkit 是一个专为社会工程设计的开源渗透测试框架,可以帮助或辅助你完成二维码攻击、可插拔介质攻击、鱼叉攻击和水坑攻击等。SET 本身提供了大量攻击选项,可让您快速进行信任型攻击,也是一款高度自定义工具…...

Windows11去掉不满足系统要求的提示水印

我的电脑是LEGION的拯救者R70002021,预装的是Windows 11 家庭中文版,没有折腾重装过系统,今天突然注意到右下角出现了这个提示:“不满足系统要求。转到’设置"了解详细信息”。 在进入设置 - 系统 面板中也提示不满足系统要…...

JavaScript 计时事件

JavaScript 计时事件 通过使用 JavaScript,我们有能力做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。 在 JavaScript 中使用计时事件是很容易的,两个关键方法是: setInterval() - 间隔指定的…...

七大排序算法的多语言代码实现

文章目录 前言 一、排序算法 1.原理简述 2.分类与复杂度 二、实例代码 1.冒泡排序 C Python Java Golang Rust Dephi 2.选择排序 C Python Java Golang Rust Dephi 3.插入排序 C Python Java Golang Rust Dephi 4.希尔排序 ​编辑 C Python Java Gola…...

【基础算法】表达式计算

中缀表达式:我们平常见到的正常数学式子 后缀表达式:12-3* 后缀表达式对于计算机很容易计算,只需要从头部扫描字符串。然后遇到数字就入栈,遇到运算符就取出栈顶的两个数进行运算。最后把运算结果入栈,最后栈中就会剩一个数为答…...

动态规划问题

目录 一、动态规划简介 二、利用动态规划解决问题 1、斐波拉契序列 2、拆分词句 3、三角形最小路径和 4、不同的路径数目(一) 5、带权值的最小路径和 6、求路径ii 7、01背包 8、不同子序列 9、编辑距离 10、分割回文串 一、动态规划…...

【MySQL进阶】 存储引擎 索引

😊😊作者简介😊😊 : 大家好,我是南瓜籽,一个在校大二学生,我将会持续分享Java相关知识。 🎉🎉个人主页🎉🎉 : 南瓜籽的主页…...

5 款最好的免费 SSD 数据恢复软件

SSD(固态硬盘)提供比传统硬盘更快的读/写速度,使启动、软件加载和游戏启动更快。因此,在我们选择存储设备时,它是一个极好的选择。但是,它仍然存在数据丢失的风险。假设您是受害者之一,正在寻找…...

MyBatis案例 | 使用映射配置文件实现CRUD操作——删除数据

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址:🔥JavaWeb Java入门篇: 🔥Java基础学习篇 Java进阶学习篇&…...

CSDN 编程竞赛二十八期题解

竞赛总览 CSDN 编程竞赛二十八期:比赛详情 (csdn.net) 本期竞赛的题目都很简单,但是非常考验读题和编码速度。这一次没有遇到bug,竞赛体验较好。 竞赛题解 题目1、小Q的鲜榨柠檬汁 团建活动是大家所想要的。小Q给大家准备了鲜橙汁。现在…...

DML数据操纵语言

DML数据操纵语言 目录概述一、插入语句(一)方式一(二)方式二:(三)两种方式的比较二、修改语句三、删除语句概述方式一:delete方式二:truncate语句 【清空语句】delete VS truncate 【面试题!!!】概述 数据…...

【Hello Linux】Linux工具介绍 (gcc/g++ gdb)

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:介绍Linux的常用工具gcc/g 以及gbd Linux工具介绍gcc / ggcc / g的作用为什么语言要经过这四步才能变为可执行指令gcc / g语法预处理编…...

TeamFiltration:一款针对O365 AAD账号安全的测试框架

关于TeamFiltration TeamFiltration是一款针对O365 AAD账号安全的跨平台安全测试框架,在该工具的帮助下,广大研究人员可以轻松对O365 AAD账号进行枚举、喷射、过滤和后门植入等操作。TeamFiltering与CrackMapExec非常相似,它可以创建并维护一…...

你是真的“C”——Visual Studio 2022(VS2022)编译器 -—实用调试技巧

你是真的“C”——Visual Studio 2022(VS2022)编译器 -—实用调试技巧😎前言🙌1. 什么是bug?🙌2. 调试是什么?有多重要?🙌2.1 调试是什么?2.2 调试的基本步骤…...

旅游网站设计的目的/深圳市企业网站seo营销工具

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯 的一个。以下为4个嫌疑犯的供词。 A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。 现在请根据这些…...

30岁学编程还能找到工作吗/关键词优化快速

1,CDC::SelectObject出错: 昨天写了一个画图程序,发现执行到SelectObject(pOldPen)的时候老是出错,找了半天都没发现是什么问题,后来在csdn里讲可能是在SelectObject(&pen)的时候少了个取地址符,再次检查&#xff…...

无锡专业网站排名推广/网络营销和传统营销的区别有哪些

问题:本站对该题的题解方法,c下可ac, 用python测试结果TLE, 过不了倒数第二个testcase。详情: 我用了不同于题解方法ac后,看到题解很简洁,便照用python照写了一个测速度,结果TLE。而…...

上海网上做鸭子的网站/百度一下你就知道了百度一下

题目来源&#xff1a;http://ac.jobdu.com/problem.php?pid1283 时间限制&#xff1a;1 秒 内存限制&#xff1a;32 兆 特殊判题&#xff1a;否 提交&#xff1a;991 解决&#xff1a;568 题目描述&#xff1a;在一个字符串(1<字符串长度<10000&#xff0c;全部由大写字…...

网站建设的七个流程步骤/在哪里打广告效果最好

API简介 vpp其实也有自己的control-plane。它们之间的就是使用API来交互&#xff0c;底层是用的共享内存机制。control-plane可以是使用不同的语言来写&#xff0c;支持C/python/java/go 在这里了解的是用C语言与vpp通信。如图1所示。VAT通过命令行来控制VPP。 图1&#xff0c;…...

win2003 iis做网站/广州seo工作

转载自&#xff1a;https://blog.csdn.net/kevin66654/article/details/71480319 原标题&#xff1a;2017广东红帽杯pwn1_writeup&#xff1a;简单ROP 先来正能量一波&#xff1a;作为一个一直没入门pwn的小菜鸟&#xff0c;这一段时间一直被学弟按在地上摩擦很不爽很不爽~~~~~…...