学习笔记:Python网络编程初探之基本概念(一)

发布于:2025-03-09 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、网络目的

让你设备上的数据和其他设备上进行共享,使用网络能够把多方链接在一起,然后可以进行数据传递。

网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信。

二、IP地址的作用

用来标记唯一一台电脑

1. Linux查看IP地址

输入命令ifconfig

2. Window查看IP地址

快捷键win+R打开运行,输入cmd,然后输入命令ipconfig

3. Linux下关闭网卡

Ctrl+A:快速回到行首

Ctrl+E:快速回到行尾

(1)关闭网卡

(2)开启网卡

三、IP地址分类

IPV4个数:256*256*256*256(瓜分完了,不够用)

IPV6:

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

1. A类IP地址

一个A类IP地址由1字节的网络地址(网络号)和3字节主机地址(主机号)组成,网络地址的最高位必须是“0”。

  • 地址范围:1.0.0.1 - 126.255.255.254
  • 二进制表示为:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110
  • 可用的A类网络有126个,每个网络能容纳16777214个主机。

2. B类IP地址

一个B类IP地址由2个字节的网络地址(网络号)和2个字节的主机地址(主机号)组成,网络地址的最高位必须是“10”。

  • 地址范围:128.1.0.1 - 191.255.255.254
  • 二进制表示为:10000000 00000001 00000000 00000001 - 10111111 11111111 11111111 11111110
  • 可用的B类网络有16384个,每个网络能容纳65534个主机。

3. C类地址

一个C类IP地址由3个字节的网络地址和1个字节的主机地址组成,网络地址的最高位必须是“110”。

  • 范围:192.0.1.1 - 223.255.255.254
  • 二进制表示为:11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110
  • C类网络可达2097152个,每个网络能容纳254个主机。

4. D类地址用于多点广播

D类IP地址第一个字节以“1110”开始,它是一个专门保留的地址。

它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。

多点广播地址用来一次寻址一组计算机,地址范围224.0.0.1 - 239.255.255.254。

 5. E类IP地址

以“1111”开始,为将来使用保留。E类地址保留,仅作实验和开发用。

6. 私有ip

在这么多网络IP中,国际规定有一部分IP地址是用于我们的局域网使用,也就是属于私网IP,不在公网中使用的,它们的范围是:

  • 10.0.0.0 ~ 10.255.255.255
  • 172.16.0.0 ~ 172.31.255.255
  • 192.168.0.0 ~ 192.168.255.255

四、端口

1. 什么是端口?

提出问题:当两台电脑上同时运行多个程序时,通过IP地址数据可以到达,但该给电脑中哪个程序呢?

计算机通过IP地址找到目标设备后,还需要用端口号区分设备上不同的软件服务。例如:

  • 浏览网页:默认用80端口(HTTP)或443端口(HTTPS)
  • 发邮件:用25端口(SMTP)
  • 下载文件:用21端口(FTP)

网络端口的作用可以理解为计算机的“门牌号”。就像一栋大楼有很多房间(服务),每个房间有唯一的门牌号(端口号),方便快递员(数据)准确找到对应的房间。

如果一个程序需要收发网络数据,那么就需要有这样的端口在Linux系统中,端口可以有65536(2的16次方)个之多!既然有这么多,操作系统为了统一管理,所以进行了编号,这就是端口号

2. 端口号

端口是通过端口号来标记的,端口号只有整数,范围是从0到65535。

注意:端口号不一样的*nix系统不一样,还可以手动修改。

3. 端口是怎样分配的

端口号不是随意使用的,而是按照一定的规定进行分配

(1)知名端口(0-1023)

众所周知的端口,范围-到1023。由国际组织IANA统一管理,专门分配给最常用的网络服务:

  • 80端口:网页服务(HTTP)→ 相当于"官方网站入口"
  • 443端口:加密网页(HTTPS)→ 类似"银行VIP通道"
  • 22端口:安全远程登录(SSH)→ 类似"机房管理专用门"

(2)注册端口(1024-49151)
企业可向IANA申请注册专用端口,比如:

  • 3306端口:MySQL数据库
  • 3389端口:Windows远程桌面
  • 5432端口:PostgreSQL数据

   (3) 动态端口

动态端口的范围是从1024到65535

之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。

动态分配是指当一个系统程序或应用程序程序需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。

当这个程序关闭时,同时也释放了所占用的端口号。

(4)怎样查看端口号

Linux 系统:

  • 使用netstat命令:如netstat -tulnp可以查看所有监听中的 TCP 和 UDP 端口,并显示对应的进程 ID 和程序名称。若只想查看特定端口,如 22 端口的使用情况,可使用netstat -tnlp | grep ":22"4。
  • 使用ss命令ssnetstat的现代替代品,性能更优,常用ss -tuln查看端口,若查看特定端口,如查看端口号 22 的使用情况,可使用ss -tnlp | grep ":22"4。
  • 使用lsof命令lsof -i:<端口号>可以列出使用该端口的进程信息,如lsof -i:80可查看使用 80 端口的进程。

Windows 系统:

使用命令提示符(CMD)

  • netstat命令:打开命令提示符,输入netstat -ano,可列出所有网络连接和监听端口,显示本地地址、外部地址、状态以及对应的进程 ID。若只想查看正在监听的端口,可使用netstat -anl。要以数字格式显示地址和端口信息,可使用netstat -n5。
  • tasklist命令配合netstat:先使用netstat -ano找到占用特定端口的进程 ID,再使用tasklist /fi "pid eq <进程ID>"查看对应的进程名称和详细信息。

使用任务管理器

  • 打开任务管理器,切换到 “性能” 选项卡,点击 “资源监视器”,在 “网络” 选项卡中可以查看正在使用的端口以及对应的进程。

五、Socket介绍

1. 不同电脑上的进程如何通信

首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!

在1台电脑上可以通过进程号(PID)来唯一标识一个进程,但是在网络中是行不通的。

起始TCP/IP协议协议族帮我们解决了这个问题,网络层的IP地址可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中应用进程。

这样利用ip地址 + 协议 + 端口就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。

2. 什么是Socket?

socket(简称套接字)是进程间通信的一种方式,其他进程间通信的~主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的例如我们每天浏览网页、QQ 聊天、收发emai 等等。

3. 创建Socket

在python中,使用socket模块的函数socket就可以完成:

import socket
socket.socket(AdressFamily,Type)

总结:所以说会了socket直白来讲,你接下来编写的程序,你就可以完成网络功能

创建一个TCP Socket

import socket  # 导入 Python 内置的 socket 模块,用于网络编程  

# 创建 TCP 套接字  
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
# - socket.AF_INET:指定使用 IPv4 地址族(常见的网络地址类型)。  
# - socket.SOCK_STREAM:指定使用 TCP 协议,特点是面向连接、可靠传输,数据无丢失、按序到达。  

# ...这里是使用套接字的功能(省略)...  
# 实际使用中,会在此处添加绑定地址端口(bind)、监听(listen)、接受连接(accept)、收发数据(send/recv)等逻辑。  

创建一个UDP Socket

import socket  # 导入 socket 模块  

# 创建 UDP 套接字  
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  
# - socket.AF_INET:同样指定 IPv4 地址族。  
# - socket.SOCK_DGRAM:指定使用 UDP 协议,特点是无连接、不可靠传输,适合对实时性要求高但允许少量丢包的场景(如视频直播、游戏通信)。  

# ...这里是使用套接字的功能(省略)...  
# 实际使用中,会在此处添加绑定地址端口(bind)、收发数据(sendto/recvfrom)等逻辑。  

s.close()  # 关闭 UDP 套接字,释放资源。 

网站公告

今日签到

点亮在社区的每一天
去签到