网络 - socket 浏览器的套路

我们从看的见摸得着的东西入手,来说说浏览器访问网站的套路

首先我们明确一下以下几个点:

1、那就是电脑想联网收发数据,必须要经过的一个地方就是“网卡“(拆开你的电脑你就能看到!一般玩电脑有年头的人都知道网卡这个东西);

2、当我们的硬件需要被控制工作时,就需要一个“软件”来驱动,那就是我们常说的“网卡驱动”这个应该不难理解。

3、操作系统是一个偏底层的“软件“。

4、浏览器想上网,离不开操作系统封装的 socket api

5、既然想通信,那么就要有一些协议存在。协议大概分两层:TCP协议、HTTP协议,TCP是负责“三次握手”滴,HTTP协议可以看做是负责请求响应过程的“口令规定”;

好、很迅速简单的说一下完整的浏览器访问网站的过程

1、打开浏览器 输入网址(废话!)
2、浏览器只是软件,他并没有上网的能力(没有网卡驱动,拔掉网线打开你的浏览器上网试试?),但是他有调用socket库和解析器(DNS解析器,用来解析域名的)的能力,如果是个域名的话,浏览器会找一下socket库,然后和DNS服务器进行“乱七八糟”的交互(不细说,道理差不多),拿到域名对应的IP,接着继续调socket库,将自己的IP和端口号,以及域名的IP和端口号放在一个“包”里,和服务器那边创建的套接字进行管道连接(服务器也是某个软件创建了套接字一直处于监听状态,等待有缘人。。。),这个时候,通过IP找到对应服务器再找到其MAC地址(ARP),再通过端口找到对应监听软件。开始进行三次握手。
3、三次握手(抄的)
第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
4、HTTP请求
浏览器会向服务器通过socket_write发送一波信息

GET /index.php HTTP/1.1 (CRLF)

Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,/ (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/”80b1a4c018f3c41:8317” (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.baojisem.com (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)
服务器会通过socket_read接受到这些信息,然后通过HTTP协议套路解析(你可以用正则完成)
比如

扫描二维码关注公众号,回复: 10025481 查看本文章

GET http://www.baojisem.com/index.php HTTP/1.1 (CRLF)
使用get 方法 请求到上述加粗网站的 index.php文件。
那服务器就会去找这个文件,发现他是一个PHP文件 又去找他的解析程序(PHP-FPM(只是个例子)),解析程序计算完程序会把信息回传给服务器webserver,接着会把这些信息响应给客户端。

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 724
Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello
Date: Wed, 25 Sep 2012 04:15:03 GMT
//下面是消息体,就是响应的内容

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="Content-Language" content="zh-CN" />
    <title>西安网站建设_宝鸡SEO_宝鸡网站优化_宝鸡网站建设 - 宝鸡SEO工作室</title>
<!-- Nobird_Seo_Tools Start -->
<meta name="keywords" content="宝鸡SEO,宝鸡网站优化,企业网站优化,企业网络营销,宝鸡SEO工作室,宝鸡SEO优化,宝鸡网站建设,宝鸡网,西安网站建设" />
<meta name="description" content="宝鸡SEO工作室由橙橙同学个人建设,希望在宝鸡SEO工作室这个网站上谈出自己对SEO优化,企业网络营销,企业电子商务等技术的观点和经验,也倡导宝鸡SEO爱好者能加入宝鸡SEO工作室展示自己的技术和才能,互相进步和发展。" />
<link rel="canonical" href="http://www.baojisem.com/"/>
<!-- Nobird_Seo_Tools End -->
    <meta name="generator" content="Z-BlogPHP 1.4 Deeplue Build 150101" />
    <link rel="stylesheet" rev="stylesheet" href="http://www.baojisem.com/zb_users/theme/metro/style/style.css" type="text/css" media="all"/>
    <script src="http://www.baojisem.com/zb_system/script/common.js" type="text/javascript"></script>
    <script src="http://www.baojisem.com/zb_system/script/c_html_js_add.php" type="text/javascript"></script>
    <link rel="alternate" type="application/rss+xml" href="http://www.baojisem.com/feed.php" title="西安网站建设_宝鸡SEO_宝鸡网站优化_宝鸡网站建设" />
    <link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.baojisem.com/zb_system/xml-rpc/?rsd" />
    <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://www.baojisem.com/zb_system/xml-rpc/wlwmanifest.xml" /> 
    <script src="http://www.baojisem.com/zb_users/theme/metro/script/top.js" type="text/javascript"></script>
</head><body class="multi default">
<div id="headerbg">
  <div class="header">
    <div class="logo">
      <h1><a href="http://www.baojisem.com/">西安网站建设_宝鸡SEO_宝鸡网站优化_宝鸡网站建设</a></h1>
      <h3>宝鸡SEO工作室</h3>
    </div>
<div class="search">

接着浏览器收到,然后根据HTML标签啦,图片标签什么的,该解析解析,该请求请求。
最终把网站显示到你的眼前。

                浅谈。。。勿喷。。QQ 543577508
发布了65 篇原创文章 · 获赞 3 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/web_orange/article/details/77894288