网络基础之应用层协议,组织方式,自定义协议和http协议https协议简单介绍(1)

简介: 我们在之前的文章里讲过,应用层是应用在各个程序之间的数据沟通,其实应用层协议是面向程序员的,因为这些协议都是程序员写的,是方便程序员在编写程序时完成各个应用程序之间的沟通

应用层介绍


应用层是什么


我们在之前的文章里讲过,应用层是应用在各个程序之间的数据沟通,其实应用层协议是面向程序员的,因为这些协议都是程序员写的,是方便程序员在编写程序时完成各个应用程序之间的沟通


组织方式


序列化

在网络传输或者数据的持久化储存的时候,将多个数据对象按照指定格式进行组织成一个二进制数据进行传输或者持久性的过程


反序列化

对二进制数据按照指定格式进行解析得到各个数据对象的过程


进行自定制协议主要要考虑的要素:


1.传输性能: 定制一个协议,传输数据要尽可能的快,数据要尽可能的短小,比如我要告诉你我要去吃饭,如果发送一个字符串,传输性能会很差,如果我使用1代表这句话,我们就只需要传输1就可以代表这句话。

2.解析性能: 传输多个数据对象的时候要进行序列化,对方拿到数据之后也要进行反序化,所以解析性能就是序列化和反序列化所消耗的时间 以上会在解析的情况下很慢,传输多个对象的时候要进行数据传输

3.调试便捷性: 更多的是对于程序员的可见性,比如我在编写的时候出错方便调试


常见的自定义序列化方式

1.使用字符串进行组织

2.使用二进制进行序列化,将三个对象的二进制数据分别放到一整块内存的指定位置,最后按照指定的位置进行解析,常用的有结构体序列化,在结构体定义的时候是空间的开辟过程,在结构体中赋值的过程,就是数据组织的过程,所以结构序列化的解析性能是非常高的


在字符串序列化过程中是可见的,使用二进制序列化的话是在内部完成。不同的序列化有不同的优点,传输性能和解析性能侧重点不同,利用领域也不同,比较典型的序列化方式有: json序列化,protobuf序列化,二进制结构体序列化…


举例

网络计算器:例如, 我们需要实现一个服务器版的加法器. 我们需要客户端把要计算的两个加数发过去, 然后由服务器进行计算, 最后再把结果返回给客户端.一般情况下,接收信息和计算不会放到同一个服务器中,可能会发生数据丢失,一般情况下会再给一个计算服务器专门进行运算


约定方式一:二进制结构体序列化演示:

结构体的定义:

struct cal_t {
  intt num1;//数据1
  int num2;//数据2
  char op;//计算方式
}

数据的发送:

(以下代码部分是更具之前的博客tcp那一章封装的)

  while(1){
    struct cal_t cal;
    cal.num1 = 11;
    cal.num2 = 22;
    cal.op = '+';
    int fd = cli_sock.fd();
    send(fd,&cal,sizeof(cal),0);
    int res;
    recv(fd,&res,4,0);
    std::cout << "res:"<<res<<std::endl;
    }

数据的接收过程:

  std::cout << "new client: "<<cli_ip<<":"cli_port<<std::endl;
  while(1){
    struct cal_t cal;
    int fd = new_sock,fd();
    recv(fd,&cal,sizeof(cal),0);
    int res = -1;
    switch(cal.op){
      casse '+':
        res = cal.num1+cal.num2;
        break;
      default:
        break;
    }
    send(fd&res,sizrof(res),0);
    new_sock.close();
  }

约束方式二:


客户端发送一个形如"1+1"的字符串;

这个字符串中有两个操作数, 都是整形;

两个数字之间会有一个字符是运算符, 运算符只能是 + ;

数字和运算符之间没有空格;


在我+们网络传输的过程中,只要是内存中的数据都可以进行传输,不关心数据的组织方式是怎么样的。因为网络传输是主机传输,所以我们需要考虑以下问题:


1.结构体内存对齐,两端主机采用同样的对齐方式

2.传输的过程字节序的问题,所以要将数据转化为网络字节序进行传输


HTTP协议——超文本传输协议(最早就是用来传输web网页传输的)


HTTP协议的特性


1.是基于tcp协议的,传输可靠安全

2.是基于字符串明文传输,调试便捷性高

3.是一种简单的请求—响应协议(早起是断链接,一次请求响应后关闭)


HTTP协议的格式:


请求行(首行):请求中的第一行,主要对请求进行关键性描述

请求头部:都是一个个的键值对,是对请求的附加描述以及对正文的描述,每个属性以\n进行分隔

空行:间隔头部与正文

正文:提交给服务器的数据


HTTP 请求


image.png


请求行


请求行中的内容分为三个部分,以空格间隔,请求行以\r\n作为结尾(请求行一般就是刚好一行数据)

第一部分:请求方法

GET:向服务器请求一个网页实体资源,是没有正文的,也可以向服务器提交数据,提交的数据在url中的,获得的url长度有限,有些是1kb,4kb,8kb,每个地方不一样

POST:向服务器提交表单数据,请求中有正文

HEAD:(在面试中经常会问GET和HEAD有什么区别,作用于GET类似,但不同的是,实际上HEAD要的是头部描述,不要实体资源)

PUT:更新服务器的资源

DELETE:删除服务器上的资源

image.png


目录
相关文章
|
XML JSON API
识别这些API接口定义(http,https,api,RPC,webservice,Restful api ,OpenAPI)
本内容介绍了API相关的术语分类,包括传输协议(HTTP/HTTPS)、接口风格(RESTful、WebService、RPC)及开放程度(API、OpenAPI),帮助理解各类API的特点与应用场景。
|
10月前
|
监控 负载均衡 安全
WebSocket网络编程深度实践:从协议原理到生产级应用
蒋星熠Jaxonic,技术宇宙中的星际旅人,以代码为舟、算法为帆,探索实时通信的无限可能。本文深入解析WebSocket协议原理、工程实践与架构设计,涵盖握手机制、心跳保活、集群部署、安全防护等核心内容,结合代码示例与架构图,助你构建稳定高效的实时应用,在二进制星河中谱写极客诗篇。
WebSocket网络编程深度实践:从协议原理到生产级应用
|
10月前
|
缓存 负载均衡 网络协议
HTTP 与 SOCKS5 代理协议:企业级选型指南与工程化实践
面向企业网络与数据团队的代理协议选型与治理指南,基于流量特征选择HTTP或SOCKS5协议,通过多协议网关统一出站,结合托管网络降低复杂度,实现稳定吞吐、可预测时延与合规落地。
|
12月前
|
Android开发 Kotlin
|
11月前
|
运维 架构师 安全
二层协议透明传输:让跨域二层协议“无感穿越”多服务商网络
简介:本文详解二层协议透明传输技术,适用于企业网工、运营商及架构师,解决LLDP/LACP/BPDU跨运营商传输难题,实现端到端协议透传,提升网络韧性与运维效率。
|
12月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
919 2
|
12月前
|
应用服务中间件
HTTP协议中常见的状态码
HTTP协议状态码分为1xx、2xx、3xx、4xx、5xx五类,常见状态码包括:101(请求已接受)、200(请求成功)、302(重定向)、400(请求错误)、401(未认证)、403(无权限)、404(资源不存在),以及500(服务器错误)、502(网关错误)、503(服务不可用)、504(网关超时)等。
1035 0
|
12月前
|
网络协议 安全 网络安全
什么是HTTP协议
HTTP协议是超文本传输协议,基于TCP,规定了客户端与服务器端通信规则,但数据以明文传输,安全性低。HTTPS则通过SSL加密保障数据安全。两者默认端口不同,HTTP为80,HTTPS为443。HTTPS安全性更高,但消耗更多服务器资源。
1174 0
|
存储 网络协议 安全
HTTP 协议及会话跟踪机制详解
本文详解了 HTTP 协议的核心知识,包括其定义(超文本传输协议,基于 TCP,规定客户端与服务器通信规则)及与 HTTPS 的区别(安全性、端口、资源消耗)。 介绍了 GET 与 POST 请求的差异(参数限制、安全性、应用场景),以及 Restful 风格(通过 URL 定位资源,请求方式决定操作)。列举了常见 HTTP 状态码(如 200 成功、404 资源未找到),对比了转发与重定向的区别(服务器端一次请求 vs 客户端两次请求)。 还阐述了会话跟踪机制:Cookie 基于客户端存储,通过Set-Cookie和Cookie头实现,安全性较低;Session 基于服务端存储,依赖 C
839 1
|
12月前
|
数据采集 Web App开发 JSON
Python爬虫基本原理与HTTP协议详解:从入门到实践
本文介绍了Python爬虫的核心知识,涵盖HTTP协议基础、请求与响应流程、常用库(如requests、BeautifulSoup)、反爬应对策略及实战案例(如爬取豆瓣电影Top250),帮助读者系统掌握数据采集技能。
869 0

热门文章

最新文章