什么是计算机网络?为什么需要网络通信?如何进行网络编程?

简介: 什么是计算机网络?为什么需要网络通信?如何进行网络编程?

本篇文章将从 What(是什么)、Why(为什么)、How(怎么做)?三个部分简单入门网络通信。

计算机网络是什么?

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

简单来说,网络就是一种辅助双方甚至更多方能连接在一起的工具(也就是系统)。

为什么需要网络通信?

为了传递数据,当然数据的格式也是多种多样。网络通信就是为了联通多方然后进行通信用的,即把数据从一方传递给另一方。

如果现代社会没有网络,我们操作任何电脑或者手机都是单机模式,只能自己跟自己玩。

image.png

网络通信的本质:也即进程之间的通信

表现形式:不同的电脑间的数据传递。

如何连接网络——套接字

套接字是计算机网络数据结构,它体现了上节中所描述的“通信端点”的概念。在任何类型的通信开始之前,网络应用程序必须创建套接字。可以将它们比作电话插孔,没有它将无法进行通信。

image.png

两种类型的套接字:基于文件的和面向网络的。

1. AF_UNIX(又名AF_LOCAL)

UNIX 套接字是我们所讲的套接字的第一个家族,并且拥有一个“家族名字”AF_UNIX  (又名AF_LOCAL,在POSIX1.g标准中指定),它代表地址家族(address  family):UNIX。因为两个进程运行在同一台计算机上,所以这些套接字都是基于文件的,这意味着文件  系统支持它们的底层基础结构。这是能够说得通的,因为文件系统是一个运行在同一主机上 的多个进程之间的共享常量。

2. AF_INET(或者地址家族:因特网)

基于网络的,它也有自己的家族名字 AF_INET,或者地址家族: 因特网。另一个地址家族 AF_INET6 用于第 6  版因特网协议(IPv6)寻址。此外,还有其他的地址家族,这些要么是专业的、过时的、很少使用的,要么是仍未实现的。在所有的地址 家族之中,目前  AF_INET 是使用得最广泛的。

Python 只支持 AF_UNIX、AF_NETLINK、AF_TIPC 和 AF_INET 家族。

如果套接字像一个电话插孔——允许通信的一些基础设施,那么主机名和端口号就像区号和电话号码☎️的组合。

面向连接的套接字——TCP

面向连接的,字面解释——在进行通信之前必须先建立一个连接,例如,使用电话系统给一个朋友打电话。这种类型的通信也称为虚拟电路或流套接字。

实现这种连接类型的主要协议是传输控制协议(更为人熟知的是它的缩写 TCP)。

为了创建 TCP 套接字,必须使用 SOCK_STREAM 作为套接字类型。TCP 套接字的名字 SOCK_STREAM 基于流套接字的其中一种表示。

因为这些套接字(AF_INET)的网络版本使用因特网协议(IP)来搜寻网络中的主机,所以整个系统通常结合这两种协议(TCP 和 IP)  来进行(当然,也可以使用 TCP 和本地[非网络的 AF_LOCAL/AF_UNIX]套接字,但是很明显此时并没有使用 IP)。

无连接的套接字——UDP

与虚拟电路形成鲜明对比的是数据报类型的套接字,它是一种无连接的套接字。这意味着,在通信开始之前并不需要建立连接。此时,在数据传输过程中并无法保证它的顺序性、 可靠性或重复性。然而,数据报确实保存了记录边界,这就意味着消息是以整体发送的。

实现这种连接类型的主要协议是用户数据报协议(更为人熟知的是其缩写 UDP)。为了创建 UDP 套接字,必须使用 SOCK_DGRAM 作为套接字类型。你可能知道,UDP 套接字的 SOCK_DGRAM  名字来自于单词“datagram”(数据报)。因为这些套接字也使用因特网协议  来寻找网络中的主机,所以这个系统也有一个更加普通的名字,即这两种协议(UDP 和 IP) 的组合名字,或 UDP/IP。

IP地址——“标记”

就像现实生活中,收件地址就是标记一封信是给谁的;收货地址标记快递寄到哪。地址就是用来标记地点的。

IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。

IP地址的作用,就是用来标记网络上的一个电脑的。(不允许重复)比如类似192.268.1.1这种格式。

通过命令可以查看本机的网卡信息:

Linux输入:ifconfig

Windows:ipconfig

每一个IP地址包含两个部分:网络地址和主机地址

  • A类:7位网络号+主机24位
  • B类:14位+16位
  • C类:21位+主机号8位。192.168.1.1 ~255
  • D类:用于多点广播。1110开始
  • E类:用来保留

端口

有效的端口号范围为 0~65535(尽管小于 1024 的端口号预留给了系统)。

  • 知名端口:从0到1023

例如:88端口分配给http、21分配给FTP

  • 动态端口:1024~65535

在Linux/Mac系统下,可以在/etc/services文件中找到系统预留端口号,包括服务器/协议和套接字类型。

image.png

还可以通过这个 网站查看一些众所周知的端口列表。

通俗来说,IP地址让我们找到了要互相通信的这台电脑,端口的作用就是告诉我该跟这台电脑的哪一个程序进行连接(通信)?

下一篇

当我们知道了有关套接字和网络方面的基础知识,接下来就让我们试着将这些概念应用到 Python 中,学习Python的socket模块。

站在巨人的肩膀上:

Python核心编程(第3版)

相关文章
|
2月前
|
监控 网络协议 安全
|
11天前
|
存储 机器人 Linux
Netty(二)-服务端网络编程常见网络IO模型讲解
Netty(二)-服务端网络编程常见网络IO模型讲解
|
16天前
|
网络协议 Python
告别网络编程迷雾!Python Socket编程基础与实战,让你秒变网络达人!
在网络编程的世界里,Socket编程是连接数据与服务的关键桥梁。对于初学者,这往往是最棘手的部分。本文将用Python带你轻松入门Socket编程,从创建TCP服务器与客户端的基础搭建,到处理并发连接的实战技巧,逐步揭开网络编程的神秘面纱。通过具体的代码示例,我们将掌握Socket的基本概念与操作,让你成为网络编程的高手。无论是简单的数据传输还是复杂的并发处理,Python都能助你一臂之力。希望这篇文章成为你网络编程旅程的良好开端。
37 3
|
1月前
|
网络协议 安全 网络安全
C语言 网络编程(四)常见网络模型
这段内容介绍了目前被广泛接受的三种网络模型:OSI七层模型、TCP五层模型以及TCP/IP四层模型,并简述了多个网络协议的功能与特性,包括HTTP、HTTPS、FTP、DNS、SMTP、TCP、UDP、IP、ICMP、ARP、RARP及SSH协议等,同时提到了ssh的免费开源实现openssh及其在Linux系统中的应用。
|
2月前
|
安全 Java 网络安全
【认知革命】JAVA网络编程新视角:重新定义URL与URLConnection,让网络资源触手可及!
【认知革命】JAVA网络编程新视角:重新定义URL与URLConnection,让网络资源触手可及!
33 2
|
2月前
|
存储 网络协议 安全
计算机网络-网络层
计算机网络-网络层
|
2月前
|
网络协议 Java
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
这篇文章全面讲解了基于Socket的TCP网络编程,包括Socket基本概念、TCP编程步骤、客户端和服务端的通信过程,并通过具体代码示例展示了客户端与服务端之间的数据通信。同时,还提供了多个案例分析,如客户端发送信息给服务端、客户端发送文件给服务端以及服务端保存文件并返回确认信息给客户端的场景。
一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
|
2月前
|
网络协议 Java 关系型数据库
16 Java网络编程(计算机网络+网络模型OSI/TCP/IP+通信协议等)
16 Java网络编程(计算机网络+网络模型OSI/TCP/IP+通信协议等)
73 2
|
2月前
|
开发者 图形学 API
从零起步,深度揭秘:运用Unity引擎及网络编程技术,一步步搭建属于你的实时多人在线对战游戏平台——详尽指南与实战代码解析,带你轻松掌握网络化游戏开发的核心要领与最佳实践路径
【8月更文挑战第31天】构建实时多人对战平台是技术与创意的结合。本文使用成熟的Unity游戏开发引擎,从零开始指导读者搭建简单的实时对战平台。内容涵盖网络架构设计、Unity网络API应用及客户端与服务器通信。首先,创建新项目并选择适合多人游戏的模板,使用推荐的网络传输层。接着,定义基本玩法,如2D多人射击游戏,创建角色预制件并添加Rigidbody2D组件。然后,引入网络身份组件以同步对象状态。通过示例代码展示玩家控制逻辑,包括移动和发射子弹功能。最后,设置服务器端逻辑,处理客户端连接和断开。本文帮助读者掌握构建Unity多人对战平台的核心知识,为进一步开发打下基础。
68 0
下一篇
无影云桌面