1.网络编程(难点)
2.进程线程(难点)
3.正则表达式
4.MongoDB数据库(非关系型数据库)
5.git使用
6.基础项目示例
一.网络编程
1.网络功能:数据的传输
2.OSI七层模型
制定组织:ISO国际标准化组织
作用:使网络通信工作流程标准化
应用层:提供用户服务,具体功能有应用功能实现
表示层:数据的压缩优化加密
会话层:建立用户级的连接,选择适当的传输服务
传输层:提供传输服务
网络层:路由选择,网络互联
链路层:进行数据交换,控制具体数据的发送
物理层:提供数据传输的硬件保证,网卡接口,传输介质
优点:1.建立了统一的工作流程
2.分部清晰,各司其职,每个步骤分工明确
3.降低了各个模块之间的耦合度,便于开发
cookie:高内聚:模块功能尽可能单一,不相互掺杂
低耦合:模块之间的关联一影响尽可能少
封装
四层模型(TCP/IP模型)
背景:实际工作中工程师无法按照七层模型要求操作,逐渐演化为更符合实际情况的四层
应用层:集中了应用,表示,会话的功能
传输层:
网络层
物理链路层:链路层依托于硬件设备
3.数据传输过程
[1]发送端由应用程序发送消息,逐层添加首部信息,最终在物理层发送消息包
[2]发送的消息经过多个节点(交换机,路由器)传输,最终到达目标主机
[3]目标主机有物理层逐层解析首部消息包,最终到应用程序呈现消息。
4.网络协议
定义:在网络数据传输中,都遵循的规定,包括建立什么样的数据结构,什么样的特殊标志等。
5.网络概念
[1]网络主机(host)
功能:标识一台主机在网络中的位置(地址)
本地地址:'localhost'
'127.0.0.1'
网络地址:'192.168.43.165'
查看本机网络地址:ifconfig 以太网inet地址
ipconfig(windous) '192.168.43.209'
自动获取地址:0.0.0.0
[2] IP地址
功能:确定一台主机的网络路由位置
结构:IPv4 点分十进制表示 192.168.43.165 每部分取值范围0-255
IPv6 128位 扩大了地址范围
特殊IP:127.0.0.1 本机测试IP
0.0.0.0 自动获取本机网卡地址
172.40.91.0 通常表示一个网段
172.40.91.1 通常表示一个网关
172.40.91.255 用作广播地址
[3] 域名
定义:给网络服务器地址起名字
作用:方便记忆,表达一定的含义
*ping [ip]:测试和某个主机是否联通
[4] 端口号(port)
作用:端口是网络地址的一部分,用于区分主机上不同的网络应用程序
特点:一个系统中的应用监听端口不能重复
取值范围:1-65535
1-1023 系统应用或者大众程序监听端口
1024-65535 自用端口
二.传输层服务
面向连接的传输服务(基于TCP协议的数据传输)
1.传输特征:
提供了可靠的数据传输,可靠性指数据传输过程中无丢失,无失序,无差错,无重复
2.实现手段:
在通讯前需要建立数据连接,通信结束要正常断开连接
[1] 三次握手(建立连接)
1.客户端向服务器发送消息报文请求连接
2.服务器收到请求后,回复报文确定可以连接
3.客户端收到回复,发送最终报文建立连接
[2] 四次挥手(断开连接)
1.主动方发送报文请求断开连接
2.被动方收到请求后,立即回复,表示准备断开
3.被动方准备就绪,再次发送报文表示可以断开
4.主动方收到确定,发送报文完成最终断开
3.适用情况
对数据传输准确性有明确要求,传输文件较大,需要明确可靠性的情况。比如:网页获取,文件下载,邮件收发
面向无连接的传输服务(基于UDP协议的数据传输)
1.传输特征:
不保证传输的而可靠性,传输过程没有连接和断开,数据收发自由随意
2.使用情况
网络较差,对传输可靠性要求可靠性不高,比如:网络视频,群聊,广播
面试要求:1.OSI七层模型介绍一下,tcp/ip模型是什么
2.tcp服务和udp服务有什么区别
3.三次握手和四次挥手指什么,过程是什么样的
三.socket套接字编程
1.套接字:实现网络编程进行数据传输的一种技术手段
2.python实现套接字编程
import socket
3.套接字分类
流式套接字(SOCK_STREAM):以字节流方式传输数据,实现tcp网络传输方案
数据报套接字(SOCK_DGRAM):以数据报的形式传输数据,实现udp网络传输方案
面向连接--tcp协议 --可靠的--流式套接字
无连接--dup协议--不可靠--数据报套接字
*函数:功能,参数,返回值
tcp套接字编程
[1]服务端流程
import socket(前提)
.类(类的参数传给初始化。。)
1.创建套接字
sockfd = socket.socket(socket_family=AF_INET,
socket_type = SOCK_STREAM,
proto=0)
功能:创建套接字
参数:socket_family 网络地址类型 AF_INET--->ipv4
socket_type 套接字类型 SOCK_STREAM流式,SOCK_DGRAM数据报
proto 通常为0 选择子协议
返回值:套接字对象
2.绑定地址
sockfd.bind(addr)
功能:绑定本机网络地址
参数:二元元组(ip,port) ('127.0.0.1',8888)自己访问
(localhost)自己访问
('0.0.0.0',8888)
('ip',)
3.设置监听
sockfd.listen(n)
功能:将套接字设置为监听套接字,确定监听队列大小
*一个套接字可以连接多个客户端(一个个连接)--队列
*参数n在Linux下无用
参数:监听队列大小
4.等待处理客户端请求
connfd,addr = sockfd.accept()
功能:阻塞等待处理客户端请求
返回值:connfd 客户端连接套接字
addr 连接的客户端地址
*阻塞函数:程序运行过程中遇到阻塞函数则暂停执行,直到达成某种条件后继续运行
5.消息收发
data = connfd.recv(buffersize)
功能:接收客户端消息
参数:每次最多接收消息的大小
返回值:接收到的内容
n = connfd.send(data)
功能:发送消息
参数:要发送的内容 bytes格式
返回值:发送的字节数
* str -->bytes string.encode()
bytes -->str bytes.decode()
6.关闭套接字
sockfd.close()
功能:关闭套接字
1 import socket 2 3 #创建套接字 4 sockfd = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 5 #绑定地址 6 sockfd.bind(('0.0.0.0',8888)) 7 8 #设置监听 9 sockfd.listen(5) 10 #等待处理客户连接 11 print("waitting for connect...") 12 connfd,addr = sockfd.accept() 13 print("Connect from",addr)#客户地址 14 15 #收发消息 16 #收 17 data = connfd.recv(1024) 18 print("Receive message",data.decode()) 19 #发 20 n= connfd.send(b"Receve your message!!") 21 print("Send %d bytes"%n) 22 #关闭套接字 23 connfd.close()#连接套接字 24 sockfd.close()#监听套接字
1 from socket import * 2 3 #创套接字 4 sockfd = socket() 5 6 #发起连接 7 server_addr = ('172.40.71.149',8888) 8 sockfd.connect(server_addr) 9 10 #收发消息 11 #发 12 data = input(">>") 13 sockfd.send(data.encode()) 14 15 #收 16 data = sockfd.recv(4096) 17 print("From server:",data.decode()) 18 19 #关闭套接子 20 sockfd.close()