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

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

本篇文章将从 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月前
|
移动开发 网络协议 NoSQL
不为人知的网络编程(十七):冰山之下,一次网络请求背后的技术秘密
本文将抛弃千篇一律的计网知识理论,从现实的互联网技术实践角度,一步步为你分享一次网络请求背后的技术秘密。
59 0
|
9天前
|
Web App开发 网络协议 安全
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。
45 2
|
4月前
|
监控 网络协议 安全
|
22天前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
35 2
|
2月前
|
缓存 监控 网络协议
计算机网络的常用的网络通信命令(Windows)
本文介绍了网络技术中常用的命令,如ping用于检测网络连通性,ipconfig查看TCP/IP配置,netstat监控网络状态,arp显示和修改ARP缓存,at安排任务执行,tracert追踪路由,以及nbtstat获取NetBIOS信息。
40 1
|
2月前
|
安全 区块链 数据库
|
3月前
|
存储 机器人 Linux
Netty(二)-服务端网络编程常见网络IO模型讲解
Netty(二)-服务端网络编程常见网络IO模型讲解
|
3月前
|
网络协议 Python
告别网络编程迷雾!Python Socket编程基础与实战,让你秒变网络达人!
在网络编程的世界里,Socket编程是连接数据与服务的关键桥梁。对于初学者,这往往是最棘手的部分。本文将用Python带你轻松入门Socket编程,从创建TCP服务器与客户端的基础搭建,到处理并发连接的实战技巧,逐步揭开网络编程的神秘面纱。通过具体的代码示例,我们将掌握Socket的基本概念与操作,让你成为网络编程的高手。无论是简单的数据传输还是复杂的并发处理,Python都能助你一臂之力。希望这篇文章成为你网络编程旅程的良好开端。
65 3
|
2月前
|
网络协议 网络架构
【第三期】计算机网络常识/网络分层模型与数据包封装传输过程
【第三期】计算机网络常识/网络分层模型与数据包封装传输过程
54 0
|
2月前
|
JSON API 开发者
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
22 0
下一篇
DataWorks