网络面试题-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 不能正常关闭
相关文章:
网络面试题-UDPTCP
1 UDP 1.1 ⾯向报⽂ UDP 是⼀个⾯向报⽂(报⽂可以理解为⼀段段的数据)的协议。意思就是UDP 只是报⽂的搬运⼯,不会对报⽂进⾏任何拆分和拼接操作 具体来说 在发送端,应⽤层将数据传递给传输层的 UDP 协议, UDP 只会…...
在CSDN学Golang场景化解决方案(即时通讯goim)
一,支持单个、多个、广播消息推送 在goim中,用户可以通过维护长连接实现即时通讯功能,通过路由算法将消息发送给指定的客户端或群组。具体而言,goim支持以下三种方式进行消息推送: 单个推送:向某一个指定客…...
chrome插件开发实例02-使用content_scripts对用户浏览页面操作
目录 引言 chrome插件 插件演示 源代码 manifest.json content_scripts.js css设置(放在css文件夹下)<...

【Python目标识别】Labelimg标记深度学习(YOLO)样本
人工智能、ai、深度学习已经火了很长一段时间了,但是还有很多小伙伴没有接触到这个行业,但大家应该多多少少听过,网上有些兼职就是拿电脑拉拉框、数据标注啥的,其实这就是在标记样本,供计算机去学习。所以今天跟大家分…...

【雕爷学编程】MicroPython动手做(30)——物联网之Blynk 3
知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…...

C高级--day3(shell中的输入、命令置换符、数组、算数运算、分支结构)
#!/bin/bash pls ~/ -l | grep "^-" | wc -l qls ~/ -l | grep "^d" | wc -l echo "普通文件个数:$p" echo "目录文件个数:$q"#!/bin/bash read file posexpr index $file \. strexpr substr $file $((pos1)) 2…...

安防监控国标GB28181平台EasyGBS视频快照无法显示是什么原因?如何解决?
安防视频监控国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发ÿ…...
route命令 路由表 Linux Centos
route route命令在Linux中被用于显示和操纵IP路由表。然而,现在大部分Linux发行版都推荐使用ip route命令代替route,因为ip route提供更多的功能和更灵活的控制。 以下是route命令的基本用法: 查看路由表: route -n 这个命令显示当前机器的路…...
CMMI评审
CMMI评审 对于刚入行的朋友来说,可能对CMMI比较陌生。但对于工作多年的朋友来说,有可能都会接触过CMMI。那CMMI到底是什么? CMMI的全称为Capability Maturity Model Integration,即能力成熟度模型集成。对于软件行业,一般是指软件能力成熟度模型集成,是由美国国防部与卡内…...

深入了解 PostgreSQL 扩展插件
深入了解 PostgreSQL 扩展插件 在 PostgreSQL 数据库中,扩展插件是极具价值的工具,它们为我们提供了丰富多样的功能增强。本篇博客将深入介绍几个常用的 PostgreSQL 扩展插件,包括 pg_stat_statements、uuid、postgis 以及 postgis_raster。…...
记一次kernel patch(附开源贡献相关)
文章目录 开源操作系统流程手记smatch能发现的典型问题常见的修复方案附:偶然发现,unlikely函数搞开源贡献的一些捷径 开源操作系统 看了zhihu上的一些科普,明白二次开发是常见现象,套壳、抄袭、自研都不是很科学的说法。中外大厂…...
Pytorch Tutorial【Chapter 1. Basic operation of tensor】
Pytorch Tutorial 文章目录 Pytorch TutorialChapter 1. Basic operation of tensorReference Chapter 1. Basic operation of tensor 本节介绍有关张量Tensor的基本操作 Tensor相当于numpy中的ndarrays 创建空Tensor和全零Tensor,torch.zeros(d0,d1)类似于numpy…...
[环境配置]centos7安装vncserver
1. 首先,需要安装X Window System和GNOME桌面环境。可以通过以下命令进行安装: yum groupinstall "X Window System" yum groupinstall "GNOME Desktop" 2. 安装VNC服务器。可以通过以下命令进行安装: yum install ti…...

Excel功能总结
1)每一张表格上都打印表头 “页面布局”-->“打印标题”-->页面设置“工作表”页-->打印标题“顶端标题行” 如:固定第1~2行,设置成“$1:$2” 2)将页面内容打印在一页【缩印】 1.选好需要打印的区域,“页面布…...
用Rust实现23种设计模式之 组合模式
组合模式是一种结构型设计模式,它允许将对象组合成树状结构,并且能够以统一的方式处理单个对象和组合对象。以下是组合模式的优点和使用场景: 优点: 简化客户端代码:组合模式通过统一的方式处理单个对象和组合对象&a…...

opencv36-形态学操作-膨胀 cv2.dilate()
膨胀操作是形态学中另外一种基本的操作。膨胀操作和腐蚀操作的作用是相反的,膨胀操作能对图像的边界进行扩张。膨胀操作将与当前对象(前景)接触到的背景点合并到当前对象内,从而实现将图像的边界点向外扩张。如果图像内两个对象的…...

8266 ESP-07模块的使用 以及详细介绍
esp8266系列 陶瓷天线 版本 详细介绍说明 最近使用8266的ESP-01S做了个数据无线收发装置,发现板载天线信号太弱,装上外壳后信号更弱,因此考虑能否使用带有外接天线的模块代替ESP-01S。经过在安可信官网搜索发现,ESP07、ESP07S、ES…...

Linux之 centos、Ubuntu 安装常见程序 (-) Mysql 5.7 版本和8.0版本
CentOS 安装 MySql 注意 需要有root权限 安装5.7版本 – 由于MySql并不在CentOS的官方仓库中,所以需要通过rmp命令: 导入MySQL仓库密钥 1、配置MySQL的yum仓库 配置yum仓库 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 安装…...

【IDEA+Spark Streaming 3.4.1+Dstream监控套接字流统计WordCount保存至MySQL8】
【IDEASpark Streaming 3.4.1Dstream监控套接字流统计WordCount保存至MySQL8】 把DStream写入到MySQL数据库中 Spark 3.4.1MySQL 8.0.30sbt 1.9.2 文章目录 【IDEASpark Streaming 3.4.1Dstream监控套接字流统计WordCount保存至MySQL8】前言一、背景说明二、使用步骤1.引入库2…...
Dcat Admin 入门应用指南
在现代的网络应用开发中,管理后台是不可或缺的一部分。它为开发者提供了一个方便管理和监控应用数据的界面。而 Dcat Admin 是一个强大的管理后台框架,它基于 Laravel 框架开发,提供了丰富的功能和灵活的扩展性。本文将带您深入了解 Dcat Adm…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...