面试-快速学习计算机网络-UDP/TCP

1. OSI四层和七层映射

在这里插入图片描述
区别:

  1. 应用层,表示层,会话层合并为了应用层
  2. 数据链路层物理层合并为了网络接口层

2. TCP和UDP的区别?

在这里插入图片描述
总结:
1 . TCP 向上层提供面向连接的可靠服务 ,UDP 向上层提供无连接不可靠服务
2. UDP 没有 TCP 传输可靠,但是可以在实时性要求高的地方有所作为。
3. 对数据准确性要求高,速度可以相对较慢的,可以选用TCP。
4. 应用方面UDP实时应用比如视频直播等,TCP可靠传输比如大文件传输
5. UDP面向报文(只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。),TCP字节流
6. UDP头部开销小 8字节相比 TCP 的至少20字节要少得多,传输数据报文时是很高效的。
在这里插入图片描述

3. TCP详解

1. tcp报文头部

在这里插入图片描述
需要说明的:
源端口
目的端口
seq序号: 占4个字节,是本报文段所发送的数据项目组第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。例如,一报文段的序号为300,而且数据共100字节,则下一个报文段的序号就是400。
ack确认序号: 占4字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号;确认序号应该是上次已成功收到数据字节序号+1。

注意:上述两个序号有值有效的前提是标识为1
标识位
1、URG:当URG=1时,注解此报文应尽快传送,而不要按本来的列队次序来传送。与“紧急指针”字段共同应用,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号,
使接管方可以知道紧急数据共有多长。
2、ACK:只有当ACK=1时,确认序号字段才有效;
3、PSH:当PSH=1时,接收方应该尽快将本报文段立即传送给其应用层。
4、RST:当RST=1时,表示出现连接错误,必须释放连接,然后再重建传输连接。复位比特还用来拒绝一个不法的报文段或拒绝打开一个连接;
5、SYN:SYN=1,ACK=0时表示请求建立一个连接,携带SYN标志的TCP报文段为同步报文段;
6、FIN:发端完成发送任务。

2. 滑动窗口(流量控制)

滑动窗口用于流量控制: TCP流量控制主要是针对接收端的处理速度不如发送端发送速度快的问题,消除发送方使接收方缓存溢出的可能性。。可以理解成接收端所能提供的缓冲区大小。字节数起始于确认序号字段指明的值(这个值是接收端正期望接收的字节。
在这里插入图片描述

思考1: 重复发送
第一步发送了[33, 43),如果这次发送[35, 45),那中间重叠部分不是发送了两次,所以这里要 是全部重新发送还是只发送接收端没有收到的数据,如果全部发送那么重复
发送的数据接收端怎么处理。
这个下面快速重传会讲

思考2: 滑动窗口是否可是可靠性的保障?
一直传输数据,直到数据发送完成。这么一来就保证数据数据的可靠性,因为如果某数据没有获取到,那么ack永远不会跳过它。与其说是滑动窗口的可靠,不如说是ACK机制的可靠

3. 校验和

检验和覆盖了整个TCP报文段:TCP首部和数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。

4. TCP拥塞

  1. 流量控制是通过接收方来控制流量的一种方式;而拥塞控制则是通过发送方来控制流量的一种方式
  2. 发送方的让自己的发送窗口

win=min(cwnd,接受端接收窗口大小)

说明: 发送方取拥塞窗口与滑动窗口的最小值作为发送的上限。
3. TCP拥塞控制的几种方法:慢启动,拥塞避免,快重传和快恢复。

在这里插入图片描述

  • 慢启动不慢:1然后 指数增长
    cwnd不能一直这样无限增长下去,一定需要某个限制。TCP使用了一个叫慢启动门限(ssthresh)的变量,一旦cwnd>=ssthresh(大多数TCP的实现,通常大小都是65536)
  • 慢启动过程结束,拥塞避免阶段开始;cwnd的值不再指数级往上升,开始加法增加。此时当窗口中所有的报文段都被确认时,cwnd的大小加1,cwnd的值就随着RTT开始线性增加
  • 超时,重传了一个报文段把ssthresh降低为cwnd值的一半。把cwnd重新设置为1。重新进入慢启动过程。

4. 快速重传

如果,包没有连续到达,就ack最后那个可能被丢了的包,如果发送方连续收到3次相同的ack,就重传。Fast Retransmit的好处是不用等timeout了再重传,而是只是三次相同的ack就重传。

比如:如果发送方发出了1,2,3,4,5份数据,第一份先到送了,于是就ack回2,结果2因为某些原因没收到,3到达了,于是还是ack回2,后面的4和5都到了,但是还是ack回2因为2还是没有收到,于是发送端收到了三个ack=2的确认,知道了2还没有到,于是就马上重转2。然后,接收端收到了2,此时因为3,4,5都收到了,于是ack回6。

在这里插入图片描述
主要是为了避免一个问题就是当接收端发现2丢失之后我是否需要死等2,即使我先收到了3,4,5 ,等到超时再发送? 快速重传保证了,到我收到3, 4,5时不需要等2到超时,我就可以直接返回ack=2了,三次之后,发送端会自动重传3。

5. TCP状态机

在这里插入图片描述
没啥好说的理解就行
三次握手
客户端视角:
close 情况下,发起Connet,报文标志 syn , 状态变为SYN_SENT ,等待服务端返回ack (syn ack), 进入established, 之后再发ack,这时可以发送数据了(注意这个时候如果发数据可以添加syn)

服务端视角:
close 情况下,listen等待连接,收到连接后syn_recv 之后返回ack, 等待客户端ack到established

四次挥手

  • 客户端视角:
    主动请求关闭,发送FIN这个时候客户端不能发数据了,但是服务端可以发,进入FIN_WAIT1, 接收到 ACK ,进入FIN_WAIT2
    ,等待,服务端发送FIN, 这个时候进入TIME_WAIT(2MSL),并返回ack给服务端

  • 服务端视角:
    收到FIN 包, 回复ack ,进入CLOSE_WAIT, 这个时候还是可以发数据,不发了之后 发一个FIN标志的包,表示要关闭了, 进入 LAST_ACK, 收到客户端的ACK之后CLOSE

为什么客户端TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

  • 防止最后一个客户端回复的ACK服务端没有收到。服务端处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文。
  • MSL 是 Maximum Segment Lifetime,报⽂最⼤⽣存时间,它是任何报⽂在⽹络上存在的最⻓时间,超过这个时间报⽂将被丢弃。

为什么握手不能是两次?

为了防止服务器端开启一些无用的连接增加服务器开销
防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

  • 总结就是防止开启一些“异常端口”浪费,所谓异常就是,比如服务端返回的ack没有收到,客户端需要超时重连,这段时间服务端的端口白白占用了,或者恶意人员开了很多半连接的端口,浪费了端口。

什么是半连接队列?
在这里插入图片描述

6. TCP的可靠性

TCP主要提供了

  • 检验和
  • 序列号/确认应答
  • 超时重传
  • 最大消息长度
  • 滑动窗口控制

等方法实现了可靠性传输。但是总结其实还是校验和 序列号/确认应答

7. 什么是TCP粘包和拆包?

  1. TCP 是面向流,没有界限的一串数据。TCP 底层并不了解上层业务数据的具体含义,它会根据 TCP 缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被 TCP 拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的 TCP 粘包和拆包问题
  2. 要发送的数据小于 TCP 发送缓冲区的大小,TCP 将多次写入缓冲区的数据一次发送出去,将会发生粘包。
  3. 要发送的数据大于 TCP 发送缓冲区剩余空间大小,将会发生拆包
  4. 待发送数据大于 MSS(最大报文长度),TCP 在传输前将进行拆包。即 TCP 报文长度 - TCP 头部长度 > MSS

那怎么解决呢?

  • 发送端将每个数据包封装为固定长度
  • 在数据尾部增加特殊字符进行分割
  • 将数据分为两部分,一部分是头部,一部分是内容体其中头部结构大小固定,且有一个字段声明内容体的大小。

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

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

相关文章

FL Studio21.1中文完整版Win/Mac

FL Studio All Plugins Edition【中文完整版 Win/Mac】适合音乐制作人/工作室使用,全套插件!(20.9新增Vintage Chorus,Pitch Shifter变调插件)FL Studio是超多顶级音乐人的启蒙首选!包括百大DJ冠军Martin Garrix&…

21.0 CSS 介绍

1. CSS层叠样式表 1.1 CSS简介 CSS(层叠样式表): 是一种用于描述网页上元素外观和布局的样式标记语言. 它可以与HTML结合使用, 通过为HTML元素添加样式来改变其外观. CSS使用选择器来选择需要应用样式的元素, 并使用属性-值对来定义这些样式.1.2 CSS版本 CSS有多个版本, 每个…

AI 绘画Stable Diffusion 研究(十一)sd图生图功能详解-美女换装

免责声明: 本案例所用安装包免费提供,无任何盈利目的。 大家好,我是风雨无阻。 为了让大家更直观的了解图生图功能,明白图生图功能到底是干嘛的,能做什么事情?今天我们继续介绍图生图的实用案例-美女换装的制作。 对于…

ComPDFKit PDF SDK for Windows Crack

ComPDFKit PDF SDK for Windows Crack 添加了在创建文本框时调整默认属性的支持。 增加了对调整PDF大小时调整宽度的支持。 添加了对编辑文本时更多快捷方式的支持。 优化了文本输入,并将字体样式与原始文本相匹配。 在内容编辑器模式下复制和粘贴时优化了UI交互。 …

用于弥散加权MRI的关节各向异性维纳滤光片研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

三款远程控制软件对比,5大挑选指标:安全、稳定、易用、兼容、功能

陈老老老板🤴 🧙‍♂️本文专栏:生活(主要讲一下自己生活相关的内容)生活就像海洋,只有意志坚强的人,才能到达彼岸。 🧙‍♂️本文简述:三款远程控制软件对比,5大挑选指标&#xff1…

spring如何进行依赖注入,通过set方法把Dao注入到serves

1、选择Generate右键鼠标 你在service层后面方法的这些: 2、UserService配置文件的写法是怎样的: 3、我们在UserController中执行一下具体写法: 最后我们执行一下 : 4、这里可能出现空指针,因为你当前web层,因为你new这个对象根…

示例1:FreeRTOS移植详解_基于HAL库工程

1、开发环境 (1)Keil MDK: V5.38.0.0 (2)STM32CubeMX: V6.8.1 (3)MCU: STM32F103C8(F1系列软仿真最方便) (4)ARM编译器:V5(使用V6编译会报错) 2、移植准备工作 (1)用于移植FreeRTOS的基础工程。 时钟已配置好串口已配置好printf已经重定向到串口1 (2)FreeRT…

Android性能优化----执行时间优化

作者:lu人皆知 在APP做启动优化时,Application会做一些初始化的工作,但不要在Application中做耗时操作,然而有些初始化工作可能是很耗时的,那怎么办?初始化操作可以开启子线程来完成。 计算执行时间 常规…

MySQL的select ... where ...会加锁吗?

先说答案:不会。但select … where … lock in share mode会加锁。实验如下。 存储引擎innodb,MySQL版本5.7。 1:select … where … 如下图: 1:select … where … lock in share mode 如下图: 接着我…

【SpringCloud】SpringCloudAlibaba官网资料

出现原因 Spring Cloud Netflix Projects Entering Maintenance Mode 官网 博客 https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md官网 https://spring.io/projects/spring-cloud-alibaba#overview英文 https://github.com/alibaba/spring-cloud-…

五种消息模型简单说明

五种消息模型简单说明 RabbitMQ提供了6种消息模型,但是第6种其实是RPC,并不是MQ,因此不予学习。那么也就剩下5种。但是其实3、4、5这三种都属于订阅模型,只不过进行路由的方式不同。  我们通过一个demo工程来了解下RabbitMQ的…

pytest自动化框架运行全局配置文件pytest.ini

还记得在之前的篇章中有讲到Pytest是目前主要流行的自动化框架之一,他有基础的脚本编码规则以及两种运行方式。 pytest的基础编码规则是可以进行修改,这就是今日文章重点。 看到这大家心中是否提出了两个问题:pytest的基础编码规则在哪可以…

【算法C++实现】5、二叉树

二叉树节点结构体 class Node { public:int val;Node* left;Node* right;Node(int a) : val(a), left(nullptr), right(nullptr) {}Node(int a, Node* l, Node* r): val(a), left(l), right(r) {}}1、递归遍历 递归遍历二叉树,每个节点的遍历顺序叫递归序&#xf…

软件工程模型-架构师之路(四)

软件工程模型 敏捷开发: 个体和交互 胜过 过程和工具、可以工作的软件 胜过 面面俱到的文件、客户合作胜过合同谈判、响应变化 胜过 循序计划。(适应需求变化,积极响应) 敏捷开发与其他结构化方法区别特点:面向人的…

代码随想录第27天|39. 组合总和,40.组合总和II,131.分割回文串

39. 组合总和 分析这道题的搜索过程如下: 因为这道题没有限制要搜索几层,所以可以一直搜索直到sumtarget或者sum>target就return 回溯三部曲 1.递归函数参数 本题还需要startIndex来控制for循环的起始位置,对于组合问题,什么…

P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布

[NOIP2014 提高组] 生活大爆炸版石头剪刀布 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第 8 集中出现了一种石头剪刀布的升级版游戏。 升级版游戏在传统的石头剪刀布游戏的基础…

在ARM服务器上一键安装Proxmox VE(以在Oracle Cloud VPS上为例)(甲骨文)

前言 如题,具体用到的说明文档如下 virt.spiritlhl.net 具体流程 首先是按照说明,先得看看自己的服务器符不符合安装 Proxmox VE的条件 https://virt.spiritlhl.net/guide/pve_precheck.html#%E5%90%84%E7%A7%8D%E8%A6%81%E6%B1%82 有提到硬件和软…

CSS 选择器

前言 基础选择器 以下是几种常见的基础选择器。 标签选择器&#xff1a;通过HTML标签名称选择元素。 例如&#xff1a; p {color: red; } 上述样式规则将选择所有<p>标签 &#xff0c;并将其文字颜色设置为红色。 类选择器&#xff1a;通过类名选择元素。使用类选择…