【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp

2 python网络基础及协议udp/tcp

【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第1张图片

2.1 虚拟环境

  • 目标
    • 虚拟环境的作用;
    • 创建虚拟环境;
    • 能够进入/退出虚拟环境;
    • 为pycharm配置虚拟环境;
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第2张图片
  • 虚拟环境常用命令
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第3张图片
  • 注意!ctrl+H可以显示出隐藏文件和文件夹

2.2 网络通信概述

  • 网络概念(简化)

    • 一些相互连接、以共享资源为目的的计算机的集合。
  • 网络编程

    • 让不同的电脑上的软件能够进行数据传递;
  • 学习网络的目的

    • 能够编写基于网络通信的软件;
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第4张图片

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不可以用;
        【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第5张图片
  • IP地址分类

    • IP地址通常指的是:IPV4(IP协议的第4个版本)
    • IP地址 = 网络号+主机号
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第6张图片
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第7张图片
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第8张图片
  • 私有IP

    • 国际规定有一部分IP地址用于局域网使用,属于私网IP不在公网中使用,范围是:

【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第9张图片
【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第10张图片

  • 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**命令查看网络的连通性;
  • 虚拟机网卡设置
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第11张图片

  • ifconfig
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第12张图片

  • ping
    image-20220428200934197

2.2.3 端口

  • 目标

    • 端口分为知名端口、动态端口两类;
    • 80、21、20知名端口的作用;
  • 端口概念

    • 端口认为是设备与外界通讯交流的出口,端口可分为虚拟端口物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机的80端口、21端口、23端口等。
    • 端口像一个房子的门,出入这间房子的必经之路
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第13张图片
  • 端口号

    • 端口是通过端口号来标记的,端口号只有整数,范围是从0到65535;
  • 端口分配

    • 1、知名端口(Well Known Ports)
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第14张图片
  • 一般情况下如果一个程序使用知名端口需要root权限;

  • 2、动态端口(Dynamic Ports)

    • **动态端口范围是从1024到65535;**称为动态端口,是因为一般不固定分配某种服务,而是动态分配;
    • **动态分配:**当一个系统程序或应用程序需要网络通信时,向主机申请一个端口,主机从可用的端口号中分配一个供它使用;当程序关闭时,同时就释放了所占用的端口号;
  • 查看端口netstat -an查看端口状态
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第15张图片
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第16张图片
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第17张图片

  • 小结

    • IP地址+端口号区分不同主机的不同服务;
    • 需要注意的是, 端⼝并不是⼀⼀对应的。 ⽐如你的电脑作为客户机访问⼀台WWW服务器时,WWW服务器使⽤“80”端⼝与你的电脑通信, 但你的电脑则可能使⽤ “3457” 这样的端⼝。
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第18张图片

2.2.4 网络传输方式

  • 目标

    • 面向连接面向无连接的区别;
    • UDP网络传输方式的特点;
  • 网络传输方式

    • (1)面向有连接型;

      • 发送数据前,需要在收发主机之间建立一条通信线路,因此在面向有连接方式,必须在通信传输前后,专门建立和断开连接; image-20220428204709041
      • TCP提供面向连接的通信服务,只有在确认通信对端存在时才会收发数据,可以控制通信流量的浪费。TCP提供了数据传输时的各种控制功能,丢包时可以进行重发控制,可以将次序乱掉的分包进行顺序控制【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第19张图片
    • (2)面向无连接型;
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第20张图片

      • 不要求建立和断开连接,发送端可任意时刻自由发送数据,接收端也不止何时何地会收到数据,因此,面向无连接,接收端需要时常确认是否收到了数据;
      • 面向无连接通信不需要确认对端是否存在,即使接收端不存在或者无法接收数据,发送端也能将数据发送出去;
        【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第21张图片【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第22张图片
    • TCP/UDP两者区别
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第23张图片

2.3 Socket

  • 目标:
    • socket创建步骤;
    • 创建UDP socket套接字创建时需要指定socket.SOCK_DGRAM
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第24张图片
  • 什么是socket?
    • socket(简称“套接字”),是支持TCP/UDP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,通信双方的一种约定,用套接字中的相关函数来完成通信过程。
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第25张图片
  • 创建socket
    • **socket起源于Unix,**而Unix/Linux基本哲学之一就是“一切皆文件/对象”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket一种特殊的文件,一些socket类就是对其进行操作(读写IO,打开,关闭)
      image-20220428211234404
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第26张图片
  • Socket对象(内建方法)
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第27张图片
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第28张图片

2.4 UDP

2.4.1 udp网络程序-发送数据

  • 目标
    • 使用**socketsendto**方法能够发送数据;
    • 使用**encode**方法能够对待发送数据进行编码;
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第29张图片
  • 实现步骤
    • 1、导入模块socket;
    • 2、创建socket套接字;
    • 3、发送数据;
    • 4、关闭套接字;
  • 核心方法
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第30张图片
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第31张图片
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第32张图片

2.4.2 udp网络程序-接收数据

  • 目标
    • 使用**socketrecvfrom方法能够接收数据;**
    • 使用**decode方法能够对接收到的数据解码;**
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第33张图片
  • 核心方法
    image-20220429144807020
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第34张图片
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第35张图片

2.4.3 python3编码转换

  • 目标

    • 使用**encode()decode()**对字符串编码和解码;
    • 编解码失败如何解决;
  • 编码和解码

    • 文本总是**Unicode,由str类型进行表示,二进制数据使用bytes进行表示,网络中数据的传输是以二进制(字节码)方式来进行,所以我们需要对Unicode字符串内容进行编码和解码才能达到数据传输的目的;**
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第36张图片
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第37张图片
  • GBK国标格式,包括汉字;UTF-8是万国码;

2.4.4 udp端口绑定(发送端)bind

  • 目标

    • 使用bind方法在发送端给套接字绑定端口;
  • udp网络程序,会变的端口号
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第38张图片

  • udp绑定信息

    • 绑定信息
      • 一般情况下,一台电脑上运行的网络程序有很多,为了不与其他网络程序占用同一个端口号,在编程中,udp的端口号一般不绑定;
      • 但是,如果是一个是服务端程序,需要绑定;
    • 核心方法

image-20220429154447848
【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第39张图片

  • 注意**!!!绑定的是自己的发送端的IP地址与端口,不是接收的别人的!!!**

2.4.5 udp端口绑定(接收端)bind

  • 目标

    • 使用bind方法在接收端给套接字绑定端口
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第40张图片
  • 实现思路

    • 使用bind()发送数据前绑定发送端主机的IP地址和端口
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第41张图片
  • 注意:始终都是在控制绑定自己的端口号!!
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第42张图片

2.4.6 udp广播

  • 目标
    • 知道广播的概念;
    • 使用UDP群发广播消息;
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第43张图片
  • 使用UDP方式发送广播
    • **广播地址(Broadcast Address)**是专门用于同时向网络中的所有工作站进行发送的一个地址,在使用TCP/IP协议的网络中,主机标识段host ID为全1的IP地址为广播地址;
    • IP地址网络字段和主机字段全为1就是地址:255.255.255.255

【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第44张图片

【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第45张图片

2.4.7 案例:udp聊天器

【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第46张图片
【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第47张图片

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、流程对比
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第48张图片
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第49张图片

  • 5、模型对比

    • udp通信模型
      • 在通信开始前,不需要建立相关的链接,只需要发送数据即可,类似于“写信”
        【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第50张图片
  • TCP通信模型

    • 在通信开始前,一定要先建立相关的链接,才能发送数据,类似于"打电话"
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第51张图片
  • !!TCP通信严格区分客户端,服务端!!

2.5.2 tcp网络程序—客户端

  • 目标

    • 编写tcp网络客户端程序,进行数据发送;
  • 1、tcp客户端构建流程

    • tcp客户端要比服务器端简单很多,tcp和服务端建立连接后,直接发送数据;
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第52张图片
  • 2、实现步骤

    • (1)导入socket模块;
    • (2)创建socket套接字;
    • (3)建立tcp连接,与服务端建立连接;
    • (4)开始发送数据(到服务端);
    • (5)关闭socket套接字;
  • 3、核心方法
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第53张图片

  • 4、代码实现
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第54张图片

2.5.3 tcp服务器端

  • 目标

    • 理解listen中的数值含义;
    • 编写tcp网络服务端程序,进行数据接收;
  • 1、tcp服务器

    • tcp服务器:和客户端建立连接后,接收/发送数据给客户端;
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第55张图片
  • 2、实现步骤

    • (1)创建socket套接字;
    • (2)bind绑定ip和port;
    • (3)listen使套接字变为可以被动链接;
    • (4)accept等待客户端的连接;
    • (5)recv/send接收发送数据;
  • 3、参考代码
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第56张图片

  • 在listen(128)之后,进入监听模式,服务器的套接字进入被动状态,不可以发送数据,等待客户端的连接发送数据;在有新的客户端连接后,会创建一个新的套接字,专门这针对于这一个客户端;
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第57张图片
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第58张图片

  • 返回两个数据,新的套接字和地址,可以和多个客户端创建不同的套接字;
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第59张图片

2.5.4 tcp服务端增强

  • 目标

    • 接收一个客户端发来的多条信息;
    • 接收多个客户端的连接;
  • 1、接收客户端发来的多条信息
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第60张图片

  • 2、允许多个客户端连接
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第61张图片

  • 3、代码实现
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第62张图片
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第63张图片

  • 连接的话,需要多线程操作,以后会将

  • 注意:目前代码必须等待第一个客户端断开后,第二个客户端才能有机会连接!

2.5.5 文件下载器

  • 1、功能分析
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第64张图片
  • 2、代码实现
    • 客户端代码
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第65张图片
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第66张图片
  • 服务端代码
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第67张图片
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第68张图片
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第69张图片
  • 增强版:try捕获错误,except处理错误,加一个while True实现多客户端连接;

2.5.6 tcp的3次握手

  • 目标
    • TCP3次握手是用于建立连接
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第70张图片
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第71张图片
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第72张图片
  • 分析:如果没有第三个包?
    • 从服务端来看,会一直发送第二个包,服务器性能下降,造成资源浪费;
    • 客户端没有进行确认,可能会开始重新建立连接,重新发送SYN请求;

【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第73张图片

  • 三次握手是指TCP建立连接的时候发送的三个数据包

2.5.7 tcp的4次挥手

  • 目标
    • TCP4次挥手是用于断开连接;
  • TCP四次挥手是指在断开连接时发送的4个数据包,确保断开连接;
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第74张图片
  • 为什么等待2MSL?
    • 防止第4个包发送失败,此时服务器会重新发送第4个包;需要主动发起一方等待;一般是30s到2分钟;
    • 之前总是端口被占用,虽然关闭了端口8080,但是要等2MSL;
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第75张图片
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第76张图片
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第77张图片
  • 可以通过设置套接字地址重用
    *image-20220505160055393
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第78张图片

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称为顶级域名
    • 常见的顶级域名
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第79张图片

2.6.2 DNS及浏览器请求过程

  • 目标

    • 知道浏览器访问网站的大致流程
  • 1、DNS服务器

    • DNS(Domain Name System域名解析系统),主要用于**将域名转为对应的IP地址,**DNS是一台运行在互联网上服务器;
    • DNS服务器可以看做一个通讯录,通过域名找IP地址;
  • 电脑之间不能识别域名,只识别IP地址

  • 2、本地DNS

    • hosts是本地的DNS,DNS就是IP地址与域名的对应关系表;
    • hosts文件是隐藏文件、系统文件,没有拓展名的文件;
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第80张图片
  • 3、浏览器请求的基本流程如下:
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第81张图片
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第82张图片

2.7 HTTP协议

  • 目标
    • 知道HTTP协议为了实现浏览器和服务器之间的通信;
    • 了解HTTP协议组成和作用;

2.7.1 HTTP协议概述

  • 1、HTTP协议简介

    • 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准,设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法;
    • HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器,网络爬虫或者其他工具,客户端发起一个到服务器上指定端口(默认端口80)的HTTP请求;
    • 超文本传输协议是一种应用层协议;
  • 2、应用层
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第83张图片

  • 3、请求request-响应response模式
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第84张图片
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第85张图片

  • 4、小结
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第86张图片

2.7.2 HTTP协议格式查看

  • 目标

    • 使用谷歌浏览器查看HTTP协议格式
  • 1、使用谷歌/火狐浏览器开发者工具分析通信过程和格式

    • 在web应用中,服务器把网页传给浏览器,是将网页的HTML代码发送给浏览器,浏览器解析显示出来,而浏览器和服务器之前的传输应用层协议就是HTTP;所以:
      • HTML是一种用来定义网页的文本;
      • HTTP是用来在网络上传输HTML文本的协议,用于浏览器和服务器的通信;
    • HTTP协议报文格式查看
      • windows和Linux平台F12调出开发者工具;
      • MAC选择视图->开发者工具;

【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第87张图片
【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第88张图片

2.7.3 HTTP请求报文协议分析

  • 目标

    • 知道请求报文包含请求行、请求头、空行、请求体
  • 1、请求协议的格式
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第89张图片

  • http请求包含四个部分:

    • 1、请求行(request-line);
    • 2、请求头(request-header);
    • 3、空行;
    • 4、请求数据(request-content),叫做请求内容或者请求主体;
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第90张图片
  • 注意:

    • GET方式,只有请求行、请求头、空行;
    • POST方式,请求行+请求头+空行+请求主体;
  • (1)请求行
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第91张图片

  • 请求行分为三个部分:请求方式+请求路径+协议版本

    • 其中,GET==请求方式,/model/list_father.php==请求路径,HTTP/1.1==协议版本号
  • 注意:

    • 1、请求行需要单独占一行,用来说明当前请求的最基本的信息;
    • 2、请求路径不包括域名;
    • 3、HTTP协议以前是1.0版本,现在是1.1版本;
  • (2)请求头

    • **请求头==**所有当前需要用到的协议项的集合;
    • **协议项==**浏览器在请求服务器的时候实现告诉服务器的一些信息或者事先的约定;
    • 常见的请求头:
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第92张图片
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第93张图片
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第94张图片
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第95张图片
  • (3)空行

    • 用来分离请求头和请求数据,请求头到此结束!!的标志!!
  • (4)请求数据

    • 只有post方式提交的时候,才有请求数据!
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第96张图片
  • 2、请求报文格式总结
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第97张图片

  • 3、通过网络调试助手模拟TCP服务器,接收request请求

  • 4、小结

    • 请求报文格式
      • (1)请求行
        • 请求方式 资源路径 协议及版本
      • (2)请求头
        • 协议项
        • 协议名:协议值
      • (3)请求空行
        • 分割请求头和请求的主体
      • (4)请求主体
        • 浏览器要发给服务端的内容
        • GET方式没有请求体,POST方式有请求体

2.7.4 HTTP响应报文协议分析

  • 目标

    • 响应报文包含响应行、响应头、空行、响应体;
    • 响应状态码404表示网址没有找到;
  • 1、响应协议:

  • **定义:**服务器向浏览器做出响应(反馈数据)时候的协议

  • 组成:响应行(状态行)+响应头+空行+响应主体(响应数据)
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第98张图片

    • (1)响应行:
      • 第一行HTTP/1.1 200 OK叫做响应行,分为3部分:协议版本号 状态码 状态描述

【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第99张图片
【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第100张图片
【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第101张图片
【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第102张图片
【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第103张图片
【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第104张图片

  • (2)响应头

    • 协议名:值
    • server:服务器主机信息
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第105张图片
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第106张图片
      【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第107张图片
  • (3)空行

    • 分割响应头与响应主体,响应头到此结束!!
  • (4)响应主体

    • 服务器反馈给浏览器的数据!
  • 响应报文格式总结
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第108张图片

  • 小结—响应协议

    • (1)响应行

      • 协议及版本 状态码 状态描述

        常见状态码:

        200 一切正常

        404 客户端请求的资源不存在

        302 重定向

    • (2)响应头

      • 协议项构成

        协议名:协议值

    • (3)响应空行

      • 分隔响应头和响应主体

    • (4)响应主体

      • 服务器响应给客户端的数据

2.7.5 长连接和短连接

  • 目标

    • 知道长连接和短连接的区别
  • 在HTTP/1.0中,默认使用短连接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接,如果客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源,如js文件、图像文件、CSS文件等;当浏览器每遇到这一个Web资源,都会建立一个HTTP会话;

【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第109张图片

  • 2、TCP短连接
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第110张图片
  • 3、TCP长连接通信过程
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第111张图片
  • 4、TCP长/短连接的优点和缺点
    image-20220505214022604
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第112张图片
  • 小结!!
    【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第113张图片

2.8 附录

2.8.1 SOCKET设置

【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第114张图片
【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第115张图片

2.8.2 TCP注意点

【黑马-python进阶】---学习笔记(5)---python网络基础及协议udp/tcp_第116张图片

你可能感兴趣的:(Python,python,网络,学习)