计网入门还没到放弃

TCP报文段格式

在这里插入图片描述
源端口:标识报文的返回地址
目的端口:指明计算机上的应用程序接口
序号:通过SYN包传给接收端主机,每传送一次就+1,用来解决网络包乱序的问题。
确认号:期望下一次收到的数据的序列号,可以默认这个序号之前的数据都已经收到,防止了丢包的问题。
数据偏移:也称为首部长度,首部长度实际上知识了数据区在报文段中的其实偏移量。
检验和:由发送端填充,在接收端对报文段使用CRC算法以检验TCP报文段是否出现损坏,不仅对TCP头部进行校验,同样也要对数据部分进行校验,这是TCP保证安全性的一个重要保障。

TCP三次握手过程

在这里插入图片描述

第一次握手:客户端 -> 服务端 发送SYN报文,包括seq
第二次握手:服务端 -> 客户端 发送SYN+ACK报文,包括seq+1,ack,客户端建立连接
第三次握手:客户端 -> 服务端 发送ACK报文,包括ack+1,服务端建立连接

为什么必须要三次握手

  1. 避免历史连接初始化连接

    在网络拥堵的情况下,第一次握手客户端发送的SYN报文,可能服务器宕机没有收到。
    在重启客户端的时候,会重新发送SYN报文,同时这个过程会重复很多次,就会有很多历史连接。
    那么如果是两次握手,那么服务端在接收到SYN报文的时候,就会建立连接。
    但是返回的SYN+ACK报文也会有很多,这时客户端对比了很多的SYN+ACK报文,比如有n个SYN+ACK报文,那么客户端就会发送n-1个RST报文去让进服务端断开连接,只有最后一个是ACK报文。
    这样,服务端就会建立很多次链接,浪费资源。

  2. 三次握手才可以同步双方的初始化序列号

  3. 避免浪费资源

第一次握手丢失的结果

第一次握手丢失,客户端就会一直重发,在重发一定次数之后就会关闭连接。

第二次握手失败的结果

第二次握手丢失,
首先会重发第一次握手,等待一段时间后关闭。
服务端也会一直重发,一定时间内客户端没有收到ACK报文就会断开连接,服务端在重发一定次数后也会断开连接。

第三次握手失败的结果

第三次握手丢失,服务器会重发一定设置次数的ACK+SNY报文,在等待一定时间后,如果没有收到对应的ACK报文,那么就断开连接。ACK报文没有重发机制。

四次挥手

在这里插入图片描述

第一次挥手:客户端 -> 服务端,发送FIN报文,表示想要断开连接,客户端进入FIN_WAIT1状态。
第二次挥手:服务端 -> 客户端,发送ack报文,服务端进入closed_wait状态。
第三次挥手:服务端 -> 客户端,发送FIN报文,客户端接收到ack报文后进入FIN_WAIT2状态,服务端处理完数据后,发送FIN报文,进入LAST_ACK状态。
第四次挥手:客户端 -> 服务端,发送ack报文,客户端接收到FIN报文后进入TIME_WAIT状态,向服务端发送ack报文,服务端接收到ack报文后关闭连接。客户端在经过2MSL时间后关闭连接。

为什么需要四次挥手

第一次挥手,客户端向服务端发送FIN报文,发送FIN报文表示不在发送数据,但是还能接受数据。
第二次挥手,服务端向客户端发送ACK报文,表示同意断开连接。但是可能我还需要发送一些数据。
第三次挥手,服务端发送完数据,向客户端发送FIN报文请求断开连接。
第四次挥手,客户端向服务端发送ACK报文,同意服务端断开连接,服务端接收到ACK报文后,断开连接。

由上述过程可知,服务端需要完成数据的发送会,才会断开连接,所有FIN和ACK一般会分开发送

第一次挥手丢失的结果

会一直重发,一定时间间隔后如果还没有收到第二次挥手就会自动断开连接。

第二次挥手丢失的结果

会一直重发第一次挥手,一段时间后会断开连接。

第三次挥手丢失的结果

如果第三次挥手丢失,如果使用shutdown()关闭连接,那么会一直等待。
如果使用close()关闭连接,那么会等待一段时间后关闭连接。

第四次挥手丢失的结果

会一直重发第三次挥手,一段时间后断开连接。

HTTP协议的特点

HTTP是应用层协议,是基于TCP的可靠协议,是灵活可拓展的,是无状态的。

HTTP报文格式?怎么分割的?

在这里插入图片描述
由请求行、请求头、请求体组成
请求行包括请求方法、URL、HTTP版本号
请求头中包含key-value形式的数据,去说明报文。
请求体中包含需要发送的内容。
他们的分割使用\r\n的方式进行。

HTTP有什么方法?

GET方法:应该只用在查询方法上
POST方法:新增和修改操作
PUT方法:更新操作
DELETE方法:删除操作
HEAD方法:和GET方法类似。

幂等的请求方法,实际上一定幂等吗?

不一定,假如幂等的GET方法,实际上也可以定义一些更新数据的操作,这样就可能不幂等。
要保证幂等,必须按照方法的规定进行才可以。

HTTP状态码

101:请求者要求切换协议
200:成功状态码
204:也表示成功,但是请求体中没有数据。
206:也表示成功,但是请求体中的数据不是全部数据,是断点续传的基础。
301:代表永久性的重定向
303:临时重定向
304:缓存读取
400:请求报文有错误
403:请求资源的权限不够
404:代表服务器上没有该资源
500:服务器程序错误
501:服务器不具有完成请求的功能
502:表示后端服务器发生错误
503:服务器忙
504:请求超时

HTTP1.1和HTTP2的区别

最重要的区别是,可以并发传输
HTTP2进行了头部压缩、二进制格式
还支持服务器主动推送资源

HTTP3和2的区别

HTTP2.0需要TCP三次握手和TLS四次握手,而HTTP3.0的QUIC协议通过三次握手,就可以完成TCP三次握手和TLS握手建立。

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

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

相关文章

酷开科技用酷开系统打造数字化家庭娱乐与教育的新天地

家庭教育的重要性不言而喻,俗话说:父母是孩子的第一任老师,也是终生的老师。一个人是否能够成长成才,家庭教育是基础和前提,学校教育能够起到促进和引导作用,社会教育也会对一个人的成长产生重要影响。在数…

【YOLOv5/v7改进系列】引入PConv——轻量快速的卷积块

一、导言 《奔跑吧,别走:追求更高的FLOPS以实现更快的神经网络》,主要探讨了如何设计快速且高效的神经网络模型。文章指出,尽管许多研究致力于减少浮点运算次数(FLOPs)来提升模型速度,但FLOPs的减少并不直接等同于延迟…

Zookeeper部署

Zookeeper部署 下载安装包Linux解压安装包修改配置文件编辑zoo.cf配置 启动服务停止服务常用zookeeper指令查看namespace列表创建namespace删除namespace 注意:该文章为简单部署操作,没有复杂的配置内容,用的是3.7.2版本。 下载安装包 进入z…

python爬虫需要什么HTTP代理?

用来爬虫的话,还是建议用高匿名代理,但显然题主用了高匿名代理还是出现了一部分问题,我们可以先找到问题关键再解决它,一般爬虫用了高匿名代理出现被封会有以下几种原因: 1.代理IP的质量不过关 一般来说每个网站都有…

秋招突击——6/20——复习{(单调队列优化)——最大子序列和,背包问题——宠物小精灵收服问题}——新作{两两交换链表中的节点}

文章目录 引言复习单调队列优化——最大子序列和思路分析实现代码参考实现 背包问题——宠物小精灵的收服问题个人实现参考实现 新作两两交换链表中的节点个人实现参考实现 删除有序数组中的重复项个人实现知识补全迭代器的访问和控制vector删除特定的元素erasevector底层删除元…

PHP 数组排序详解与实例

在PHP编程中,数组是一种非常常见和重要的数据结构,而对数组进行排序则是处理和展示数据时必不可少的操作之一。本文将详细介绍PHP中数组排序的各种方法、函数和示例,帮助您掌握如何根据不同需求对数组进行排序。 1. PHP 中的数组排序函数 PH…

Consul入门笔记

简介 Consul,HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul的方案更一站式,内置服务注册与发现框架、分布一致性协议实现、健康检查、K/V存储、多数据中心方案&…

面试-java并发与多线程的部分函数

1.sleep和wait的区别 基本的差别: Sleep是Thread的方法。Wait是object方法。Wait不传参,最终也是调用wait(native)的传参方法。 Sleep方法可以在任何地方使用。 Wait方法只能在synchronized方法或synchronized方法块中使用。 最主要的本质区别&#xf…

【NOI】C++程序结构入门之嵌套循环一

文章目录 前言一、嵌套循环1.概念2.语法2.1 for循环嵌套for2.2 while循环嵌套for2.3 while循环嵌套while2.4for循环嵌套while2.5 注意2.5.1内层循环之前2.5.2内层循环之后 3.按位检查 二、例题讲解问题:1448. 随机体能测试问题:1469. 数的统计问题&#…

vue中图谱关系插件relation-graph

vue中图谱关系插件relation-graph 一、效果图二、安装下载&#xff08;vue2.0版本的&#xff09;三、直接上代码 一、效果图 二、安装下载&#xff08;vue2.0版本的&#xff09; npm install --save relation-graph var foo bar;三、直接上代码 <template><div cla…

【从0实现React18】 (五) 初探react mount流程 完成核心递归流程

更新流程的目的&#xff1a; 生成wip fiberNode树标记副作用flags 更新流程的步骤&#xff1a; 递&#xff1a;beginWork归&#xff1a;completeWork 在 上一节 &#xff0c;我们探讨了 React 应用在首次渲染或后续更新时的整体更新流程。在 Reconciler 工作流程中&#xff…

LLC开关电源开发:LLC设计参考文档(模态分析)

电源简析和全桥LLC模型分析 1.1模拟电源、开关电源和数字电源简介 1.1.1 模拟电源 模拟电源&#xff1a;即变压器电源&#xff0c;通过铁芯、线圈来实现&#xff0c;线圈的匝数决定了两端的电压比&#xff0c;铁芯的作用是传递变化磁场&#xff0c;&#xff08;我国&#xff09…

摒弃反模式:使用Kotlin委托优化Android BaseActivity

摒弃反模式&#xff1a;使用Kotlin委托优化Android BaseActivity 在Android开发中&#xff0c;许多开发者习惯于创建名为“BaseActivity”或“BaseFragment”的基类&#xff0c;以便在所有Activity或Fragment中共享一些通用行为。这种方法乍一看似乎是个好主意&#xff0c;但实…

零基础女生如何入门人工智能,从哪里下手?学习时间大概要多久?

作为一个理工科早期毕业生&#xff0c;出于近乎本能的敏感&#xff0c;格外关注全网热议的ChatGPT。 本来国内就业环境就不好&#xff0c;各行各业内卷越来越严重&#xff0c;加上人工智能的异军突起&#xff0c;各行各业势必将迎来科技进步跨时代的巨大冲击&#xff0c;在此情…

000005 - HDFS 读写流程

HDFS 读写流程 1 HDFS 写数据流程1.1 HDFS 写数据流程图1.2 HDFS 写数据之网络拓扑 - 节点距离计算1.3 机架感知&#xff08;副本存储节点选择&#xff09; 2 HDFS 读数据流程2.1 HDFS 读数据流程图 3 HDFS 如何做到机架感知 1 HDFS 写数据流程 1.1 HDFS 写数据流程图 &#x…

【代码随想录刷题】day02——977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

977.有序数组的平方 方法一&#xff1a;暴力法 class Solution { public:vector<int> sortedSquares(vector<int>& nums) {// 暴力法for(int i 0; i < nums.size(); i){nums[i] * nums[i];}sort(nums.begin(), nums.end());return nums;} };方法二&#…

安美数字酒店宽带运营系统——命令执行漏洞(CNVD-2021-37784)

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 安美数字酒店宽带运营系统 server_ping.php 存在远程命令执行漏洞&#…

2-15 基于matlab的蚁群,模拟退火,遗传,神经网络,禁忌搜索等智能优化算法对TSP问题

基于matlab的蚁群&#xff0c;模拟退火&#xff0c;遗传&#xff0c;神经网络&#xff0c;禁忌搜索等智能优化算法对TSP问题。五种优化算法对多个城市路径进行规划&#xff0c;通过优化速度、距离可比较五种方法的优劣。程序已调通&#xff0c;可直接运行。 2-15 蚁群优化算法 …

智能屏幕人体雷达感应开关模块,飞睿智能低功耗毫米波雷达技术,让冰箱更节能

在智能家居日益普及的今天&#xff0c;各种创新技术层出不穷&#xff0c;极大地提升了人们的生活品质。其中&#xff0c;人体雷达感应开关模块作为一种创新的传感器技术&#xff0c;正在逐步改变我们对家电设备的传统认知。本文将深入探讨飞睿智能人体雷达感应开关中的毫米波雷…

qml自定义组件

不管是component还是分文件编写的一个自定义组件&#xff0c;遵循如下&#xff1a; a:不管哪一级的子对象 都可以直接调根节点下的方法和属性 b:不管哪一级的子对象 调用非根节点的方法和属性&#xff0c;前面要加上该节点的id,即id.方法()或id.属性的形式 import QtQuick 2.…