JAVAEE之网络初识_协议、TCP/IP网络模型、封装、分用

前言

在这一节我们简单介绍一下网络的发展


一、通信网络基础

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

1.1 IP地址

  1. 基本概念:IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。

  2. 格式:IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(4个字节),如:01100100.00000100.00000101.00000110。通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数),如:100.4.5.6。

  3. 特殊的IP地址:127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1。

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

1.2 端口号

概念:在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。
格式:端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
注意事项两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号

一个进程启动后,系统会随机分配一个端口(启动端口)
程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能绑定同一个端口号。

二、协议

2.1 协议的概念和三要素

概念:协议简单的来说就是大家都要遵守的规则。这里的协议是网络协议的简称。网络协议是所有要参与网络通信的设备都要遵守的规则。

协议三要素:

  1. 语法:数据和控制信息的结构或格式;
  2. 语义:需要发出什么样的控制信息,完成什么样的动作以及有什么样的响应;
  3. 时序:事件实现顺序的详细说明。

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

2.2 知名协议的默认端口

 系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使用的应用层协议,如:

  1. 22端口:预留给SSH服务器绑定SSH协议
  2. 21端口:预留给FTP服务器绑定FTP协议
  3. 23端口:预留给Telnet服务器绑定Telnet协议
  4. 80端口:预留给HTTP服务器绑定HTTP协议
  5. 443端口:预留给HTTPS服务器绑定HTTPS协议

二、网络协议分层

为什么需要网络协议分层?
分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。
 网络分层模型一般有OSI(Open System Interconnection)七层模型和TCP/IP五层模型两种。
在这里我们重点介绍TCP/IP五层模型。
在这里插入图片描述

2.1 TCP/IP 五层网路模型

在这里插入图片描述

三、封装和分用

3.1 封装

  1. 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
  2. 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
  3. 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
  4. 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。

下图是封装的步骤:
在这里插入图片描述

3.2 分用

在这里插入图片描述

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

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

相关文章

遥感之特征选择-禁忌搜索算法

各类智能优化算法其主要区别在于算法的运行规则不同,比如常用的遗传算法,其规则就是变异,交叉和选择等,各种不同的变体大多是在框架内的实现细节不同,而本文中的禁忌算法也是如此,其算法框架如下进行介绍。…

【IDEA】-使用IDEA查看类之间的依赖关系

1、父子类的继承、实现关系 1.1、使用CTRL Alt U 选择 java class 依据光标实际指向的类位置 用实心箭头表示泛化关系 是一种继承的关系,指向父类 可以提前设置需要显示的类的属性、方法等信息 快捷键 Ctrl Alt S ,然后搜索 Diagrams 1.2、使用…

鸿蒙开发接口资源调度:【@ohos.backgroundTaskManager (后台任务管理)】

后台任务管理 本模块提供后台任务管理能力。 当应用或业务模块处于后台(无可见界面)时,如果有需要继续执行或者后续执行的业务,可基于业务类型,申请短时任务延迟挂起(Suspend)或者长时任务避免…

C语言学习笔记之结构体(一)

目录 什么是结构体? 结构体的声明 结构体变量的定义和初始化 结构体成员的访问 结构体传参 什么是结构体? 在现实生活中的很多事物无法用单一类型的变量就能描述清楚,如:描述一个学生,需要姓名,年龄&a…

Lua的几个特殊用法

:/.的区别 详细可以参考https://zhuanlan.zhihu.com/p/651619116。最重要的不同就是传递默认参数self。 通过.调用函数,传递self实例 通过 : 调用函数,传递self (不需要显示的传递self参数,默认就会传递,但…

旧衣回收小程序带来的收益优势,小程序有哪些功能?

随着互联网的快速发展,大众对旧衣回收市场也越来越了解,对于闲置的旧衣物也有了适合的处理方式。旧衣回收也符合了当下资源回收利用,因此,旧衣回收市场获得了爆发式增长,市场规模不断扩大。同时市场中还吸引了越来越多…

C++入门5——C/C++动态内存管理(new与delete)

目录 1. 一图搞懂C/C的内存分布 2. 存在动态内存分配的原因 3. C语言中的动态内存管理方式 4. C内存管理方式 4.1 new/delete操作内置类型 4.2 new/delete操作自定义类型 1. 一图搞懂C/C的内存分布 说明: 1. 栈区(stack):在…

在github上创建(上传、关联)自已的项目

目录 创建一个github项目并进行开发。 1.github创建空项目 2. git clone 项目 3. 将项目关联 创建一个github项目并进行开发。 1.github创建空项目 右边的New 然后按步创建就行 2. git clone 项目 复制这个连接 然后在终端:git clone [刚才复制的连接] 3. 将…

MySQL -- SQL笔试题相关

1.银行代缴花费bank_bill 字段名描述serno流水号date交易日期accno账号name姓名amount金额brno缴费网点 serno: 一个 BIGINT UNSIGNED 类型的列,作为主键,且不为空。该列是自动增量的,每次插入新行时,都会自动递增生成一个唯一的…

simulink基础学习笔记

写在前面 这个笔记是看B站UP 快乐的宇航boy 所出的simulink基础教程系列视频过程中记下来的,写的很粗糙不完整,也不会补。视频教程很细跟着做就行。 lesson1-7节的笔记up有,可以加up的群,里面大佬挺活跃的。 lesson8 for循环 For …

C++之map

1、标准库的map类型 2、插入数据 #include <map> #include <string> #include <iostream>using namespace std;int main() {map<string, int> mapTest;// 插入到map容器内部的元素是默认按照key从小到大来排序// key类型一定要重载小于号<运算符map…

CTFHUB-密码口令-弱口令

目录 题干介绍 密码字典 找flag过程 尾声 题干介绍 通常认为容易被别人&#xff08;他们有可能对你很了解&#xff09;猜测到或被破解工具破解的口令均为弱口令。 密码字典 下载地址&#xff1a;GitHub - NepoloHebo/Commonly-used-weak-password-dictionary: 常用弱密码字…

QT_UI设计

mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE //命名空间 namespace Ui { class MainWindow; } //ui_MainWindow文件里定义的类&#xff0c;外部声明 QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_O…

深度神经网络——什么是梯度下降?

如果对神经网络的训练有所了解&#xff0c;那么很可能已经听说过“梯度下降”这一术语。梯度下降是提升神经网络性能、降低其误差率的主要技术手段。然而&#xff0c;对于机器学习新手来说&#xff0c;梯度下降的概念可能稍显晦涩。本文旨在帮助您直观理解梯度下降的工作原理。…

python用tanh画图

用tanh函数画图 圆形 import numpy as np import matplotlib.pyplot as plt# 创建一个二维网格 xx np.linspace(-1, 1, 1000) yy np.linspace(-1, 1, 1000) x_i, y_i np.meshgrid(xx, yy)# 圆的半径和中心 r 0.4 center_x, center_y 0, 0 # 假设圆心在(0, 0)# 计算每个网…

构建智慧监控系统的功能架构,保障安全与便利

智慧监控系统作为现代城市安全管理的重要工具&#xff0c;不仅能够提供有效的安防监控&#xff0c;还能为人们的生活带来更多的便利。本文将探讨智慧监控系统的功能架构&#xff0c;以实现安全和便利的双重目标。 ### 1. 智慧监控系统背景 随着城市化进程的加速&#xff0c;人…

Mybatis实现树形结构方式

1&#xff0c;三级分类树形结构查询 /*** DDD(Domain-Driven Design): 领域驱动设计** 三级分类树形结构&#xff1b;* 支持无限层级&#xff1b;* 当前项目只有三级*/ Data public class CategoryTreeTo {private Long categoryId; //1private String categoryName;private …

C语言基础——数组(2)

ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 个人主页&#xff1a;励志不掉头发的内向程序员&#xff1b; 专栏主页&#xff1a;C语言基础&#xff1b; 文章目录 前言 一、二维数组的创建 1.1 二维数组的概念 1.2二维数组的创建 二、二维数组…

手写防抖debounce

手写防抖debounce 应用场景 当需要在事件频繁触发时&#xff0c;只执行最后一次操作&#xff0c;可以使用防抖函数来控制函数的执行频率,比如窗口resize事件和输入框input事件&#xff1b; 这段代码定义了一个名为 debounce 的函数&#xff0c;它接收两个参数&#xff1a;fn…

刷新页面控制台莫名奇妙报错显示/files/test_files/file_txt.txt

今天突然发现每次刷新页面都有几个报错&#xff0c;不刷新页面就没有。 这个报错应该不是我们系统的问题&#xff0c;是因为装了浏览器插件的原因。比如我安装了 大家有没有遇到类似的问题。