【计算机网络】【常考问题总结】

1. ping 127.0.0.1 后会发生什么?

ping 127.0.0.1 ;ping 0.0.0.0  ; ping localhost

面试官问:断网了,还能ping通 127.0.0.1 吗?为什么?_kevin_tech的博客-CSDN博客

2. MTU,MMU是什么?

 

3. 粘包是什么:怎么解决?

怎么解决TCP网络传输「粘包」问题? - 知乎 (zhihu.com)

之所以TCP会出现粘包:原因是:TCP 协议是流式协议,协议的内容是像流水一样的字节流。 应用层传到 TCP 协议的数据,不是以消息报为单位向目的主机发送,而是以字节流的方式发送到下游,这些数据可能被切割和组装成各种数据包,接收端收到这些数据包后没有正确还原原来的消息,因此出现粘包现象。

举个例子,A 与 B 进行 TCP 通信,A 先后给 B 发送了一个 100 字节和 200 字节的数据包,那么 B 是如何收到呢?B 可能先收到 100 字节,再收到 200 字节;也可能先收到 50 字节,再收到 250 字节;或者先收到 100 字节,再收到 100 字节,再收到 100 字节;或者先收到 20 字节,再收到 20 字节,再收到 60 字节,再收到 100 字节,再收到 50 字节,再收到 50 字节......

作为发送方的 A 来说,A 是知道如何划分这两个数据包的界限的,但是对于 B 来说,如果不人为规定多少字节作为一个数据包,B 每次是不知道应该把收到的数据中多少字节作为一个有效的数据包的,而规定每次把多少数据当成一个包就是协议格式定义的内容之一。

如果不规定每次传输的内容长度,通信双方进程直接read() write() ,在本机由于网络状况好,不会出啥问题。但是若在不同主机间这种方式通信,会导致 ①数据截断 或 ②数据乱码

出现 ①数据截断 这种情况的原因是:A发送了第一个包100字节,但是B收到了前50 ,同时B的缓冲区大小是70,因此,B自动给这获得的50字节补充了一个\0 ,接下来再收到A发来的后50字节因为\0的存在,不会被读走。

出现 ②数据乱码 这种情况的原因是:A发送了第一个包200字节,B的缓冲区大小是70,因此,B最多收到70字节,此时,由于数据包没有结束,因此没有\0结尾,在读取的时候,就会因没有\0一直读取,越界了也要读取,一直到读到\0才会停止,而这会导致读取到不需要的非法数据,形成乱码。

总结下,粘包出现的根本原因是不确定消息的边界。接收端在面对"无边无际"的二进制流的时候,根本不知道收了多少 01 才算一个消息。一不小心拿多了就说是粘包。其实粘包根本不是 TCP 的问题,是使用者对于 TCP 的理解有误导致的一个问题。

粘包的解决方法:只要在发送端每次发送消息的时候给消息带上识别消息边界的信息,接收端就可以根据这些信息识别出消息的边界,从而区分出每个消息。

常见的方法有

  • 相互协定好包的大小

        即每个协议包的长度都是固定的。举个例子,例如我们可以规定每个协议包的大小是 64 个字节,每次收满 64 个字节,就取出来解析(如果不够,就先存起来)。

        这种通信协议的格式简单但灵活性差。如果包内容不足指定的字节数,剩余的空间需要填充特殊的信息,如 \0。

  • 加入特殊标志作为头尾,比如当收到了0xfffffe或者回车符,则认为收到了新消息的头,此时继续取数据,直到收到下一个头标志0xfffffe或者尾部标记,才认为是一个完整消息。

        在收到头标志时,里面还可以带上消息长度,以此表明在这之后多少 byte 都是属于这个消息的。如果在这之后正好有符合长度的 byte,则取走,作为一个完整消息给应用层使用。

     【注意】:为了放置在消息内容中也包括这个特殊字符,往往需要在标志位后面加上CRC验证段等,让接收端拿到整段数据后校验下确保它就是发送端发来的完整数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/105439.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue教程(五):样式绑定——class和style

1、样式代码准备 样式提前准备 <style>.basic{width: 400px;height: 100px;border: 1px solid black;}.happy{border: 4px solid red;background-color: rgba(255, 255, 0, 0.644);background: linear-gradient(30deg, yellow, pink, orange, yellow);}.sad{border: 4px …

ffmpeg windows环境MinGW+msys2编译so库

一、安装MinGW 1.1、下载MinGW 1.2、下载完成后&#xff0c;会得到一个名为 mingw-get-setup.exe 的安装包&#xff0c;双击打开它&#xff0c;可以看到如下的对话框&#xff1a; 1.3、直接点击“Install”&#xff0c;进入下面的对话框 1.4、可根据自己操作系统的实际情况&am…

利用“病毒制造机”实现脚本病毒的制造

一、脚本病毒的概念&#xff1a; 脚本病毒通常是 JavaScript 或 VBScript 等语言编写的恶意代码&#xff0c;一般广告性质&#xff0c;会修改 IE 首页、修改注册表等信息&#xff0c;对用户计算机造成破坏。 通过网页进行的传播的病毒较为典型&#xff0c;脚本病毒还会有如下前…

【快速傅里叶变换(fft)和逆快速傅里叶变换】生成雷达接收到的经过多普勒频移的脉冲雷达信号(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Python支持下最新Noah-MP陆面模式站点、区域模拟及可视化分析技术

查看原文>>> Python支持下最新Noah-MP陆面模式站点、区域模拟及可视化分析技术 熟悉陆表过程的主要研究内容以及陆面模型在生态水文研究中的地位和作用&#xff1b;深入理解Noah-MP 5.0模型的原理&#xff0c;掌握Noah-MP模型&#xff08;2023年最新发布的5.0版本&am…

[JavaWeb]【十二】web后端开发-事务管理AOP

目录 一、事务管理 1.1 事务回顾 1.2 Spring事务管理 1.2.1 案例 1.2.1.1 EmpMapper新增deleteByDeptId方法 1.2.1.2 DeptServiceImpl 1.2.1.3 启动服务-测试 1.2.2 模拟异常 1.2.3 分析问题 1.2.4 Spring事务管理&#xff08;一般用在类似多次delete&#xff09; 1.2.4…

现学现用,人脸识别让会议签到更轻松!

会议签到作为组织和管理任何规模的会议、研讨会或活动的重要环节&#xff0c;在确保参会人员准确到场的同时&#xff0c;也直接影响了会议的整体效率和顺利进行。 传统的纸质签到方式存在着繁琐、时间消耗较多等问题&#xff0c;而随着科技的不断发展&#xff0c;智能化会议签到…

Qt --- QTimer

在Qt开发界面的时候&#xff0c;非常多的时候都得使用定时器&#xff0c;定时器具体可以干什么呢&#xff1f;比如&#xff1a;控制时钟、定时改变样式、改变进度等。。。说到这里&#xff0c;经常使用QQ&#xff0c;而不同的时段都会显示不同的背景&#xff0c;我认为如果用Qt…

人工智能如何颠覆和改变信息安全格局

当谈及网络信息安全领域&#xff0c;人工智能&#xff08;AI&#xff09;正扮演着关键的角色。其作用是分析庞大的风险数据&#xff0c;以及企业信息系统中不同威胁之间的关联&#xff0c;从而识别出全新类型的攻击方式。这一过程的成果为各类网络安全团队提供了重要情报&#…

PostgreSQL-研究学习-介绍与安装

PostgreSQL-预研 是个很厉害的数据库的样子 ψ(*&#xff40;ー)ψ 官方文档&#xff1a;http://www.postgres.cn/docs/12/ 总的结论和备注 PgSQL 支持对JSON的支持很强大&#xff0c;以及提供了很多数学几何相关的数据类型【例&#xff1a;点&#xff0c;线条&#xff0c;几何…

FastJson在Java后端方面解析使用(二)

​ JSON现在常用来做前后端数据交互&#xff0c;两个蝴蝶飞只是简单的对JSON做一下讲解和简单使用。关于JSON,我还了解的远远不够。由于本人经验有限&#xff0c;嘴皮子不溜&#xff0c;所以学术性&#xff0c;概念性&#xff0c;底层性的知识点暂时不做介绍。文章中有错误之处…

爬虫逆向实战(二十)--某99网站登录

一、数据接口分析 主页地址&#xff1a;某99网站 1、抓包 通过抓包可以发现登录接口是AC_userlogin 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”可以发现txtPassword和aws是加密参数 请求头是否加密&#xff1f; 无响应是否加密&#xff1f; 无…

SSL/TLS协议的概念、工作原理、作用以及注意事项

个人主页&#xff1a;insist--个人主页​​​​​​ 本文专栏&#xff1a;网络基础——带你走进网络世界 本专栏会持续更新网络基础知识&#xff0c;希望大家多多支持&#xff0c;让我们一起探索这个神奇而广阔的网络世界。 目录 一、SSL/TLS协议的基本概念 二、SSL/TLS的工作…

抖音短视频seo矩阵系统源代码技术开发方案分享

一、 功能结构设计 1. 视频管理&#xff1a;对于不同平台&#xff0c;不同账号&#xff0c;不同格式&#xff0c;不同内容短视频进行管理&#xff0c;素材分组等&#xff0c;实现多资源数据汇和统一管理 2. 数据挖掘分析&#xff1a;通过数据挖掘和数据分析&#xff0c;提供数…

Apache Hudi初探(二)(与flink的结合)--flink写hudi的操作(JobManager端的提交操作)

背景 在Apache Hudi初探(一)(与flink的结合)中&#xff0c;我们提到了Pipelines.hoodieStreamWrite 写hudi文件,这个操作真正写hudi是在Pipelines.hoodieStreamWrite方法下的transform(opName("stream_write", conf), TypeInformation.of(Object.class), operatorFa…

NVIDIA vGPU License许可服务器高可用全套部署秘籍

第1章 前言 近期遇到比较多的场景使用vGPU&#xff0c;比如Citrix 3D场景、Horizon 3D场景&#xff0c;还有AI等&#xff0c;都需要使用显卡设计研发等&#xff0c;此时许可服务器尤为重要&#xff0c;许可断掉会出现掉帧等情况&#xff0c;我们此次教大家部署HA许可服务器。 …

爬虫异常处理:异常捕获与容错机制设计

作为一名专业的爬虫程序员&#xff0c;每天使用爬虫IP面对各种异常情况是我们每天都会遇到的事情。 在爬取数据的过程中&#xff0c;我们经常会遇到网络错误、页面结构变化、被反爬虫机制拦截等问题。在这篇文章中&#xff0c;我将和大家分享一些关于如何处理爬虫异常情况的经…

怎么制作sip网络寻呼话筒,sip任意呼叫主机,

怎么制作sip网络寻呼话筒&#xff0c;sip任意呼叫主机&#xff0c; 所需材料一&#xff1a;SV-2103VP sip网络音频模块 功能如下&#xff1a; SV-2101VP/ SV-2103VP使用了AT32F437VGT7处理器构架加专业的双向音频Codec编解码器&#xff0c; 处理器负责数据的传输&#xff0c…

【李群李代数】李群控制器(lie-group-controllers)介绍——控制 SO(3) 空间中的系统的比例控制器Demo...

李群控制器SO(3)测试 测试代码是一个用于控制 SO(3) 空间中的系统的比例控制器。它通过计算控制策略来使当前状态逼近期望状态。该控制器使用比例增益 kp 进行参数化&#xff0c;然后进行一系列迭代以更新系统状态&#xff0c;最终检查状态误差是否小于给定的阈值。这个控制器用…

Checkstyle安装、使用

Checkstyle简介 Checkstyle是SourceForge下的一个项目&#xff0c;官网&#xff1a; https://checkstyle.sourceforge.io/ 在官网有详细的说明。 Checkstyle是一个开发工具&#xff0c;可以帮助开发者自动检查java代码是否遵循编程规范&#xff0c;将开发者从枯燥繁琐的手工…