网络通信(一)
网络编程
1.网络编程概念及相关名词 :
网络编程是计算机科学中一个重要的领域,它涉及到在不同计算机之间通过计算机网络进行通信和数据交换的程序设计。网络编程的核心是实现网络通信协议,这些协议定义了数据如何在网络上发送、接收和解释。
以下是网络编程的一些关键概念:
-
协议(Protocols):网络通信遵循的规则。例如,TCP/IP、HTTP、FTP、SMTP等。
-
套接字(Sockets):网络编程中的基本构建块,用于在客户端和服务器之间建立连接。
-
客户端/服务器模型(Client/Server Model):这是一种网络架构,其中客户端发起请求,服务器处理请求并返回响应。
-
API(Application Programming Interface):应用程序接口,用于简化网络编程任务,如发送HTTP请求或处理网络数据。
-
多线程和异步编程:为了提高性能和响应能力,网络应用程序通常使用多线程或异步编程技术。
-
网络安全:保护网络通信免受未经授权的访问和数据泄露。
-
网络库和框架:为了简化网络编程,存在许多库和框架,如Python的
requests
库,Java的Netty
框架等。 -
网络设备和架构:了解路由器、交换机、防火墙等网络设备和它们的工作原理也是网络编程的一部分。
网络编程的应用非常广泛,包括但不限于Web开发、移动应用、物联网(IoT)、分布式系统、在线游戏、实时通信系统等。掌握网络编程技能对于现代软件开发人员来说非常重要。
2.网络通信三要素:
IP:设备在网络中的地址,是唯一的标识,全称:互联网协议地址
端口:应用程序在设备中的唯一标识
协议:(设备)连接和数据在网络中传输的规则
IP
ip地址有两种形式:
ipv4:由(4字节)32位二进制数组成,分为4组,每组8位二进制数,每组间用点(.)隔开,且每组用十进制表示
ipv6:由128位二进制数组成,分为8组,每组16位二进制数,每四个数为一个十六进制数,每组间用(:)隔开
ip域名
域名:
-
是一种易于记忆的名称,用于代替IP地址。
-
域名系统(DNS)将域名转换为IP地址。(每个设备都会内置一个本地的DNS服务器)
-
例如,google.com是一个域名,DNS会将其解析为一个IP地址,如172.217.3.78。
域名解析:
-
当你在浏览器中输入一个网址(URL),如
www.google.com
,浏览器首先会向DNS服务器发起请求,查询该域名对应的IP地址。 -
DNS服务器会返回域名对应的IP地址,然后浏览器使用这个IP地址来建立与目标服务器的连接。
-
这个过程对于用户来说是透明的,用户只需要记住域名,而不需要知道背后的IP地址。
-
如果DNS服务器无法解析该URL,那么就会向运营商发送,再由运营商查询并返回dns服务器
域名结构:
-
域名通常由多个部分组成,用点分隔,从右到左分别是:子域名、次级域名、主域名和顶级域名(TLD)。
-
例如,在
www.google.com
中,www
是子域名,google
是主域名,com
是顶级域名。
顶级域名(TLD):
-
顶级域名分为几类,包括:
-
通用顶级域名(gTLD),如
.com
、.net
、.org
等。 -
国家和地区代码顶级域名(ccTLD),如
.cn
(中国)、.uk
(英国)、.de
(德国)等。 -
新通用顶级域名(nTLD),如
.app
、.blog
、.online
等。
-
域名和IP地址之间的转换是互联网通信的基础,使得用户可以不必记住复杂的数字地址,而只需要使用易于记忆的域名来访问网站。
公网、内网
公网:是可以连接互联网的ip地址
内网:也叫做局域网,只能组织内部机构使用,一般局域网ip范围(192.168.0.0~192.168.255.255)
特殊ip地址
本机ip:127.0.0.1 、localhost
IP常用命令
ipconfig:查看ip信息
ping ip/url:查看设备间的连通情况
InetAdress提供的常用方法
以下是InetAddress
类提供的一些常用方法的表格:
方法名 | 描述 |
---|---|
getByAddress(String host, byte[] addr) | 根据主机名和IP地址字节数组创建InetAddress 对象。 |
getByName(String host) | 根据主机名获取其IP地址的InetAddress 对象,进行DNS解析。 |
getAllByName(String host) | 返回包含主机所有IP地址的InetAddress 对象数组。 |
getCanonicalHostName() | 返回该地址的官方主机名。 |
getHostAddress() | 返回该地址的IP地址字符串表示。 |
getHostName() | 返回该地址的主机名。 |
isReachable(int timeout) | 测试地址是否可达,指定超时时间。 |
isReachable(NetworkInterface netif, int ttl, int timeout) | 通过指定网络接口测试地址是否可达。 |
equals(Object obj) | 检查两个InetAddress 对象是否相等。 |
hashCode() | 返回该地址的哈希码。 |
toString() | 返回该地址的字符串表示,包括主机名和IP地址。 |
isMulticastAddress() | 检查地址是否是多播地址。 |
isAnyLocalAddress() | 检查地址是否是“任何本地地址”。 |
isLoopbackAddress() | 检查地址是否是回环地址(127.0.0.1)。 |
isLinkLocalAddress() | 检查地址是否是链路本地地址。 |
isSiteLocalAddress() | 检查地址是否是站点本地地址。 |
isMCGlobal() | 检查地址是否是全球多播地址。 |
isMCNodeLocal() | 检查地址是否是节点本地多播地址。 |
isMCLinkLocal() | 检查地址是否是链路本地多播地址。 |
isMCSiteLocal() | 检查地址是否是站点本地多播地址。 |
请注意,这个表格并不包含InetAddress
类的所有方法,只是列出了一些常用的方法。例如:
import java.net.InetAddress;public class Main{public static void main(String[] args) throws Exception {//获取本机ip地址对象InetAddress ip = InetAddress.getLocalHost();//获取本机名和ip地址具体信息System.out.println(ip.getHostName());System.out.println(ip.getHostAddress());//获取指定域名或指定ip的ip地址对象InetAddress ip1 = InetAddress.getByName("www.baidu.com");System.out.println(ip1.getHostName());System.out.println(ip1.getHostAddress());//ping操作System.out.println(ip1.isReachable(6000));}
}
端口
端口是用来标志应用程序在设备上的位置的,被规定为一个16位的二进制数,端口范围是:0~65535
端口分类:
周知端口:0~1023,被一些预先定义的知名应用占用(如:HTTP占用80,FTP占用21)
注册端口:1024~49151,分配给用户进程和一些应用程序
动态端口:49152~65532,不固定分配某种进程,而是动态分配
注意:我们自己开发的程序一般使用注册端口,而且一个设备中不能出现两个程序的端口一样,否则报错
通信协议
协议是网络上的通信设备事先规定的连接规则和数据的传输规则
OSI模型和TCP/IP模型
OSI模型层级 | TCP/IP模型层级 | 描述和任务 |
---|---|---|
应用层(7) | 应用层(4) | 为用户和应用软件提供网络服务接口,如HTTP、FTP、SMTP等。 |
表示层(6) | 应用层(4) | 数据格式转换、数据加密、压缩和解密等。 |
会话层(5) | 应用层(4) | 管理和控制两个节点之间的会话连接。 |
传输层(4) | 传输层(3) | 确保数据的完整性和可靠性,如TCP和UDP协议。 |
网络层(3) | 网络层(2) | 负责数据包的路由选择和传输,如IP协议。 |
数据链路层(2) | 网络接口层(1) | 确保无误的数据传输,帧的封装和拆封,错误检测和纠正。 |
物理层(1) | 网络接口层(1) | 物理媒介上传输原始比特流,涉及电气信号、光信号等。 |
注意:TCP/IP模型通常被分为四个层次,而OSI模型是七个层次。在上述表格中,TCP/IP模型的"应用层"包括了OSI模型的"应用层"、"表示层"和"会话层"的任务。同样,TCP/IP模型的"传输层"对应OSI模型的"传输层","网络层"对应OSI模型的"网络层",而"网络接口层"则对应OSI模型的"数据链路层"和"物理层"。
TCP/IP模型的层次结构相对简化,更贴近实际的互联网协议栈,而OSI模型则提供了一个更为详细的理论框架。尽管两者在层次划分上有所不同,但它们在网络通信中扮演的角色和完成的任务是相似的。
传输层的两个协议
传输层主要负责在网络中的两个端点之间提供可靠的数据传输服务。在TCP/IP模型中,传输层有两个主要的通信协议:
传输控制协议(TCP)
-
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。
-
它提供全双工通信,即数据可以在两个方向上同时传输。
-
TCP通过三次握手建立连接,并使用序列号和确认应答机制来确保数据包的顺序和完整性。
理解三次握手建立连接:
1)客户端发送建立连接请求(“你能听到吗?”)
2)服务端响应请求(“可以听到!”)
3)客户端再次正式发送建立连接请求(“ok了!”)
-
TCP通过四次挥手断开连接
理解四次挥手断开连接:
1)客户端发送断开连接请求(“我要走了!”)
2)服务端响应请求-稍等(“等会!!!”)
3)服务端完成所有数据传输【可能存在最后一次数据传输】,发送响应-可以断开了(“来了来了,可能还给你塞一颗苹果!”)
4)客户端正式发送断开连接请求
-
它还包括流量控制和拥塞控制机制,以避免网络过载。
-
TCP常用于需要可靠传输的应用,如Web浏览(HTTP)、文件传输(FTP)和电子邮件(SMTP)。
-
由于传输数据的通信较多,效率相对较慢
用户数据报协议(UDP)
-
UDP是一种无连接的、不可靠的、基于数据报的传输层通信协议。
-
它允许应用程序发送被称为数据报的独立信息包,而不需要事先建立连接。
-
由于UDP的简单性和低延迟,它常用于那些可以容忍一定丢包率的应用,如实时视频和音频传输、在线游戏和DNS查询。
-
UDP不保证数据包的顺序、完整性或可靠性;效率较快
TCP和UDP各有优势和适用场景,开发者可以根据应用的需求选择最合适的协议。TCP提供了更可靠的服务,适用于需要确保数据完整性的应用;而UDP则提供了更少的开销和更快的传输速度,适用于对实时性要求高的应用。
相关文章:
网络通信(一)
网络编程 1.网络编程概念及相关名词 : 网络编程是计算机科学中一个重要的领域,它涉及到在不同计算机之间通过计算机网络进行通信和数据交换的程序设计。网络编程的核心是实现网络通信协议,这些协议定义了数据如何在网络上发送、接收和解释。…...

Linux环境中部署docker私有仓库Registry与远程访问详细流程
目录 前言 1. 部署Docker Registry 2. 本地测试推送镜像 3. Linux 安装cpolar 4. 配置Docker Registry公网访问地址 5. 公网远程推送Docker Registry 6. 固定Docker Registry公网地址 前言 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊…...
springboot项目使用validated参数校验框架
目录 前言 一、validated是什么? 二、使用步骤 1.引入maven依赖 2.使用实现 总结 前言 当谈到Spring的参数校验功能时,Validated注解无疑是一个重要的利器。它为我们提供了一种简单而又强大的方式来验证请求参数的合法性,保证了系统的稳…...
Azure Chatgpt demo部署——本地CentOS Docker
参见上一篇 http://t.csdnimg.cn/JcyfM 由于本地部署环境,与之前系统、网络、配置等环境不同,可能会遇见一些新的问题。 取2023年8月27日代码 git checkout -b a02796b063381c10ca9ca8189590b289a4d09129 由于本地情况的网络等环境不太一样,…...

MybatisPlus中自定义sql
背景 在开发过程中,可能会出现除了where条件,其它sql比较复杂,这时候就需要用到自定义sql了。 问题 如:用户状态为正常的数据年龄加一(所有用户年龄加一) 数据库中sql: UPDATE USER SET…...

HCIA--DHCP: 动态主机配置协议 (复习)
DHCP: 动态主机配置协议 -- 同一分发管理ip地址 基于UDP 67/68端口工作 网络中存在DHCP的服务器为需要自动生成ip地址的设备分配ip地址;--C/S模型 成为DHCP服务器的条件: 该设备存在接口或网卡连接到所要分发ip地址的广播域内该接口或网卡必须已经配置…...

MySQL select for update 加锁
背景 当多人操作同一个客户下账号的时候,希望顺序执行,某个时刻只有一个人在操作;当然可以通过引入redis这种中间件实现,但考虑到并发不会很多,所以不想再引入别的中间件。 表结构 create table jiankunking_accoun…...
MongoDB CRUD操作:投影Project详解
MongoDB CRUD操作:投影Project详解 文章目录 MongoDB CRUD操作:投影Project详解返回文档的全部字段返回指定的字段和_id字段不输出_id字段指定排除的字段返回内嵌文档中的指定字段禁止内嵌文档中的特定字段数组中内嵌文档的投影聚合表达式的投影字段 默认…...

redis 集群 底层原理以及实操
前言 上篇我们讲解了哨兵集群是怎么回事 也说了对应的leader选举raft算法 也说了对应的slave节点是怎么被leader提拔的 主要是比较优先级 比较同步偏移量 比较runid等等 今天我们再说说,其实哨兵也有很多缺点 虽然在master挂了之后能很快帮我们选举出新的master 但是对于单个ma…...

MVC架构中的servlet层重定向404小坑
servlet层中的UserLoginServlet.java package com.mhys.servlet; /*** ClassName: ${NAME}* Description:** Author 数开_11* Create 2024-05-29 20:32* Version 1.0*/import com.mhys.pojo.User; import com.mhys.service.UserService; import com.mhys.service.impl.UserSer…...
Java-RabbitMQ
RabbitMQ使用场景 1、跨系统异步通信 2、多应用之间解耦 3、应用内流程同步变异步 4、整体架构即采用消息驱动 5、应用内部解耦 RabbitMQ内部角色 角色简介生产者消息创建者消费者消息接收者代理RabbitMQ本身,用于存储转发消息,快递功能 RabbitMQ有哪…...

ABAP 在增强中COMMIT
前言 呃,又是很磨人的需求,正常情况下是不允许在增强中COMMIT的,会影响源程序本身的逻辑,但是这个需求就得这么干… 就是在交货单增强里面要再调用一次交货单BAPI,通过SO的交货单自动创建STO的交货单,如果…...

【UML用户指南】-02-UML的14种图
1、结构图 1、类图(class diagram) 展现了一组类、接口、协作和它们之间的关系。 在面向对象系统的建模中所建立的最常见的图就是类图。类图给出系统的静态设计视图。 包含主动类的类图给出系统的静态进程视图。构件图是类图的变体。 2、对象图&a…...

Linux驱动开发笔记(二) 基于字符设备驱动的I/O操作
文章目录 前言一、设备驱动的作用与本质1. 驱动的作用2. 有无操作系统的区别 二、内存管理单元MMU三、相关函数1. ioremap( )2. iounmap( )3. class_create( )4. class_destroy( ) 四、GPIO的基本知识1. GPIO的寄存器进行读写操作流程2. 引脚复用2. 定义GPIO寄存器物理地址 五、…...

三品软件:打造高效安全的图文档管理体系
在数字化转型的浪潮中,工程设计单位和企业设计部门面临着电子图文档管理的巨大挑战。随着电子图纸和文档数量的激增,如何有效组织、管理和共享这些资源,成为提升工作效率和保障信息安全的关键。本文将探讨当前图文档管理面临的问题࿰…...
N1 one-hot编码
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊# 前言 前言 onehot编码在机器学习比较常见,例如推荐系统中类别变量的处理等。 onehot 编码简介 One-hot编码(one-hot encoding&…...
数据库基础+增删查改初阶
数据库基础增删查改初阶 一。数据库操作 1.概念: 一个mysql服务器上有很多的表,把有关系的表放在一起就构成了一个数据集合,此时称为“数据库”,一个mysql1服务器上可以有多个这样的数据库 2.创建数据库: create …...
大模型日报2024-05-29
大模型日报 2024-05-29 大模型资讯 大型语言模型在金融预测中将超越人类分析师 摘要: 新研究表明,大型语言模型如ChatGPT在金融预测方面表现优于人类专家,为交易策略提供了宝贵的见解。这意味着未来这些模型将在金融领域发挥更重要的作用,提升…...
如何摆脱打工人任人宰割的命运
那就是为自己打工。 要有自己的思想,自己的目标,有自己的方向,坚决的非常自信的去执行它。 这样才是活出属于自己的人生,活出自己的精彩。 当然,这是在你已经比周围人优秀的情况下,至少是你觉得你比他们…...
“图片在哪”、“我是temunx”、“变成思维导图用xmindparser”gpt给出文本变字典
需求 我的意思是什么 分类清单“图片在哪 我是temunx变成思维导图 用xmindparser用 shell 画思维导图 x mind,可以 /storage/emulated/0/字体/黑体.ttf 保存/storage/emulated/0/print/图片/input图纸/完整代码 给个文本内容”任务清单 调整语言顺序文不对题的…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...