网络编程浅析——库、工具、协议
先供上一张好图:
协议对应库
网络编程=“网络”+“编程”,
//互联网将所有的计算机连接起来,合体形成的计算机,内存更大,速度更快
//但本质与单个计算机并没有什么不同,不过是信息在不同主机的存储器之间传播罢了,
//
∴
\therefore
∴用到的库==单个计算机的系统库+网络通信库
=网络对应库
- 应用层:
1. http:访问html获取信息:urllib → \rightarrow → requests
处理信息:
a. (按照路径抓取、导航、修改XML和HTML文件目录下的对应项):lxml
+BeatuifulSoup
b. 处理数据(为通用库,不只网络编程一个方向占有):Pandas(操作与运算数列)+Matplotlib(数据可视化)
2. 上网至少有访问网页和登录应用两种方式,抓取应用信息的有Charlies和Fidder工具
3. 许多网站和应用进化出了输入验证码的反爬虫机制,相应的库
字符 ⟺ \iff ⟺ tesserocr+第三方验证码+滑动窗格(webdriver,re,实现函数如下)
4. smtp(simple message transmission protocal):EmailMessage(email.message,email.policy,email.utils)+smtplib+poplib+…
5. ftp:ftplib(这朴实无华的名字~~)
6. RPC(remote Procedure Call,有帖子说在Harmony System上用这个可以提高华为手机的兼容性):xmlrpc
(反正要实现什么功能就封装个库,项目就是写一堆文件然后封装成提供api的库文件供调用) - 传输层:socket
- 网络、链路、物理层好像没有协议库,因为就是语法格式呀,当然没有啦
+操作系统对应库:
1. os
2. threading
3. zmp
4. queue
网络查看工具 → \rightarrow →可视化网络连接过程
- Ping(自带):访问ip地址,检测是否可以链接,遵从ICMP协议
- Wireshark:分析网络连接的网络封包(数据包在传输过程中遵守的协议集合)
- telnet:访问服务器工具,当然也可以用命令行来进行,但是这个更快
- Apache:配置本地http服务器
- vsftpd:配置本地FTP服务器
概念子树(参考百度百科):
-
DHCP:动态ip建立工具,从属于这个ip服务器下的所有客户端都可以访问
-
ICMP协议:在主机、路由器间传送网络通不通、主机是否可达、路由是否可用等网络本身的消息,IP协议一个模块
-
BOOTP协议:用于无盘工作站的局域网中,可以让无盘工作站从一个中心服务器上获得IP地址,这样就不需要管理员去为每个用户去设置静态IP地址。
-
ARP:ip ⟺ \iff ⟺物理地址 转化 的一个TCP/IP协议
出现原因:在以太网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。
主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;
收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
类似缓存,查询域名和ip对应后也在本地存储,没有才访问DNS
建立在网络中各个主机互相信任的基础上的,
-
DNS:域名 ⟺ \iff ⟺ip 转化
-
SDN:软件定义网络
诞生背景:计算机世界是垂直标准的 → \rightarrow → 硬件 → \rightarrow →驱动 → \rightarrow →操作系统 → \rightarrow →应用
而在SDN诞生前,网络仅是水平标准的 ⟺ \iff ⟺互联网下的主机可以互联,但是没有一个应用可以自顶而下地管理这些主机的联系,路由器只是一座桥,不起管理作用。
结构:
数据平面由交换机等网络通用硬件组成,各个网络设备之间通过不同规则形成的SDN数据通路连接;
控制平面包含了逻辑上为中心的SDN控制器,它掌握着全局网络信息,负责各种转发规则的控制;
应用平面包含着各种基于SDN的网络应用,用户无需关心底层细节就可以编程、部署新应用。
编程实践:
- 新建套接字并传播_利用TCP/UDP传输协议
- 编写可靠运输协议
- ICMP下,利用request和socket编写ping应用程序
- 尝试创建在多个主机间有序传播的分布式程序
愿偿少年泪,犹趁未老时!
本文来自博客园,作者:clfire,转载请注明原文链接:https://www.cnblogs.com/sky1water/p/16720546.html