【Java网络编程01】网络原理初识

【Java网络编程01】网络原理初识

1. 网络通信基础概念

网络通信:网络互连的目的就是网络通信,即网络数据传输,再直白点而言就是不同主机的不同进程之间基于网络进行数据的传输交互。
那么,在组建的网络上有各种各样的主机,我们如何确定数据的传送方和接收方主机呢?这就需要用到IP地址了

1.1 IP地址

IP地址:IP地址就是用来标识主机、其他网络设备(如路由器)的网络地址。简单来说就是IP地址就是区分不同网络主机的唯一标识。
格式:IP地址是一个32位的二进制数,通常被分为4个"8位二进制数"(也就是4个字节),如01100100.00000100.00000101.00000110,为了方便表示与记忆,通常使用"点分十进制"的方式进行表示,即a.b.c.d的方式(a,b,c,d都是0-255之间的十进制整数)如100.4.5.6
特殊IP

127.*的IP地址用于本地环回测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了提升性能,不会走网络的方式进行传输)对于网络编程程序而言,常见的开发方式都是本机到本机的网络通信

IP地址解决了在网络通信过程中标识源主机和目的主机的问题,但是我们如何确定数据是由源主机上的哪个进程发出的以及由目的主机上哪个进程进行接收呢?这就要用到我们 端口号 的概念了

1.2 端口号

端口号:IP地址用于定位网络上的主机,而端口号用于定位主机上特定的进程。例如在收发快递的过程中,不仅需要有收件人的收货地址(IP地址),也需要有收货人联系方式(端口号)
格式:端口号是一个0-65535范围的数字,在网络通信中,进程可以通过绑定一个端口号进行数据的传输
新的问题
现在我们已经可以根据IP地址和端口号确定网络数据收发双方了,但是网络通信依靠二进制数据进行传输,传输的内容可以是文本、视频、音频等等不同类型,因此收发双方必须使用一致的数据格式和编解码方式,于是就引出了 **协议 **的概念。

1.3 协议

协议:是网络协议的简称,协议就是网络通信过程中全部的网络设备都需要遵守的一组规定,例如如何建立连接、如何识别对方。只有遵守这个约定,计算机之间才能互相通信交流,协议通常由以下三部分构成:

  1. 语法:即数据与控制信息的结构与格式
  2. 语义:需要发出哪种控制信息,完成何种动作以及做出何种响应?
  3. 时序:事件实现顺序的详细说明

协议(protocol)最终体现为在网络上传输的 数据包格式
作用:
image.png
计算机设备之间的传输媒介通常是光/电信号,使用光的频率和高低电平来表示0/1信号,要想传递信息,就需要统一通信双方使用的数据格式

  • 计算机制造厂商有很多
  • 计算机的操作系统也有很多
  • 计算机网络设备也有很多
  • 如何让不同厂商制造出的不同操作系统的计算机之间可以互相正常通信?,这就需要有人站出来制定一个统一的标准,这就是协议

知名协议默认端口号
系统端口号为0-65535,其中:0-1023为知名端口号,这些端口号被预留给服务器程序用于绑定特定的应用层协议,如:

  • 21端口号:预留给SSH服务器绑定SSH协议
  • 22端口号:预留给FTP服务器绑定FTP协议
  • 23端口号:预留给Telnet服务器绑定Telnet协议
  • 80端口号:预留给HTTP服务器绑定HTTP协议
  • 443端口号:预留给HTTPS服务器绑定HTTPS协议

1.4 五元组

在TCP/IP协议中,使用五元组来标识一个网络通信

  1. 源IP:标识源主机
  2. 源端口号:标识源主机上发送数据的进程
  3. 目的IP:标识目标主机
  4. 目的端口号:标识目的主机中接收数据的进程
  5. 协议号:标识发送进程与接收进程之间的数据格式

在Windows中我们可以打开cmd输入命令netstat -ano查看五元组信息:
image.png

1.5 协议分层

协议分层:对于网络协议来说,往往分成几个层次来定义
分层的作用:网络通信过程中所涉及到的细节是非常多的,如果只用一个协议来描述,那么这个协议就会变的十分复杂,需要确定好方方面面的内容,因此设计分层的概念是十分有必要的!
分层最大的好处:提供面向接口编程的实现,定义好相邻两层之间的接口规范,实现方将接口功能实现,而调用方只需要调用接口使用提供的服务。

  • 对于提供方而言,利用封装思想,隐藏内部实现细节,只开放提供的服务即可
  • 对于使用方而言,无需关心提供方如何实现,只需要调用接口使用提供的服务即可
  • 某一层的协议被替换后,对于其他层无影响(无痛替换)

image.png
两套协议标准
最常见的协议分层体系模型有两种,一种是OSI七层模型,另一种是TCP/IP五层(或四层)模型

  • OSI七层体系模型:由物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,但是这种方案过于复杂,因此没有落地实现,只是"理想中的方案"

  • TCP/IP五层协议:

    名称作用代表协议
    应用层负责应用程序间的沟通SMTP、FTP、HTTP等协议
    传输层负责两台主机之间的数据传输TCP、UDP等协议
    网络层负责地址管理和路由选择IP、ARP、ICMP协议
    数据链路层负责设备间数据帧的传送和识别网卡层
    物理层负责光/电信号的传输硬件层

网络设备所在分层

  • 对于一台主机而言,它的操作系统内核实现了从传输层到物理层的内容,即TCP/IP五层模型的下四层
  • 对于路由器,它实现了从网络层到物理层的实现,即TCP/IP协议的下三层
  • 对于交换机,它实现了从数据链路层到物理层的实现,即TCP/IP协议的下两层
  • 对于集线器,它只实现了物理层

注意:这只是传统意义上的交换机和路由器,事实上随着网络设备技术的发展,也出现了很多3层、4层交换机,4层路由器。

1.6 封装和分用

封装和分用是网络传输数据过程中,最核心的流程
我们通过使用QQ传送一个"hello"消息为例讲解网络传输的过程,并体会TCP/IP五层协议各自的工作流程
封装流程

  1. 应用层(应用程序)

    接收方QQ客户端从消息输入框中获取到用户输入的"hello",然后就会把这个字符串封装构造成一个应用层的数据包,我们可以理解为QQ的程序内部内置了一个应用层协议,应用层数据包就是根据这个协议而封装成的,我们假设此应用层协议为:发送方QQ号;接收方QQ号;发送时间;消息正文
    image.png
    此时应用程序就会调用操作系统提供API,把这个数据包交给传输层

  2. 传输层

    传输层会把上述应用层数据包作为一个整体,然后依据选用的传输层协议,封装成传输层数据包,这里我们假设使用UDP协议,就会在整个应用层数据包前拼接UDP报头成UDP数据包。
    image.png
    其中应用层数据包以一个整体作为UDP数据报的载荷部分,封装为传输层数据包后就要进一步调用网络层提供的API,将数据包交给网络层进行处理

  3. 网络层

    网络层最核心的协议就是IP协议,会把传输层数据包进一步封装成IP数据包,具体做法是将传输层数据包作为一个整体为载荷部分,前部拼接一个IP协议报头。

    image.png
    封装成IP数据包后调用下层数据链路层提供API,并将IP数据包交给数据链路层进行处理。

  4. 数据链路层

    数据链路层涉及到的核心协议就是以太网了,会把上层的IP数据包当作整体为载荷部分,并在前头添加以太网帧头,尾部添加以太网帧尾,封装成以太网帧
    image.png
    然后调用下层物理层提供的API,将以太网数据帧交给物理层

  5. 物理层

    将上述这样的以太网数据帧,二进制结构(0101数据串)转换成光信号/电信号/电磁波信号然后进行发送

以上的这些层层封装数据包的过程就成为 **封装 **,而封装的逆过程就被称为 **分用 **
我们暂且不考虑中间过程,假定数据包已经传送到了接收方B的网卡,B如何处理的过程就是分用的过程。
分用流程

  1. B的物理层将接收到的光/电/电磁波信号转化为数字信号(0101二进制串),得到一个以太网帧,进一步把这个以太网帧交给数据链路层处理。

  2. 数据链路层会按照协议,使用相同的以太网帧格式解析,去掉以太网帧头和以太网帧尾,取出其中载荷部分交给上层网络层

  3. 网络层会按照IP协议进行解析,去掉IP首部,取出其中载荷部分再交给上层传输层

  4. 传输层根据指定的UDP协议进行解析,去掉UDP报头首部,取出其中载荷部分再交给上层应用层

  5. 应用层中的QQ应用程序就会按照QQ内部应用层协议进行解析数据,QQ程序拿到相关信息后就会在窗口弹出提示,并把消息内容、发送人、发送时间都显示在屏幕上。

1.7 其他概念

再来谈谈网络编程中的其他重要概念
客户端VS服务器端
客户端:在网络通信过程中主动发起请求的一方,称为"客户端"
服务器端:在网络通信过程中被动接受请求的一方,称为"服务器端"

需要注意一个程序在不同的场景中,可能是客户端,也可能是服务器端,例如在如下分布式系统中,客户端请求入口服务器,此时入口服务器是接收请求方,是服务器端(Server),但是入口服务器如果需要负载均衡,则需要请求分布式服务器A和B,此时入口服务器又作为了客户端(Client)

image.png
请求VS响应:
客户端发送给服务器端的就是请求(Request)
服务器端返回给客户端的就是响应(Response)
客户端与服务器端交互有很多种模式:

  1. “一问一答型”:一个请求对应一个响应,这是最常见的,在网站开发中(Web开发)中经常使用
  2. “一问多答型”:一个请求对应多个响应,主要应用于"下载"场景中
  3. “多问一答型”:多个请求对应一个响应,主要应用于"上传"场景中
  4. “多问多答型”:多个请求对应多个响应,主要应用于"远程桌面控制"场景中

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

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

相关文章

Python量化交易- mplfinance库 -画K线图

mplfinance库 1. mplfinance 模块说明2. mplfinance安装3. mplfinance 模块 plot 基本用法参数typestylemake_addplot设置图表颜色 make_marketcolors添加图表样式 make_mpf_style 4. mplfinance 的基本K线图实现自定义风格和颜色图表尺寸调整、相关信息的显示添加完整移动平均…

Vue 实例创建流程

✨ 专栏介绍 在当今Web开发领域中,构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架,正是为了满足这些需求而诞生。它采用了MVVM架构模式,并通过数据驱动和组件化的方式,使…

CentOs7 安装Mysql(5.7和8.0版本)密码修改跳过 超详细教程

CSDN 成就一亿技术人! 今天出一期Centos下安装Mysql(详细教程)包括数据库密码跳过修改 CSDN 成就一亿技术人! 目录 1.获取安装包 2.安装程序 安装下载的rpm包 查看安装包 修改5.7版本(重要) 安装M…

设置代码模板创建sql映射文件、Mybatis主配置文件

目录 1、Sql映射&#xff08;Sql Mapper&#xff09;文件的介绍 2、Mybatis的主配置文件的介绍 3、通过代码模板创建Sql映射文件 4、通过代码模板创建Mybatis主配置文件 1、Sql映射&#xff08;Sql Mapper&#xff09;文件的介绍 <?xml version"1.0" encod…

太太二字的由来?

“太太”这个称谓的由来可以追溯到周朝时期的“周室三母”。这三位贤妃分别是太姜、太任和太姒。她们以母仪天下的德范&#xff0c;养育和辅佐了开创太平盛世的数位君王&#xff0c;成为了夫君的良佐、胎教的典范。因此&#xff0c;后世尊称别人的妻子为“太太”&#xff0c;以…

13.XXL-JOB应用

XXL-JOB应用 1.介绍 XXL-JOB是大众点评员工徐雪里于2015年发布的分布式任务调度平台 2.XXL-JOB与Quartz的关系 老版本依赖Quartz的定时任务触发&#xff0c;在V2.1.0版本开始移除了Quartz 3.官方地址 官方文档&#xff1a;https://www.xuxueli.com/xxl-job/gitee&#xf…

面试经典 150 题 - 多数元素

多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1…

搜索引擎优化:利用Python爬虫实现排名提升

什么是搜索引擎优化&#xff08;SEO&#xff09; 搜索引擎优化&#xff08;SEO&#xff09;是通过优化网站内容和结构&#xff0c;提高网站在搜索引擎中的排名&#xff0c;从而增加网站流量和曝光度的技术和方法。SEO的目标是使网站在搜索引擎结果页面中获得更高这个过程包括吸…

windows11上安装虚拟机VMware

1、安装虚拟机&#xff08;待补充&#xff09; 第二步&#xff1a;安装VMware tools 实现windows文件上传到虚拟机中 1、安装好虚拟机后&#xff0c;查看虚拟机ip用Xshell连接虚拟机&#xff0c;并安装VMware tools(只有安装了VMware tools才能实现虚拟机和本机的文件共享。在…

python:socket基础操作(2)-《udp发送信息》

基础发送udp信息 1.导入socket模块 2.使用udp模块 3.发送内容 4.关闭套接字 很简单的4步就可以实现udp的消息发送 import socket # 导入模块udp_socket socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 使用ipv4 udp协议udp_socket.sendto(b"hello world",(&…

Bit Extraction and Bootstrapping for BGV/BFV

参考文献&#xff1a; [GHS12] Gentry C, Halevi S, Smart N P. Better bootstrapping in fully homomorphic encryption[C]//International Workshop on Public Key Cryptography. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012: 1-16.[AP13] Alperin-Sheriff J, Pe…

爬虫requests+综合练习详解

Day2 - 1.requests第一血_哔哩哔哩_bilibili requests作用&#xff1a;模拟浏览器发请求 requests流程&#xff1a;指定url -> 发起请求 -> 获取响应数据 -> 持续化存储 爬取搜狗首页的页面数据 import requests# 指定url url https://sogou.com # 发起请求 resp…

Leetcode刷题笔记题解(C++):670. 最大交换

思路&#xff1a; 假设数字 9923676 从右边找最大的数字的下标maxindex&#xff0c;然后向左边寻找小于最大数字的数的下标&#xff0c;直到找到最左边&#xff0c;交换两者得出新的数字&#xff0c;比如从左到右递减的数字如9621则不需要变化&#xff0c;在寻找中记录这种数…

系统问题排查定位流程

1. 系统问题排查范围定义 本次交流中描述的故障&#xff0c;主要是指系统级别的故障&#xff0c;对于某个具体的业务功能的故障&#xff0c;不在本次讨论范围内。下面描述的故障定位、排查&#xff0c;主要是指跨模块、跨项目级别的故障的定位、排查&#xff0c;包括软件、硬件…

LeetCode 热题 100 | 滑动窗口

目录 1 3. 无重复字符的最长子串 2 438. 找到字符串中所有字母异位词 菜鸟做题第二周&#xff0c;语言是 C 1 3. 无重复字符的最长子串 解题思路&#xff1a; 设置两个指针&#xff0c;左指针和右指针&#xff0c;二者之间形成窗口右指针不断右移&#xff0c;新字母被纳…

阿里云优惠整理,最新2024阿里云优惠政策解读

阿里云优惠政策有哪些&#xff1f;2024年阿里云优惠政策风向改了&#xff0c;之前一直是老用户与狗的营销策略&#xff0c;今年阿里云2核2G、3M固定带宽服务器99元居然开启了老用户购买权限&#xff0c;并且续费不涨价&#xff0c;阿里云这波操作确实让用户赢麻了&#xff0c;在…

X-Bogus加密参数分析与jsvmp算法(仅供学习)

文章目录 1. 抓包分析2. X-Bogus参数分析 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋友可以关注《爬虫…

任意模数多项式乘法MTT(可拆系数FFT)详解

更好的阅读体验 任意模数多项式乘法 前言&#xff1a; 在教练讲的时候脑子并不清醒&#xff0c;所以没听懂。后来自己看博客学会了&#xff0c;但目前只学了一种方法&#xff1a;可拆系数FFT。为了方便日后复习&#xff0c;决定先写下这个的笔记&#xff0c;关于三模数NTT下次…

【Linux】常见指令(一)

前言: Linux有许多的指令&#xff0c;通过学习这些指令&#xff0c;可以对目录及文件进行操作。 文章目录 一、基础指令1. ls—列出目录内容2. pwd—显示当前目录3. cd—切换目录重新认识指令4. touch—创建文件等5. mkdir—创建目录6. rmdir指令 && rm 指令7. man—显…

【胡寿松 自动控制原理】【考研冲刺加分神器】各院校考研例题详细讲解

声明&#xff1a;本人水平有限&#xff0c;博客可能存在部分错误的地方&#xff0c;请广大读者谅解并向本人反馈错误。    本专栏中包含【胡寿松 自动控制原理】专业课的例题讲解&#xff0c;适合考研冲刺阶段学习&#xff0c;该视频只适合作为辅助教学视频来使用&#xff0c…