网络通信(一)

2024-05-25 15:28
文章标签 网络通信

本文主要是介绍网络通信(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网络编程

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则提供了更少的开销和更快的传输速度,适用于对实时性要求高的应用。

这篇关于网络通信(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001894

相关文章

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds  总结  fd_set操作接口  timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充  获取新连接 注意点 -- 通信时的调用函数 添加新fd到

应用层简单实现udp / tcp网络通信

一、常见网络接口总结 1、创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器) int socket(int domain, int type, int protocol); domain:AF_INET:网络通信,AF_LOCAL:本地通信 type:UDP:SOCK_DGRAM,TCP:SOCK_STREAM protocol:协议编号一开始设0 返回值:文件描

“掌握Linux网络编程艺术,构建跨平台的网络通信解决方案!“#Linux系统编程之网络编程

"掌握Linux网络编程艺术,构建跨平台的网络通信解决方案!"#Linux系统编程之网络 前言预备知识一、 网络编程概述1.1 网络编程概述图1.2 TCP/UDP对比(面试)1.3 端口号的作用 二、 字节序2.1 大端字节序(Big-Endian)2.2 小端字节序(Little-Endian)2.3 字节序的重要性2.4 字节序转换函数2.5 字节序示意图 三、 socket编程步骤四

TCP网络通信服务器端简单示例

服务器端: #include <stdio.h> #include <winsock2.h> //和网络通信相关的函数的声明,类型的声明,常量的定义等都在此头文件中 #pragma comment(lib,"ws2_32.lib") int main() { //第一步:初始化Socket函数库 WSADATA wsaData; //向系统请求使用2.2版本的Socket函数库,wsaDat

udp网络通信 socket

套接字是实现进程间通信的编程。IP可以标定主机在全网的唯一性,端口可以标定进程在主机的唯一性,那么socket通过IP+端口号就可以让两个在全网唯一标定的进程进行通信。 套接字有三种: 域间套接字:实现主机内部的进程通信的编程 原始套接字:使用网络层或者数据链路层的接口进行编程,更难更底层,例如制作抓包等网络工具 网络套接字:实现用户通信的编程 udp网络通信 服务端server 分

JAVA—网络通信

本文是学习网络通信入门和简单了解UDP协议和TCP协议,学习和了解CS架构和简单了解BS架构和HTTP协议(部分图片来自黑马程序员) 目录 1.网络通信三要素 (1)IP地址 (2)端口号 (3)协议 2.UDP通信—快速入门 3.UDP通信—多发多收 4.TCP通信—快速入门 5.TCP通信—多发多收 6.TCP通信—同时接收多个客户端 7.TCP通信—综合

Android 网络通信(Asynctask类的使用)

现在大部分app需要联网,所以作为开发人员就必然要了解网络通信这方面的知识。 首先要知道的一点是网络通信是耗时操作,为了不让这些耗时的任务影响界面响应,就应当使用异步任务进行处理。java是用thread,例如 new Thread(){ run(){ } }.start(); 在run()中进行网络通信处理。但Android有个重要机制,ui主线程安全机制,也就是说任何改变ui的操作

Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value 及 网络通信

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27705613 通信方式 主要有以下三大类: (一)SERVER/CLIENT方式: 1.一个Client方连接一个Server方,或称点对点(peer to peer)。 2.多个Client方连接一个Server方,这也是通常的

网络通信 Posix API的原理与使用

文章目录 1、Posix API简介2、Posix 网络 API简介3、API 具体介绍(1)套接字(socket)socket()bind()listen()accept()connect() (2)数据传输send()recv()sendto()recvfrom() (3)套接字选项setsockopt()getsockopt() (4)套接字关闭close()shutdown()(不推

网络通信特刊合集(二)——CMC特刊推荐

特刊征稿 01  特刊名称: Security and Privacy for  Blockchain-empowered Internet of Things 截止时间: 提交截止日期 2024 年 10 月 30 日 目标及范围: 本期特刊旨在探讨最近的进展,以解决在区块链授权的物联网中与安全和隐私相关的基本和实际挑战。期望在这一领域获得高质量的原创研究和评论