| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> TCP延迟应答和捎带应答及“粘包问题“和TCP异常 -> 正文阅读 |
|
[网络协议]TCP延迟应答和捎带应答及“粘包问题“和TCP异常 |
目录 延迟应答什么是延迟应答???延迟应答就是接收方延迟一段时间接收ACK,这样应用进程就有时间来消耗接收缓冲区里面的数据,所以滑动窗口的窗口大小也变大了.这样就提高了效率. 为啥要有延迟应答呢??首先延迟应答是效率机制也就是说是提高TCP的效率的,让其在没有网络故障的情况下,让其能够传输更多的数据.这样传输效率就变高了. 每收到几个数据报就返回一个ACK,当最后没有数据报传输给接收方,达到最大延迟时间,就返回ACK 捎带应答在客户端-服务器场景下,一发一收这样的场景下,可以在延迟应答的基础上更进一步提高效率. 服务端返回给客户端ACK的时候,可以在延迟一段时间内将服务端给客户端的响应一并返回给客户端,这样就提升了效率. 再谈四次挥手在延迟应答和捎带应答的机制下,四次挥手也有可能变为3次挥手. 面向字节流怎么理解面向数据报与面向字节流呢???我以UDP和TCP协议来说明 也就是以下我们会有两个问题 为啥UDP是面向数据报的??? 为啥TCP是面向字节流的呢???
使用UDP协议载传输数据时,操作系统不会将信息拆分成多个数据报发送给接收方,而是组装好UDP报头就交给了网络层,所以一个UDP报文的数据部分就是一个完整的信息.
接收方接收到一个UDP数据报,会将其放到一个队列中去,当用户读取时就会从队列中取出一个UDP数据报从内核拷贝给接收缓冲区.
使用TCP协议传输数据的时候,操作系统会将一个信息拆分成多个数据报发送给接收方.在传输层角度上看是面向数据报的,一个一个报文发送给接收方,但是在应用层角度上看是一个字节一个字节的数据,是面向字节流的 粘包问题对于TCP面向字节流就有一个问题,使用TCP在传输数据的时候就会将数据拆分成多个数据报,如果并不知道每一条信息的长度或者是信息的边界,这样就接收方就无法读取有效的信息,好像多个数据报都粘在了一起,就是所谓的粘包问题. 如何解决"粘包问题" 呢???这就需要通过应用层来去处理
TCP异常有以下几种场景 : 主机关机,程序崩溃,主机掉电,网线断开. 主机关机如果主机关机就会杀死用户的所有进程,杀死进程也就会释放pcb,释放文件描述符表对应的文件资源,接着触发FIN,开起了四次挥手,如果在主机关机之前完成了四次挥手就正常关闭主机,主机关闭之前还没有完成四次挥手,那么就重发FIN,多次重发后,没有响应就放弃重传,主机关闭 程序崩溃程序崩溃也代表进程没了,也会释放文件描述符表对应的文件资源,就会开启四次挥手流程,由于TCP连接是操作系统内核来完成的,所以就会继续完成四次挥手过程 主机掉电/网线断开主机掉电与网线断开是一样的效果
如果接收方掉电/网线断开,发送方发送数据没有接收到ACK,就会重传数据,超过最大重传次数,还是没有接收到ACK,就会尝试重新连接,重新连接之后还是没有响应,那么就放弃连接.彻底放弃了.
如果发送方掉电/网线断开,接收方没有收到发送方发送的数据报,无法判定是发送方出问题了,还是数据报丢失,所以接收方会不定期的就会给发送方发送"心跳包",心跳包有特殊的报文ping,如果发送方还存活就会给接收方返回一个特殊的报文pong,这就证明发放还存活,否则发送方就挂了. |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 21:24:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |