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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何清除DNS缓存,刷新DNS

大家在使用域名访问服务器的时候,经常会遇到一个问题,同一个局域网里的两台电脑,一台可以访问而另一台不行。这是为什么呢?这里我要和大家说下DNS缓存的问题,顾名思义,每台电脑都有DNS缓存,在域…

[python:django]:web框架搭建项目

文章目录 pip查看安装列表安装制定Django版本初始化django项目执行 python manage.py startapp projectName 生成app应用执行 python manage.py runserver 运行web项目配置django项目页面访问地址注意:再次访问地址,返回制定页面 pip查看安装列表 C:\Us…

Springboot+logback 详细配置

一、添加依赖 这里使用springboot3.0.2 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency><dependency><groupId>org.projectlombok</grou…

2024蓝桥杯RSA-Theorem

方法1&#xff1a;直接使用工具yafu解题 yafu的使用方法 安装&#xff1a;解压后直接使用即可&#xff0c;在文件包内&#xff0c;执行命令终端&#xff0c;输入命令行 1、如果数比较小&#xff0c;进入该文件的目录后可以直接使用: yafu-x64 factor(n) 如果是powershell&…

刷代码随想录有感(63):将有序数组转换为二叉搜索树(其实时二叉平衡搜索树)

题干&#xff1a; 代码&#xff1a; class Solution { public:TreeNode* traversal(vector<int>& nums, int left, int right){if(left > right)return NULL;int mid left (right - left)/2;TreeNode* NewRoot new TreeNode(nums[mid]);NewRoot->left tra…

怎么做自己的网站

现如今&#xff0c;拥有自己的网站已经成为现代生活中的一种标志。无论是个人博客、在线商店还是企业官网&#xff0c;都可以通过拥有一个网站来展示自己的个性、产品或服务。在这篇文章中&#xff0c;我将分享如何创建和管理自己的网站。 首先&#xff0c;你需要选择一个合适的…

用户登录:断点看流程认证

参考原文Security认证流程 第一步:先认识一下令牌 开始断点 执行new UsernamePasswordAuthenticationToken 1.Authentication接口: 它的实现类&#xff0c;表示当前访问系统的用户&#xff0c;封装了用户相关信息。(我们实现类是UsernamePasswordAuthenticationToken) 点击…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑微电网联盟协调运行的用户侧共享储能多计费方式博弈定价方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

LVDS 接口标准和规范

低压差分信号具有传输速率快、抗干扰性强的特点&#xff0c;是现在广泛应用的数据接口标准之一。Xilinx FPGA支持LVDS电平标准&#xff0c;并提供了动态相位调整解决方案&#xff0c;解决了基于LVDS源同步传输时存在的数据偏斜问题。 1 LVDS 技术规范简介 随着接口和背板信号…

万物互联-AI边缘计算赋能腾讯无人驾驶车

为把握智能交通系统发展机遇&#xff0c;探索未来城市智能化交通体系&#xff0c;今年3月&#xff0c;腾讯无人驾驶汽车正式落地深圳智能网联交通示范区&#xff1b;该项目将以智能网联测试为基础,以构建自动驾驶生态和未来交通体系为导向&#xff0c;围绕"车、路、云、网…

MATLAB的Bar3函数调节渐变色(内附渐变色库.mat及.m文件免费下载链接)

一. colormap函数 可以使用colormap函数&#xff1a; t1[281.1,584.6, 884.3,1182.9,1485.2; 291.6,592.6,896,1197.75,1497.33; 293.8,596.4,898.6,1204.4,1506.4; 295.8,598,904.4,1209.0,1514.6];bar3(t1,1) set(gca,XTickLabel,{300,600,900,1200,1500},FontSize,10) set…

Stable Diffusion是什么?

目录 一、Stable Diffusion是什么&#xff1f; 二、Stable Diffusion的基本原理 三、Stable Diffusion有哪些运用领域&#xff1f; 一、Stable Diffusion是什么&#xff1f; Stable Diffusion是一个先进的人工智能图像生成模型&#xff0c;它能够根据文本描述创造出高质量的图…

物流EDI:GEFCO EDI 需求分析

GEFCO专注于汽车物流领域近70年&#xff0c;是欧洲整车市场的物流供应商&#xff0c;也是欧洲十大领先的运输和物流集团之一。GEFCO的业务遍及六大洲&#xff0c;业务覆盖150个国家&#xff0c;在全球拥有庞大的员工队伍&#xff0c;在全球汽车行业的挑战中茁壮成长。为汽车制造…

【c++】set、map用法详解

set、map用法详解 1. 关联式容器2. 键值对2.1 &#xff1a;pair2.2&#xff1a;make_pair 3. 树形结构的关联式容器3.1&#xff1a;set构造函数find()erase()insert()count()lower_bound()upper_bound() 3.2&#xff1a;multiset3.3&#xff1a;map构造函数insert()operator[] …

Jmeter使用While控制器

1.前言 对于性能测试场景中,需要用”执行某个事物,直到一个条件停止“的概念时,While控制器控制器无疑是首选,但是在编写脚本时,经常会出现推出循环异常,获取参数异常等问题,下面总结两种常用的写法 2.${flag}直接引用判断 1.在预处理器中定义一个flag 或者在用户定…

前端 | 易混词卡片切换

文章目录 &#x1f4da;实现效果&#x1f4da;模块实现解析&#x1f407;html&#x1f407;css&#x1f407;javascript &#x1f4da;实现效果 绘制单词卡片效果&#xff0c;实现点击左半部分上翻&#xff0c;点击右半部分下翻。 &#x1f4da;模块实现解析 &#x1f407;…

自然资源-城镇开发边界内详细规划编制技术指南解读

自然资源-城镇开发边界内详细规划编制技术指南解读

blender 为世界环境添加纹理图像

1、打开世界环境配置项 2、点击颜色右侧的黄色小圆&#xff0c;选择环境纹理 3、打开一张天空图像 4、可以通过调整强度/力度&#xff0c;调整世界环境的亮度

全面升级企业网络安全 迈入SASE新时代

随着数字化业务、云计算、物联网和人工智能等技术的飞速发展&#xff0c;企业的业务部署环境日渐多样化&#xff0c;企业数据的存储由传统的数据中心向云端和SaaS迁移。远程移动设备办公模式的普及&#xff0c;企业多分支机构的加速设立&#xff0c;也使得企业业务系统的用户范…

Linux:Figshare网站文件下载(非浏览器)

参考aws亚马逊云下载figshare内容 Linux wget -c 下载网页内容crul -C_figshare怎么下载数据-CSDN博客 尝试一下 mamba search awscli mamba install awscli2.15.48 aws --version通过网页获取下载链接 比如&#xff1a; https://s3-eu-west-1.amazonaws.com/pfigshare-u-…