计算机网络面试题(二十二):TCP沾包、拆包以及解决办法

news/2024/5/17 17:39:15 标签: 网络, 面试, TCP

在这里插入图片描述
在这里插入图片描述

文章目录

    • UDP
    • TCP
    • 什么是沾包拆包
        • (1)正常接收
        • (2)只收到一个数据包(全部沾包了)
        • (3)服务端收到了两个数据包(部分沾包)
    • 为什么发送沾包、拆包
    • 解决办法


UDP

UDP是基于数据包协议,UDP首部采用16bit指示UDP数据报文长度。因此接收端可以利用长度信息明确将不同的数据包区分开,从而避免沾包和拆包问题


TCP_9">TCP

TCP面向字节流的

  • 应用层和传输层的数据交互是大小不等的数据块

TCP没有将这些数据块区分边界,仅仅是一连串没有结构的数据流

  • TCP帧结构中,首部没有表示数据长度的字段

基于以上原因才产生了TCP沾包和拆包问题


什么是沾包拆包

假设客户端向服务端发送两个数据包(packet1、packet2),那么服务端在接收时存在三种情况

(1)正常接收

在这里插入图片描述

(2)只收到一个数据包(全部沾包了)

在这里插入图片描述
由于接收端不清楚这两个数据包的界限,所以不知道如何处理

(3)服务端收到了两个数据包(部分沾包)

在这里插入图片描述
在这里插入图片描述

一个不完整、一个多了一块


为什么发送沾包、拆包

沾包和拆包的本质上服务端难以界限接收的数据包

拆包

  • 要发生的数据 > TCP发送缓冲区的大小
  • 待发送数据

沾包

  • 要发生的数据 < TCP发送缓冲区大小
  • 接收端应用层长时间没有读取接收缓冲区内的数据

解决办法

由于TCP是面向字节流的,无法理解上层的业务逻辑(它也不知道哪些是属于同一数据包的),所以在底层是无法保证数据包不被拆分和重组的,只能通过上层的应用协议栈设置解决

  1. 消息定长

既然难以界限,那就和UDP意义设置固定长度(不够补0)

  1. 消息边界

在包尾设置换行符等对数据包边界进行定义(例:FTP)

  1. 将消息分为消息头和消息体

消息头包含总长度

总的来说就是要让接收端可以对数据包进行区分


http://www.niftyadmin.cn/n/1488559.html

相关文章

SQL教程(二):主键

文章目录主键【1】主键选取原则【2】ID主键【3】联合主键主键 关系型数据库中&#xff0c;一张表中的每一行数据被称为一条记录&#xff0c;一条记录就是由多个字段组成的 数据表中记录的约束&#xff1a;任意两条记录不能重复 不能重复不是指完全不相同&#xff0c;只要主键…

简历模板(助力2020秋招)

关注公众号<小杨的python之路> 回复 “简历模板” 公众号回复“简历模板”

计算机网络面试题(二十三):TCP滑动窗口和流量控制

文章目录TCP滑动窗口TCP流量控制TCP滑动窗口 前言&#xff1a;TCP窗口控制数据传输速率 窗口是缓存的一部分&#xff0c;用来暂时存放字节流 发送方和接收方各有一个窗口 发送窗口和接收窗口 接收方通过响应报文首部的窗口字段告诉发送方自己的窗口大小&#xff0c;发送方参照…

操作系统笔试题(一)

文章目录第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题第一题 &#xff08;&#xff09;是指从作业提交给系统到作业完成的时间间隔 周转时间 周转时间&#xff1a;作业提交~作业完成&#xff0c;其中包含了几乎所有的过程响应时间&#xff1a;从提交第一个请…

计算机网络面试题(二十四):TCP拥塞控制

文章目录TCP拥塞控制TCP拥塞控制的四个算法【1】慢开始【2】拥塞避免【3】快重传【4】快恢复小结TCP拥塞控制 当网络数据传输过程中出现拥塞时&#xff0c;分组将会丢失&#xff0c;但此时发送方会继续重传从而导致网络拥塞程度升高。因此当发送拥塞时&#xff0c;应当控制发送…

操作系统笔试题(二)

文章目录第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题第十一题第一题 一作业8&#xff1a;00到达系统&#xff0c;估计运行时间1消失&#xff0c;若10点开始执行&#xff0c;响应比为&#xff1f; 3 相应比 &#xff08;等待时间 执行时间&#xff09;/ …

SQL教程(三):外键

当我们利用主键唯一标识记录时&#xff0c;我们就可以在例如学生表中确定任意一个学生的记录 例如班级表 那么如何确定一个学生属于哪个班级呢&#xff1f; 很明显班级和学生的对应关系是一对多 为了实现数据表之间数据的一对多关系&#xff0c;需要在学生表中加入一列class_id…

中兴面试(含面试题)

“【ZTE】亲爱的XXX同学&#xff0c;您好&#xff01;恭喜您顺利进入专业面试&#xff01;您的面试时间为XXXXXX&#xff0c;地点XXXXXX。请携带简历2份、身份证、学生证、成绩单和英语等级证书原件准时参加……” 在今年秋招就业形式非常严峻的情况下&#xff0c;我于2020.8.3…