网络原理(TCP/IP五层协议)(一)

news2024/11/16 21:55:36

目录

  • TCP/IP五层协议栈
    • 应用层
    • 传输层

TCP/IP五层协议栈

在这里插入图片描述

应用层

在应用层最重要的事情,就是“设计并实现一个应用层协议”。

举个例子,公司在开发一个项目,点外卖的软件。
当前要开发一个功能,叫做获取用户的订单历史。(在数据库里,服务器来拿)
这样的功能,就需要涉及到,前端(客户端)和后端(服务器)彼此的交互。

前端和后端就是通过网络来进行交互的,在这个交互的过程中,就需要约定好,前端发啥样的数据,后端回对应的数据。
在这里插入图片描述
形如上述工作,就是在设计一个应用层协议。
在这里插入图片描述
当前只是给出了一种可能的格式,此处数据的格式,可以随心所欲的约定。

相比之下只要能够让客户端和服务器之间都按照一样的格式来交互就行了。

总结
设计一个应用层协议,主要包含两个工作

  1. 明确传输的信息
  2. 明确数据的组织格式

当下比较流行的一些协议的模板(数据的组织格式)

  1. xml
  2. json
  3. protobuffer

有些是可读性好,但是运行效率不高,有些可读性不好,运行效率高。

  • xml 的格式非常有特点
  • 在这里插入图片描述
    在这里插入图片描述
    标签名就是key,标签值就是value
    通过这些标签,就更好的体现了这个数据的可读性,尤其是哪个部分是什么意思,一目了然,虽然xml提高了可读性,但是又引入了太多的辅助信息。
    对于一个服务器程序,最贵的是硬件资源,就是网络带宽。对于 xml 来说,因为要表示这些辅助信息,就导致传输相同数目的请求的时候,占用的带宽是更高的。

  • json 当下最流行的一种设计应用层协议的数据格式。
  • 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    当表示一个更加复杂的数据,比如数组的时候,此时这里的很多key就会重复出现N次,也就占用了更多的额外带宽。
    就这样,protobuffer应运而生,是一种二进制格式的数据,在protobuffer的数据中,不再包含上面的key的名字,而是通过顺序以及一些特殊符号,来区分每个字段的含义,同时再通过一个IDL文件来描述这个数据格式(每个部分是什么意思),IDL只是起到一个辅助开发的效果,并不会真正的进行传输,传输的只是二进制的纯粹的数据。

    在这里插入图片描述

    传输层

    补充一下端口号的知识。
    在这里插入图片描述
    80 一般就是给HTTP使用
    22 一般给SSH使用
    21 一般给FTP使用
    23 一般给telnet使用
    443 一般给HTTPS使用

    针对这些知名端口号,咱们在实际开发的时候也不一定非得要严格遵守.

    在传输层中最著名的两个协议分别是 UDP 和 TCP,传输层负责的是 “端到端” 之间的通信,在发送方发出的数据,接收方有没有准确无误的接收到,是传输层主要关心的工作。
    在学习一个协议,最主要的就是研究这个协议是以什么样的报文格式进行数据传送的,以及它有什么样的功能特点。

    UDP,TCP都是属于传输层的协议.
    UDP
    1.无连接
    2.不可靠
    3.面向数据报
    4.全双工
    在这里插入图片描述
    很多计算机网络的书上都会有,但是这种画法,其实是不对的,之所以这样画,只是为了印刷的时候排版。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    TCP
    在这里插入图片描述
    在这里插入图片描述

  • 源/目的端口号:表示数据是从哪个进程来,到哪个进程去;
  • 4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最大长度是15 *4 = 60
  • 6位标志位:
    URG:紧急指针是否有效
    ACK:确认号是否有效
    PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走
    RST:对方要求重新建立连接;我们把携带RST标识的称为复位报文段
    SYN:请求建立连接;我们把携带SYN标识的称为同步报文段
    FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段
    
  • 16位校验和:发送端填充,CRC校验。接收端校验不通过,则认为数据有问题。此处的检验和不光包含TCP首部,也包含TCP数据部分。
  • 16位紧急指针:标识哪部分数据是紧急数据;
  • 特点:
    1.有连接
    2.可靠
    3.面向字节流
    4.全双工
    有连接:socket创建好了之后,还需要建立连接,连接建立完了,在通过accept获取到连接才能进行读写数据
    无连接:socket创建好之后就可以立即尝试读写数据了
    面向数据报:读写数据都是以DatagramPacket为单位进行的
    面向字节流:读写数据直接以byte[]为单位.
    全双工:一个socket既能读,也能写

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

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

相关文章

软件设计(三)

软件设计(二)https://blog.csdn.net/ke1ying/article/details/128794008?spm1001.2014.3001.5502 21、一颗二叉树的高度为h,则该二叉树 最多有2的h次方-1个节点。 22、图的遍历是指对图中所有顶点进行访问且只访问一次的过程,可…

《第一行代码》 第一章:第一行Android代码

1,Android系统架构 2,开发的四大组件 3,丰富的系统控件 Android 系统为开发者提供了丰富的系统控件,使得我们可以很轻松地编写出漂亮的界面。当然如果你品位比较高,不满足于系统自带的控件效果,也完全可以…

java 基于ssm的在线音乐分享平台 idea mysql

根据一般在线音乐平台的功能需求分析,本系统的功能模块如下: (1)在个人中心,管理员可以修改自己的用户名和登录密码。 (2)在用户管理模块中,可以查看用户的信息,和进行修…

动态规划的万能公式(三类题型)

本文主要介绍如何用Python解决动态规划的问题,在动态规划问题中,最主要的是找到问题的dp,即找到状态转移函数,当你找到了该问题的状态转移函数,你就成功了一半,下面我将介绍三类最主要的题型,对…

FreeRTOS事件实验

前面章节我们学习了如何使用信号量来实现同步,但是使用信号量来同步的 话任务只能与单个的任务进行同步。有时候某个任务可能会需要与多个任务进行 同步,此时信号量就无能为力。FreeRTOS 为此提供了一个可选的解决方法,那 就是事件标志组。本…

TypeScript基础使用

TypeScript介绍: TypeScript 是 JavaScript 的一个超集 它的第一个版本发布于 2012 年 10 月,vue3和react也完全支持typescrpt 为什么选择 TypeScript: 类型系统实际上是最好的文档,大部分的函数看看类型的定义就可以知道如何使…

高性能SQL-数据库性能优化

数据库性能优化涉及各个方面,本文就总多个角度介绍一下数据库性能优化的方法 1.表设计 聚集索引 一个表只能有一个聚集索引,数据在磁盘上的排练顺序与聚集索引一致,根据业务仔细设定聚集索引,值递增的不可修改的字段才能设置聚集索引&…

海康摄像头Linux开发

官方sdk下载 https://open.hikvision.com 点击下载就行了 Ubuntu摄像头抓拍测试 我们使用Linux64 纯净版测试 接好海康摄像头,通电,并设置号ip和用户名、密码。如果有现成的,可以去查一下就知道了 先把设备下载的文件解压并放到Ubuntu下面…

redis的渐进式rehash机制

简述 在redis的字典(dict.h)实现中,当哈希表保存的键值对太多或者太少时,会触发扩展/收缩; 触发收缩:负载因子小于 0.1触发扩展:以下任一条件符合即可 服务器目前没有在执行 BGSAVE 命令或者 …

k8s核心资源

一、NameSpace对资源进行隔离&#xff0c;比如开发环境和测试环境等。命令# 查看所有命名空间的资源 kubectl get pod -A # 查看单独某个命名空间下的资源 kubectl get pod -n <空间名称> # 查看所有命名空间 kubectl get ns # 创建命名空间 kubectl create ns <空间名…

SpringAMQP

SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。 SpringAmqp的官方地址&#xff1a;Spring AMQP SpringAMQP提供了三个功能&#xff1a; 自动声明队列、交换机及其绑定关系&#xff08;RabbitAdmin&…

Hive自定义UDF函数及使用

目录 一、UDF概述 二、编写自定义UDF 1.创建项目 2.pom.xml文件添加依赖 3.编写工具类及自定义UDF类 4.打包 5.测试 jar 6.上传至服务器、HDFS并给jar包赋权 7.添加到hive类路径并创建临时函数 8.使用测试&#xff1a; 9.临时函数、永久函数 一、UDF概述 UDF全称&…

面试项目经验相关技巧

前言 面试问项目经验主要是想了解所做项目用到的技术&#xff0c;以及自己在项目中扮演的角色。 一、秒杀系统 秒杀系统往往不是咱的项目经验&#xff0c;但是面试可能会问&#xff0c;在说自己项目经验的时候也可以往秒杀和高并发上面带。 可能遇到的问题 高并发 一般就是…

阿里云KMS创建应用接入点

1.进入KMS控制台https://kms.console.aliyun.com/cn-beijing/applicationAP/list2.应用管理->创建应用接入点应用接入点可以想象成一个入口。入口打开的时候&#xff0c;运行在你服务器中的代码&#xff08;KMS客户端&#xff09;才可以与阿里云的KMS实例通讯。2.1设置入口名…

【软件测试】离开“浪浪山“测试人迎来的春天......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 这几年因为疫情、经…

Activiti7工作环境搭建_创建基础工程自动创建Activiti数据库表---工作流工作笔记004

然后我们开始来搭建activiti的环境 首先给idea安装activiti插件,从插件里搜索 actiBPM注意,这个直接在idea中搜索可能搜索不到,因为太旧了这个工具,新的idea已经不支持,需要手动去actiBpm 官网下载以后手动安装 下载就可以了 下载以后点击齿轮,然后选择从硬盘安装 选择下载好的…

注册公司认缴vs实缴,选择哪一个更好?

前言 上一篇说了在创业的时候先进行选择公司类型&#xff0c;然后在公司注册过程中都需要登记公司的注册资本&#xff0c;会涉及注册资金这一点&#xff0c;而现在有认缴制和实缴制&#xff0c;到底选择哪一个更好呢&#xff1f; 在选择之前&#xff0c;先来和大家分享下认缴制…

PyG-节点分类+链接预测+异常检测示例

引言图神经网络(Graph Neural Networks)是一种针对图结构数据(如社交图、网络安全网络或分子表示)设计的机器学习算法。它在过去几年里发展迅速&#xff0c;被用于许多不同的应用程序。在这篇文章中我们将回顾GNN的基础知识&#xff0c;然后使用Pytorch Geometric解决一些常见的…

idea本地debug调试DATAX插件运行

datax官方github地址&#xff1a;GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。 接触datax是看重他的数据采集功能和可以扩展插件的功能&#xff0c;根据官方说明&#xff0c;DATAX是以python来调用插件的运行json配置&#xff0c;但对于二次开发插件的…

nacos权限区分

背景 nacos的默认是不进行分配权限的&#xff0c;那么这样就带来了一个问题&#xff0c;如果多项目共同使用一个nacos&#xff0c;可以带了一个情况是开发人员误操作&#xff0c;把其他项目的nacos配置文件更改或者删除。那么如何解决这个问题呢&#xff1f;就是把nacos进行分…