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

news2024/12/25 13:25:11

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

目录

面试问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.coloradmin.cn/o/1665737.html

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

相关文章

云贝教育 |【好课上新】ITSS服务工程师与服务经理认证培训

课程前言 ITSS是中国电子技术标准化研究院推出的,包含“IT 服务工程师”和“IT 服务经理”的系列培训。有效满足GB/T 28827.1 的符合性评估要求和ITSS服务资质升级要求。 IT 服务工程师”结合 IT服务从业人员能力规范和要求,从服务技术、服务技巧和服务…

Linux入门攻坚——23、DNS和BIND基础入门1

DNS——Domain Name Service,协议(C/S,53/udp,53/tcp) BIND——Berkeley Internet Name Domain,ISC(www.isc.org) 互联网络上主机之间的通信依靠的是IP,而人或程序一般使…

C# 统计代码运行时长

using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms;namespace Sci {/// <summary>/// 统计代码…

解决“电脑开机黑屏Explorer进程卡死“问题

今天&#xff0c;给台式机按电源键&#xff0c;进入windows系统时&#xff0c;发现电脑黑屏了&#xff0c;昨天还好好的&#xff0c;怎么今天电脑桌面进不去了&#xff1f;想起Windows XP、Windows 7、Windows 10 、Windows 11等系统&#xff0c;在使用多个文件拷贝时&#xff…

部署yolov5

1 创建一个yolov5的环境 conda create -n yolov5 python3.8 2 激活环境 conda activate yolov5 3 设置清华源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 4 PyTorch 网站下载pytorch 备注:也可以使用pip install 5 下载 yolov5…

嵌入式软件开发离职,准备去创业...

大家好&#xff0c;我是麦鸽&#xff0c;最近有读者提问&#xff0c;嵌入式软件开发离职去创业怎么样&#xff1f; 关于这个问题&#xff0c;我是持中立意见的&#xff0c;但是还是要慎重。下面说说我的看法。 其实咱们搞技术的人都有一个通病&#xff0c;就是把技术看得过于重…

C语言 | Leetcode C语言题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; int largestRectangleArea(int* heights, int heightsSize) {int st[heightsSize];int p[2];p[0]-1,p[1]heightsSize;int size0,result0;st[size]0;for(int i1;i<heightsSize;i){ while(size!0&&heights[i]<heights[st[size-1…

【详细介绍下Visual Studio】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

读天才与算法:人脑与AI的数学思维笔记25_涌现理论

1. 人工智能新闻 1.1. 人工智能新闻报道算法的核心是如何将未经处理的原始数据转换成新闻报道 1.2. 很少有记者为美联社决定使用机器来帮助报道这些新闻持反对意见 1.2.1. 像“Wordsmith”这样的算法&#xff0c;具有自动化的洞察力、科学的叙事能力&#xff0c;现在正被应用…

AI图书推荐:利用生成式AI实现业务流程超自动化

《利用生成式AI实现业务流程超自动化》&#xff08;Hyperautomation with Generative AI&#xff09;这本书探索了广泛的用例和示例&#xff0c;展示了超自动化在不同行业、领域和特定部门的多样化应用&#xff0c; 让您熟悉UiPath、Automation Anywhere和IBM等流行工具和平台&…

基于yolov5+streamlit目标检测演示系统设计

YOLOv5与Streamlit&#xff1a;智能目标检测可视化展示介绍 随着人工智能技术的飞速发展&#xff0c;目标检测技术已成为推动智能化社会进步的关键技术之一。在众多目标检测算法中&#xff0c;YOLOv5以其卓越的性能和实时性&#xff0c;成为了业界的佼佼者。与此同时&#xff…

docker(二):Centos安装docker

文章目录 1、安装docker2、启动docker3、验证 官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 1、安装docker 下载依赖包 yum -y install gcc yum -y install gcc-c yum install -y yum-utils设置仓库 yum-config-manager --add-repo http://mirrors…

im(即时通讯)是什么?

在当今数字化时代&#xff0c;即时通讯&#xff08;IM&#xff09;已经成为企业内部沟通与协作中不可或缺的工具。作为一种实时的即时通讯方式&#xff0c;IM能够极大提高团队成员之间的沟通效率&#xff0c;帮助企业快速响应变化&#xff0c;并增强内部协作与创新能力。 Work…

Linux提权--本地环境变量文件配合 SUID

免责声明:本文仅做技术交流与学习... 目录 背景: 前提条件: 演示: 实战中如何操作? 探针发现: 背景: 环境变量提权--------> 背景&#xff1a; 管理员编译了程序&#xff0c;给予了程序管理员运行的方案, 攻击通过对程序的运行调试反编译等得到了程序的运行大概逻辑, …

【C++11】C++11类与模板语法的完善

目录 一&#xff0c;新的类功能 1-1&#xff0c;默认成员函数 1-2&#xff0c;强制生成关键字 二&#xff0c;可变参数模板 2-1&#xff0c;模板参数包 2-2&#xff0c;STL容器empalce的相关接口 一&#xff0c;新的类功能 1-1&#xff0c;默认成员函数 C11之前的类中有…

stable diffusion WebUi本地安装

一、stable diffusion 介绍 Stable Diffusion是一种先进的文本到图像的生成模型&#xff0c;它可以根据给定的文本输入生成高度逼真的图像。 Stable Diffusion模型因其高效性和灵活性&#xff0c;在AI图像生成领域引起了广泛关注&#xff0c;并在实际应用中展示了其强大的能力…

数据结构深入理解--栈

目录 一、栈的定义 二、栈的实现 2.1 栈的结构 2.2 栈的初始化 2.3 栈的销毁 2.3 栈元素的插入 2.4 栈元素的删除 2.5 栈顶元素获取 2.6 栈元素有效个数获取 2.7 栈是否为空判断 三、代码总览 Stack.h Stack.c 测试代码:test.c 四、例题 例一&#xff1a; 例二&#xff…

【比邻智选】MF871U模组

&#x1f680;搭载国产芯&#xff0c;严苛测试&#xff0c;稳定可靠 &#x1f6e0;️R16特性加持&#xff0c;5G LAN&#xff0c;纳秒级精度 &#x1f310;超低成本&#xff0c;丰富协议&#xff0c;连接无界限

《A data independent approach to generate adversarial patches》论文分享(侵删)

原文链接&#xff1a;A data independent approach to generate adversarial patches | Machine Vision and Applications author{Xingyu Zhou and Zhisong Pan and Yexin Duan and Jin Zhang and Shuaihui Wang}, 一、介绍 在图像识别领域&#xff0c;与数字域中的攻击相比…

ZigBee设备入网流程抓包分析(以飞利浦灯泡为例)

1.第一步&#xff0c;网关打开入网许可&#xff0c;广播Pjoin 2.第二步&#xff0c;设备开始扫网&#xff0c;发送Beacon Request 3.第三步&#xff0c;网关收到Beacon Request请求后&#xff0c;应答Beacon数据帧 4.收到可入网的Beacon帧后&#xff0c;发送关联请求&#xff0…