当前位置: 首页 > news >正文

网络通信(一)

网络编程

1.网络编程概念及相关名词 :

网络编程是计算机科学中一个重要的领域,它涉及到在不同计算机之间通过计算机网络进行通信和数据交换的程序设计。网络编程的核心是实现网络通信协议,这些协议定义了数据如何在网络上发送、接收和解释。

以下是网络编程的一些关键概念:

  1. 协议(Protocols):网络通信遵循的规则。例如,TCP/IP、HTTP、FTP、SMTP等。

  2. 套接字(Sockets):网络编程中的基本构建块,用于在客户端和服务器之间建立连接。

  3. 客户端/服务器模型(Client/Server Model):这是一种网络架构,其中客户端发起请求,服务器处理请求并返回响应。

  4. API(Application Programming Interface):应用程序接口,用于简化网络编程任务,如发送HTTP请求或处理网络数据。

  5. 多线程和异步编程:为了提高性能和响应能力,网络应用程序通常使用多线程或异步编程技术。

  6. 网络安全:保护网络通信免受未经授权的访问和数据泄露。

  7. 网络库和框架:为了简化网络编程,存在许多库和框架,如Python的requests库,Java的Netty框架等。

  8. 网络设备和架构:了解路由器、交换机、防火墙等网络设备和它们的工作原理也是网络编程的一部分。

网络编程的应用非常广泛,包括但不限于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则提供了更少的开销和更快的传输速度,适用于对实时性要求高的应用。

相关文章:

  • Github 2024-05-24 Java开源项目日报 Top10
  • 缪尔赛思又来到了你的面前(哈希)
  • windows、mac、linux中node版本的切换(nvm管理工具),解决项目兼容问题 node版本管理、国内npm源镜像切换
  • python:pycharm虚拟解释器报错环境位置目录为空
  • 人生苦短,我学python之数据类型(下)
  • “高考钉子户”唐尚珺决定再战2024年高考
  • Proteus仿真小技巧(隔空连线)
  • C语言:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中
  • 揭秘Python的魔法:装饰器的超能力大揭秘 ‍♂️✨
  • AI视频智能分析技术赋能营业厅:智慧化管理与效率新突破
  • 【SpringCloud】Spring Cloud基本介绍
  • python爬虫-爬小说
  • PTT票据传递攻击
  • 基于单片机电梯控制系统设计与实现
  • Vitis HLS 学习笔记--抽象并行编程模型-控制驱动与数据驱动
  • @jsonView过滤属性
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [笔记] php常见简单功能及函数
  • 2017 前端面试准备 - 收藏集 - 掘金
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Protobuf3语言指南
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Spring-boot 启动时碰到的错误
  • vue-loader 源码解析系列之 selector
  • vue的全局变量和全局拦截请求器
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 基于组件的设计工作流与界面抽象
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 浅谈Golang中select的用法
  • 区块链共识机制优缺点对比都是什么
  • 突破自己的技术思维
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 终端用户监控:真实用户监控还是模拟监控?
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 说说我为什么看好Spring Cloud Alibaba
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $.ajax()
  • (7)STL算法之交换赋值
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (javascript)再说document.body.scrollTop的使用问题
  • (三)终结任务
  • (数据结构)顺序表的定义
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)关于pipe()的详细解析
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net 调用php,php 调用.net com组件 --
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net6 webapi log4net完整配置使用流程
  • .net对接阿里云CSB服务
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?