网络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.hqwc.cn/news/690875.html

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

相关文章

【C语言题解】用函数来模拟实现strlen()、strcpy()、strcmp()、strcat()

🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊ 学习了函数后,老师让我们用函数来实现上面这四个字符串函数。 我们首先来了解一下这四个字符串函数: 1.strlen函数 用于获取字符串长度(不包括末尾…

OBS插件--复合模糊

复合模糊 复合是一款滤镜插件,支持多种模糊类型和多种蒙版效果。支持模糊源的部分显示区域,可以反选区域进行模糊,这个功能对于场景部分区域需要遮盖非常实用。 下面截图演示下操作步骤: 首先,打开 OBS直播助手 在…

Vulnhub靶机随笔-CYNIX_1

Vulnhub靶机CYNIX_1详解 攻击机Kali IP:192.168.3.44 靶机 IP:未知 系统:未知 A.信息收集 扫描靶机存活性 确定IP地址 1.命令:arp-scan -l 扫描靶机开放端口及其服务版本信息 2.命令 nmap -A -p- -sV 靶机IP地址 3.靶机开放两个端口: 80web网站, 6688ssh端…

Docker in Docker(DinD)原理与实战

🐇明明跟你说过:个人主页 🏅个人专栏:《Docker幻想曲:从零开始,征服容器宇宙》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Docker简介 2、Docker …

maven deploy项目发布到中央仓库签名失败signing failed: No secret key

maven deploy项目发布到中央仓库签名失败signing failed: No secret key 执行操作 在我执行命令打包项目到中央仓库时失败 mvn clean deploy错误信息 [INFO] --- gpg:3.1.0:sign (sign-artifacts) LocalCache --- [INFO] Signing 4 files with 9961AA14xxxxxxxxxxxxxxD064…

未授权访问:JBoss未授权访问漏洞

目录 1、漏洞原理  2、环境搭建 3、未授权访问 4、利用jboss.deployment getshell 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验,一共有好多篇,内容主要是参考先知社区的一位大佬的关于未授权访问的好文章,还有其他大佬…

汽车线控转向系统介绍

汽车线控转向系统由方向盘总成、转向执行总成和主控制器(ECU)三个主要部分以及自动防故障系统、电源等辅助系统组成。 线控转向系统(Steering-By-Wire),取消了方向盘和转向车轮之间的机械连接部件,彻底摆脱了机械固件的限制,完全由电能来实现…

Chatgpt的应用场景

文案创作类: 作为一名大型语言模型,ChatGPT可以为使用者提供多种文本处理和文字创作方面的服务,例如: 文本生成和创作 ChatGPT可以基于您提供的主题、关键词或文本段落,生成符合使用者要求的新文本。这些文本可以是文…

MySQL-索引篇

文章目录 什么是索引?索引的优缺点索引底层数据结构选型Hash表二叉查找树AVL树红黑树B树&B树 索引类型总结主键索引二级索引聚集索引与非聚集索引聚集索引非聚集索引 覆盖索引与关联索引覆盖索引联合查询最左前缀匹配原则 索引下推如何正确使用索引选择合适的字…

【数据结构】浅谈

✨✨✨专栏:数据结构 🧑‍🎓个人主页:SWsunlight 目录 一、概念: 二、物理结构: 1、顺序存储结构: 2、链式存储结构: 3、数据索引存储结构: 4、数据散列存储结构&#xf…

SpringAI 技术解析

1. 发展历史 SpringAI 的发展历史可以追溯到对 Spring 框架的扩展和改进,以支持人工智能相关的功能。随着人工智能技术的快速发展,SpringAI 逐渐成为 Spring 生态系统中的一个重要组成部分,为开发者提供了便捷、灵活的解决方案。 项目的灵感来…

【全面介绍下Spring】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…