【JavaEE】初识计算机网络(TCP/IP五层模型及封装和分用)

news2024/11/26 22:23:34

一、 网络通信基础

网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。
那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。

1.1 IP地址

IP地址用于定位主机的网络地址
(就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。)

IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识。

1.2 端口号

在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。

注意:两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。

1.3 协议

协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。

协议(protocol)最终体现为在网络上传输的数据包的格式。

1.4 五元组

在TCP/IP协议中,用五元组来标识一个网络通信:
1. 源IP:标识源主机
2. 源端口号:标识源主机中该次通信发送数据的进程
3. 目的IP:标识目的主机
4. 目的端口号:标识目的主机中该次通信接收数据的进程
5. 协议号:标识发送进程和接收进程双方约定的数据格式

在这里插入图片描述

1.5 协议分层

协议分层类似于打电话时,定义不同的层次的协议:
在这里插入图片描述

1.6 TCP/IP五层模型(important)

应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
传输层:不关注中间路径,只关心起点和终点(负责两台主机之间的数据传输)
网络层:两个遥远节点之间的路径规划(负责地址管理和路由选择)
数据链路层:关注两个相邻结点的传输(设备之间的数据帧的传送和识别)
物理层:网络通信的基础设施。网线、光纤、网络接口等。(负责光/电信号的传递方式)

在这里插入图片描述

1.7 封装和分用

发送方发送数据,要把数据从上到下,交给依次对应的层次的协议,进行封装
接收方接收数据,要把数据从下到上,交给依次对应的层次的协议,进行解析

下面以QQ发消息为例说明封装和分用的过程:
我作为发送方,在编辑框输入一个消息:“吃饭了吗”。发给姐姐。
则会有如下过程:

(1)应用层(qq)拿到上述用户数据进行封装,封装成应用层数据包(本质就是字符串拼接)
在这里插入图片描述
(2)传输层拿到上述数据:
应用层调用传输层的api来处理这个数据
传输层有很多协议,其中最典型的就是TCP和UDP

此处以UDP为例:
UDP针对上述数据包在进行封装:

在这里插入图片描述
就是给上述应用层数据包加了“报头”变成数据报,一个典型的数据报结构就是:“报头”+”载荷“。这里应用层数据包作为UDP数据报的”载荷“

(3)传输层到网络层:
此时是一个UDP数据报,接下来把他交给网络层的协议
网络层最常见的协议就是IP协议

加上一个IP协议的报头,整个UDP数据报作为载荷
在这里插入图片描述
源IP和目的IP就描述了这次传输最初的起点和最终的终点

4)网络层交给数据链路层
最典型的协议:以太网(数据链路层和物理层)

给上述的IP数据报加上以太网帧头和帧尾变成以太网数据帧
在这里插入图片描述
其中mac地址也叫物理地址,也是描述一个设备在网络上的位置,和IP很相似

(5)数据链路层把上述以太网数据帧交给物理层

物理层把上述二进制数据转换成光信号/电信号/电磁信号,进行传输

以上的操作咱们的操作系统都已经封装好了

而接受的过程和上述刚好相反:从下到上,依次分用:

(1)物理层收到高低电平二进制数据
会对这些信号解析,变成二进制序列

(2)从物理层到数据链路层
把上述二进制序列当成一个以太网数据帧,去掉帧头和帧尾交给网络层:

在这里插入图片描述

(3)网络层
此时由网络层的IP协议进行解析数据报,去掉IP报头和其他工作

在这里插入图片描述
(4)传输层:
由UDP进行解析,将载荷交给应用层

在这里插入图片描述
(5)由qq程序解析应用层数据报并取出下列字段放在程序的界面中
在这里插入图片描述

真实的网络传输可能还会经过多个节点:
在这里插入图片描述

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

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

相关文章

仿CSGO盲盒开箱源码 盲盒商城源码 盲盒开箱源码 潮物盲盒商城源码

仿CSGO盲盒开箱源码 盲盒商城源码 盲盒开箱源码 潮物盲盒商城源码 测试环境:宝塔、Linux、PHP7.2、MySQL5.6 根目录 public,伪静态 thinkphp,php需要Redis扩展 后台:/stf 账号:admin 密码:123123 *后台…

【量化交易笔记】11.移动平均交易策略

概述 上一节我们建立了最最简单的交易策略,尽管有了盈利,但实际操作上是不可行的。本节将运用移动平均指标,包括单一移动平均策略和双移动平均策略,来建立经典的移动平均策略。 数据采集处理 本文采用上一节的相同数据&#xf…

Python基础入门例程1-NP1 Hello World!

描述 将字符串 Hello World! 存储到变量str中,再使用print语句将其打印出来。 输入描述: 无 输出描述: 一行输出字符串Hello World! 解答: str "Hello World!" print(str) 解释说明: 赋值变量&…

AD9371 官方例程HDL详解之JESD204B TX_CLK生成 (二)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方…

[H5动画制作系列]雪花随机产生飘落

雪花图片参考: 全局代码: var max120; var index0; 第一帧代码: index; if(index<max){posX550*Math.random();posY220*Math.random()-100;scale0.8*Math.random()0.2;var snowflakenew lib.snowlink();snowflake.xposX;snowflake.yposY;snowflake.scaleXscale;snowflake…

SpringBoot 实体参数(用于请求参数比较多时使用)

字段必须和传参时一致&#xff0c;否则为null&#xff0c; 使用AITINS可以快速生成&#xff0c;SET GET方法 public class User {//字段必须和传参时一致&#xff0c;否则为nullprivate String user;private String password;public String getUser() {return user;}public vo…

使用screen实现服务器代码一直运行

1.安装screen sudo apt install screen 2.创建一个screen&#xff08;创建一个名为chatglm的新的链接&#xff0c;用来一直运行 screen -S chatglm 3.查看进程列表 screen -ls 创建之后&#xff0c;就可以在当前窗口利用cd命令进入要执行的项目中&#xff0c;开始执行&#xf…

MIT 6.s081操作系统实验 Lab2: system calls

文章目录 1 System call tracing1.1 主要思路1.2 系统调用流程 2 Sysinfo2.1 kernel/kalloc.c 此文件用于实现分配物理空间的函数2.1.1 结构体定义2.1.2 空闲链表初始化2.1.3 内存的分配和释放2.1.4 获取空闲内存字节数 2.2 kernel/proc.c 此文件用于进程管理2.3 sys_Sysinfo2.…

Openssl数据安全传输平台006:粘包的处理-代码框架及实现-TcpSocket.cpp

文章目录 0. 代码仓库1. TCP通信粘包问题2. 粘包、拆包表现形式2.1 正常情况2.2 两个包合并成一个包2.3 出现了拆包 3. 粘包的处理-参考仓库中的文件TcpSocket.cpp3.1 发送数据时候的处理3.2 接收数据时候的处理 0. 代码仓库 https://github.com/Chufeng-Jiang/OpenSSL_Secure_…

互联网Java工程师面试题·Java 面试篇·第四弹

目录 59、我们能自己写一个容器类&#xff0c;然后使用 for-each 循环码&#xff1f; 60、ArrayList 和 HashMap 的默认大小是多数&#xff1f; 61、有没有可能两个不相等的对象有有相同的 hashcode&#xff1f; 62、两个相同的对象会有不同的的 hash code 吗&#xff1f; …

有限小数题解(进制转换+某进制判断是否为无限小数)

给定一个 A 进制下的分数 a/b&#xff0c; 小蓝想把它化为 B 进制下的小数 c。 现在他想知道这个小数是不是一个有限小数。 Input 输入共一行&#xff0c;包含四个数 a, b, A, B&#xff0c;表示该分数和两种进制。 其中 A, B 使用十进制表示&#xff0c; a, b 中大于 9 的数…

2023最新UI酒桌喝酒游戏小程序源码 娱乐小程序源码 带流量主

2023最新UI酒桌喝酒游戏小程序源码 娱乐小程序源码 带流量主 修改增加了广告位&#xff0c;根据文档直接替换&#xff0c;原版本没有广告位 直接上传源码到开发者端即可 通过后改广告代码&#xff0c;然后关闭广告展示提交&#xff0c;通过后打开即可 无广告引流 流量主版…

【JavaEE】网络编程(网络编程基础、Socket套接字)

一、网络编程基础 1.1、什么是网络编程&#xff1f; 网络编程&#xff0c;指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信&#xff08;或称为网络数据传输&#xff09; 注意&#xff1a;我们只要满足进程不同就行&#xff1b;所以即便是同一…

2023.10.19 关于设计模式 —— 单例模式

目录 引言 单例模式 饿汉模式 懒汉模式 懒汉模式线程安全问题 分析原因 引言 设计模式为编写代码的 约定 和 规范 阅读下面文章前建议点击下方链接明白 对象 和 类对象 对象和类对象 单例模式 单个实例&#xff08;对象&#xff09;在某些场景中有特定的类&#xff0c;…

VS采用nuget配置OpenGL

参考&#xff1a;如何配置Opengl编程环境_opengl配置_知心宝贝的博客-CSDN博客 这应该是最快的办法了&#xff0c;直接用nuget配置。 1.打开NuGet包管理器 2.搜索glew、glfw、glm、freeglut并点击安装即可 3.测试代码 能正常运行说明配置成功了 #include <GL/glew.h>…

Windows 安装 Java

1. 安装 JDK 从 Oracle 的官网下载的 JDK&#xff0c;例如 JDK 21 双击下载得到的 msi 文件&#xff0c;开始安装 JDK 选择要安装的文件路径&#xff08;我一般都默认&#xff09;&#xff1a; 等待安装&#xff1a; 安装完成&#xff1a; 2. 验证是否安装成功 2.1. 打开 cmd…

小插曲 -- 使用Visual Studio Code远程连接香橙派

在之前的学习中&#xff0c;代码的修改和保存都依赖于“vi”指令&#xff0c;而不得不承认vi指令的编辑界面非常原始&#xff0c;所以&#xff0c;如果可以将代码编辑放到更友好的环境里进行无疑是一件大快人心的事情。 本节介绍如何通过Visual Studio Code来进行远程连接: Vi…

Kubernetes 通过 Deployment 部署Jupyterlab

概要 在Kubernetes上部署jupyterlab服务&#xff0c;链接Kubernetes集群内的MySQL&#xff0c;实现简单的数据开发功能。 前置条件 镜像准备&#xff1a;自定义Docker镜像--Jupyterlab-CSDN博客 MySQL-Statefulset准备&#xff1a;StatefulSet 简单实践 Kubernetes-CSDN博客…

Nvidia显卡基础概念介绍

一、PCIe与SXM 1.1 Nvidia GPU PCIe PCIe(peripheral component interconnect express)是一种高速串行计算机扩展总线标准&#xff0c;是英特尔公司在2001年提出来的&#xff0c;它的出现主要是为了取代AGP接口&#xff0c;优点就是兼容性比较好&#xff0c;数据传输速率高、…

rust学习——字符串、字符串字面量、切片(slice)、字符串 slice

文章目录 字符串、字符串字面量、切片&#xff08;slice&#xff09;、字符串 slice01、字符串02、字符串字面量03、切片 &#xff08;slice&#xff09;04、字符串 slice 字符串 slice注意要点String 与 &str 的转换字符串深度剖析字符串 slice 作为函数参数例子001例子00…