参考数据 : TCP/IP 卷一 ,图解TCP/IP,计算机网络-自顶向下方法

参考网站 : 4.6 如何理解是 TCP 面向字节流协议? | 小林coding

目录

延迟应答

什么是延迟应答???

为啥要有延迟应答呢??

捎带应答

再谈四次挥手

面向字节流

怎么理解面向数据报与面向字节流呢???

粘包问题

如何解决"粘包问题" 呢???

TCP异常

主机关机

程序崩溃

主机掉电/网线断开


延迟应答

什么是延迟应答???

延迟应答就是接收方延迟一段时间接收ACK,这样应用进程就有时间来消耗接收缓冲区里面的数据,所以滑动窗口的窗口大小也变大了.这样就提高了效率.

为啥要有延迟应答呢??

首先延迟应答是效率机制也就是说是提高TCP的效率的,让其在没有网络故障的情况下,让其能够传输更多的数据.这样传输效率就变高了.

每收到几个数据报就返回一个ACK,当最后没有数据报传输给接收方,达到最大延迟时间,就返回ACK

捎带应答

在客户端-服务器场景下,一发一收这样的场景下,可以在延迟应答的基础上更进一步提高效率.

服务端返回给客户端ACK的时候,可以在延迟一段时间内将服务端给客户端的响应一并返回给客户端,这样就提升了效率.

再谈四次挥手

在延迟应答和捎带应答的机制下,四次挥手也有可能变为3次挥手.

面向字节流

怎么理解面向数据报与面向字节流呢???

我以UDP和TCP协议来说明

也就是以下我们会有两个问题

为啥UDP是面向数据报的??? 为啥TCP是面向字节流的呢???

  • UDP面向数据报???

使用UDP协议载传输数据时,操作系统不会将信息拆分成多个数据报发送给接收方,而是组装好UDP报头就交给了网络层,所以一个UDP报文的数据部分就是一个完整的信息.

  • 如果接收方接收到两个数据报呢??

接收方接收到一个UDP数据报,会将其放到一个队列中去,当用户读取时就会从队列中取出一个UDP数据报从内核拷贝给接收缓冲区.

总结 :

使用UDP协议传输数据的时候,操作系统不会将一个信息拆分成多个数据报发送给接收方,组装好UDP报头就将其交给网络层,所以一个UDP数据报就代表一个完成的信息,接收方在接收数据报的时候,会将数据报放到一个队列中,当用户读取这个数据的时候,就会从内核中取走UDP数据报拷贝到接收缓冲区里面.

  • 如何理解TCP是面向字节流呢??

使用TCP协议传输数据的时候,操作系统会将一个信息拆分成多个数据报发送给接收方.在传输层角度上看是面向数据报的,一个一个报文发送给接收方,但是在应用层角度上看是一个字节一个字节的数据,是面向字节流的

粘包问题

对于TCP面向字节流就有一个问题,使用TCP在传输数据的时候就会将数据拆分成多个数据报,如果并不知道每一条信息的长度或者是信息的边界,这样就接收方就无法读取有效的信息,好像多个数据报都粘在了一起,就是所谓的粘包问题.

如何解决"粘包问题" 呢???

这就需要通过应用层来去处理

  • 通过固定长度来确定消息的边界

将每个信息都设定固定长度,每读取完一个固定长度大小的数据包,就读取了一个完整的信息.

  • 通过标识符来确定信息的边界

给每一条信息的后面都加上特殊符号,读取到特殊符号就代表读取了一条完整的信息,如果信息里面有特殊符号就需要进行转义,避免提前读取完一个无效的数据信息

  • 通过自定义信息结构

需要自定义一个数据报,包括包头长度和包数据,每次读取只读取每一个数据报的包头长度那么长,就读取了一个有效的数据.

TCP异常

有以下几种场景 : 主机关机,程序崩溃,主机掉电,网线断开.

主机关机

如果主机关机就会杀死用户的所有进程,杀死进程也就会释放pcb,释放文件描述符表对应的文件资源,接着触发FIN,开起了四次挥手,如果在主机关机之前完成了四次挥手就正常关闭主机,主机关闭之前还没有完成四次挥手,那么就重发FIN,多次重发后,没有响应就放弃重传,主机关闭

程序崩溃

程序崩溃也代表进程没了,也会释放文件描述符表对应的文件资源,就会开启四次挥手流程,由于TCP连接是操作系统内核来完成的,所以就会继续完成四次挥手过程

主机掉电/网线断开

主机掉电与网线断开是一样的效果

  • 接收方掉电/接收方网线断开

如果接收方掉电/网线断开,发送方发送数据没有接收到ACK,就会重传数据,超过最大重传次数,还是没有接收到ACK,就会尝试重新连接,重新连接之后还是没有响应,那么就放弃连接.彻底放弃了.

  • 发送方掉电/网线断开

如果发送方掉电/网线断开,接收方没有收到发送方发送的数据报,无法判定是发送方出问题了,还是数据报丢失,所以接收方会不定期的就会给发送方发送"心跳包",心跳包有特殊的报文ping,如果发送方还存活就会给接收方返回一个特殊的报文pong,这就证明发放还存活,否则发送方就挂了.

TCP延迟应答和捎带应答及“粘包问题“和TCP异常相关推荐

  1. Linux_网络_传输层协议 TCP通信滑动窗口(快重传),流量控制,拥塞控制(慢启动),延迟应答,捎带应答,TCP常见问题(字节流,粘包),Listen半连接队列

    紧跟Linux_网络_传输层协议 TCP/UDP继续补充 文章目录 1. TCP通信时滑动窗口(效率) 2. 流量控制(可靠性) 3. 拥塞控制(慢启动) 4. 延迟应答 5. 捎带应答(提高通信效率 ...

  2. TCP协议中的核心知识点,SYN Flood?ISN?滑动窗口?数据重传?拆包粘包?单tcp连接多请求?拥塞管理?(个人收藏学习笔记)

    TCP协议中的核心知识点,滑动窗口?数据重传?拆包粘包?单tcp连接多请求? 1.前言 2.TCP/IP四层结构 3. TCP 3.1 TCP 协议头 3.2 TCP通信过程 3.2.1 建立连接的三 ...

  3. Socket通用TCP通信协议设计及实现(防止粘包,可移植,可靠)

    Socket通用TCP通信协议设计及实现(防止粘包,可移植,可靠) 引文 我们接收Socket字节流数据一般都会定义一个数据包协议.我们每次开发一个软件的通信模块时,尽管具体的数据内容是不尽相同的,但 ...

  4. C# TCP网络编程5(分包和粘包二)

    一:TCP粘包产生的原理 1,TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾.出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能 ...

  5. 网络基础2-3(TCP协议,三次握手,四次挥手,TIME_WAIT状态的作用,TCP如何保证可靠传输,TCP连接中状态转化,滑动窗口,流量控制,快速重传,拥塞窗口,延迟应答,捎带应答,粘包问题)

    TCP协议 TCP协议概念 TCP全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传输进行一个详细的控制 TCP协议 ...

  6. 4-9:TCP协议之延迟应答和捎带应答

    文章目录 一:延迟应答 二:捎带应答 一:延迟应答 假设接收端的缓冲区是1M,一次收到了500K的数据,如果立即应答那么返回的窗口就是500K:但是有的时候可能处理端应用程序速度较快,极短时间内就把这 ...

  7. 线程与进程,http、https(post、get),socket(tcp、udp)的拆包和粘包,protocol buffer、大头小头简述

    一.tcp和udp区别? 三次握手安全:tcp建立连接(三次握手),安全可靠(有序,无差错.无丢失.无重复): 建立连接:udp通信前不需建立连接,不可靠传输(视频.音频通话): 分组开销:TCP面向 ...

  8. TCP、UDP、TCP三次握手与四次挥手、TCP如何保证可靠传输、TCP异常分析、拆包和粘包等

    4.OSI模型 4.1.OSI七层模型 4.2.七层模型功能 ​ 物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输,如网线:网卡标准. ​ 数据链路层:接收来自物理层的位流形式的数据 ...

  9. 【计算机网络】TCP协议经典十五连问(半连接、重传、滑动窗口、流量窗口、拥塞控制、SYN Flood攻击、粘包拆包)

    文章目录 1. 讲下TCP三次握手流程 2.TCP握手为什么是三次,不能是两次?不能是四次? 2.1 为什么握手不能是两次呢? 2.2 为什么握手不能是四次呢? 3. 讲下TCP四次挥手过程 4. T ...

最新文章

  1. 免费 | 程序员如何在面试中避免被坑?今晚告诉你!
  2. 用事件队列解决GUI的操作顺序问题(Qt中处理方法)
  3. ELF文件格式详解-请查收
  4. DeepMind为明年的AAAI,准备了一份各种DQN的混血
  5. 如何解决佳能mp288打印机P08、P07报错
  6. python是由哪个人创造的文字_楔形文字是由什么人创造的
  7. 互联网晚报 | 12月5日 星期日 | 饿了么启用AI技术研发新菜品;搜狐将布局知识直播;《英雄联盟手游》获选苹果年度游戏...
  8. 计算机管理中看不到iis,Win10系统找不到internet信息服务(IIS)管理器怎么办
  9. Java基础(冒泡排序)
  10. c语言无符号数最大值和最小值,c语言 int最大值是多少?
  11. office 中墨迹书写工具_word2016 墨迹书写 word2016墨迹书写工具
  12. 分段函数的期望和方差_2020考研数学一大纲
  13. MySQL ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
  14. Python实现支持向量机(基于双月数据集)
  15. ECharts热力图指定颜色
  16. 学习方法-学习观(03)费曼技巧
  17. Linux中ibus输入法中全拼和双拼的问题+解决VNCserver切换不成功问题
  18. 2021秋软工实践个人作业一
  19. am335x硬件定时器使用
  20. plt.plot() marker 一览表 (散点图)

热门文章

  1. 在ros使用for auto报错
  2. C++ 遍历循环语句 for(auto i:) 和 for_each()
  3. 考证宝典电脑如何下载
  4. ARP欺骗泛洪攻击的防御——DAI动态ARP监控技术
  5. 前端面试超全整理0(html css)
  6. mac系统安装yarn,配置淘宝镜像失败的问题
  7. 导出数据库中的表为PDF格式(freemark+jdbc+springMVC)
  8. 开源算力引擎 BridgX 发布 0.6.0 版本:新增三种权限管理功能
  9. mysql 5.7.18-winx64_mysql-5.7.18-winx64安装配置的详细操作
  10. 图像超分辨率之SRCNN(Learning a Deep Convolutional Network for Image Super-Resolution)