人工智能(PythonNet)—— 网络编程基础(四层/五层/七层框架)
术语:
ISO:国际标准化组织(International Organization for Standardization)
OSI:开放式系统互联(Open System Interconnection)
一、OSI参考模型
开放系统互连参考模型为实现开放系统互连所建立的通信功能分层模型,简称OSI参考模型。
1、OSI 七层模型
应用层 :提供用户服务,具体内容由特定程序规定
表示层 :提供数据的压缩解压和加密等
会话层 :建立应用连接,选择传输层服务
传输层 :提供合适的传输服务,流量控制
网络层 :路由选择,网络互联
链路层 :提供链路交换,具体消息发送
物理层 :物理硬件,接口
OSI七层模型优点 : 将功能分开,降低了网络传输中的耦合性,每一部分完成自己的功能。可以在开发和实施的过程中各司其职。
2、四层模型
应用层 : 应用层 表示层 会话层
传输层 : 传输层
网络层 : 网络层
物理链路层: 链路层和物理层
3、五层模型(TCP/IP模型)
应用层 : 应用层 表示层 会话层
传输层 : 传输层
网络层 : 网络层
链路层 : 链路层
物理层 : 物理层
二、网络概念
1、协议
协议(网络协议):在网络通信中,各方必须遵守的规定。包括建立什么样的连接,消息结构等
应用层 : TFTP HTTP DNS SMTP
传输层 : TCP UDP
网络层 : IP
物理层 : IEEE
2、特殊IP
a、0.0.0.0
IPV4中,0.0.0.0地址被用于表示一个无效的,未知的或者不可用的目标。
* 在服务器中,0.0.0.0指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。
* 在路由中,0.0.0.0表示的是默认路由,即当路由表中没有找到完全匹配的路由的时候所对应的路由。
用途总结:
当一台主机还没有被分配一个IP地址的时候,用于表示主机本身。(DHCP分配IP地址的时候)
用作默认路由,表示”任意IPV4主机”。
用来表示目标机器不可用。
用作服务端,表示本机上的任意IPV4地址。
b、127.0.0.1
127.0.0.1属于{127,}集合中的一个,而所有网络号为127的地址都被称之为回环地址,所以回环地址!=127.0.0.1,它们是包含关系,即回环地址包含127.0.0.1。
回环地址:所有发往该类地址的数据包都应该被loop back。
用途:
* 回环测试,通过使用ping 127.0.0.1 测试某台机器上的网络设备,操作系统或者TCP/IP实现是否工作正常。
* DDos攻击防御:网站收到DDos攻击之后,将域名A记录到127.0.0.1,即让攻击者自己攻击自己。
* 大部分Web容器测试的时候绑定的本机地址。
c、localhost
localhost是一个域名,用于指代this computer或者this host,可以用它来获取运行在本机上的网络服务。
在大多数系统中,localhost被指向了IPV4的127.0.0.1和IPV6的::1。
3、网络信息查询
a、查看 IP网络信息
linux ifconfig
win ipconfig
b、socket模块中的函数
获取计算机名称: socket.gethostname()
获取主机IP: socket.gethostbyname('localhost')
获取服务主机信息:socket.gethostbyaddr("www.baidu.com")
将ip十进制转化为点分二进制:socket.inet_aton("192.168.1.2")
将ip点分二进制转化为十进制:socket.inet_ntoa(b"\xc0\xa8\x01\x02")
将ip十进制转化为点分二进制:socket.inet_pton(AF_INET,"192.168.1.2") # ipv4
将ip点分二进制转化为十进制:socket.inet_ntop(AF_INET,b"\xc0\xa8\x01\x02") # ipv4
将ip十进制转化为点分二进制:socket.inet_pton(AF_INET6,"192.168.1.2") # ipv6
将ip点分二进制转化为十进制:socket.inet_ntop(AF_INET6,b"\xc0\xa8\x01\x02") # ipv6
获取一个应用的端口:socket.getservbyname('mysql')Out[11]: 3306
e、字节序
大端序:高字节存在低地址
小端序:低字节存在低地址
网络字节序 : 将字节序发送方式统一
三、传输层服务
1、tcp协议:面向连接的传输服务
a、传输特征:
* 提供可靠的传输服务
数据在传输过程中,无失序,无差错,无重复,无丢失
* 传输过程中有建立和断开连接的过程
三次握手:建立数据传输两端的持续连接
四次挥手:断开连接的两端,保证数据的传输完整
b、三次握手:(发起连接请求、允许连接、建立连接)
1)客户端向服务器发起连接请求
2)服务器收到连接请求进行确认,返回报文
3)客户端收到服务器确认进行连接创建
c、四次挥手:(发起断开、收到并准备、准备就绪、断开)
1)主动方发送报文,告知被动方要断开连接
2)被动方返回报文,告知收到请求,准备断开
3)被动方再次发送报文,告知准备完毕可以断开
4)主动方发送报文完成断开
e、应用情况
适用于传输内容较大,网络情况好,需要提供准确传输的情况比如:聊天信息 ,文件传输,邮件,网页获取 ... ...
2、udp协议:面向无连接的传输服务
发送时由发送端自主进行,不考虑接收端
a、传输特征 :
* 不保证传输的可靠性
* 无需建立三次握手和四次挥手的连接断开过程
* 消息的收发比较自由,不受其他约束
b、应用情况
网络较差,对传输准确性要求低,广播组播
比如:网络视频,群聊,发送广播 ... ...
四、附录:目录
- 人工智能(PythonNet)—— TCP服务器、UDP服务器基础编程
- Python网络编程基础
- Twisted是python下的用来进行网络服务和应用程序编程的框架
- python网络编程基础(连载)06协程
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分(来源:http://blog.csdn.net/yangjundeng/archive/2005/03/17/321920.aspx)
- Python基础知识-网络编程
- Python基础教程——14 网络编程
- python 编程语言基础技术框架
- <<Python基础教程>>学习笔记 | 第14章 | 网络编程
- python网络编程基础-卷1-(1,8)章
- 从零开始学Python第八周:网络编程基础(socket)
- Python网络编程基础笔记-使用minidom生成XML文件
- python 网络编程基础
- Python基础教程——14 网络编程
- python之高性能网络编程并发框架eventlet实例 推荐
- 网络编程理论知识总结(一)四层、七层网络模型
- python网络编程基础
- Python基础—16-网络编程
- Linux下Python网络编程框架-Twisted安装手记
- python 编程语言基础技术框架