计算机网络相关知识点
谈一谈对OSI七层模型和TCP/IP四层模型的理解?
这两种模型都是网络通信中重要的参考模型,他们的设计和功能有一些区别。
首先OSI,OSI七层模型,也被称为开放系统互联参考模型,是一种在国际标准化组织(ISO)中使用的网络互联模型。这个模型将网络通信的过程分为了七个独立但相互关联的层次,包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。其中,应用层直接面向用户提供服务,例如文件传输、电子邮件、远程登录等。
相比之下,TCP/IP四层模型是一种更为实际的网络通信模型,通常被用于互联网协议族(IPv4)中。这个模型包括应用层、传输层、网络层和网络接口层。其中,应用层同样直接为用户提供服务,例如电子邮件传输、网络浏览等。
这两种模型的共同点在于他们都采用了层次结构的概念,能够提供面向连接和无连接两种通信服务机制。然而,他们也存在一些显著的区别。
1.两者的层次结构不同。OSI模型分为七层,而TCP/IP模型分为四层。这意味着OSI模型对网络通信过程的划分更为细致,但同时也增加了理解和实现的复杂性。TCP/IP模型的四层结构相对更为简洁,更容易理解和实现。
2.两者对可靠性的要求不同。OSI模型对可靠性的要求相对更高,它在设计时考虑了各种错误和异常情况,并通过冗余和恢复机制来确保数据的完整性和可靠性。而TCP/IP模型则更注重效率和速度,因此在一些场景下可能会牺牲一定的可靠性。
3.两者的应用范围也有所不同。OSI模型是一个理论模型,并没有成熟的产品与之对应。而TCP/IP模型则是互联网的实际标准,被广泛应用于各种网络设备和操作系统中。
总的来说,OSI七层模型和TCP/IP四层模型都是网络通信中的重要参考模型,它们的设计和功能各有特点。在实际应用中,我们可以根据实际需求来选择适合的模型。
谈谈TCP协议的3次握手过程?

三次握手过程描述:
1.第一次握手:客户端向服务器发送一个同步数据包(同步SYN=1,确认ACK=0,序号seq=x)
2.第二次握手:服务器同意,并回复客户端一个数据包(同步SYN=1,确认ACK=1,序号seq=y,确认号ack=x+1)
3.第三次握手:客户端收到服务器的确认之后,再给服务器发送一个数据包。数据包的TCP首部内容:同步SYN=0,确认ACK=1,序号seq=x+1,确认号ack=y+1
TCP协议为什么要3次握手?2次,4次不行吗?
TCP协议选择三次握手而不是两次或四次,主要是出于对可靠性和效率的综合考虑。
首先来看为什么不能选择两次握手。TCP协议是全双工的,即发送和接收双方都需要进行数据的确认和交互。在两次握手的情况下,发送方发送请求后,接收方只能确认收到请求,但无法确认请求是否被接收方正确处理。这种情况下,如果请求在传输过程中丢失或损坏,接收方因为没有进行确认,就无法发现请求存在问题,这将导致连接不可靠。因此,两次握手无法满足TCP协议对可靠性的要求。
那为什么不能选择四次握手呢?三次握手已经能够保证数据的可靠传输,而四次握手虽然在某些情况下可能增加可靠性,但同时也增加了握手过程的复杂性和延迟。四次握手的多余步骤并没有带来明显的效益提升,反而可能因为复杂的处理过程而降低TCP协议的效率。因此,从效率和实用性的角度考虑,三次握手是最优选择。
综上所述,TCP协议选择三次握手而不是两次或四次,是为了在保证数据可靠传输的同时,尽可能提高传输效率。三次握手既可以确认发送方和接收方之间的连接建立,也可以确保数据在传输过程中的正确性,是一种高效且可靠的网络通信协议。
谈谈TCP协议的四次挥手过程?

第一次挥手:首先客户端向服务器发送连接释放的请求报文(数据包),并停止发送数据。(终止FIN=1,确认ACK = 0)
第二次挥手:服务器收到连接释放的报文之后,给客户端发送确认报文。从客户端到服务器这个方向上的连接就释放了,TCP连接处于半关闭状态。(终止FIN=0,确认ACK=1,序号位seq=v,确认号ack=u+1)
第三次挥手:若服务器已经没有向客户端发送的数据了,其应用进程就通知TCP释放连接,并向客户端发送确认报文。(确认ACK=1,终止FIN=1)
第四次挥手:客户端收到服务器的连接释放报文段后,向服务器发出确认报文。(确认ACK=1,终止FIN = 0)
什么是流量控制?
简单来讲:流量控制是为了控制发送方发送速率,保证接收方来得及接收。
TCP连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失,从而实现流量控制。
TCP使用的流量控制是 利用滑动窗口实现。
什么是滑动窗口?
滑动窗口是一种流量控制技术,它在计算机网络中用于控制数据包的发送和接收。
具体来说,滑动窗口协议在数据流的发送和接收过程中,通过动态地调整窗口大小来控制数据包的发送和接收速率。窗口大小即指在任意一段时间内可以发送或接收多少数据包。当窗口大小达到上限时,发送方或接收方必须停止发送或接收数据包,直到窗口大小再次调整。
滑动窗口协议有两种类型:固定窗口大小和动态窗口大小。在固定窗口大小协议中,窗口大小是固定的,而在动态窗口大小协议中,窗口大小可以动态调整。
滑动窗口协议的应用非常广泛,例如在网络传输、文件传输、数据库事务处理等领域都可以看到它的身影。它不仅可以防止网络拥塞,提高数据传输的效率和可靠性,还可以用来控制数据的流量,确保接收方能够来得及处理接收到的数据。
什么是拥塞控制?
拥塞控制就是为了防止过多的数据注入到网络中,控制的目的就是避免「发送方」的数据填满整个网络,控制「发送方」的数据发送量。
TCP 主要通过四个算法来进行拥塞控制:慢启动、拥塞避免、拥塞发生、快速恢复
如下图:(阻塞发生时的超时重传)
如下图:(阻塞发生时的快速重传)

TCP和UDP有什么区别?
TCP(传输控制协议)和UDP(用户数据报协议)之间存在以下区别:
- 连接性:TCP是面向连接的,在发送方和接收方在发送数据之前,必须通过三次握手建立连接。相反,UDP是无连接的,发送方和接收方之间的数据传输不需要事先建立连接。
- 可靠性:TCP是可靠的传输协议,通过添加序号机制、确认机制、超时重传机制和数据校验等功能,确保数据的可靠传输。然而,UDP是不可靠的协议,其仅在IP协议的基础上添加了端口和差错检查功能,由于IP协议尽最大努力传输,所以导致了UDP的不可靠性。
- 数据传输方式:TCP协议是面向字节流的,它将应用层传递下来的数据仅仅当做无结构的数据流,并不知道所传数据流的含义。它可能将应用程序的两个数据块拼接到一起组成一个段发送。相比之下,UDP是面向报文传输的,发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层,不会进行任何拼接操作。
-
类型
特点
性能
应用场景
首部
是否面向连接
传输可靠性
传输效率
所需资源
TCP
面向连接
可靠
慢
多
要求通信数据可靠
(如文件传输、邮件传输)
20个字节-60个字节
UDP
无连接
不可靠
快
少
要求通信速度快
(如音频、视频)
8个字节
总的来说,TCP和UDP都有各自的优点和使用场景。TCP的主要优点是其可靠性和顺序性,而UDP的主要优点则是其简单性和实时性。选择使用哪一种协议主要取决于应用程序的具体需求和网络环境。
相关文章:
计算机网络相关知识点
谈一谈对OSI七层模型和TCP/IP四层模型的理解? 这两种模型都是网络通信中重要的参考模型,他们的设计和功能有一些区别。 首先OSI,OSI七层模型,也被称为开放系统互联参考模型,是一种在国际标准化组织(ISO)中…...
Jmeter+Ant+Git+Jenkins持续集成介绍
【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程,刷完面试就稳了,你也可以当高薪软件测试工程师(自动化测试) 一 简介 1.什么是ant? ant是构建工具 2.什么是构建 概念到处可查到,形象来说ÿ…...
Spring Cloud Gateway实战WebFlux解析请求体及抛出指定错误代码和信息
概述 基于Spring Cloud开发微服务时,使用Spring Cloud原生自带的Gateway作为网关,所有请求都需要经过网关服务转发。 为了防止恶意请求刷取数据,对于业务请求需要进行拦截,故而可在网关服务增加拦截过滤器。基于此,有…...
Servlet开发-通过代码案例熟悉HttpServletRequest类
关于Servlet开发的流程推荐看servlet开发-通过Tomcat部署一个简单的webapp Servlet开发与idea集成的插件安装推荐看idea集成tomcat(Smart Tomcate插件安装) postman(第三方创建HTTP请求工具)的安装推荐看创建HTTP请求的几种方式…...
离线环境harbor 搭建及使用
一 摘要 本文主要介绍harbor 的安装及使用。 二 环境信息及部署图 2.1 环境信息 名称版本备注操作系统centos7.9容器docker 23.0.1harbor2.7代理nginx待补充 2.2 架构图 说明: 1.harbor 核心服务里有个nginx ,也可以用该nginx 做代理 2.proxy-ngin…...
华为杯数学建模比赛经验分享
再过一周左右,第二十届华为杯数学建模比赛就要开赛了,所以今天分享一下个人数学建模比赛的经验。 今天给大家分享一期关于华为杯数学建模比赛的经验分享,我将从以下三个方面展开说明: (1)如何准备数学建模比赛&#x…...
c语言 - 实现每隔1秒向文件中写入当前系统时间
实现思路 主要是通过库函数和结构体获取当前系统时间(年月日和时分秒)保存到变量里,然后通过格式化输出函数将当前系统时间输出到文件中去。 但是需要注意的是题目要求每隔 1 s对系统时间进行输出,所以需要加入 sleep()函数进行调…...
使用cpolar端口映射的方法轻松实现在Linux环境下SVN服务器的搭建与公网访问
文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…...
前后台分离开发 YAPI平台 前端工程化之Vue-cli
目录 YAPI介绍前端工程化之Vue-cli前端工程化简介前端工程化入门——Vue-cli环境准备Vue项目简介创建Vue项目vue项目目录结构介绍vue项目运行方法 Vue项目开发流程 前后台混合开发这种开发模式有如下缺点: 沟通成本高:后台人员发现前端有问题࿰…...
【js/es6】合集
目录 随机生成字符串每十个字符换行 随机生成字符串 function generateRandomAlphaNum(len) {var rdmString "";for (; rdmString.length < len; rdmString Math.random().toString(36).substr(2));return rdmString.substr(0, len); }每十个字符换行 string.…...
Nginx modules build fail:field ‘pkt6’ has incomplete type
前言 最近升级Nginx 1.24.0,编译第三方module出错: /usr/src/nginx_modules/ngx_json_post_module/src/ngx_json_post_module.c In file included from src/event/ngx_event.h:526,from src/http/ngx_http_upstream.h:14,from src/http/ngx_http.h:34,…...
电脑突然提示mfc140u.dll丢失,缺失mfc140u.dll无法运行程序的解决方法
在当今信息化社会,电脑已经成为我们生活和工作中不可或缺的一部分。然而,随着技术的不断发展,电脑也会出现各种问题。其中,最常见的问题之一就是“mfc140u.dll丢失”。那么,当我们遇到这个问题时,应该如何解…...
国庆day1
消息队列 代码 发送 #include<myhead.h> //声明一个消息结构体 typedef struct {long msgtype; //消息类型char data[1024]; //消息正文 }Msg_s; #define SIZE sizeof(Msg_s)-sizeof(long) //消息正文的大小 int main(int argc, const char *argv[]) {key_t key; /…...
从零开始之了解电机及其控制(11)实现空间矢量调制
广泛地说,空间矢量调制只是将电压矢量以及磁场矢量在空间中调制到任意角度,通常同时最大限度地利用整个电压范围。 其他空间矢量调制模式确实存在,并且根据您最关心的内容,它们可能值得研究。 如何实际执行这种所谓的交替反向序列…...
如何将html转换成markdown
什么是Turndown “Turndown” 是一个用于将 HTML 转换为 Markdown 的 JavaScript 库。它通常用于将富文本内容从网页或其他 HTML 格式转换为纯文本 Markdown 格式,以便在不同平台上显示或存储。 如果在有node环境的情况下要使用 Turndown,首先需要将它…...
【VUE复习·3】@keyup.xxx 键盘事件触发函数(单按键 or 组合按键触发)
总览 1.keyup.xxx or keydown.xxx 单按键触发 2.组合按键触发 一、keyup.xxx or keydown.xxx 1.用法 在我们使用 keyup.enter 时,那么我们可以这样写: <div><input type"text" placeholder"按下回车键以确定..." keyu…...
IntelliJ IDEA学习总结(3)—— IntelliJ IDEA 常用快捷键(带动图演示)
一、构建/编译 Ctrl + F9:构建项目 该快捷键,等同于菜单【Build】—>【Build Project】 执行该命令后,IntelliJ IDEA 会编译项目中所有类,并将编译结果输出到out目录中。IntelliJ IDEA 支持增量构建,会在上次构建的基础上,仅编译修改的类。 Ctrl + Shift + F9:重新编…...
巨人互动|Facebook海外户Facebook的特点优势
Facebook作为全球最大的社交媒体平台之一,同时也是最受欢迎的社交网站之一,Facebook具有许多独特的特点和优势。本文小编将说一些关于Facebook的特点及优势。 1、全球化 Facebook拥有数十亿的全球用户,覆盖了几乎所有国家和地区。这使得人们…...
(vue3)create-vue 组合式API
优势: 更易维护:组合式api,更好的TS支持 之前是选项式api,现在是组合式,把同功能的api集合式管理 复用功能封装成一整个函数 更快的速度 更小的体积 更优的数据响应式:Proxy create-vue 新的脚手架工…...
【如何看待Unity收费】对标中小公司的待就业者的该如何做
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:Uni…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...

