计算机网络TCP/UDP知识点

news2024/11/15 15:33:14

这是一些在学习过程中关于计算机网络八股文的一些知识点记录:

TCP/UDP

TCP怎么保证可靠性

1.序列号,确认应答,超时重传

数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明了它下一次需要接收的数据序列号。如果发送发迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进行重传。这个时间一般是2*RTT(报文段往返时间)+一个偏差值。

2.窗口控制与高速重发控制/快速重传

TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定要等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值。如果不使用窗口控制,每一个没收到确认应答的数据都要重发

简述一下TCP建立连接与断开连接的过程

在这里插入图片描述

注意:要注意到每一步他们的状态变化。

下面就有一个状态变化图:
在这里插入图片描述

ESTABLISHED: 表示连接已经建立。三次握手完成

FIN_WAIT_2: 主动关闭链接的一方,发出 FIN 收到 ACK 以后进入该状态。 称之为半连接或半关闭状态。 该状态下的 socket 只能接收数据,不能发。

TIME_WAIT: 表示收到了对方的 FIN 报文,并发送出了 ACK 报文,等 2MSL 后即可回到 CLOSED 可用状态。主动发起连接的才会处于该状态…等 2MSL 的目的是确保主动关闭端发送的最后一个 ACK 能到达对端…TIME_WAIT 的时长是 2MSL,不要说 1min,2min 之类的!!!

TCP的三次握手和四次挥手的原因是什么?

为什么三次握手?
  1. 三次握⼿才可以阻⽌重复历史连接的初始化(主因):比如当旧的SYN报文在某一网络节点长时间滞留,在到达服务端时,客户端可以通过自己上下文判断这个是一个历史连接(序列号过期或超时),会发送一个RST,终止连接。如果是两次连接的话两次握⼿在收到服务端的响应后开始发⽣数据,不能判断当前连接是否是历史连接。 三次握⼿可以在客户端准备发送第三次报⽂时,客户端因有⾜够的上下⽂来判断当前连接是否是历史连接
  2. 三次握⼿才可以同步双⽅的初始序列号:两次握⼿只保证了⼀⽅的初始序列号能被对⽅成功接收,没办法保证双⽅的初始序列号都能被确认接收。
  3. 三次握⼿才可以避免资源浪费:两次握⼿会造成消息滞留情况下,服务器重复接受⽆⽤的连接请求 SYN 报⽂,⽽造成重复分配资源只有两次握⼿时,如果客户端的SYN请求连接在⽹络中阻塞,客户端没有收到服务端的ACK报⽂,会重新发送SYN由于没有第三次握⼿,服务器不清楚客户端是否收到了⾃⼰发送的建⽴连接的 ACK 确认信号,所以每收到⼀个SYN 就只能先主动建⽴⼀个连接
为什么是四次挥手?

TCP协议是全双工通信,这意味着客户端和服务器端都可以向彼此发送数据,所以关闭连接是双方都需要确认的共同行为。所以客户端收到FIN报⽂,先回⼀个ACK应答报⽂,服务端可能还要数据需要处理和发送,等到其不再发送数据时,才发送FIN报⽂给客户端表⽰同意关闭连接。所以服务端的ACK和FIN⼀般都会分开发送,从⽽⽐三次握⼿导致多了⼀次

假设是三次挥手时,首先释放了A到B方向的连接,此时TCP连接处于半关闭(Half-Close)状态,这时A不能向B发送数据,而B还是可以向A发送数据。如果此时A收到了B的确认报文段后,就立即发送一个确认报文段,这会导致B向A还在发送数据时连接就被关闭。这样会导致A没有完整收到B所发的报文段

TCP,UDP的区别是什么?

  1. TCP是面向字节流,UDP面向的是数据报的
  2. TCP是面向连接的,UDP是面向无连接的
  3. TCP可以保证数据安全有序,UDP不保证
  4. TCP复杂,UDP程序简单
  5. TCP只能单对单,点对点,UDP支持一对一,一对多,多对多通信
  6. TCP⾸部长度不适⽤选项字段是20字节,使⽤选项字段长度增加(可变),UDP⾸部固定8字节。
  7. TCP数据⼤于MSS时会在TCP层将数据进⾏分⽚传输,到达⽬的地后同样在传输层进⾏合并,如果有某个⽚丢失则只需要重传丢失的分⽚即可; UDP数据⼤于MTU时会在IP层分⽚,同样也在⽬的IP层合并,如果某个IP分⽚丢失,则需要将所有分⽚都进⾏重传,开销⼤

TCP,UDP的优缺点是什么?

TCP优点:

可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。

TCP缺点:

慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。

UDP优点:

快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。

UDP缺点:

不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。

TCP、UDP适用的场景?

TCP应用场景

效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。举几个例子:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录

UDP应用场景

效率要求相对高,对准确性要求相对低的场景。举几个例子:QQ聊天、在线视频、网络语音电话

TCP相比UDP为什么是可靠的?

1.确认和重传机制:建立连接时三次握手同步双方的“序列号 + 确认号 + 窗口大小信息”,是确认重传、流控的基础传输过程中,如果Checksum校验失败、丢包或延时,发送端重传。

2.数据排序:TCP有专门的序列号字段

3.流量控制:窗口和计时器的使用。TCP窗口中会指明双方能够发送接收的最大数据量

4.拥塞控制:TCP的拥塞控制由4个核心算法组成。“慢启动”(Slow Start)、“拥塞避免”(Congestion avoidance)、“快速重传 ”(Fast Retransmit)、“快速恢复”(Fast Recovery)。

什么事TCP拥塞控制?以及达到什么情况的时候开始减慢增长的速度?

拥塞控制

​ 如果把窗口定的很大,发送端连续发送大量的数据,可能会造成网络的拥堵(大家都在用网,你在这狂发,吞吐量就那么大,当然会堵),甚至造成网络的瘫痪。所以TCP在为了防止这种情况而进行了拥塞控制。

慢启动

​ 定义拥塞窗口,一开始将该窗口大小设为1,之后每次收到确认应答(经过一个rtt),将拥塞窗口大小*2。

拥塞避免

​ 设置慢启动阈值,一般开始都设为65536。拥塞避免是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数上升,而是加法增加(每次确认应答/每个rtt,拥塞窗口大小+1),以此来避免拥塞。

​ 将报文段的超时重传看做拥塞,则一旦发生超时重传,我们需要先将阈值设为当前窗口大小的一半,并
且将窗口大小设为初值1,然后重新进入慢启动过程。

快速重传

​ 在遇到3次重复确认应答(高速重发控制)时,代表收到了3个报文段,但是这之前的1个段丢失了,便对它进行立即重传。然后,先将阈值设为当前窗口大小的一半,然后将拥塞窗口大小设为慢启动阈值+3的大小。

这样可以达到:在TCP通信时,网络吞吐量呈现逐渐的上升,并且随着拥堵来降低吞吐量,再进入慢慢
上升的过程,网络不会轻易的发生瘫痪。

采用慢开始和拥塞避免算法的时候

  1. 一旦cwnd>慢开始门限,就采用拥塞避免算法,减慢增长速度
  2. 一旦出现丢包的情况,就重新进行慢开始,减慢增长速度

采用快恢复和快重传算法的时候

  1. 一旦cwnd>慢开始门限,就采用拥塞避免算法,减慢增长速度
  2. 一旦发送方连续收到了三个重复确认,就采用拥塞避免算法,减慢增长速度

OSI与TCP模型

在这里插入图片描述

TCP/IP数据链路层的交互过程是怎么样的?

​ 网络层等在数据链路层用MAC地址作为通信目标,数据包到达网络层等往数据链路层发送的时候,首先回去ARP缓存表去查找ip对应的MAC地址,如果查到了,就将此ip对应的MAC地址封装到链路层数据包的包头。如果缓存中没有找到,则会发起一个广播,who is ip xxx tell ip xxxx,所有收到广播的机器看到这个ip是不是自己的,如果是自己的,则以单播的形式将自己的mac地址回复给请求机器。

传递到IP层怎么知道报文该给哪个应用程序,它怎么区分UDP报文还是TCP报文?

根据端口号可以查看区分需要接受到的程序;

根据IP协议头中的标识字段:UDP 17、TCP 6

请说说你对TCP连接中time_wait状态的理解

time_wait是如何产生的

​ 首先调用close()发起主动关闭的一方,在发送最后一个ACK之后会进入time_wait的状态,也就说该发送方会保持2MSL时间之后才会回到初始状态。MSL值得是数据包在网络中的最大生存时间。产生这种结果使得这个TCP连接在2MSL连接等待期间,定义这个连接的四元组(客户端IP地址和端口,服务端IP地址和端口号)不能被使用。

time_wait状态产生的原因是:
1.实现TCP全双工连接的可靠释放

​ 假设发起主动关闭的一方(client)最后发送的ACK在网络中丢失,由于TCP协议的重传机制,执行被动关闭的一方(server)将会重发其FIN,在该FIN到达client之前,client必须维护这条连接状态,也就说这条TCP连接所对应的资源不能被立即释放或重新分配,直到另一方重发的FIN达到之后,client重发ACK后,经过2MSL时间周期没有再收到另一方的FIN之后,该TCP连接才能恢复初始的CLOSED状态。如果主动关闭一方不维护这样一个TIME_WAIT状态,那么当被动关闭一方重发的FIN到达时,主动关闭一方的TCP传输层会用RST包响应对方,这会被对方认为是有错误发生,然而这事实上只是正常的关闭连接过程,并非异常。

2.防止具有相同四元组的旧数据包被收到

​ 经过 2MSL 这个时间,⾜以让两个⽅向上的数据包都被丢弃,使得原来连接的数据包在⽹络中都⾃然消失,再出现的数据包⼀定都是新建⽴连接所产⽣的。

time_wait过多的危害:

1.内存资源占用;

2.对端口资源的占用,一个TCP连接至少消耗一个本地端口;

如果发起连接⼀⽅的 TIME_WAIT 状态过多,占满了所有端⼜资源,则会导致⽆法创建新连接。

time_wait状态的避免

首先服务器可以设置SO_REUSEADDR套接字选项来通知内核,如果端口忙,但TCP连接位于TIME_WAIT状态时可以重用端口。在一个非常有用的场景就是,如果你的服务器程序停止后想立即重启,而新的套接字依旧希望使用同一端口,此时SO_REUSEADDR选项就可以避免TIME_WAIT状态。

为什么要设置time_wait

1.保证A发送的最后一个ACK报文能够到达B。也就是上面提到的保证全双工连接的可靠释放

2.A在发送完最后一个ACK报文段后,经过2MSL后,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,也就是为了防止具有相同四元组的旧数据包被收到。

针对OSI七层模型和TCP/IP四层模型,每一层都举例出一两个协议:

OSI七层协议:
  1. 物理层:通过媒介传输比特,主要包括的协议为:IEE802.3 CLOCK RJ45
  2. 数据链路层:将比特组装成帧和点到点的传递,传输单位为,主要包括的协议为MAC VLAN PPP
  3. 网络层:负责数据包从源到宿的传递和网际互连,传输单位为,主要包括的协议为IP ARP ICMP
  4. 传输层:提供端到端的可靠报文传递和错误恢复,传输单位为报文,主要包括的协议为TCP UDP
  5. 会话层:建立、管理和终止会话,传输单位为SPDU,主要包括的协议为RPC NFS
  6. 表示层:对数据进行翻译、加密和压缩,传输单位为PPDU,主要包括的协议为JPEG ASII
  7. 应用层:允许访问OSI环境的手段,传输单位为APDU,主要包括的协议为FTP HTTP DNS
TCP/IP四层协议:
  1. 网络接口层

  2. 网络层:IP协议、ICMP协议、ARP协议、RARP协议。

  3. 传输层:UDP协议、TCP协议

  4. 应用层:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送 协议),POP3协议(邮局协议),HTTP协议

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

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

相关文章

有哪些核定生产能力的方法?详解标准工时的测定方法与核定方法!

在当今制造业的快速发展中,生产能力管理已成为企业核心竞争力的关键。它不仅关系到企业如何高效地满足市场需求,更直接影响到生产成本的控制和市场响应速度。准确核定生产能力,是实现生产计划与企业资源优化配置的桥梁。本文将深入探讨核定生…

KCP源码解析系列(一)KCP协议介绍

一、什么是KCP TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而 KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的…

Linux环境安装Docker Engine并打包部署Java项目

文章目录 1、卸载老版本2、配置docker仓库3、安装最新版docker4、启动docker启动重启开机启动停止查看状态:已经启动查看状态:没有启动 5、查看版本6、运行hello world测试7、配置镜像8、使用docker安装一个应用9、其他命令查看运行的docker应用查看容器…

【网络ping】无法ping通电脑 服务器失败是什么原因

【网络ping】无法ping通电脑 服务器失败是什么原因 转载: https://www.lsjlt.com/ask/show/show.php?id80772631782 点击此处 查看博文《无法ping通的原因》 一、无法ping 通的原因 网络连接问题:首先需要检查网络连接是否正常。可以尝试通过ping其他…

全国首个数据要素人才标准,亿信华辰携76家单位共同起草

在数字化浪潮汹涌的今天,数据已跃升为社会经济发展的核心引擎。如何精准、高效地评估数据要素领域人才的专业能力,成为了亟待解决的关键议题。亿信华辰积极响应国家战略布局,依托自身在大数据管理与应用领域的深厚底蕴,携手业界76…

阿里推出视频 AI 生成式框架 Tora,通过轨迹生成视频

在科技高速发展的今天,AI 已经开始融入人们的生活,就在不久前阿里集团推出了一款可以生成视频的 AI 框架 Tora,这是一款可以面向轨迹的 DiT 框架,它可以结合文本、视觉以及轨迹生成视频。 Tora 之前有可以生成视频的模型也就是扩…

Docker数据管理和网络管理

文章目录 一、Docker数据管理Docker容器的分层哪些数据需要持久化容器数据持久保存方式数据卷(data volume)数据卷的使用场景数据卷的特点数据卷使用方法实际例子 二、网络管理Docker安装完成后默认的网络设置创建容器后的网络配置修改默认网络设置容器名…

vue3前端开发-小兔鲜-购物车的列表渲染和删除及统计计算

vue3前端开发-小兔鲜-购物车的列表渲染和删除及统计计算&#xff01;这一次&#xff0c;完成列表的渲染和统计计算的内容&#xff0c;比如&#xff0c;统计购物车内有多少货物的数量&#xff0c;及商品的总价格。 <script setup> import { useCartStore } from /stores/c…

RPA财务机器人是什么,RPA的具体应用场景有哪些?| 实在RPA研究

越来越多的人工智能及超自动化技术在企业财务工作中得以普及应用&#xff0c;以提升财务工作效率&#xff0c;促进财务部门实现全面数字化转型。 RPA财务机器人是什么&#xff1f; RPA&#xff0c;即机器人流程自动化&#xff08;Robotic Process Automation&#xff09;&#…

【方案合集】园区数据治理解决方案(PPT原件)

1、园区大数据治理综述 2、园区大数据治理总体架构 3、园区大数据治理演进路线 4、园区大数据治理建设实施 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划…

大模型的当前和未来

自2022年年底ChatGPT打响大模型热潮第一枪&#xff0c;至今已有一年半多的时间&#xff0c;大模型持续受到业界高度关注。大模型当前发展情况如何&#xff0c;未来又将如何演进发展&#xff1f; 大模型入门 1.什么是大模型、超大模型和Foundation Model&#xff1f; 大模型**…

『 Linux 』网络基础(二)

文章目录 数据在不同层之间的名称数据的跨网络传输端口号TCP协议与UDP协议网络字节序套接字编程的种类 数据在不同层之间的名称 以TCP/IP模型为例,数据在不同层之间有不同名称; 应用层(Applicant Layer) 数据名称一般为 消息(Message),请求/响应(Request/Response); 在这一层…

图像处理中的一些知识点详解

目录 Sobel算子的详细由来以及scharr算子laplace算子的由来 Sobel算子的详细由来以及scharr算子 具体解释可以参考&#xff1a;这篇知乎的前两个回答&#xff0c;尤其第二个回答。 补充&#xff1a;这里的梯度计算使用的是前向差分和后向差分相结合的中心差分思想&#xff08;…

看看月薪3W的电商运营,怎么做数据分析!

作为电商运营的你&#xff0c;得学会分析数据才是真正学会运营。其实不是数据分析太难&#xff0c;而是你没有找对方法&#xff01; 首先&#xff0c;从分析框架方面来看&#xff0c;可以分为【店铺整体、爆款单品、竞品店铺、推广数据、行业大盘】5个维度。从这些维度考虑&am…

【Linux系列】sshpass使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Qt自定义TreeWidget,实现展开折叠按钮在右侧,且一条竖直线上对齐

效果如下&#xff1a; 图片随便找的&#xff0c;可能需要调下样式&#xff0c;代码复制可用&#xff0c;留给有需要的人。 #ifndef CustomTreeWidget_h__ #define CustomTreeWidget_h__#include <QTreeWidget> #include <QPushButton>class CCustomTreeWidget : p…

【CTF | WEB】001、攻防世界WEB题目之backup

文章目录 backup题目描述:解题思路&#xff1a;解题过程&#xff1a; backup 题目描述: X老师忘记删除备份文件&#xff0c;他派小宁同学去把备份文件找出来,一起来帮小宁同学吧&#xff01; 进入题目后显示&#xff1a; 解题思路&#xff1a; 在进行网站安全检查时&#xf…

北大和鹏城实验室联合推出的图像视频统一多模态大模型Chat-UniVi(CVPR 2024)

Chat-UniVi: Unified Visual Representation Empowers Large Language Models with Image and Video Understanding 论文信息 paper&#xff1a;CVPR 2024 code&#xff1a;https://github.com/PKU-YuanGroup/Chat-UniVi 训练130亿大模型仅3天&#xff0c;北大提出Chat-UniVi…

实战|uniapp模仿微信实现发送位置消息,解决滚动页面地图层级冲突

前言 在即时通讯应用中&#xff0c;虽然发送位置信息不是核心功能&#xff0c;但在特定场景下&#xff0c;这个功能仍然非常有用。 本文将介绍如何在 uniapp 中实现位置信息的发送和展示&#xff0c;特别是在遇到地图层级问题时的解决方案。 以下内容均基于 uniapp 打包 App …

puppeteersharp爬取网页数据

官网 https://github.com/hardkoded/puppeteer-sharp 安装 创建控制台项目&#xff0c;安装PuppeteerSharp 18.1.0 编写代码 安装chrome async static Task Main(string[] args) {//如果Chromium不存在则先下载var browserFetcher new BrowserFetcher();//获取安装的浏览…