Python网络编程入门概念(一)
1. OSI 7层模型:
应用层:提供用户服务;相关协议:HTTP,FTP,POP3,SMTP等
表示层:数据的压缩,加密,差错控制等
会话层:建立应用连接,'选择传输层服务'
------------------------------------------->前端应用工程师
传输层:提供不同的传输服务,流量控制;相关协议:TCP,UDP'[数据段]'
------------------------------------------->网络后端工程师
网络层:路由选择,网络互连'[数据包]'
数据链路层:提供链路交换,具体消息以帧发送'[数据帧]'
------------------------------------------>通信工程师
物理层:物理硬件,接口,网卡,线路'[比特流]'
------------------------------------------>大唐,华为
优点:功能分开,各司其职,降低了网络传输中的耦合度。
2. TCP/IP协议实际使用的是4层:
应用层(OSI前3层)
传输层
网络层
物理层(OSI后2层)
3. 高内聚,低耦合:
高内聚:单个模块功能尽量单一
低耦合:模块之间尽量减少关联和影响
4. 网络协议:
在网络通信中,各方必须遵守的规定,包括建立什么样的连接,消息结构等
应用层协议:TFTP "HTTP" DNS SMTP
传输层:"TCP" "UDP"
网络层:IP
物理层:IEEE
5. IP地址,端口号,域名:
①IP地址分为公网IP和内网IP:
内网IP是在规划IPV4协议时,考虑到IP地址可能不够用的情况,为局域网设计的私有IP。
计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。
socket.gethostbyname('域名或主机名') #获取主机IP
常见的IP地址:
1)私有IP(内网IP): 10.*.*.*, 172.16-31.*.*, 192.168.*.*
2)127.0.0.0/8: 预留给本机的IP地址段,所有发往该类地址的数据包都被loop back。其中,127.0.0.1被广泛使用。
3)0.0.0.0/32: 真正表示“本网络中的本机
4)0.0.0.0/8: 本网络中的所有主机
5).255: "广播数据包"的目标地址
②端口号是网络地址的一部分,每个网络应用都有一个唯一的端口号,用来区别其它应用,接收发往这个端口的消息;
socket.getservbyname('mysql') #获取应用的端口号
③域名可以认为是主机在公网环境中的标识,在公网下,对应一个唯一的IP:
主机名是机器本身的名字,域名是方便记录IP地址做的一种IP映射;主机名用于局域网,而域名用于公网。小编觉得有必要通过下图进一步区分一下域名,网站名及URL的概念:
6. 传输层服务:
1)面向连接的传输服务(TCP协议)
①提供可靠的传输服务:无失序,无差错,无重复,无丢失
②传输过程中有建立和断开连接的过程
三次握手:建立数据传输两端的持续连接
四次挥手:断开连接的两端,保证数据的传输完整
备注:适用于网络情况良好,需要保证可靠性的情况。如:信息聊天,文件上传/下载,邮件,网页获取
2)面向无连接的传输服务(UDP协议)
①不保证传输的可靠性
②无需建立三次握手和四次挥手的连接断开过程
③消息的收发比较自由,不受其它约束
备注:适用于网络情况较差,对可靠性要求不高,收发消息的两端不适合建立固定连接。如:网络视频,群聊,发送广播
7. socket套接字:
socket称为套接字,应用程序通过套接字向网络发出请求或者应答网络的请求,使得主机间或者一台计算机上的进程间可以通讯。
套接字的类型可以分为:
①流式套接字(SOCK_STREAM):传输层基于"TCP"的协议进行通信
②数据报套接字(SOCK_DGRAM):传输层基于"UDP"的协议进行通信
③底层套接字(SOCK_RAM):访问底层协议的套接字