python爬虫基础入门理论篇(下)

本文详细介绍了网络协议的基础知识,包括OSI七层模型和TCP/IP模型,重点讲解了HTTP协议,包括其版本、请求方法和响应状态码。此外,还解析了HTTP数据流的传输过程,从宏观和微观层面分析了从浏览器请求到服务器响应的完整步骤,包括TCP的三次握手和四次挥手过程。
摘要由CSDN通过智能技术生成

网络基础

2.1.网络协议

2.1.1什么是协议?

协议可以理解为“规则”,是数据传输和数据的解释规则,下图是简单图解

image.png

2.1.2.OSI七层参考模型

image.png

  1. 物理层:可以理解为我们的网线,进行比特流的传输
  2. 数据链路层:可以理解为我们电脑的网卡,网卡的驱动可以提供介质访问、链路管理等
  3. 网络层:网卡可以设置ip地址,进行网络寻址和路由选择
  4. 传输层:可以想象成电脑里面的应用,建立主机端到端连接
  5. 会话层:建立、维护和管理会话
  6. 表示层:处理数据格式、数据加密等
  7. 应用层:提供应用程序间的通信

示例:以小明和小红利用qq软件发消息来再次讲解下osi7层模型

小明在qq软件里面给小红发了一个“hello”

数据封装

  • 小明_应用层:对小明发送的hello数据,加上应用层的报头:应用层的数据协议单元
  • 小明_表示层:并不关心上一层的数据格式,把应用层整体的数据进行一个封装,加上表示层的数据头
  • 小明_会话层:对上一层数据加上会话层报头并进行封装
  • 小明_传输层:对上一层数据加上传输层报头并进行封装
  • 小明_网络层:对上一层数据加上网络层报头并进行封装
  • 小明_数据链路层:对上一层数据加上数据链路层报头并进行封装;同时还要对网络层的数据加上数据链路层报尾,形成最终的传输数据
  • 小明_物理层:发送给交换机

交换机:发送给路由器

路由器:发送给小红的物理层

数据解封装

  • 小红_物理层:拦截小明的传输的数据,递交给数据链路层
  • 小红_数据链路层:丢掉小明数据的数据帧的头部,进行数据校验,数据没有问题是给小红的并且数据是完整的,将数据递交给网络层
  • 小红_网络层:同数据链路层,进行解封装,并传递给上一层
  • 小红_传输层:同数据链路层,进行解封装,并传递给上一层
  • 小红_会话层:同数据链路层,进行解封装,并传递给上一层
  • 小红_表示层:同数据链路层,进行解封装,并传递给上一层
  • 小红_应用层:同数据链路层,进行解封装,小红看到“hello”

image.png

2.1.3.TCP/IP模型

**TCP/IP协议栈,**TCP/IP协议继承ISO模型网上有的说是四层有的说是五层,四层的是将物理层没算进去,到底记哪一个,这个不冲突,都可以。

image.png

图示tcp/ip相比较iso少了表示层、会话层

image.png

TCP/IP各层实现的协议

  • 应用层:

  • **HTTP:**超文本传输协议,基于TCP,使用80号端口,是用于www服务器传输超文本到本地浏览器的传输协议

  • **SMTP:**简单邮件传输协议,基于TCP,使用25号端口,是一组用于由源地址到目的地址传送邮件的规则,用来控制信件的发送、中转;比如QQ邮箱,用的就是这个协议

  • **FTP:**文件传输协议,基于TCP,一般上传下载用FTP服务,数据端口是20号,控制端口是21号

  • **TELNET:**远程登录协议,基于TCP,使用23号端口,是Internet远程登录服务的标准协议和主要方式。为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上上使用telnet程序连接到服务器。使用明码传送,保密性差、简单方便

  • **DNS:**域名解析,基于UDP,使用53号端口,提供域名到IP地址之间的转换

  • **SSH:**安全外壳协议,基于TCP,使用22号端口,为建立在应用层和传输层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议

  • 传输层: **TCP:**传输控制协议。一种面向连接的、可靠的、基于字节流的传输层协议 **UDP:**用户数据报协议。一种面向无连接的通讯协议,不可靠的、基于报文的传输层通信协议 **SCTP:**流量传输控制协议。一种面向连接的流传输协议;可以看成TCP的升级版 **MPTCP:**多路径传输控制协议。TCP的多路径版本。SCTP虽然在首发两端有多条路径,但实际只是使用一条路径传输,当该条路径出现故障时,不需要断开连接,而是转移到其他路径。MPTCP真正意义上实现了多路径并行传输,在连接建立阶段,建立多条路径,然后使用多条路径同时传输数据

  • 网络层: **IP:**Internet协议。通过路由选择将下一条IP封装后交给接口层。IP数据报是无连接服务 **ICMP:**Internet控制报文协议。是对网络层的补充。用于在P主机、路由器之间传递控制消息,检测网络通不通、主机是否可达、路由是否可用等网络本身的消息;cmd窗口ping地址就是用的这个协议 **ARP:**地址解析协议。通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行;常见于交换机路由器 **RARP:**反向地址解析协议对于新手小白想更轻松的学好Python基础,Python爬虫,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源,联系我魏X: 762459510 【教程/工具/方法/解疑】

2.2.HTTP协议详解

2.2.1.HTTP

HTTP协议,又称之为超文本传输协议,是互联网上应用最为广泛的一种网络协议,它是基于TCP的应用层协议;

是客户端和服务端进行通信的一种规则,它的模式非常简单,就是客户端发起请求,服务端响应请求。

2.2.2.版本分布

  • HTTP最早于1991年发布,是0.9版,不过目前该版本已不再用
  • HTTP/1.0,于1996年5月发布,引入了多种功能,至今仍在使用当中
  • HTTP/1.1,于1997年1月发布,持久连接被默认采用,是目前最流行的版本
  • HTTP/2,于2015年5月发布,引入了服务器推送等多种功能,是目前最新的版本

2.2.3.HTTP请求

  • 请求行:包含请求方法、请求地址和HTTP协议版本
  • 消息报头:包含一系列的键值对
  • 请求正文(可选):注意和消息报头之间有一个空行

image.png

image.png

2.2.4.HTTP请求方法

  • **GET:**从服务器获取指定(请求地址)的资源的信息,它通常只用于读取数据,就像数据库查询一样,不会对资源进行修改
  • **POST:**向指定资源提交数据(比如提交表单,上传文件),请求服务器进行处理。数据被包含在请求正文中,这个请求可能会创建新的资源或更新现有的资源
  • **PUT:**通过指定资源的唯一标识(在服务器上的具体存放位置),请求服务器创建或更新资源
  • **DELETE:**请求服务器删除指定资源
  • **HEAD:**与GET方法类似,从服务器获取资源信息,和GET方法不同的是,HEAD不含有呈现数据,仅仅是HTTP头信息。HEAD的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获得资源的元信息(或元数据)
  • **OPTIONS:**该方法可使服务器传回资源所支持的所有HTTP请求方法;简单理解就是查看服务器支持哪些HTTP请求方法

2.2.5.HTTP响应

  • 状态行:包含HTTP协议版本、状态码和状态描述,以空格分隔
  • 响应头:即消息报头,包含一系列的键值对
  • 响应正文:返回内容,注意和响应头之间有一个空行

image.png

image.png

image.png

2.2.6.HTTP响应状态码

  • 1XX 消息:请求已被服务接收,继续处理
  • 2XX 成功:请求已成功被服务器接收、理解、并接受 200:OK 201:Created 已创建 202:Accepted 接收 203:Non-Authoritative Information 非认证信息 204:No Content 无内容
  • 3XX 重定向:需要后续操作才能完成这一请求 301:Moved Permanently 请求永久重定向 302:Moved Temorarily 请求临时重定向 304:Not Modified 文件未修改,可以直接使用缓存的文件 305:Use Proxy 使用代理
  • 4XX 请求错误:请求含有此法错误或者无法被执行 400:Bad Request 由于客户端请求有语法错误,不能被服务器所理解 401:Unauthorized 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用 403:Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因 404:Not Found 请求的资源不存在,例如,输入错误的URL
  • 5XX 服务器错误:服务器在处理某个正确请求时发生错误 500:Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求 503:Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器肯能会恢复正常 504:Gateway Time-out 网关超时

2.3.解析HTTP数据流的传输过程

以一个经典面试题作为缩影进行讲解:

请简述:从客户端打开浏览器到服务器返回网页,中间的过程

2.3.1.宏观解析

1)在一个客户端上,打开浏览器,在浏览器的地址栏中,输入www.baidu.com,访问百度

2)在你敲入网址并按下回车之后,将会发生以下的事情:浏览器先尝试从Host文件中获取http://www.baidu.com/对应的IP地址,如果能获取到则直接使用hosts文件的解析结果;host文件在本地的C:\Windows\System32\drivers\etc目录下

image.png

image.png

3)如果Host文件中找不到,就会使用DNS协议来获取IP。在DNS协议中,PC会向你本地DNS求助,请求DNS服务器之后,得到百度的IP

image.png

4)接下来浏览器会请求获得的Ip地址对应的Web服务器,Web服务器接收到客户的请求并响应处理,将客户请求的内容返回给客户端浏览器

5)如果服务器正常则给你回个“OK”,状态码为200并将你要的数据传给你。你收到服务器的回复,是HTML形式的文本。浏览器必须能够理解文本的内容,并快速的渲染到屏幕上,渲染出来后,你就能看到百度的首页了

2.3.2.微观解析

**1)域名解析:**同宏观解析,通过本地host文件查找;找不到,PC请求本地DNS帮忙;最后得到域名的IP

2)建立连接:

TCP三次握手:双向连接确认过程

  • step-1 监听:首先client客户端和server服务端都处于LISTEN监听状态

  • step-2 第一次握手(客户端): 客户端告诉服务端我要访问你,完成第一次握手; 详解为:客户端会发送一个TCP的SYN,并且标志位为1的这样一个数据包;同时指明客户端要连接服务器的端口;发送完毕后,客户端进入SYN_SYNSEND的状态;并完成第一次握手。对于新手小白想更轻松的学好Python基础,Python爬虫,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源,联系我魏X: 762459510 【教程/工具/方法/解疑】

  • step-3 第二次握手(服务端): 服务端告诉客户端我收到了你的SYN数据包,你的内容为SYN=1,并且返回一个ACK=1的数据包,和客户端的SYN=1一并打包发给客户端; 同时服务端由LISTEN状态变成SYN_RCVD状态;完成第二次握手

  • step-4 客户端发送ACK给服务端: 客户端再次访问服务端,并发送ACK=1确认数据包,跟服务端确认是否一致 发送完毕后客户端进入ESTABLISHED状态

  • step-5 第三次握手(服务端):

  • 服务端收到客户端发过来的ACK=1数据包,确认无误后,同样进入ESTABLISHED状态;

  • 完成第三次握手

image.png

**3)发送HTTP请求:**同宏观解析,客户端发送get或post请求;服务器正常给你返回200,OK,以及返回你要的html文本;客户端对服务端给的heml文本进行解析、渲染、展示

4)断开连接:

TCP四次挥手:双向断开确认

  • step-1 第一次挥手(客户端): 客户端告诉服务端请求我已经发送完毕了,我想要跟你断开连接了,没有数据可以发送了,但是呢服务端你还能向我发送数据,我还能接收数据; 详解为:客户端会发送一个TCP的FIN,并且标志位为1的这样一个数据包;告诉服务端我已经没有数据可以发送了,但是我还能接收数据;发送完毕后,客户端进入FIN_WAIT_1的状态;并完成第一次挥手

  • step-2 第二次挥手(服务端): 服务端确认了客户端的FIN数据包,并回一个ACK=1的数据包,表明我接收到了客户端关闭连接的请求,但是我这边还没有准备好关闭整个连接; 同时服务端由进入CLOSE_WAIT状态;完成第二次握手

  • step-3 客户端接收ACK等待服务端关闭连接: 客户端接收到服务端发过来的ACK=1数据包,客户端状态变更为FIN_WAIT_2状态;并等待服务端关闭连接

  • step-4 第三次挥手(服务端):

  • 服务端向客户端发送一个FIN=1的数据包,表明我可以关闭连接了,响应数据已经都发完了。

  • 服务端状态变更为LAST_ACK;等待客户端发送ACK确认包

  • step-5 第四次挥手(客户端): 客户端收到服务端可以关闭的FIN数据包后,发送ACK=1包给服务端;告诉服务端,我这边没有问题,你关闭连接吧 客户端状态变更为TIME_WAIT;

  • step-6** 服务端关闭连接** : 服务端接收到客户端发送的ACK=1确认包后,关闭连接;服务端状态变更为CLOSED

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值