网络那些事:浏览器、网络协议以及常见软件

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

  未完,待续。。。

posted @ 2017-04-19 20:47  星云的彼岸  阅读(1021)  评论(0编辑  收藏  举报