ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

网络通信协议过程

2022-04-02 18:33:35  阅读:158  来源: 互联网

标签:网络通信 协议 请求 报文 发送 过程 连接 客户端


一、DNS解析ip和端口号

二、建立TCP连接 -- 三次握手

TCP为可靠协议,通过使用滑动窗口协议,来保证数据的有序完整

TCP对网络阻塞的处理

(1)慢开始:每收到一个报文确认,窗口大小加一;传输数据时,刚开始时发的慢,如果不丢包,则调快发送速率,如果丢包,则调低发送速率;

(2)拥塞避免:当传输窗口大小到达阈值时,每次往返窗口,大小加一,加快发送速率;当出现超时网络速率时,慢开始阈值为当前窗口的一半,重新开始慢开始阶段;

(3)消息补偿:①快重传:遇到报文丢失,接受方重复三次最近确认;②快恢复:发送方收到三次确认,将窗口大小降一半并发送缺失报文。

UDP为不可靠协议:

  • 不保证消息交付:不确认,不重传,无超时
  • 不保证交付顺序:不设置包序号,不重排,不会发生队首阻塞
  • 不跟踪连接状态: 不必建立连接或重启状态机
  • 不需要拥塞控制: 不内置客户端或网络反馈机制

三、在TCP连接的基础上,进行http协议

http的发展:

1.0:基础的HTTP协议,每一个通信都需要建立一个TCP连接;

1.1:增加长连接:保持已建立的连接,可以重复使用;

​ 增加管道化功能:允许一个TCP连接发送多个请求,不过会按顺序处理,先处理完a请求,再处理b请求;但产生了请求队头阻塞问题,即先处理完a请求才能响应b请求;

2.0:将管道化改进为stream模型:将每一个请求或响应称为一个数据流(stream),每一个数据流都有独一无二的id,通过编号区分请求和响应,客户端发送的数据流id为奇数,服务端发送的数据流id为偶数。http2可以取消某一次的请求,但保持tcp的连接,可以被其它请求使用。

增加了多工特性:同时受到了a请求和b请求,按顺序处理a请求,处理中途发现a请求处理过程非常耗时,于是先发送a请求已经处理完的部分数据,然后去处理b请求,处理完b请求,再继续处理a请求。解决了队头阻塞问题,但仍存在tcp滑动窗口数据帧队头阻塞问题。

头信息压缩功能:将每次重复的字段维护在客户端和服务端的一张表中,头信息只携带索引,以减少宽带消耗。

3.0:基于QUIC协议重新实现http2.0的特性

基于UDP和DH算法建立连接,实现1RTT的安全握手,如果客户端缓存了会话信息,则不需要建立连接,可以直接通信;

基于UDP进行通信,没有tcp滑动窗口控制协议,没有了tcp滑动窗口数据帧队头阻塞问题;

传输的基本单位是packet,加密单元也是packet,没有了https加密队头阻塞问题;

将拥塞控制算法从运输层提升到应用层处理,可以更加灵活的切换不同算法。

HTTPS协议

HTTPS协议是基于HTTP协议,通过SSL协议或者TSL协议提供加密处理数据、验证对方身份以及数据完整性保护;

ssl协议过程:

1、客户端给出协议版本号,一个随机数a和客户端支持的加密方法;

2、服务器从客户端支持的加密方法选择一个,给出数字证书和一个随机数b,数字证书可以公证服务器,防止中间人假冒攻击;

3、客户端对服务器数据证书进行检验,通过使用数字证书中的公钥加密一个随机数c;

4、服务器根据私钥解密随机数c,此时客户端和服务器都知道随机数a,b,c;

5、服务器和客户端根据三个随机数和约定的加密方法生成对称性密钥加密接下来的通信。

四、通信完成,断开TCP连接 -- 四次挥手

1、FIN-WAIT-2阶段的作用:

因为服务器接受到客户端FIN报文,发送确认后,会把CLOST-WAIT阶段未发送完的数据继续发送,而客户端在FIN-WAIT-2阶段等待服务器发送完数据,服务器发送完数据后会发送一个FIN报文表示发送完成,可以断开连接。

2、为什么客户端在往服务器发送FIN报文后,会等待固定时间2MS的时间

因为服务端发送的FIN报文后,可能因为网络阻塞到达不了服务器,即使服务器重新ping客户端,也无法确定客户端是网络阻塞还是已经关闭,为了防止无休止的等待,客户端发送后等待2MS的时间,出现网络阻塞,报文可能能到达服务端告诉服务端可以关闭了,即便服务端无法接收到FIN报文,也知道客户端只等待2MS,时间到了,因此超过2MS后,可以直接关闭连接。

网络七层结构图

五层协议:

物理层、链路层、网络层、运输层、应用层

四层协议:

物理层、网络层、运输层、应用层

标签:网络通信,协议,请求,报文,发送,过程,连接,客户端
来源: https://www.cnblogs.com/caijilin/p/16093498.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有