学习python网络编程首先需要知道以下基本知识:
1.IP地址
IP地址是指互联网协议地址(Internet Protocol Address),用来给Internet上的电脑一个编号。
IP地址的作用:用来在网络中标记一台电脑。
私有IP:有一部分地址用于局域网使用,属于私网IP,范围:
10.0.0.0~10.255.255.255 (内网,虚拟机中常出现,A类)
172.16.0.0~172.31.255.255(内网、子网,B类)
192.168.0.0~192.168.255.255(内网、子网,C类)
特殊的IP地址:127.0.0.1
127.0.0.1代表本机IP地址,用http://127.0.0.1可以测试本机中配置的Web服务器。
特殊的域名:localhost
localhost是本机域名,用来解析到本机127.0.0.1 ip地址上。
IPv4与IPv6:
IPv4,是互联网协议(Internet Protocol,IP)的第四版,也是第一个被广泛使用,构成现今互联网技术的基石的协议。采用“点分十进制”表示(如:192.168.1.100),一共有2^32-1个,估算约为42.9亿个,除去一些特用的IP和一些不能用的IP,剩下可用的不到40亿。IPv4发展到现在,最大的问题是网络地址严重不足。
IPv6是Internet Protocol Version 6的缩写,其中Internet Protocol译为“互联网协议”。IPv6是IETF(互联网工程任务组,Internet Engineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议。采用“点分十六进制”表示(如:2031:0000:1F1F:0000:0000:0100:11A0:ADDF),而IPv6中IP地址的长度为128,即有2^128-1个地址,号称能够为“地球上每一粒沙子分配一个IP地址”
查看或配置网卡信息:
Linux下在终端里输入:ifconfig ,会显示所有网卡信息
修改局域网内某一网卡的ip:sudo ifconfig 网卡名 修改后的ip
测试远程主机的连通性:ping IP/域名
ping 127.0.0.1 检查本地网卡是否正常
ping www.baidu.com 检查网卡是否能上公网
ping 当前局域网内的ip地址 检查是否在同一个局域网内
2.端口
一个电脑上运行着多个应用程序,都需要收发数据,通过给每个程序分配一个端口,使程序数据收发正常。由于有很多端口,OS为了统一管理,所以进行了编号。
端口号:使用唯一一个编号来标识端口,就是标识端口的一个编号,在Linux中共有65536个。
端口号是OS按照一定的规定进行分配,分为知名端口号和动态端口号:
知名端口号:系统程序使用的端口号,0~1023
如:80端口分配给HTTP服务,21端口分给FTP服务
动态端口号:开发应用程序使用的端口号,因为它不固定分配某一种服务,而是动态分配,所以称为动态端口,1024~65535。
查看端口号:
netstat -an
查询80端口的使用情况:
netstat -an | grtp 80
查看端口号被哪个程序占用:
sudo lsof -i :80
查看服务器socket:
netstat -ntl
需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访问一台WWW服务器时,WWW服务器使用“80”端口与你的电
脑通信,但你的电脑则可能使用“9054”这样的端口。
ip地址相当于一栋房子的地址,应用程序相当于房子里的房间,而端口就相当于进入该房子的门,端口号就是门牌号。
网络通信的流程是先通过ip地址找到网络中的设备,再通过端口号来找到对应的端口,然后把数据传输给对应的应用程序。
IP地址与网络服务的关系是一对多的关系,网络服务实际上是通过IP地址+端口号来区分不同的服务。
3.数据的编码和解码
python3编码转换:文本总是Unicode,由str类型进行表示,二进制数据使用bytes进行表示,
网络中数据的传输是以二进制(字节码)的方式来进行的,所以,我们需要通过对Unicode字符串内容ji进行编码和解码
才能达到数据传输的目的。在python中:可以通过encode()和decode()来对数据进行编码和解码。
声明格式为:
str.encode(encoding="utf-8",errors="struct")
bytes.decode(encoding="utf-8",errors="strict")
encoding是指在编码解码过程中使用的编码,errors是指错误的处理方案。
- encoding -- 可选参数,要使用的编码,默认编码为 'utf-8'。
- errors -- 可选参数,设置不同错误的处理方案。默认为 'strict',意为编码错误引起一个UnicodeError。 其他可能得值有 'ignore',表示忽略不合适的编码数据。