【JavaEE】网络初识

news2024/11/18 14:24:06

初识网络协议

OSI七层和TCP/IP五层(四层)

应用层

应用程序

代码实现

传输层

端到端传输  (如玩家对玩家)

操作系统内核实现

网络层

点到点传输 

操作系统内核实现

数据链路层

相邻节点之间的传输  (如集散点到集散点)

硬件和驱动实现

物理层

底层基础设施 

硬件和驱动实现

p.s. API是传输层给应用层提供的交互接口

传输层的TCP和UDP协议

TCP(Transmission Control Protocol 传输控制协议)和UDP(User Datagram Protocol用户数据报协议)协议是网络传输层中最知名的两个协议,他们的工作特性相差较大,操作系统提供的API也风格迥异。

TCP协议

UDP协议

有连接

无连接

有连接表示信息传输时双方都需要在线连接,如打电话;无连接反之,如发短信

可靠传输

不可靠传输

可靠表示发送方可以知道接收方是否收到信息;不可靠反之

面向字节流

面向数据报

以Byte[]为基本单位;以Datagram为基本单位

全双工

全双工

全双工即一个通道双向通信;半双工反之,一个通道只能单向通信

大小不限

大小受限

因为有发送和接受两端的缓冲区所以大小不限;只有接收端缓冲区所以一次最多64K

应用层协议

XML协议

通过”标签“的形式组织键值对数据,标签名字就是key,标签内容就是value,如:

<request>

    <words> "hello" </words>

</request>

缺点:很繁琐,标签量大,内容多了之后很乱,网络带宽占用会更高

JSON协议

可以说是XML的优化版本,用大括弧{}[]等来代替了前后的单词标签,括弧内包含多组键值对,用逗号","来分隔键值对,用冒号":"来分割键和值,如:

{

    words:{

        hello

    },

    preference:{

        protein:beaf,

        vitamin:orange

    }

}

优点:美观一些

缺点:依旧是有额外的字符串,传输数据量还是很大,消耗带宽多

protobuffer协议

谷歌搞的二进制数据组织格式,带宽占用较低,更高效,也更复杂,适合对运行效率要求较高的场景使用

封装和分用

上述的网络协议分乐很多层,每一层都有很多协议。上层协议调用下层协议,下层协议给上层提供服务。相邻层之间的协议可以交互,不能跨层交互。

封装过程

应用层

应用程序内部约定好了应用层协议

【应用层内容】

传输层

协议很多,TCP协议就是给应用层协议加上报头,包括源端口和目的端口

【TCP报头】【应用层内容】

网络层

协议很多,典型是IP协议,将TCP层数据视为载荷然后加在报头,包括IP和目的IP

【IP报头】【TCP报头//应用层内容】

数据链路层

协议很多,典型是”以太网“,以太网协议给网络层数据整体加上帧头(源mac地址、目的mac地址)和帧尾(校验和)

【帧头】【IP报头//TCP报头//应用层内容】【帧尾】

物理层

硬件和驱动有很多,典型的是网卡,将数据链路层的数据二进制bit流转换成光/电信号(取决于光纤/网线)进行传输

光电版本【帧头//IP报头//TCP报头//应用层内容//帧尾】

分用过程

物理层

网卡这样的硬件设备将收到的光/电信号转为二进制bit数据后,传递给数据链路层

【帧头//IP报头//TCP报头//应用层内容//帧尾】

数据链路层

根据以太网协议解析,拿到以太网数据帧,去掉帧头和帧尾后,传递给网络层

【IP报头//TCP报头//应用层内容】

网络层

根据IP协议对拿到的载荷解析,获取到IP报头,去掉IP报头后传递给传输层

【TCP报头//应用层内容】

传输层

根据TCP协议对拿到的载荷解析,去掉TCP报头后传递给应用层

【应用层内容】

应用层

对应用层数据报解析,取出信息

【显示再界面上的信息】

Socket

Socket = 套接字,是TCP/IP协议的路通信的基本操作单元。

对Socket的理解

操作系统给应用程序提供了一组和网络相关的API,程序员可以通过这组API编写代码完成网络编程。对两个进程的应用程序中的通信连接端点进行抽象,抽象出来的对象就是Socket,相当于一个数据的基本单位(这里体现了OOP思想)。

Socket和Packet的关系

进程和进程之间传输需要将数据打包为一份Socket,Packet是Socket里的一部分。

DatagramPacket叫做数据报,DatagramSocket叫做数据报的套接字

Socket相关的编程通常都是服务器-客户端模型,点击查看简单实现。

Socket的类型

主要有三个类型:流套接字(Stream)、数据报套接字(Datagram)、原始套接字(Raw)

UDP Socket

UDP协议是以数据报套接字(Datagram)为基本传输单位的,作用为实现客户端-服务器的交互。

服务端的任务是提供多个客户端的请求处理及响应,流程如下:

流程简言之为:

客户端:读取用户请求 -> 创建数据报并将请求写入 -> 创建数据报套接字并将数据报传给服务器 ->  通过数据报套接字从客户端获取响应的数据报 ->  解析响应 -> 反馈给用户

服务器:创建数据报套接字并获取来自客户端的数据报 -> 解析数据报并处理相关请求 -> 将处理结果打包进数据报 -> 通过数据报套接字传回给客户端

DatagramSocket和DatagramPacket是主要使用的两个类。

DatagramSocket API

DatagramPacket API

InetSocketAddress API

socket也是一个文件(广义),而一个进程能同时打开的文件有限(文献描述符表有上限),所以对于会创建很多的socket,就需要对不再使用的socket进行关闭,防止持续消耗文件描述符表。而有些socket可能一个进程中只会出现一次,就不需要这个close。

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

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

相关文章

ChatGPT能接入微信了

前两天还看到不少人讨论&#xff0c;要是ChatGPT接入微信是啥感觉&#xff1f; 这不&#xff0c;想你所想&#xff0c;项目已经来了~ 来看效果&#xff0c;ChatGPT就出现在普通的微信对话框里&#xff0c;有问必答&#xff1a; 甚至还能拉入群聊&#xff0c;大家共用&#xf…

Adobe Premiere Pro 2020 系统兼容性报告:不支持的视频驱动程序

Adobe Premiere Pro 2020 系统兼容性报告&#xff1a;不支持的视频驱动程序 1. 问题 打开Adobe Premiere Pro 2020&#xff0c;看见系统兼容性报告&#xff1a;不支持的视频驱动程序。如下图&#xff1a; 点击修复&#xff0c;进入安装 Intel 图形驱动程序教程页面&#xff0…

DQL查询数据

文章目录DQL指定查询字段where条件子句联表查询分页和排序子查询DQL &#xff08;Data Query Language&#xff1a;数据查询语言&#xff09; 所有的查询操作都要用到它 select简单的查询&#xff0c;复杂的查询都要用到它数据库最核心的语言&#xff0c;最重要的语言使用频率…

python写个网页,使用flask显示时间登陆注册

用python写个网页。显示当前时间 可以使用 Python 的 datetime 模块来获取当前时间&#xff0c;然后使用 Python 的 Flask 框架来创建网页。 首先&#xff0c;需要安装 Flask&#xff1a; pip install flask 然后&#xff0c;可以使用以下代码创建一个 Flask 应用程序&#…

【Numpy基础知识】字节交换

字节交换 来源&#xff1a;Numpy官网&#xff1a;https://numpy.org/doc/stable/user/basics.html 文章目录字节交换导包【1】字节排序和ndarrays 简介【2】更改字节顺序导包 import numpy as np【1】字节排序和ndarrays 简介 ndarray 是一个对象&#xff0c;它为内存中的数据…

2023年,我的儿子刚从美国名校毕业,就失业了...

前不久&#xff0c;朋友圈里一篇名为《2023年&#xff0c;我的儿子刚从美国名校毕业&#xff0c;就失业了…》的文章火爆全网。 故事里的男孩出生于一个中产阶级家庭&#xff0c;从每年12万的幼儿园开始一路接受了优质教育&#xff0c;最终不负众望从美国前50名校的商学院毕业…

Ubuntu20.04LTS环境docker+cephadm方式部署Ceph 17.2.5

Ubuntu20.04LTS环境dockercephadm方式部署Ceph 17.2.51. 前言2. 环境准备2.1. 主机信息2.2. NTP时间同步2.3. 关闭 iptable 和 firewalld2.4. 关闭 SElinux2.5. 生成SSH证书&#xff0c;并分发到其他节点2.6. 依赖安装3. 安装部署Ceph17.2.53.1. 安装cephadm&#xff0c;拉取ce…

玩转ast- 手写babel插件篇

AST抽象语法树是什么&#xff1f;抽象语法树&#xff08;Abstract Syntax Tree&#xff0c;AST&#xff09;是源代码语法结构的一种抽象表示它以树状的形式表现编程语言的语法结构&#xff0c;树上的每个节点都表示源代码中的一种结构每个包含type属性的数据结构&#xff0c;都…

基于Amlogic T972:结合DTS、驱动、Datasheet,解析Pinctrl子系统、GPIO脚的复用方法

文章目录前言一、概念1.1 Pinctrl devices1.2 Pinctrl client devices二、例&#xff08;1&#xff09;GPIOZ_9/10 复用为 i2c2_z2.1 Pin controller devices2.1.1 设备树配置: dts2.1.2 源码&#xff1a;驱动配置2.1.3 Datasheet2.2 Pinctrl client devices2.2.1 设备树配置&a…

华为云桌面,开启云上高效办公之旅!

在传统办公模式中&#xff0c;企业必须自己购买服务器和数据库软件才能进行日常管理&#xff0c;部署繁琐&#xff0c;还需要日常运维。而云桌面办公系统通过将传统的计算机终端与云计算平台有机地结合起来&#xff0c;使企业能够轻松应对各种变化带来的威胁和压力。 其中华为云…

用户与技术双向推动,小游戏赛道迎来新一轮增长机会

2017 年 12 月 28 日&#xff0c;微信小游戏正式上线。“跳一跳”刷爆了微信朋友圈&#xff0c;随后欢乐斗地主、坦克大战、纪念碑谷、拳皇等经典游戏纷纷出现在小游戏平台上。在过去的5年间&#xff0c;各大平台纷纷紧跟微信的步伐&#xff0c;纷纷入局小游戏&#xff0c;当前…

回调函数的基本使用

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;《初识C语言》 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、什么是回调函数二、为什么要…

打开新世界大门,测试人可以用Chrome插件干什么?

什么是Chrome插件 这篇文章所说的Chrome插件&#xff0c;也就是我们通常说的Chrome扩展 (Chrome Extension)&#xff0c;是一个用Web技术开发、用来增强浏览器功能的软件&#xff0c;它其实就是一个由 HTML、CSS、JS、图片等资源组成的一个 .crx 后缀的压缩包。 让我们来看看…

Android12屏下指纹解析

版权声明&#xff1a;本文为梦想全栈程序猿原创文章&#xff0c;转载请附上原文出处链接和本声明 前言&#xff1a;google官方更新了Android12的指纹架构&#xff0c;新添加了关于屏下指纹(屏下光学跟屏下超声波)的支持&#xff0c; 刚好近期要研究这个&#xff0c;想把自己的…

移动硬盘安装ubuntu系统二——启动U盘安装

一. 简介 在之前的一篇文章中记录了使用VMware Workstation给移动硬盘中安装Ubuntu系统过程&#xff0c;本篇文章简单记录使用启动盘安装 Ubuntu 20.04.5系统到移动硬盘。 二. 制作Ubuntu镜像的系统启动盘 按照官网 Install Ubuntu desktop上介绍&#xff0c;在 Windows 上可…

【Transformer】——李宏毅机器学习笔记

Transformer 前言 transformer是一个sequence-to-sequence(seq2seq) 的 model input a sequence&#xff0c;output a sequence. The output length is determined by model. 例如 语音辨识&#xff1a; 那么为什么不能把以上三种模型结合起来&#xff0c;进行语音识别呢&…

代码随想录拓展day3 922. 按奇偶排序数组II;24. 两两交换链表中的节点;234.回文链表;143.重排链表

代码随想录拓展day3 922. 按奇偶排序数组II&#xff1b;24. 两两交换链表中的节点&#xff1b;234.回文链表&#xff1b;35.搜索插入位置 数组和链表的题目。链表的操作几天没看又忘了&#xff0c;果然是要及时复习加反复复习。 922. 按奇偶排序数组II 922. 按奇偶排序数组 …

【小程序】宿主环境之通信模型和运行机制

目录 宿主环境 1. 什么是宿主环境 2. 小程序的宿主环境 通行模型 1. 通信的主体 2. 小程序的通信模型 运行机制 5. 小程序启动的过程 6. 页面渲染的过程 宿主环境 1. 什么是宿主环境 宿主环境&#xff08;host environment&#xff09;指的是程序运行所必须的依赖环…

论文笔记Point·E: A System for Generating 3D Point Clouds from Complex Prompts

之前的文本生成3D模型的方法生成一个模型需要多块GPU跑好几个小时&#xff0c;该文章提出的方法生成一个3D模型只需要单GPU1-2分钟。 该文章生成的3D模型的质量并不是当下最好的&#xff0c;但是生成速度很快&#xff0c;因此在现实中很有意义。 从文本生成3D模型的过程分为三…

Redis 对象

在 Redis底层数据结构介绍1 中我们介绍了Redis用到的所有主要数据结构&#xff0c;比如简单动态字符串&#xff08;SDS&#xff09;、双端链表、字典、压缩列表、整数集合等等。Redis并没有直接使用这些数据结构来实现键值对数据库&#xff0c;而是基于这些数据结构创建了一个对…