计网入门还没到放弃

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握手建立。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CUDA是一种并行计算平台和编程模型,用于利用GPU的强大并行计算能力。下面我将用300字来回答“CUDA从入门放弃”。 首先,对于初学者来说,入门CUDA需要了解基本的GPU架构和并行计算的概念。接着,需要安装CUDA开发工具包和相应的驱动程序。初学者可以从CUDA官方网站上下载相关的安装程序,并且可以在开发者社区中获取到大量的学习资源,如教程、示例代码等。 在入门阶段,可以从简单的向量加法、矩阵乘法等基本操作开始,逐渐熟悉CUDA的编程模型和语法。通过阅读官方文档和学习资源,了解如何在CUDA中定义和调用并行计算的内核函数,并且学习如何使用CUDA提供的并行计算库函数,如线程同步、共享内存等。 进一步学习CUDA时,可以尝试更复杂的并行计算任务,如图像处理、深度学习等。可以使用CUDA提供的高级功能,如纹理内存、异步执行等,来进一步优化并行计算的性能。 然而,CUDA编程也具有一定的挑战。使用CUDA进行并行计算需要仔细管理内存访问模式,并且需要了解GPU的硬件限制和性能特点。此外,调试CUDA代码也需要一定的经验和技巧,因为在GPU上的并行计算很难进行实时调试。 最后,决定放弃CUDA取决于个人兴趣、需求和时间投入。如果对并行计算和GPU编程没有充分的兴趣或者缺乏时间投入,可能会选择放弃CUDA。此外,如果发现在特定领域或问题上,使用CPU或其他编程模型能够更快、更高效地解决问题,也可以考虑放弃CUDA。 总而言之,CUDA是一种强大的并行计算平台和编程模型,对于需要利用GPU进行高性能计算和加速的任务非常有帮助。通过逐步学习和实践,初学者可以掌握CUDA的基本概念和编程技巧。放弃CUDA取决于个人需求和投入程度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值