zoukankan      html  css  js  c++  java
  • 网络那些事:浏览器、网络协议以及常见软件

    0.前言

      你是从什么时候开始接触网络的呢?十年前的人们大多数是从PC和网吧开始的,如今的人们几乎都是从手机和WiFi开始的。浏览器、社交软件和购物软件等已经成为绝大数人的标准配置。

      2017年,互联网之父伯纳斯·李因“发明万维网、第一个浏览器和使万维网得以扩展的基本协议和算法”而获得2016年度的图灵奖。网络改变了人们的生活,成为我们不可或缺的一部分。

      本篇将从浏览器开始,以HTTP为例子,通过WireShark软件介绍网络协议和数据传输,为后面博客要介绍的网络爬虫做铺垫。

    1.浏览器那些事

      最流行的网络浏览器是Google Chrome,Microsoft Edge(之前是Internet Explorer,简称IE浏览器), Safari,Opera和Firefox。浏览器最重要的浏览器内核,又称为浏览器引擎,比如IE浏览器的内核Trident,火狐的内核Gecko,以及已经废弃的Opera内核Presto,然后就是一大堆WebKit内核的变体。WebKit开源算是苹果做的一件好事,另一个是Clang/LLVM。

      WebKit产生了很多分支,除了具体的浏览器外,一些支持RIA的语言和框架也提供了WebKit的封装,C++有QtWebKit以及谷歌的CEF框架、Java中JavaFX的WebView。谷歌在WebKit的基础上,弄出了Blink内核,还自己做了一个JavaScript引擎V8。然后,在V8的基础上产生了Node.js,极大的改善了JavaScript的开发生态圈。

      此外,HTML5技术和WebGL技术的引入丰富了浏览器在多媒体和3D渲染方面的功能,加速了落后技术如Flash的淘汰过程。

    2.网络协议那些事

      网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。一般的说法是,OSI七层与TCP/IP五层,而TCP/IP承担当今互联网上的绝大部分数据传输任务。

      关于网络协议的第一手资料来源IETF组织制作的一系列标准文档,又称为RFC文档。实际上的网络标准非常的多,如今RFC系列文档已经达到了八千多份。这些文档可以在IETF官网进行下载。

      如果官网的网速较慢,可以在香港中文大学的ftp站点上下载,http://ftp.cuhk.edu.hk/pub/doc/ripe/rfc/

      最常见的协议是HTTP协议,其基础是TCP/IP协议。HTTP的知识点可以先看一下Runoob的介绍

      首先,我们看一下浏览器通过HTTP下载HTML文件的过程,以火狐打开百度主页为例:

      打开百度主页,按F12,选择网络选项,点击右侧"显示请求细节"按钮,如图所示:

      

      可以看到HTTP的请求头和响应头。上图显示的界面又称为Web Console,几乎所有的浏览器按F12都会出来,在javascript的ide出现以前,这就是前端开发者调试javascript代码最常用的工具。

    3.WireShark那些事

      Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

      与网络协议打交道,经常要做的事情就是抓包,而最常用的抓包工具就是WireShark。Linux下常用的抓包工具是tcpdump,当然,如果是图形化的Linux也可以使用WireShark以及其命令行工具。

      下载安装好WireShark后,选择对于的网卡,以HTTP协议进行过滤,进入bing主页,可以看到:

      

      可以看到HTTP的内容,也可以看到TCP和IP的内容。但是浏览器的请求往往或产生很多条HTTP记录,不容易看清楚。用curl和wget之类的命令行工具会比较清晰。

      比如用curl获去百度主页的内容: curl www.baidu.com

      

      不过内容不是我们想要的,与浏览器不一致,原因是百度的服务器检测到了User-Agent字段。

      

      先使用 curl -v www.baidu.com 查看请求头,代理为curl/7.53.1:

    $ curl -v www.baidu.com
    * STATE: INIT => CONNECT handle 0x20048360; line 1418 (connection #-5000)
    * Rebuilt URL to: www.baidu.com/
    * Added connection 0. The cache now contains 1 members
    *   Trying 119.75.217.109...
    * TCP_NODELAY set
    * STATE: CONNECT => WAITCONNECT handle 0x20048360; line 1471 (connection #0)
    * Connected to www.baidu.com (119.75.217.109) port 80 (#0)
    * STATE: WAITCONNECT => SENDPROTOCONNECT handle 0x20048360; line 1588 (connection #0)
    * Marked for [keep alive]: HTTP default
    * STATE: SENDPROTOCONNECT => DO handle 0x20048360; line 1606 (connection #0)
    > GET / HTTP/1.1
    > Host: www.baidu.com
    > User-Agent: curl/7.53.1
    > Accept: */*

      我们可以将User-Agent置为空,再请求一次: curl --user-agent "" www.baidu.com ,这一次得到了一致的内容。

        另外,wget查看请求头和响应头: wget --debug --spider www.baidu.com ,加入user-agent信息: wget -U www.baidu.com

      未完,待续。。。

  • 相关阅读:
    python --github 刷题
    http://www.rehack.cn/techshare/webbe/php/3391.html
    SQL 百万级数据提高查询速度的方法
    开学收好这 17 种工具 App,让你新学期学习更有效率
    Git文件常见下标符号说明
    TortoiseGit功能介绍
    gitlab图形化使用教程 (mtm推荐)
    gitlab 服务器的搭建与使用全过程(一)
    Git详解之一 Git实战
    Git使用基础篇
  • 原文地址:https://www.cnblogs.com/wurui1994/p/6735780.html
Copyright © 2011-2022 走看看