2 python网络基础及协议udp/tcp
2.1 虚拟环境
- 目标
- 虚拟环境的作用;
- 创建虚拟环境;
- 能够进入/退出虚拟环境;
- 为pycharm配置虚拟环境;
- 虚拟环境常用命令
- 注意!
ctrl+H 可以显示出隐藏文件和文件夹
2.2 网络通信概述
-
网络概念(简化)
-
网络编程
-
学习网络的目的
- 能够编写基于网络通信的软件;
2.2.1 IP地址
-
IP地址的概念
- IP地址是指**互联网协议地址(Internet Protocol Address,网际协议地址),**是IP Address的缩写,IP地址是IP协议提供的一种统一的地址格式。
- 每台联网的电脑PC都需要有IP地址;
-
IP地址的作用
- IP地址用来在网络中表示一台电脑,即网络设备往网络中的每台计算机分配的一个唯一标识,比如192.169.1.1,在本地局域网上是唯一的;
-
IP地址特点
- 地址的前三段一般在一个网络中都保持不变,而最后一段改变
- 表示范围:xxx.xxx.xxx.0-xxx.xxx.xxx.255
- **xxx.xxx.xxx前三段是网络号,最后一段0-255是主机号;**0和255不可以用;
-
IP地址分类
- IP地址通常指的是:IPV4(IP协议的第4个版本)
IP地址 = 网络号+主机号 -
私有IP
- 国际规定有一部分IP地址用于局域网使用,属于私网IP不在公网中使用,范围是:
- IPv4和IPv6
IPv4 ,是互联网协议(Inter Protocal,IP)的第四版,第一个被广泛使用,构成现今互联网技术及时的协议。采用“点分十进制”表示(如:192.168.1.100),一共有2^32-1个,估算约为42.9亿个,除去一些特用的IP和一些不能用的IP,剩下可用的不到40亿,IPv4发展至今,最大问题是网络地址严重不足;IPv6 ,是**Internet Protocol Version 6** 的缩写,IPv6是IETF(互联网工程任务组,Internet Engineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议。采用“点分十六进制:表示(如2031:0000:1F1F:0000:0000:0100:11A0:ADDF),而IPv6中IP地址的长度为128,即有2^128-1个地址;
2.2.2 IP地址查看(Ifconfig、ping)
-
目标
- 使用**
ifconfig **查看主机的IP地址; - 使用**
ping **命令查看网络的连通性; -
虚拟机网卡设置 -
ifconfig -
ping
2.2.3 端口
2.2.4 网络传输方式
-
目标
- 面向连接和面向无连接的区别;
- UDP网络传输方式的特点;
-
网络传输方式
2.3 Socket
- 目标:
- socket创建步骤;
- 创建UDP socket套接字创建时需要指定socket.SOCK_DGRAM
- 什么是socket?
- socket(简称“套接字”),是支持TCP/UDP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,通信双方的一种约定,用套接字中的相关函数来完成通信过程。
- 创建socket
- **socket起源于Unix,**而Unix/Linux基本哲学之一就是“一切皆文件/对象”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket一种特殊的文件,一些socket类就是对其进行操作(读写IO,打开,关闭)
- Socket对象(内建方法)
2.4 UDP
2.4.1 udp网络程序-发送数据
- 目标
- 使用**
socket 的sendto **方法能够发送数据; - 使用**
encode **方法能够对待发送数据进行编码; - 实现步骤
- 1、导入模块socket;
- 2、创建socket套接字;
- 3、发送数据;
- 4、关闭套接字;
- 核心方法
2.4.2 udp网络程序-接收数据
- 目标
- 使用**
socket 的recvfrom 方法能够接收数据;** - 使用**
decode 方法能够对接收到的数据解码;** - 核心方法
2.4.3 python3编码转换
-
目标
- 使用**
encode() 和decode() **对字符串编码和解码; - 编解码失败如何解决;
-
编码和解码
- 文本总是**
Unicode ,由str 类型进行表示,二进制数据使用bytes 进行表示,网络中数据的传输是以二进制(字节码)方式来进行,所以我们需要对Unicode字符串内容进行编码和解码才能达到数据传输的目的;** -
GBK国标格式,包括汉字;UTF-8是万国码;
2.4.4 udp端口绑定(发送端)bind
-
目标
-
udp网络程序,会变的端口号 -
udp绑定信息
- 绑定信息
- 一般情况下,一台电脑上运行的网络程序有很多,为了不与其他网络程序占用同一个端口号,在编程中,udp的端口号一般不绑定;
- 但是,如果是一个是服务端程序,需要绑定;
- 核心方法
- 注意**!!!绑定的是自己的发送端的IP地址与端口,不是接收的别人的!!!**
2.4.5 udp端口绑定(接收端)bind
-
目标
- 使用
bind 方法在接收端给套接字绑定端口 -
实现思路
- 使用
bind() 在发送数据前绑定发送端主机的IP地址和端口 -
注意:始终都是在控制绑定自己的端口号!!
2.4.6 udp广播
- 目标
- 知道广播的概念;
- 使用UDP群发广播消息;
- 使用UDP方式发送广播
- **广播地址(Broadcast Address)**是专门用于同时向网络中的所有工作站进行发送的一个地址,在使用TCP/IP协议的网络中,主机标识段host ID为全1的IP地址为广播地址;
- IP地址网络字段和主机字段全为1就是地址:
255.255.255.255
2.4.7 案例:udp聊天器
2.5 TCP
2.5.1 tcp简介
-
目标
- 清楚tcp创建连接,数据传送,终止连接的三个步骤;
- tcp可靠传输的原因;
- tcp与udp的区别;
-
1、TCP介绍
- TCP协议,传输控制协议(
Transmission Control Protocol,TCP )是一种!!面向连接的、可靠的、基于字节流!! 的传输层通信协议,由IETF的RFC 793定义; - TCP通信需要经过创建连接、数据传送、终止连接三个步骤;
- TCP通信模型中,在通信开始前,一定要先建立相关的连接!
-
2、TCP特点
- (1)面向连接
- 通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输;
- 双方间的数据都可以通过这一个连接进行;
- 完成数据交换后,双方必须断开连接,释放系统资源;
- 连接一对一,TCP不适用于广播的应用程序(使用UDP);
- (2)可靠传输
- a、TCP采用发送应答机制
- TCP发送的每个报文段都必须得到接收方的应答才认为TCP报文段传输成功;
- b、超时重传
- 发送端发出一个报文段之后就启动定时器,如果定时时间内咩有收到应答就重新发送这个报文段,TCP为了保证不发生丢包,每个包一个序号,同时序号保证传送到接收端实体的包按序接收。然后接收端实体已成功收到的包发回一个相应地确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包被假设为已丢失被进行重传。
- c、错误校验(错误校验、去除重复)
- TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和;
- d、流量控制和阻塞管理
- 流量控制用来避免主机发送的过快而是接收方来不及完全接收;
-
3、TCP与UDP不同点
- 面向连接(确认有创建三方交握,连接已创建才作传输);
- 有序数据传输;
- 重发丢失的数据包;
- 舍弃重复的数据包;
- 无差错的数据传输;
- 阻塞/流量控制;
-
4、流程对比 -
5、模型对比
- udp通信模型
- 在通信开始前,不需要建立相关的链接,只需要发送数据即可,类似于“写信”
-
TCP通信模型
- 在通信开始前,一定要先建立相关的链接,才能发送数据,类似于"打电话"
-
!!TCP通信严格区分客户端,服务端!!
2.5.2 tcp网络程序—客户端
-
目标
-
1、tcp客户端构建流程
- tcp客户端要比服务器端简单很多,tcp和服务端建立连接后,直接发送数据;
-
2、实现步骤
- (1)导入socket模块;
- (2)创建socket套接字;
- (3)建立tcp连接,与服务端建立连接;
- (4)开始发送数据(到服务端);
- (5)关闭socket套接字;
-
3、核心方法 -
4、代码实现
2.5.3 tcp服务器端
2.5.4 tcp服务端增强
2.5.5 文件下载器
- 1、功能分析
- 2、代码实现
- 客户端代码
- 服务端代码
- 增强版:try捕获错误,except处理错误,加一个while True实现多客户端连接;
2.5.6 tcp的3次握手
- 目标
- 分析:如果没有第三个包?
- 从服务端来看,会一直发送第二个包,服务器性能下降,造成资源浪费;
- 客户端没有进行确认,可能会开始重新建立连接,重新发送SYN请求;
2.5.7 tcp的4次挥手
- 目标
- TCP四次挥手是指在断开连接时发送的4个数据包,确保断开连接;
- 为什么等待2MSL?
- 防止第4个包发送失败,此时服务器会重新发送第4个包;需要主动发起一方等待;一般是30s到2分钟;
- 之前总是端口被占用,虽然关闭了端口8080,但是要等2MSL;
- 可以通过设置套接字地址重用
*
2.6 浏览器访问服务器的过程
2.6.1 IP地址与域名
- 1、IP地址
- IP全称(Internet Protocal Address,互联网协议地址,网络地址)。IP地址与身份证一样,具有唯一性;
- 网络不分国界,全球范围所有主机,都一个IP地址,不能相同;
- IP地址分为IPv4和IPv6,IP地址由32位二进制构成,分成四段,每段8位二进制;
- “点分十进制”表示,每一段取值范围0-255;
特殊的IP地址:127.0.0.1,每台电脑都有,是电脑内部的IP地址;
127.0.0.1代表自己的内部IP地址,都是自己访问自己,外网无法访问;
- 2、域名
- 域名概念
- Domain Name,DN,一个网址,特殊的名字;**域名是IP地址的外号,**方便记忆;
- 域名构成
- 由字母、数字、中划线(-),长度不超过255个字符;
- 例如
www.sina.com.cn`` www.baidu.com ``www.hao123.com 其中, .com称为顶级域名 - 常见的顶级域名
2.6.2 DNS及浏览器请求过程
-
目标
-
1、DNS服务器
- DNS(Domain Name System域名解析系统),主要用于**将域名转为对应的IP地址,**DNS是一台运行在互联网上服务器;
- DNS服务器可以看做一个通讯录,通过域名找IP地址;
-
电脑之间不能识别域名,只识别IP地址 -
2、本地DNS
- hosts是本地的DNS,DNS就是IP地址与域名的对应关系表;
- hosts文件是隐藏文件、系统文件,没有拓展名的文件;
-
3、浏览器请求的基本流程如下:
2.7 HTTP协议
- 目标
- 知道HTTP协议为了实现浏览器和服务器之间的通信;
- 了解HTTP协议组成和作用;
2.7.1 HTTP协议概述
-
1、HTTP协议简介
- 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准,设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法;
- HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器,网络爬虫或者其他工具,客户端发起一个到服务器上指定端口(默认端口80)的HTTP请求;
- 超文本传输协议是一种应用层协议;
-
2、应用层 -
3、请求request-响应response模式 -
4、小结
2.7.2 HTTP协议格式查看
2.7.3 HTTP请求报文协议分析
2.7.4 HTTP响应报文协议分析
-
(2)响应头
-
(3)空行
-
(4)响应主体
-
响应报文格式总结 -
小结—响应协议
-
(1)响应行
-
协议及版本 状态码 状态描述
常见状态码:
200 一切正常
404 客户端请求的资源不存在
302 重定向
-
(2)响应头
-
(3)响应空行
-
(4)响应主体
2.7.5 长连接和短连接
- 2、TCP短连接
- 3、TCP长连接通信过程
- 4、TCP长/短连接的优点和缺点
- 小结!!
2.8 附录
2.8.1 SOCKET设置
2.8.2 TCP注意点
|