网络面试题-UDPTCP

1 UDP

1.1 ⾯向报⽂

  • UDP 是⼀个⾯向报⽂(报⽂可以理解为⼀段段的数据)的协议。意思就是UDP 只是报⽂的搬运⼯,不会对报⽂进⾏任何拆分和拼接操作
具体来说
  • 在发送端,应⽤层将数据传递给传输层的 UDP 协议, UDP 只会给数据增加⼀个 UDP头标识下是 UDP 协议,然后就传递给⽹络层了
  • 在接收端,⽹络层将数据传递给传输层, UDP 只去除 IP 报⽂头就传递给应⽤层,不会任何拼接操作

1.2 不可靠性

  • UDP 是⽆连接的,也就是说通信不需要建⽴和断开连接。
  • UDP 也是不可靠的。协议收到什么数据就传递什么数据,并且也不会备份数据,对⽅能不能收到是不关⼼的
  • UDP 没有拥塞控制,⼀直会以恒定的速度发送数据。即使⽹络条件不好,也不会对发送速率进⾏调整。这样实现的弊端就是在⽹络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求⾼的场景(⽐如电话会议)就需要使⽤ UDP ⽽不是 TCP

1.3 ⾼效

  • 因为 UDP 没有 TCP 那么复杂,需要保证数据不丢失且有序到达。所以 UDP 的头部开销⼩,只有⼋字节,相⽐ TCP 的⾄少⼆⼗字节要少得多,在传输数据报⽂时是很⾼效的
头部包含了以下⼏个数据
  • 两个⼗六位的端⼝号,分别为源端⼝(可选字段)和⽬标端⼝ 整个数据报⽂的⻓度
  • 整个数据报⽂的检验和( IPv4 可选 字段),该字段⽤于发现头部信息和数据中的错误

1.4 传输⽅式

  • UDP 不⽌⽀持⼀对⼀的传输⽅式,同样⽀持⼀对多,多对多,多对⼀的⽅式,也就是说 UDP 提供了单播,多播,⼴播的功能

2 TCP

2.1 头部

  • TCP 头部⽐ UDP 头部复杂的多
  • 对于 TCP 头部来说,以下⼏个字段是很重要的
  • Sequence number ,这个序号保证了 TCP 传输的报⽂都是有序的,对端可以通过序号顺序的拼接报⽂
  • Acknowledgement Number ,这个序号表示数据接收端期望接收的下⼀个字节的编号是多少,同时也表示上⼀个序号的数据已经收到
  • Window Size ,窗⼝⼤⼩,表示还能接收多少字节的数据,⽤于流量控制
标识符
  • URG=1 :该字段为⼀表示本数据报的数据部分包含紧急信息,是⼀个⾼优先级数据报⽂,此时紧急指针有效。紧急数据⼀定位于当前数据包数据部分的最前⾯,紧急指针标明了紧急数据的尾部。
  • ACK=1 :该字段为⼀表示确认号字段有效。此外, TCP 还规定在连接建⽴后传送的所有报⽂段都必须把 ACK 置为⼀ PSH=1 :该字段为⼀表示接收端应该⽴即将数据 push 给应⽤层,⽽不是等到缓冲区满后再提交。
  • RST=1 :该字段为⼀表示当前 TCP 连接出现严重问题,可能需要重新建⽴ TCP 连接,也可以⽤于拒绝⾮法的报⽂段和拒绝连接请求。
  • SYN=1 :当 SYN=1 , ACK=0 时,表示当前报⽂段是⼀个连接请求报⽂。当 SYN=1 ,ACK=1 时,表示当前报⽂段是⼀个同意建⽴连接的应答报⽂。
  • FIN=1 :该字段为⼀表示此报⽂段是⼀个释放连接的请求报⽂

2.2 状态机

  • HTTP 是⽆连接的,所以作为下层的 TCP 协议也是⽆连接的,虽然看似
  • TCP 将两端连接了起来,但是其实只是两端共同维护了⼀个状态
  • TCP 的状态机是很复杂的,并且与建⽴断开连接时的握⼿息息相关,接下来就来详细描述下两种握⼿。
  • 在这之前需要了解⼀个重要的性能指标 RTT。该指标表示发送端发送数据到接收到对端数
    据所需的往返时间
建⽴连接三次握⼿
  • 在 TCP 协议中,主动发起请求的⼀端为客户端,被动连接的⼀端称为服务端。不管是客户端还是服务端, TCP 连接建⽴完后都能发送和接收数据,所以 TCP 也是⼀个全双⼯的协议。
  • 起初,两端都为 CLOSED 状态。在通信开始前,双⽅都会创建 TCB 。 服务器创建完TCB 后遍进⼊ LISTEN 状态,此时开始等待客户端发送数据
    第⼀次握⼿
    客户端向服务端发送连接请求报⽂段。该报⽂段中包含⾃身的数据通讯初始序
    号。请求发送后,客户端便进⼊ SYN-SENT 状态,x 表示客户端的数据通信初
    始序号。
第⼆次握⼿

服务端收到连接请求报⽂段后,如果同意连接,则会发送⼀个应答,该应答中也会包含⾃身的数据通讯初始序号,发送完成后便进⼊ SYN-RECEIVED 状态。

第三次握⼿

当客户端收到连接同意的应答后,还要向服务端发送⼀个确认报⽂。客户端发完这个报⽂段后便进⼊ ESTABLISHED 状态,服务端收到这个应答后也进⼊ESTABLISHED 状态,此时连接建⽴成功。

  • PS:第三次握⼿可以包含数据,通过 TCP 快速打开( TFO )技术。其实只要涉及到握⼿的协议,都可以使⽤类似 TFO 的⽅式,客户端和服务端存储相同 cookie ,下次握⼿时发出 cookie 达到减少 RTT 的⽬的
你是否有疑惑明明两次握⼿就可以建⽴起连接,为什么还需要第三次应答?
  • 因为这是为了防⽌失效的连接请求报⽂段被服务端接收,从⽽产⽣错误
  • 可以想象如下场景。客户端发送了⼀个连接请求 A,但是因为⽹络原因造成了超时,这时 TCP 会启动超时重传的机制再次发送⼀个连接请求 B。此时请求顺利到达服务端,服务端应答完就建⽴了请求。如果连接请求 A 在两端关闭后终于抵达了服务端,那么这时服务端会认为客户端⼜需要建⽴ TCP 连接,从⽽应答了该请求并进⼊ ESTABLISHED 状态。此时客户端其实是 CLOSED 状态,那么就会导致服务端⼀直等待,造成资源的浪费
  • PS:在建⽴连接中,任意⼀端掉线,TCP 都会重发 SYN 包,⼀般会重试五次,在建⽴连接中可能会遇到 SYN FLOOD 攻击。遇到这种情况你可以选择调低重试次数或者⼲脆在不能处理的情况下拒绝请求
断开链接四次握⼿

TCP 是全双⼯的,在断开连接时两端都需要发送 FIN 和 ACK 。

第⼀次握⼿
  • 若客户端 A 认为数据发送完成,则它需要向服务端 B 发送连接释放请求。
第⼆次握⼿
  • B 收到连接释放请求后,会告诉应⽤层要释放 TCP 链接。然后会发送 ACK包,并进⼊ CLOSE_WAIT 状态,表示 A 到 B 的连接已经释放,不接收 A 发的数据了。但是因为 TCP 连接时双向的,所以 B 仍旧可以发送数据给 A。
第三次握⼿
  • B 如果此时还有没发完的数据会继续发送,完毕后会向 A 发送连接释放请求,然后 B 便进⼊ LAST-ACK 状态。
  • PS:通过延迟确认的技术(通常有时间限制,否则对⽅会误认为需要重传),可以将第⼆次和第三次握⼿合并,延迟 ACK 包的发送。
第四次握⼿
  • A 收到释放请求后,向 B 发送确认应答,此时 A 进⼊ TIME-WAIT 状态。该状态会持续2MSL(最⼤段⽣存期,指报⽂段在⽹络中⽣存的时间,超时会被抛弃) 时间,若该时间段内没有 B 的重发请求的话,就进⼊ CLOSED 状态。当 B 收到确认应答后,也便进⼊CLOSED 状态。
为什么 A 要进⼊ TIME-WAIT 状态,等待 2MSL 时间后才进⼊ CLOSED 状态?
  • 为了保证 B 能收到 A 的确认应答。若 A 发完确认应答后直接进⼊ CLOSED 状态,如果确认应答因为⽹络问题⼀直没有到达,那么会造成 B 不能正常关闭

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

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

相关文章

Aligning Large Language Models with Human: A Survey

本文也是LLM相关的综述文章,针对《Aligning Large Language Models with Human: A Survey》的翻译。 对齐人类与大语言模型:综述 摘要1 引言2 对齐数据收集2.1 来自人类的指令2.1.1 NLP基准2.1.2 人工构造指令 2.2 来自强大LLM的指令2.2.1 自指令2.2.2 …

sql分类 DDL、DML、DCL

DDL (Data Definition Language 数据定义语言) 这些语句定了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构 如: CREATE \ DROP \ ALTER \ RENAME \ TRUNCATE 等 DML(Data Manipulation Langua…

前端面试的性能优化部分(3)每天10个小知识点

31.请解释前端性能优化的重要性以及优化的目标是什么? 前端性能优化是指在网页或应用的前端部分(通常是指用户界面)进行改进,以提高其加载速度、响应性能和用户体验。在现代互联网应用中,前端性能优化至关重要&#x…

antDv table组件滚动截图方法的实现

在开发中经常遇到table内容过多产生滚动的场景,正常情况下不产生滚动进行截图就很好实现,一旦产生滚动就会变得有点棘手。 下面分两种场景阐述解决的方法过程 场景一:右侧不固定列的情况 场景二:右侧固定列的情况 场景一 打开…

汽车电子功能安全

功能安全考虑 分析方法:FMEA,DFMEA(设计潜在失效模式和影响分析) 严重度(Severity),暴露率(Exposure),可控性(Controllability)评估…

IDEA中maven项目失效,pom.xml文件橙色/橘色

IDEA中maven项目失效,pom.xml文件橙色/橘色 IDEA中Maven项目失效 IDEA中创建的maven项目中的文件夹都变成普通格式,pom.xml变成橙色 右键点击橙色的pom.xml文件,选择add as maven project maven项目开始重新导入相应依赖,恢复…

JavaScript |(四)正则表达式 | 尚硅谷JavaScript基础实战

学习来源:尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 文章目录 📚正则表达式📚正则表达式字面量方式📚字符串&正则表达式🐇split()🐇search()🐇match()🐇replace()…

MyBatis-动态SQL-if and where

动态SQL 随着用户的输入或外部条件的变化而变化的SQL语句,我们称之为动态SQL语句 select *from empwhere name like concat(%, #{name}, %)and gender #{gender}and entrydate between #{begin} and #{end}order by update_time desc; 在上述的SQL语句…

如何实现 token 加密

介绍下如何实现 token 加密 以最常见的 token 格式 jwt 为例 token 分为三段,分别是 header、payload、signature 其中,header 标识签名算法和令牌类型;payload 标识主体信息,包含令牌过期时间、发布时间、发行者、主体内容等&…

科技引领,教育革新|EasyV助力数字孪生智慧教育建设!

数字孪生校园是以物联网、大数据、云计算、人工智能、三维可视化等新型数字化技术为基础,构建的数智校园的“大脑”。对校园的人、车、资产设施、各业务系统进行全联接,实现数据全融合、状态全可视、业务全可管、事件全可控,使校园更安全、更…

2023-08-04 LeetCode每日一题(不同路径 III)

2023-08-04每日一题 一、题目编号 980. 不同路径 III二、题目链接 点击跳转到题目位置 三、题目描述 在二维网格 grid 上,有 4 种类型的方格: 1 表示起始方格。且只有一个起始方格。2 表示结束方格,且只有一个结束方格。0 表示我们可以…

985/211/双一流大学名单

985大学“985工程”是在1998年5月北京大学百年校庆的致辞中提到的,因为日期在98年5月,所以称作“985”。该工程在1999年时正式启动,最初选定的院校包括清华大学,北京大学等九所院校。现包括我国39所院校。 211大学“211 工程”是…

Noah-MP陆面过程模型建模方法与站点、区域模拟教程

详情点击链接:Noah-MP陆面过程模型建模方法与站点、区域模拟教程 陆面过程的内容(陆表能量平衡、水循环、碳循环等),陆面过程研究的重要性。 图 1 陆面过程主要研究内容 陆面过程模型的发展、基本原理、常用陆面过程模型等。 图…

yay无法更新问题解决

背景 更新yay后,yay安装软件捞出问题,查的github上的都不靠谱。因此需要把yay的版本固定下,正常的11版本是可用的 解决方案 sudo pacman -S --needed git base-devel git clone https://aur.archlinux.org/yay.git cd yay makepkg -si # 注…

Frida Error: getPackageInfoNoCheck(): has more than one overload的解决方法

使用frida绕过证书的时候执行代码: frida -U -f de.robv.android.xposed.installer --codeshare akabe1/frida-multiple-unpinning --no-pause遇到这样的错误 Error: getPackageInfoNoCheck(): has more than one overload, use .overload() to choose from: 网上查…

uniapp 实现滑动元素并下方有滚动条显示

用uniapp实现下图的样式 代码如下&#xff1a; <template><view class"content"><view class"data-box" ref"dataBox" touchend"handleEnd"><view class"data-list"><view class"data-ite…

算法训练营第五十六天||● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇

● 583. 两个字符串的删除操作 这道题涉及到两个字符串删除操作&#xff0c;注意递推公式&#xff0c;理解不到位&#xff0c;需要再次做 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;以i-1为结尾的字符串word1&#xff0c;和以j-1位结尾…

Mac 执行 .sh命令报错 command not found

使用终端执行.sh命令&#xff0c;可输入&#xff1a; ./FileName.sh如果提示 Permission denied 权限不足&#xff0c;可增加sudo&#xff0c;命令如下&#xff1a; sudo ./FileName.sh如果提示 command not found 可以这样: chmod ux *.sh sudo ./FileName.sh

Mr. Cappuccino的第58杯咖啡——MacOS配置Maven和Java环境

MacOS配置Maven和Java环境 查看Mac使用的是哪个shell下载并准备Maven下载Maven配置前准备 下载并安装JDK下载JDK安装JDK 配置Maven和Java环境添加配置加载配置 验证环境 查看Mac使用的是哪个shell echo $SHELL如果使用的是bash&#xff0c;则使用以下命令 open ~/.bash_profi…

某银行软件测试笔试题

&#xff08;时间90分钟&#xff0c;满分100分&#xff09; 考试要求&#xff1a;计算机相关专业试题 一、填空题&#xff08;每空1分&#xff0c;共10分&#xff09; 1. ______验证___是保证软件正确实现特定功能的一系列活动和过程。 2. 按开发阶段分&#xff0c;软件测试可…