基于Python网络编程(一)
一、网络基础
1、网络模型
ISO(国际标准化组织):专门做标准的组织 非盈利的
然后这个组织给网络也做了一个标准就是OSI模型 网络体系结构标准 采用分层的思想,将原始的数据经过一层一层的封装,传递出去
OSI:网络信息传输比较复杂需要很多功能协同—>将功能分开,降低耦合性,让每个模块完成一定的功能—>将这些模块按照一定的顺序进行组合,完成功能,条理清晰
按照规定功能,顺序排列的体系结构:OSI模型
OSI七层模型
应用层:提供用户服务,例如处理应用程序,文件传输,数据管理
表示层:做数据的转换和压缩,解压,加密等
会话层:决定了进程间的连接建立,选择使用什么样的传输协议
传输层:建立网络连接,提供合适的连接传输服务,提供流量控制
网络层:控制分组传输,进行路哟选择,网络互联
数据链路层:提供链路交换,具体的数据收发
物理层:物理硬件,具体的传输条件和传输接口
后来七层模型 转换为 四层 或者 五层
四层模型:
应层(包含应用层 表示层 会话层)
传输层
网路层
物理链路层(数据链路层 和物理层)
五层 TCP/IP模型
应用层(包含应用层 表示层 会话层)
传输层
网路层
数据链路层
物理层
协议:网络协议,即在网络传输过程中为保证通信正常而制定的都遵守的约定
应用层协议:TFTP DNS FTP SMTP HTTP
传输层协议:TCP UDP
网络层:IP ARP ICMP
物理链路层:IEEE
2、基本的网络知识
-
为了访问主机 主机必须有一个标识 如下将介绍
主机在不同的地方的不同表示方法:
1、主机名称表示方式 。 这种方式是不能用于网络中来标识一台主机的
计算机名
域名
2、本地主机表示方式:IP 这种方式是网络中标识主机的方式
localhost or 127.0.0.1 表示本机通信地址 只用用于主机自已访问自己
0.0.0.0 表示在局域网内可用主机IP
172.60.50.218 表示本机在网络上的标识,,用于网络发布自己机器的标识
3、python中获取主机名称import socket
socket.gethostname()
socket.gethostbyname('localhost')
socket.gethostbyaddr('127.0.0.1') # 返回的是一个元组:第一个元素代表主机名;第二个参数代表主机的别名;第三个参数代表主机的IP地址
演示 -
IP地址
就是一台主机的标识
IPV4
IPV6 -
某个网段:其实就是一个局域网的标识 网段相同的主机就是在同一局域网中
-
网关地址:就是进入到某一局域网中的大门
-
广播地址:发一个信息局域网中的所有的主机都能收到
- 注
一个IP地址不一定对应一台机器,所谓一个ip标识唯一一台主机,指的是主机在公网中的IP(就是网络运营商分配给你的ip)是唯一的。但是像我们通过ipconfig和ifconfig查看到的机器ip只是局域网中的ip,这个ip是路由器分配给你的也就是说在其他的局域网中,可能存在和你主机IP地址相同的主机。
ip地址转换为二进制
# inet_atom 将地址十进制转换为二进制
socket.inet_aton('192.168.1.2')
输出结果:b'\xc0\xa8\x01\x02'
inet_nton将地址二进制转换为十进制
socket.inet_ntoa(b'\xc0\xa8\x01\x02')
输出结果 '192.168.1.2'
#inet_pton(address_family,ip_string) 和inet_ntop(address_family,packed_ip) 这两个函数比较新,根据传入的参数不同 既可以转化ipv6的地址,也可以转化ipv4 的地址。