爬虫与网络基础理论

爬虫与网络基础理论

Yiuhang Chan

一.爬虫概念

概念

  • 网络爬虫也叫网络蜘蛛,特指一类自动批量下载网络资源的程序,这是一个比较口语化的定义。
  • 更加专业和全面对的定义是:网络爬虫是伪装成客户端与服务端进行数据交互的程序

作用

  1. 数据采集(重要)
    • 大数据监控,产品推荐
    • 大数据杀熟,某平台订酒店时间长了会贵一点
    • 灰产,内部买卖
  2. 搜索引擎
    • 百度,谷歌(比较少),主要还是页面存储
  3. 模拟操作
    • 测试机器人
    • 灌水机器人(快速刷屏)

种类

  1. 通用爬虫
    • 百度,谷歌
  2. 聚焦爬虫
    • 专门为某站点制作的
  3. 增量爬虫
    • 监控站点,一旦有更新就爬取(在线小说,漫画)
  4. 深网爬虫
    • 输入表单才能获取数据(登录账号密码之后才能获取)

爬虫开发的重难点

  1. 数据的获取

    • 伪装
  2. 采集的速度

    • 多爬虫
    • 分布式

二.网络与HTTP/HTTPS协议

网络类型(Network Types)

网络类型主要指的是不同的网络构建方式和范围:

更多关注于网络的物理或逻辑结构和地理范围。它们描述的是网络的“形状”和“大小”,以及设备间连接的物理或无线方式。

1. 本地区域网 (LAN - Local Area Network)

  • 定义:LAN是一个小范围内的网络,通常用于单个建筑或一组紧密相连的建筑。
  • 用途:用于连接个人电脑或工作站,以便于共享资源(如打印机)和交换信息。

2. 广域网 (WAN - Wide Area Network)

  • 定义:WAN覆盖广泛的地理区域,可以是城市、国家甚至跨国。
  • 用途:用于连接不同地理位置的LANs,允许不同地区的用户和组织之间交换数据。

芝加哥(Accounts Receivable)

  • 网络:使用IPv4。
  • 设备:包括iSeries A服务器,有一个IPv6地址(4321::54bc)和一个IPv4地址(10.1.1.1)。
  • IPv4路由器:连接iSeries A服务器和Internet。

达拉斯(Accounts Payable)

  • 网络:使用IPv6。
  • 设备:包括iSeries B服务器,有一个IPv6地址(9876::55cc)。
  • 客户端:连接到iSeries B服务器。
  • 2838 Ethernet adapter:表示连接设备使用的网络适配器。

中间部分

  • IPv4/6路由器:具有IPv4地址(10.1.2.1)和IPv6地址(9876::55bb),这表明它能够处理IPv4和IPv6的数据包。

连接

  • 绿色线:表示配置了一个隧道,它允许在IPv4和IPv6网络之间安全地传输数据。隧道的本地端点是芝加哥的IPv4地址(10.1.1.1),远程端点是达拉斯的IPv4地址(10.1.2.1),并且隧道的本地IPv6地址是芝加哥的IPv6地址(4321::54bc)。

图示展示了两个使用不同IP协议版本的网络之间的互联方式,并通过一个配置了隧道的路由器进行数据传输。这显示了在IPv4和IPv6共存环境中如何实现网络互操作性。

IPv4和IPv6是两种互联网协议版本,它们是互联网通信的基础。

IPv4(Internet Protocol version 4)

  • IPv4 是第四版的互联网协议,目前广泛使用于互联网中。
  • 它基于32位地址长度,这意味着它可以支持大约43亿个独特的IP地址。
  • IPv4地址通常以点分十进制形式表示,例如192.168.1.1。

IPv6(Internet Protocol version 6)

  • IPv6 是为了解决IPv4地址耗尽问题而设计的下一代互联网协议。
  • 它基于128位地址长度,这意味着它可以支持几乎无限数量的设备。
  • IPv6地址通常以冒号分隔的十六进制形式表示,例如2001:0db8:85a3:0000:0000:8a2e:0370:7334。

主要区别

  • 地址空间:IPv4的地址空间相对较小,而IPv6提供了更大的地址空间来满足互联网的增长需求。
  • 安全性:IPv6设计之初就考虑了安全性,包括IPsec(一种用于IP网络通信加密和认证的框架)作为标准部分,而IPv4中IPsec是可选的。
  • 配置:IPv6支持自动配置能力,设备可以自动分配IP地址,而IPv4通常需要手动分配或通过DHCP(动态主机配置协议)实现自动分配。
  • 数据包处理:IPv6简化了数据包头部结构,以提高处理速度和效率。
  • 移动性和多播:IPv6原生支持移动性和多播传输,而IPv4则需要额外的协议支持。

IPv4到IPv6的过渡是一个复杂的过程,因为它们不直接兼容。为了解决这个问题,实施了多种过渡技术,例如隧道和双栈策略,以便两种协议可以在同一网络内协同工作。

3. 城域网 (MAN - Metropolitan Area Network)

  • 定义:MAN是介于LAN和WAN之间的网络,通常覆盖一个城市。
  • 用途:常用于连接多个局域网,提供高速网络服务给整个城市

MAN连接了多个局域网(LAN - Local Area Network),每个LAN都通过一个网络处理引擎(NPE - Network Processing Engine)与MAN相连。

  1. 城域网(MAN):位于图中心,代表了城市或都市区域的网络。
  2. 局域网(LAN):分布在MAN周围,每个LAN可能代表一个不同的组织、办公室建筑或校园网络。
  3. 网络处理引擎(NPE):在每个LAN和MAN之间的连接点处,有一个标记为NPE的设备。这些设备负责处理进入和离开局域网的数据,可能执行数据路由、交换、安全和其他网络服务。

NPE(Network Processing Engine)通常指的是一种高性能的网络处理器,它被设计用来处理和转发数据包。在城域网(MAN - Metropolitan Area Network)的环境中,NPE的作用是尤为关键的,因为它可以处理高速网络流量,确保数据包的快速和有效传输。

在城域网中,NPE可以用于以下几个主要方面:

  1. 数据包转发:NPE负责在网络设备中高效地处理和转发数据包。由于城域网通常连接着多个局域网(LANs),NPE在处理大量跨网络流量时的性能至关重要。
  2. 路由决策:NPE可以进行复杂的路由计算,以确定数据包的最佳路径。这对于确保在城域网环境中数据传输的高效性和可靠性非常重要。
  3. 流量管理:在城域网中,NPE可能涉及流量整形、负载平衡和拥塞管理等任务,以优化网络性能和资源利用。
  4. 安全处理:NPE还可以执行一些安全相关的功能,比如入侵检测、防火墙功能和VPN支持。
  5. 质量服务(QoS):NPE可以帮助实施QoS策略,确保关键应用和服务得到优先的网络资源,保证服务质量。

在城域网这样的高速网络环境中,NPE的作用不仅仅局限于数据包的基本转发,它还涉及到整个网络性能和服务质量的维护和提升。随着网络技术的发展,NPE的功能和重要性只会继续增长。

4. 个人区域网 (PAN - Personal Area Network)

  • 定义:PAN是一个非常小的网络,用于连接个人设备,如手机、笔记本电脑和平板电脑。
  • 用途:用于个人设备间的数据传输,如通过蓝牙或Wi-Fi。

5. 无线局域网 (WLAN - Wireless Local Area Network)

  • 定义:WLAN是一种无线的局域网,使用无线数据连接来链接多个设备。
  • 用途:提供与LAN相似的功能,但无需物理连线,增加了移动性。

6. 虚拟私人网 (VPN - Virtual Private Network)

  • 定义:VPN是一种通过公共网络(如互联网)提供加密连接的网络技术。
  • 用途:允许远程用户安全地访问内部网络资源,常用于企业远程工作和数据保护。
  1. 互联网服务提供商(ISP):连接用户到互联网的公司或组织。

  2. 互联网:全球性的公共网络。

  3. 内部网(Intranet):一个私人网络,通常是公司或组织内部的网络,它包含了受保护的资源和服务。

  4. VPN连接:一个安全的连接,通过公共互联网从用户到内部网。

  5. 隧道:VPN连接创建了一条加密的“隧道”,它通过不安全的互联网传输数据。隧道保护了数据不被外部读取或干扰,即使数据在公共互联网上传输。

    在这个场景中,用户通过ISP连接到互联网,并通过VPN创建一个安全的隧道连接到其公司的内部网。这种方式允许远程用户安全地访问公司网络内部的资源,如同他们直接连接到公司的局域网(LAN)一样。这是远程工作和保护数据在不安全网络上传输的常见方式。

7. 企业私人网络 (EPN - Enterprise Private Network)

  • 定义:EPN是专为特定企业设计的私人网络,用于连接企业内部各部门和资源。
  • 用途:用于大型企业,确保数据安全性和网络管理的高效性。

远程工作者(Telecommuters)如何通过本地互联网服务提供商(Local ISP)连接到企业局域网(Enterprise LAN),并访问位于企业内部的资源:

  1. 远程工作人员(Telecommuters):流程开始于远程工作者。这些用户需要从家庭或远程办公地点通过其个人电脑接入企业网络。
  2. 本地ISP(Local ISP):远程工作者通过本地互联网服务提供商连接到互联网。本地ISP负责将用户的数据传输到互联网上,并且是用户通往互联网的桥梁。
  3. 互联网:一旦远程工作者的数据流通过本地ISP,它就进入了互联网,这是一个全球性的公共网络。
  4. 远程接入服务器(Remote Access Server):远程工作者通过互联网连接到企业的远程接入服务器。这通常涉及到建立一个虚拟私人网络(VPN)连接,它在用户和企业网络之间创建了一条加密的通道,确保数据传输的安全性。
  5. 企业局域网(Enterprise LAN):一旦远程工作者通过VPN连接成功,他们就可以访问企业局域网,就如同他们物理地处于企业的办公室内一样。
  6. 文件服务器(File Servers):在连接到企业LAN之后,远程工作者可以访问文件服务器,这些服务器存储了企业的共享文档和资源。
  7. 服务器农场(Server Farm):除了文件服务器,远程工作者还可能需要访问服务器农场中的应用服务器,这些服务器提供了企业运行所需的关键业务应用程序和数据处理服务。
  8. 第二层交换机(L2 Switch):LAN中的数据流通过第二层交换机,它负责在数据链路层转发数据帧到正确的目的地。
  9. 网关路由器(Gateway Router):如果远程工作者需要访问互联网上的资源,流量会经过企业的网关路由器。这台路由器也可能执行网络地址转换(NAT)和安全功能,如防火墙。
  10. 企业ISP(Enterprise ISP):最后,如果数据需要发送到企业外部的目的地,它将通过企业的互联网服务提供商转发出去。

8. 内容分发网络 (CDN - Content Delivery Network)

  • 定义:CDN是一组分布在多个地理位置的服务器,用于有效地传递互联网内容。
  • 用途:用于快速传送大量数据,常用于网页内容、视频流媒体等。

9. 云计算网络

  • 定义:这类网络是基于云计算技术,提供资源和服务的虚拟化网络。
  • 用途:支持各种云服务,如软件即服务(SaaS)、平台即服务(PaaS)和基础设施即服务(IaaS)。

云计算(Cloud Computing)

云计算是一种利用远程服务器网络(通常在互联网上)来存储、管理和处理数据的模式,而不是在本地计算机或服务器上。这种模型允许用户和企业使用互联网来访问更强大的计算资源和大规模存储设施。

特点

  • 集中式数据处理:数据处理和存储在中心化的数据中心进行。
  • 可扩展性:云服务提供动态扩展能力,根据需求增减资源。
  • 成本效益:用户通常按使用量付费,减少了前期投资和维护成本。
  • 全球访问:用户可以从世界任何地方通过互联网访问服务。

边缘计算(Edge Computing)

边缘计算则是数据在产生源头附近的网络边缘或设备上进行处理。这种模式旨在将计算任务从中心化的数据中心转移到网络的边缘,减少延迟,提高响应速度。

特点

  • 分布式数据处理:数据处理在离数据源更近的地方进行,如用户的设备或本地服务器上。
  • 降低延迟:通过在数据产生的地方进行处理,减少了数据传输到中心数据中心的需要,从而降低了延迟。
  • 带宽效率:减少了大量数据传输,节省了带宽,对于带宽受限的场景特别有用。
  • 实时处理:适用于需要即时反馈的应用,如自动驾驶车辆、工业自动化等。

云计算 vs 边缘计算

数据中心远近:云计算依赖远程数据中心,而边缘计算依赖近端处理。

延迟问题:云计算可能面临网络延迟问题,边缘计算则能提供更低延迟。

带宽需求:云计算可能需要更多的带宽来传输数据,边缘计算减少了跨网络的数据流量。

适用场景

  • 云计算适用于需要大量计算和存储资源,但对延迟要求不是特别高的场景。
  • 边缘计算适用于对实时分析和响应有严格要求的场景。

结合使用

云计算和边缘计算可以结合使用,形成云边协同的架构。在这种架构中,边缘计算负责实时的数据处理和决策,而云计算则负责深度分析和长期存储。这种模式可以最大化地利用两者的优势,满足不同的业务需求。

10.其它

  • 传感器网络(Sensor Networks):由许多分布式传感器组成,用于监测和记录物理环境的条件,并将收集的数据传输到一个中心位置。
  • 虚拟网络(Virtual Networks):通常建立在其他网络之上,通过软件定义网络(SDN)等技术实现。
  • 存储区域网络(SAN - Storage Area Network):连接存储设备和服务器的专用高速网络,允许服务器访问共享存储资源。SAN是一个高速的专用网络,连接存储设备与服务器,通常使用光纤通道(Fibre Channel)或iSCSI协议。

特点

性能高:SAN为服务器提供块级别的存储,可以实现高速数据传输。

可扩展性强:可以支持大量存储设备,适合大型企业。

灵活性:存储资源可以在SAN中被多个服务器共享。

适用场景

​ 数据中心

​ 大型数据库应用

​ 高性能计算环境

NAS(Network Attached Storage 网络附加存储):

​ NAS是一种专用的文件存储设备,它通过网络提供数据访问给网络上的其他设备。

特点

易于访问和共享:NAS通过标准的网络协议(如NFS、SMB/CIFS)提供文件级别的存储和访问,使得不同操作系统的用户可以共享数据。

配置简单:通常易于安装和配置,适合于需要文件共享的小型办公环境。

可扩展性:可以根据需要添加更多的存储设备。

适用场景

​ 文件共享, 小型企业的数据备份, 媒体服务器

DAS(直接附加存储 Direct Attached Storage)

​ DAS是直接连接到计算机的存储设备,例如内部或外部硬盘驱动器。

特点

成本低:相比NAS和SAN,DAS通常更便宜,因为它不需要额外的网络设备。

简单性:直接连接到服务器,不需要复杂的配置。

性能:由于是直接连接的,可以提供良好的数据传输速度。

适用场景

​ 个人计算机, 小型办公环境, 需要快速数据访问的应用

  • 集成服务数字网络(ISDN - Integrated Services Digital Network):早期的高速网络服务,提供语音和数据服务。

网络架构(Network Architectures)

架构模式则是指在这些网络中实现数据交换和处理的方法和设计:

关注于如何在网络中设计和组织资源、服务和数据流。它们描述的是网络内部数据和服务的组织和流动方式。

1. 客户端/服务器(C/S - Client/Server)

  • 定义:C/S架构中,客户端和服务器是两个独立的实体。客户端发送请求到服务器,服务器处理请求并返回数据。
  • 特点:客户端软件通常需要安装在用户的设备上,可以提供丰富的功能和良好的用户体验。服务器负责数据处理和存储。
  • 应用:常见于企业应用、多用户系统、网络游戏等领域。

2. 浏览器/服务器(B/S - Browser/Server)

  • 定义:B/S架构中,用户通过浏览器(作为客户端)来访问服务器上的资源和服务。
  • 特点:不需要在客户端安装特定的软件,只需一个浏览器即可访问服务。服务器处理后端逻辑和数据存储。
  • 应用:互联网网站、Web应用程序等。

3. 移动端/服务器(M/S - Mobile/Server)

  • 定义:M/S架构专注于移动设备作为客户端,与服务器进行交互。
  • 特点:适应了移动设备的特性,如触摸界面、定位服务和推送通知。服务器处理复杂的逻辑和数据存储。
  • 应用:移动应用程序,如社交媒体应用、移动电子商务应用等。

4. 对等网络(P2P - Peer-to-Peer)

  • 定义:在P2P架构中,每个节点既作为客户端又作为服务器,节点之间直接交换数据。
  • 特点:不依赖中心化的服务器,提高了系统的可扩展性和容错能力。
  • 应用:文件共享系统、加密货币网络、某些通信应用等。

5.微服务架构(Microservices Architecture)

  • 定义:微服务架构是一种将应用程序作为一组小服务开发的方法,每个服务在其自己的进程中运行,通常围绕业务能力构建。
  • 特点:服务之间通过轻量级的通信机制进行交互,每个服务独立部署,可在不同的环境中独立扩展。
  • 应用:现代云应用、大型企业级应用等。

6. 服务导向架构(SOA - Service-Oriented Architecture)

  • 定义:SOA是一种设计模式,其中应用程序的组件提供服务给其他组件,通过网络中的通信协议进行交互。
  • 特点:强调可重用的服务,服务之间通常是松耦合的。
  • 应用:企业级应用、系统集成等。

7. 网格计算(Grid Computing)

  • 定义:网格计算是一种分布式计算形式,它将来自不同域的计算资源连接起来,以达到共同的目标。
  • 特点:高度分布式,适合于大规模的数据处理和复杂计算任务。
  • 应用:科学研究、大规模模拟、数据分析等。

8. 雾计算(Fog Computing)

  • 定义:雾计算是一种分布式计算架构,它将计算、存储和网络服务扩展到网络的边缘。
  • 特点:减少了对中心数据中心的依赖,减少延迟,提高了数据处理的速度。
  • 应用:物联网(IoT)、实时数据分析、智能城市等。

总的来说,网络类型和架构模式是网络设计的两个不同层面。类型更侧重于网络的物理和逻辑布局,而架构则侧重于系统的内部设计和数据流动。两者相辅相成,共同构成完整的网络系统。

HTTP协议

背景知识:OSI模型

OSI模型,全称是“开放式系统互连参考模型”(Open Systems Interconnection Reference Model),是一个用于解释和标准化网络内不同计算机系统之间通信过程的概念模型。这个模型由国际标准化组织(ISO)在1980年代初期开发,目的是促进不同类型计算机系统之间的兼容性和标准化通信。

层面 功能
物理层(Physical Layer) 负责实际的物理连接,包括电缆、光纤、无线电频率等的传输媒介。
数据链路层(Data Link Layer) 负责在相邻节点之间的可靠连接,处理帧定界、物理地址寻址、流量控制等。
网络层(Network Layer) 负责在多个网络之间建立、维护和终止连接,包括路由选择、分组转发等。
传输层(Transport Layer) 负责在端到端的通信中保持数据的完整性,处理错误检测和恢复、数据传输顺序等。
会话层(Session Layer) 负责建立、管理和终止会话,控制数据交换的对话和同步。
表示层(Presentation Layer) 负责数据的表示、加密和压缩,确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
应用层(Application Layer) 为各种应用软件提供服务,包括电子邮件、文件传输和其他网络软件服务。

每一层都有其特定的功能,它们一起协作,确保从一个设备到另一个设备的数据传输是顺畅和高效的。虽然在实际的网络实现中,如因特网的TCP/IP模型更为普遍,但OSI模型仍然是理解网络通信非常重要的一个概念工具。

原因

计算机之间也是需要一种规则,保障之间信息的有效交流,这就是HTTP协议;

概念及特点

  • HTTP是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW: World Wide Web )服务器传输超文本本地浏览器的传送协议。

  • 目前互连网上90%的网络传输都是基于HTTP协议。

  • HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等);

    • 使用TCP通信协议的重要的原因是基于其面向连接的特点:

      TCP/IP(传输控制协议/网际协议)是一组用于控制网络通信的协议,并且是因特网的基础。它由两个主要的协议组成:TCP和IP。

      1. IP(网际协议):负责将数据包从发送方路由到接收方。IP提供了一种机制,可以识别发送和接收设备的唯一地址(即IP地址)。IP协议主要负责数据包的寻址和路由,确保数据能够在网络中正确地从一个点传送到另一个点。

      2. TCP(传输控制协议):在IP提供的基础上,TCP负责在两个终端之间建立可靠的连接,确保数据准确无误地传输。它通过分割数据为多个部分、确保每个部分都被正确接收,并且在必要时进行重传,来完成这一任务。TCP还负责控制数据传输的速率,防止网络拥塞。

      3. TCP/IP模型通常被划分为四层,每层都有其特定的功能:

        层面 功能
        应用层 直接为用户的应用程序(如浏览器、电子邮件客户端等)提供服务。
        传输层 包括TCP和UDP(用户数据报协议),负责提供端对端的通信。
        互联网层 主要包括IP协议,负责在多个网络之间传输数据包。
        网络接口层 包括用于实际网络连接的各种协议,负责数据在物理网络上的传输。

        TCP/IP模型由于其简洁性和高效性,在互联网的发展中起到了核心作用,是现代网络通信不可或缺的一部分。

HTTPS(安全超文本传输协议)

  1. 定义与用途
    • HTTPS是HTTP的安全版本,用于在不安全的网络上安全传输数据。
    • 它通过加密和认证确保数据传输的安全性和完整性。
  2. 加密机制
    • 传输层安全性(TLS)或安全套接层(SSL):HTTPS使用这些协议对数据进行加密。
    • 加密保护数据不被中间人攻击(MITM)窃听或篡改。
  3. 数字证书
    • HTTPS使用数字证书验证服务器的身份,确保用户正在与预期的服务器通信。
    • 数字证书由权威的证书颁发机构(CA)签发。
  4. 特点
    • 增加了安全层:相比HTTP,HTTPS提供了数据的机密性和完整性。
    • 性能开销:加密和解密过程需要额外的处理,可能会略微影响性能。

HTTP与HTTPS的比较

  • 安全性:HTTPS明显优于HTTP,因为它通过加密保护数据。
  • 端口:HTTP通常使用端口80,而HTTPS使用端口443。
  • 应用场景:对于需要保护数据安全的网站(如在线银行、电子商务等),强烈推荐使用HTTPS。

总之,HTTP和HTTPS都是实现网络通信的重要协议,但HTTPS在安全性方面提供了显著的优势。随着网络安全意识的提高,越来越多的网站和服务正在转向HTTPS。

三.HTTP协议的使用

HTTP请求流程

一次http请求的基本流程是,有客户端向服务端发起一次请求(request), 而服务器在接收到以后返回给客户端一个响应(response)。所以一次完整的http请求包含请求和响应两部分。

  1. 客户端打开连接:当在浏览器中输入一个URL或点击一个链接时,浏览器会向服务器发起一个HTTP请求。这通常开始于TCP的三次握手过程,建立客户端和服务器之间的连接。
  2. 发送HTTP请求:一旦TCP连接建立,客户端(如浏览器)就会通过这个连接发送一个HTTP请求。这个请求包含了请求行(如“GET /index.html HTTP/1.1”)、请求头(包含用户代理信息、接受的内容类型等)和(在POST请求中)一个请求体。
  3. 服务器处理请求:服务器接收到HTTP请求后,会根据请求的资源(如HTML文件、图像等)进行处理。
  4. 服务器响应:服务器处理完请求后,会回送一个HTTP响应。这个响应包含一个状态行(如“HTTP/1.1 200 OK”)、响应头(包含内容类型、长度等)和响应体(请求的数据)。
  5. 关闭连接:在交换完数据后,通常由客户端发起TCP的四次挥手过程来关闭TCP连接。

TCP三次握手(建立连接)

  1. SYN:客户端发送一个SYN(同步序列编号)标志的TCP包到服务器,以开始一个新的连接。
  2. SYN-ACK:服务器接收到SYN包后,回送一个包含SYN和ACK(确认字符)标志的TCP包以确认收到。
  3. ACK:客户端收到服务器的SYN-ACK包后,再发送一个ACK包作为响应,完成连接建立。

这个过程主要确保双方都准备好开始新的连接。

数据传输(正在连接)

一旦TCP连接建立,HTTP请求就可以通过这个连接发送了。

  1. HTTP请求:客户端通过建立好的TCP连接,发送一个HTTP请求到服务器。这个请求包含了请求方法(如GET或POST)、请求的资源(如网页)、以及其他必要的头信息。
  2. 服务器处理:服务器接收并处理这个请求,然后准备相应的HTTP响应。
  3. HTTP响应:服务器通过同一个TCP连接返回一个HTTP响应。响应通常包含状态码(如200 OK),响应头信息,以及请求的数据(如HTML文档)。

TCP四次挥手(关闭连接)

  1. FIN:当通信结束时,发起关闭的一方(通常是客户端)会发送一个FIN(结束)标志的TCP包,表明它已经没有数据发送了。
  2. ACK:接收方接到FIN包后,会回送一个ACK包作为确认。
  3. FIN:接着,接收方发送一个带有FIN标志的TCP包,以表明它也没有数据发送了。
  4. ACK:最后,发起关闭的一方收到FIN后,再发送一个ACK包作为响应。一段时间后,连接被完全关闭。

这个过程确保了双方都能够完成所有数据的发送和接收,从而安全地关闭连接。

URL

发送http请求时,通过URL对网络资源进行定位。

URL(Uniform Resource Locator),中文叫统一资源定位符。是用来标识某一处资源的地址。也即是我们常说的网址。以下面这个URL为例,普通URL的各部分组成:

  1. 协议

    • 定义:指定了如何通过网络访问资源的方法或规则。

    • 常见例子http, https。这决定了与服务器交互时使用的规则和标准。

  2. 域名

    • 定义:是互联网上一个服务器或一组服务器的易于记忆的地址。

    • 作用:它被解析成一个IP地址,这是定位服务器的实际数字标识。

    • 例子example.com

  3. 端口(默认80)

    • 定义:一个网络地址的一部分,用于标识特定的进程或服务。

    • 默认值

      • 对于HTTP,端口默认是80。
      • 对于HTTPS,端口默认是443。
    • 说明:在URL中通常省略默认端口。

    • 端口在网络通信中是一个重要的概念,它们用于区分一台计算机上的不同服务或进程。在TCP/IP协议中,一个端口被定义为一个数字,这个数字用来区分主机上的不同服务或应用程序。每个TCP或UDP包都有特定的端口号,以确保数据传输的正确性。

      端口分类

      ​ 端口号的范围从0到65535,根据用途不同,端口被划分为以下几类:

      • 系统或保留端口(0-1023):
        • 这些是众所周知的端口号,通常由系统或者特定的应用程序使用。
        • 例如,HTTP服务通常使用端口80,HTTPS服务使用端口443,FTP使用端口21。
      • 用户或注册端口(1024-49151):
        • 这些端口可由用户或应用程序使用,不需要系统级权限。
        • 很多著名的应用程序会使用这一范围内的端口号。
      • 动态或私有端口(49152-65535):
        • 这些端口一般不用于特定服务,而是动态分配给客户端临时通信。

      常见服务的标准端口

      • MySQL:默认端口为3306。
      • MongoDB:默认端口为27017。
      • REST API:没有固定端口。REST API是一种设计风格,而不是应用程序或服务。它可以运行在任何端口上,通常选择的是80或443(如果使用HTTPS)。

      端口的重要性

      • 安全性:一些端口因为常用于特定服务而更受攻击者关注,例如80和443。因此,网络安全措施经常涉及这些端口的监控和保护。
      • 配置和管理:正确配置端口对于确保网络服务正确运行至关重要。例如,在部署数据库或API时,必须确保端口设置正确,且不与其他服务冲突。

      结论

      端口是网络通信的基本组成部分,正确理解和使用端口对于维护网络服务的健康和安全非常重要。每种服务都可能有一个或多个默认端口,但这些可以根据具体需求或安全考虑进行更改。

  4. 路径

    • 定义:表示服务器上资源的具体位置。

    • 结构:通常由一系列的斜杠(/)分隔的部分组成。

    • 例子:在URL http://example.com/photos/image.jpg 中,/photos/image.jpg 是路径,指向服务器上的特定图片。

  5. 参数

    • 定义:用于提供额外信息以完成对资源的请求。

    • 结构:通常以问号(?)开始,后跟一系列的“键-值”对,每对之间用和号(&)分隔。

    • 例子:在URL http://example.com/index.html?page=2&sort=asc 中,page=2&sort=asc 是参数,用于指示页面编号和排序方式。

HTTP请求格式 (请求行,请求头,空行,请求体)

客户端发送一个HTTP请求到服务器的请求消息包括以下部分:请求行,请求头,空行和请求数据。

一旦TCP连接建立,HTTP请求就发生在这个连接上。HTTP请求是在应用层发生的,HTTP请求依赖于TCP连接。在HTTP请求发送之前,TCP三次握手必须先完成,以确保数据传输的可靠性,具体分为以下几个部分:

  1. 请求行

    ​ 包括HTTP方法(如GET, POST等)、请求的资源路径和HTTP版本,例如,GET /index.html HTTP/1.1

    ​ HTTP请求方法定义了客户端与服务器交互的不同方式。每种方法都有其特定用途。以下是HTTP 1.0和HTTP 1.1中定义的请求方法及其描述的整理:

    HTTP 1.0 定义的请求方法

    • GET
      • 描述:请求指定的页面信息,并返回实体主体。
      • 特点:URL中添加请求参数,显示在地址栏;请求字符串限制1024个字节;主要用于获取数据。
    • POST
      • 描述:向指定资源提交数据进行处理请求(如提交表单或上传文件)。数据包含在请求体中。可能导致新资源的建立和/或已有资源的修改。
      • 特点:没有大小限制;相对于GET更安全,因为数据不会显示在URL中。
    • HEAD
      • 描述:类似于GET,但服务器返回的响应中不包含实体的主体部分。用于获取报头。
      • 特点:常用于验证资源是否存在,以及获取资源的元数据。

    HTTP 1.1 新增的请求方法

    • OPTIONS
      • 描述:允许客户端查看服务器的性能。
      • 特点:用于客户端确定服务器对特定资源支持的方法。
    • PUT
      • 描述:向指定资源位置上传其最新内容,通常用于更新内容。
      • 特点:替换所有当前表示的内容。
    • DELETE
      • 描述:请求服务器删除指定的资源。
      • 特点:用于删除资源。
    • TRACE
      • 描述:回显服务器收到的请求,主要用于测试或诊断。
      • 特点:用于诊断信息。
    • CONNECT
      • 描述:预留给能够将连接改为管道方式的代理服务器。
      • 特点:用于代理服务器。

    注意事项

    • 方法名称是区分大小写的。
    • 当资源不支持某个方法时,服务器应返回状态码405(Method Not Allowed);当服务器不认识或不支持某个方法时,应返回状态码501(Not Implemented)。
    • HTTP服务器至少应实现GET和HEAD/POST方法,其他方法是可选的。服务器还可以支持扩展的自定义方法。

    总的来说,不同的HTTP请求方法支持不同的操作,选择适当的方法取决于执行的操作和所需的结果。GET和POST是最常用的两种方法,分别用于获取和提交数据。

  2. 请求头:包含关于请求的附加信息,如用户代理、接受类型等。由多个头部字段组成,每个字段包含一个名称和一个值,用冒号(:)分隔。请求头提供了关于请求的附加信息,例如客户端信息、所需内容类型等。例如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Host: www.baidu.com	请求的目标主机和端口号(如果非默认端口)
    User-Agent: Mozilla/5.0 (Windows NT 10.0; ...) 发出请求的浏览器或其他客户端的标识
    Referer: http://www.example.com/index.html 页面跳转处,指出产生请求的页面URL
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 客户端能够接收的内容类型
    Accept-Language: en-US,en;q=0.5 用户希望优先接收的语言和地区
    Accept-Encoding: gzip, deflate, br 客户端支持的内容编码(如压缩算法)
    Accept-Charset: utf-8, iso-8859-1;q=0.5 可接受的应答的字符集
    Connection: keep-alive 控制选项,如是否保持连接持续
    Cache-Control: max-age=0 关于缓存的指令
    Cookie: BAIDUID=... 包含服务器之前发送到用户浏览器的Cookie
    Content-Length: 348 发送给HTTP服务器数据的长度
    Content-Type: application/json 具体请求的媒体类型
    Content-Range: bytes 21010-47021/47022 响应资源的范围
    Cache-Control: no-cache 指定请求和响应遵循的缓存机制

    每次HTTP请求的头部可能会有所不同,这取决于发出请求的客户端、用户的配置、网站的要求等多种因素。

    如果想查看一个具体网站(比如百度官网)的HTTP请求头,可以使用浏览器的开发者工具来查看。可以通过右键点击网页并选择“检查”或者使用F12键来打开开发者工具,然后切换到“网络”选项卡,查看具体的请求详情。

  3. 空行:请求头和请求体之间的一个空行,标识请求头的结束。

  4. 请求体:不是所有的HTTP请求都有请求体,它主要用于像POST这样的方法,包含了发送给服务器的数据。例如,在表单提交时,请求体可能包含填写的表单数据。POST 方法适用于需要客户填写表单的场合。与请求体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length;

HTTP响应格式 (状态行,响应头,空行,响应正文)

  1. 状态行

​ 状态行由 HTTP 协议版本、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开;

  • 状态码 由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:

    • 1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;

    • 2xx:表示服务器已成功接收到请求并进行处理;

    • 3xx:表示服务器要求客户端重定向;

    • 4xx:表示客户端的请求有非法内容;

    • 5xx:表示服务器未能正常处理客户端的请求而出现意外错误;

  • 状态码描述文本有如下取值:

    • 200 OK:表示客户端请求成功;

    • 400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解;

    • 401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;

    • 403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;

    • 404 Not Found:请求的资源不存在,例如,输入了错误的URL;

    • 500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;

    • 503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;

  1. 响应头

​ 响应头的具体内容可以根据服务器的配置和特定请求而变化。

  • Allow服务器支持哪些请求方法(如GET、POST等)。
  • Date表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
  • Set-Cookie非常重要的header,用于把cookie发送到客户端浏览器,每一个写入cookie都会需要一个Set-Cookie。
  • Expires指定Response的过期时间,从而不再缓存它,重新从服务器获取,会更新缓存。过期之前使用本地缓存。降低服务器负载,缩短加载时间。
  • Content-Type WEB服务器告诉客户端自己响应的对急的类型和字符集。
  • Content-Encoding:内容编码格式
  1. 空行

响应头和响应体由空行连接。 最后一个响应头之后是一个空行,发送回车符和换行符,通知客户端以下不再有请响应头;

  1. 响应体

该响应消息的响应体是一个HTML文档。浏览器可以直接识别这个HTML文件。而我们访问的是一个JSP文件,响应回去的是一个HTML文件。说明服务器将该JSP翻译成了一个HTML,然后再响应给浏览器。

HTTP三点注意事项

  • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。HTTP/1.1开始支持持久连接(keep-alive),允许在一个连接上处理多个请求,但是是串行处理不是并行。
  • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。
  • HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 这种无状态的情况,并不适合我们进行业务需求,我们需要保持我们的登录状态,方便我们访问。通常使用cookies、session等技术在HTTP层之上维护状态。

四.会话技术

原因

HTTP是无状态的,那服务端怎么区分同一个用户的连续请求呢,这就用到了会话技术:Cookies和session。

概念

  • Cookie 有时也用其复数形式 Cookies。
    指某些网站为了辨别用户身份、进行 Session 跟踪而储存在用户本地终端上的数据(通常经过加密)。最新的规范是 RFC6265 。

  • Cookie 可以理解为一个凭证
    1.实际是由服务器发给客户端的特殊信息,
    2.这些信息以文本文件的方式存放在客户端,
    3.客户端每次向服务器发送请求的时候都会带上这些特殊的信息。
    服务器在接收到Cookie以后,会验证Cookie的信息,以此来辨别用户的身份。

Session中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个Session。这个词在各个领域都有在使用,而我们Web领域,一般使用的是其本义,一个浏览器窗口从打开到关闭这个期间。

Session的目的则是,在一个客户从打开浏览器到关闭浏览器这个期间内,发起的所有请求都可以被识别为同一个用户。

而实现的方式则是,在一个客户打开浏览器开始访问网站的时候,会生成一个Cookie,SessionID,这个ID每次的访问都会带上,而服务器会识别这个SessionID并且将与这个SessionID有关的数据保存在服务器上。由此来实现客户端的状态识别。因此Session是基于cookie的.

Session与Cookie相反,Session是存储在服务器上的数据,只由客户端传上来的SessionID来进行判定,所以相对于Cookie,Session的安全性更高。

一般SessionID会在浏览器被关闭时丢弃,或者服务器会验证Session的活跃程度,例如30分钟某一个SessionID都没有活跃,那么也会被识别为失效。

五.Proxy 代理

代理的概念

代理实际指代理服务器,它的功能是代替用户取获取网络信息,就像是一个网络信息的中转站。正常情况下请求一个网站时,我们发送请求给web服务器,然后web服务器把响应传回给我们;而如果设置了代理服务器,此时我们就不是直接给web服务器发送请求,而是先向代理服务器发送请求,然后代理服务器再把我们的请求转发给目标web服务器,接着web服务器把响应返回给代理服务器,之后代理服务器再把响应返回给我们。使用这样的访问方式,我们同样可以正常访问网页,但是中间经过了代理服务器后,web服务器就不能识别到我们本机的IP了,只能识别代理服务器的IP,这样我们本机的真实IP就被伪装起来了,这就是代理服务器的基本原理和作用。

代理的作用

代理具体有什么作用呢

  • 突破自身IP访问限制,访问一些自身IP不能访问的站点。
  • 访问一些单位或团体内部资源:比如使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。
  • 提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度。
  • 隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。对于爬虫来说,我们用代理就是为了隐藏自身IP,防止自身的IP被封锁。

代理对于爬虫的作用

由于爬虫爬取速度过快,在爬取过程中可能遇到同一个IP访问过于频繁的问题,此时网站就会让我们输入验证码登录或者直接封锁IP,这样会给爬取带来极大的不便。使用代理隐藏真实的IP,让服务器误以为是代理服务器在请求自己。这样在爬取过程中通过不断更换代理,就不会被封锁,可以达到很好的爬取效果。

  • 标题: 爬虫与网络基础理论
  • 作者: Yiuhang Chan
  • 创建于 : 2021-02-21 03:12:54
  • 更新于 : 2024-02-28 18:50:14
  • 链接: https://www.yiuhangblog.com/2021/02/21/20210221爬虫与网络基础理论/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论