网络Http和Socket通讯(基于面试)

每日一句:想得到世上最好的东西,先得让世界看到最好的你

目录

面试问OSI或TCP/IP,怎么回答?

面试问HTTP?

面试问Get类型,Pot类型区别?

面试什么是Socket套接字?

面试问什么是数据粘包?

粘包产生原因?

面试问什么是数据分包?

分包产生的原因就简单的多:

粘包与分包的处理方法:

为什么UDP没有粘包?

一组数据包的声明周期过程?

心跳包


客户端发“hello”经过OSI每一层都加一个协议头,封装成报,通过连接到互联网,物理层发送到服务端,接到后,再把一层层头去掉,得到“hello”

面试问OSI或TCP/IP,怎么回答?

  1. 网络的传输层次结构
  2. OSI——>简化TCP/IP模型,把应用,表示,会话——>合成应用层
  3. 每层经典数据协议

HTTP协议请求时,有请求头,响应头

客户端首先发一个请求协议,发送到服务端回一个响应协议

*TCP短链接

在每次传输时都会建立一个通讯信道,传输后关闭连接。关闭后服务器就找不到客户端了,需要待下一个客户端发起连接时才能找到

TCP长连接

客户端和服务端一开始会连接,并一直保持,直到不再交换数据断开。

UDP无连接,直接数据报投给你

区别:

  1. 长连接一直连接,服务器可随时向客户端发数据,短连接不可以
  2. 短链接性能消耗大

带宽计算 运营商 比特  个体 字节

通讯协议

IP协议 用于网络定位的一个数据串

TCP协议

  1. 服务器开始接收
  2. 客户端发送连接请求
  3. 如果达到服务端,服务端给相应

面试问HTTP?

是超文本传输协议,位于应用层,基于TCP协议开发。特点是传输时,有数据完整性校验(校验数据在头部信息中)

面试问HTTPS?

加密后的HTTP协议

  1. 敏感数据传参,加密数据更安全
  2. 防钓鱼网站

HTTP协议构成

URL结构

通讯协议::Http://  Https://

主机地址:IP,域名

端口号:80端口提供Http服务,443端口提供Https服务

目录:“/目录名”

脚本名称

URL参数

“?参数名=参数值&参数名=参数值”

 URL地址可以进行伪装

HTTP状态号

200成功

301重定向(当前网页已过时,跳转到新页面)

403当前目录禁止访问

404网页不存在

500服务器内部错误

502访问量过大,不能提供服务

HTTP请求类型

Get类型 仅作网页请求连接

Post类型 用户名登录时,要作表单数据类型发送

面试问Get类型,Pot类型区别?

  1. Get类型通过URL地址传递的;Post类型数据通过HTTP数据头传递的
  2. Get类型会被记录下来,Post类型相对安全
  3. Get类型传递数据长度受URL限制;Post可以传递任意长度数

如果需要在URL传递数据中加入特殊字符,需要对数据进行URL编码

TCP长连接

面试什么是Socket套接字?

套接字是将IP地址与主机端口号合并在一起后的数据,IP地址定位主机位置,端口号知道通讯入口与出口,从而实现主机的数据交换

Socket基于传输层实现

TCP编程方式(c#)

连接(三次握手)——>断开(四次挥手)——>监听,绑定(服务器开发)——>接收——>发送

发送数据含头部信息,网卡里有缓存,累积之后再发怎么处理

数据包处理

面试问什么是数据粘包?

TCP协议中,发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

发送数据前,如果有多个数据包要一起发送,则可以将数据包拼在一起发送,这样效率更高

粘包产生原因?

先说TCP:由于TCP协议本身的机制(面向连接可靠的协议,三次握手四次挥手)客户段与服务端会建立一个链接,数据在链接不断开的情况下,可以持续不断地将多个数据包发往服务端,相当于一个流,但是如果发送的网络数据包太小,那么他本身会启用Nagle算法(当然是可配置是否启用)对较小的数据包进行合并(基于此,TCP的网络延迟要UDP的高些,因为需要合并延时发送)然后再发送(超时或者包大小足够)。这样的话,服务端在接收到消息(数据流)的时候就无法区分哪些数据包是客户端自己分开发送的,这样产生了粘包;还有一种情况,服务端在接收到数据后,然后放到缓冲区中,如果消息没有被及时从缓存区取走,下次在取数据的时候可能就会出现一次取出多个数据包的情况,造成粘包现象(确切来讲,对于基于TCP协议的应用,不应用包来描述,而应该用流的概念来描述)

面试问什么是数据分包?

当接到数据后,需要将每一个定制的数据格式分离出来,所写的代码就是分包代码,有时服务器是硬件将拼接在一起,有时是代码将数据包拼接在一起,拼接后的代码,效率更高

分包产生的原因就简单的多:

可能是IP分片传输导致的,也可能是传输过程中丢失部分包导致出现的半包,还有可能就是一个包可能被分成了两次传输,在取数据的时候,先取到了一部分(还可能与接收的缓冲区大小有关系),总之就是一个数据包被分成了多次接收。

粘包与分包的处理方法:

一个是采用分隔符的方式,即我们在封装要发送的数据包的时候,采用固定的字符作为结尾符(数据中不能含结尾符),这样我们接收到数据包后,如果出现结尾标识,即人为的将粘包分开,如果一个包中没有出现结尾符,认为出现了分包,则等待下个包中出现后 组合成一个完整的数据包,这种方式适合于文本传输的数据,如采用/r/n之类的分隔符;

另一种是采用在数据包中添加长度的方式,即在数据包中的固定位置封装数据包的长度信息(或可计算数据包总长度的信息),服务器接收到数据后,先是解析包长度,然后根据包长度截取数据包(此种方式常出现于自定义协议中),但是有个小问题就是如果客户端第一个数据包数据长度封装的有错误,那么很可能就会导致后面接收到的所有数据包都解析出错(由于TCP建立连接后流式传输机制),只有客户端关闭连接后重新打开才可以消除此问题,我在处理这个问题的时候对数据长度做了校验,会适时的对接收到的有问题的包进行人为的丢弃处理(客户端有自动重发机制,故而在应用层不会导致数据的不完整性);

为什么UDP没有粘包?

粘包拆包问题在数据链路层、网络层以及传输层都有可能发生。日常的网络应用开发大都在传输层进行,由于UDP有消息保护边界,不会发生粘包拆包问题,因此粘包拆包问题只发生在TCP协议中。

打包

对原始数据添加协议头的过程

解包

接收到数据包时,读取包头,并记录信息,获取到包内原始数据的过程

一组数据包的声明周期过程?

  1. 对原始数据打包
  2. 对多个数据包粘包
  3. 套接字(连接,发送)
  4. 套接字(接收)
  5. 有可能同时接收到多个数据黏在一起,对数据进行(分包)
  6. 取得单个数据的原始数据(解包)
  7. 根据数据包,执行代码逻辑

数据包定制

包头:记录有关于整个数据包的信息(可加密)

包体:原始数据(可加密)

字节序(存在于数字存储方法)
小端字节序:将数据的后位字节,放在内存栈的低地址位

大端字节序:将数据的后位字节,放在内存栈的高地址位

主机字节序:当前计算机数字的字节表示方式

网络字节序:互联网规定,传递数据时,都转大端字节序

字符串内有字节序问题,它受字符编码影响

心跳包

因为TCP是有连接的,所以必须在两个PC间建立连接,但是如果长时间连接却又不发送数据,则会占用互联网的通信信道,就有可能被网络的中间设备(路由器,防火墙)将网络连接断开,所以防止网络被断开,则需要两台计算机间定期发送一些数据,这样的数据就是心跳数据

网络延迟计算:服务器返回心跳时间-客户端发送心跳时间

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

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

相关文章

qt for android 的架构原理

qt for android实现架构,分享这几幅很不错图。来自于 《Qt 林斌:整合Android IVI平台打造统一的Qt数字座舱体验》 1.实现架构图 2.qt for android能力 3.java 和 qt混合开发 4. AutoMotive

46寸硅片为什么要留平边(flat)?

知 识星球(星球名: 芯片制造与封测社区,星球号: 63559049)里的学员问: 2, 4, 6寸硅片都有 平 边,它们有什么作用 ? 硅片的平边(Flat&…

经典权限五张表案例分析

文章目录 模块分析模块分析 描述五张表的关系重要知识讲解抽取成一个BaseServletSpringIOC思想(底层)实现代码IOC概述 SPI机制(为学习框架做思想和技术铺垫)SPI引入1. 标准/规范2. 具体的实现3. 调用 SPI介绍SPI练习JDBC4.0免注册驱动原理Servlet实现方式三 ServletContainerIn…

idea使用前的全局配置,一次配置,多次使用

前提:每次导入一个新的项目,就需要重新设置编码、maven、jdk、git版本等信息。实际每个项目所用到的配置信息是一致的,除非换一家公司,不然不会改动到这些内容。 idea版本:2024.1.1 1.1、全局Maven配置 IDEA启动页面…

微火一文盘点:为何全域运营系统会成为创业新风口?

当前,微火全域运营已经成为创业的新风口,想要做微火全域运营服务商的创业者数量日益增多。据目前了解到的最新消息,微火全域运营系统的市场占有率已经超过了48%,并且还在持续不断地上涨中。 所谓微火全域运营系统,就是…

InLine Chat功能优化对标Github Copilot,CodeGeeX带来更高效、更直观的编程体验!

VSCode中的CodeGeeX 插件上线InLine Chat功能后,收到不少用户的反馈,大家对行内交互编程这一功能非常感兴趣。近期我们针对这个功能再次进行了深度优化,今天详细介绍已经在VSCode插件v2.8.0版本上线的 CodeGeeX InLine Chat功能,以…

蓝桥杯成绩已出

蓝桥杯的成绩早就已经出来了,虽然没有十分惊艳 ,但是对于最终的结果我是心满意足的,感谢各位的陪伴,关于蓝桥杯的刷题笔记我已经坚持更新了49篇,但是现在即将会告别一段落,人生即将进入下一个规划。我们一起…

Spring框架学习笔记(一):Spring基本介绍(包含IOC容器底层结构)

1 官方资料 1.1 官网 https://spring.io/ 1.2 进入 Spring5 下拉 projects, 进入 Spring Framework 进入 Spring5 的 github 1.3 在maven项目中导入依赖 <dependencies><!--加入spring开发的基本包--><dependency><groupId>org.springframework<…

基于STC12C5A60S2系列1T 8051单片机实现一主单片机与一从单片机进行双向串口通信功能

基于STC12C5A60S2系列1T 8051单片机实现一主单片机与一从单片机进行双向串口通信功能 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存器…

QT---day5,通信

1、思维导图 2、TCp 服务器 #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QTcpServer> #include <QList> #include <QTcpSocket> #include <QMessageBox> #include <QDebug> #include <QTcpServer> QT_B…

镭速实现利用Libarchive实现高效、智能的文件传输和管理

在前一篇报道中&#xff0c;我们阐述了Libarchive这一开源库的强大功能&#xff0c;它专门用于处理归档文件。通过整合Libarchive&#xff0c;镭速在包括Windows和Linux在内的多个操作系统上提供了在线解压缩服务&#xff0c;为企业构建了一个既强大又安全的文件传输系统&#…

【代码分享】使用HTML5的Canvas绘制编码说明图片

最急在工作中遇到一个需求&#xff0c;根据给定的编码生成编码说明&#xff0c;像下面这样的效果。 不同含义的编码用横杠分割&#xff0c;然后每个编码下面用箭头指明具体的含义。下面是我使用canvas实现的代码。具体的编码宽度大家可以根据实际情况进行调整&#xff0c;目前…

Ranger 面试题及答案整理,最新面试题

Ranger 的安全模型是如何设计的&#xff1f; Ranger的安全模型设计主要基于访问控制和安全策略的管理&#xff0c;它通过以下几个关键组件实现&#xff1a; 1、策略管理&#xff1a; Ranger 提供了一个中央管理平台&#xff0c;用于定义、更新和管理安全策略。这些策略根据资…

基于RT-Thread的HC-SR04超声波驱动

前言 本次驱动用的是这款超声波&#xff0c;超声波的驱动大同小异&#xff0c;均可参考 一、引脚定义 引脚功能VCC接直流5V电TRIG接外部电路的TRIG端&#xff0c;向此引脚输入10us以上的高电平可触发超声波测距ECHO接外部电路的ECHO端&#xff0c;测距结束时该引脚会输出一…

Python框架Django入门教程

Django 是一个使用 Python 编程语言开发的、免费且开源的 Web 应用框架。它遵循 "DRY&#xff08;Dont Repeat Yourself&#xff09;" 原则&#xff0c;旨在简化创建功能丰富的、高效率的 Web 网站。Django 提供了模型-视图-控制器&#xff08;MVC&#xff09;架构的…

时尚圈的节制美学 — 奥柔拉 AVRALA的独特设计理念

在这个多元化的时代&#xff0c;女性正在经历一场前所未有的角色变革。她们不再仅仅满足于传统的社会角色&#xff0c;而是勇敢地追求个人职业发展和自我实现。在这样的背景下&#xff0c;服饰不仅仅是外在的装饰&#xff0c;更是内心故事的讲述者、个性自我的表达者、身份归属…

NX/UG二次开发—3D几何—多边形内部最大圆

多边形内部最大圆&#xff0c;为什么不能说最大内切圆&#xff1f;如果正方形或正凸多边形&#xff0c;最大内部圆是与边相切的&#xff0c;但对于不规则多边形&#xff0c;很多情况是正好经过一些凹点。 本次介绍在NX中计算封闭边界内部最大圆&#xff1a; 1、首先按顺序排序…

Spring、SpringMVC

一、Spring框架中的单例Bean是线程安全的吗&#xff1f; 【默认单例的情况下】Spring Bean并没有可变的状态&#xff08;如Service类和DAO类&#xff09;&#xff0c;即只能查不能改&#xff0c;所以没有并发问题&#xff0c;所以某种程度上来说Spring的单例Bean是线程安全的。…

【ZZULI数据结构实验】压缩与解码的钥匙:赫夫曼编码应用

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…