<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Osi七层模型 on ZRJ | 学习笔记</title>
        <link>https://blog.zrj.me/tags/osi%E4%B8%83%E5%B1%82%E6%A8%A1%E5%9E%8B/</link>
        <description>Recent content in Osi七层模型 on ZRJ | 学习笔记</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <lastBuildDate>Sun, 30 Sep 2012 16:38:56 +0800</lastBuildDate><atom:link href="https://blog.zrj.me/tags/osi%E4%B8%83%E5%B1%82%E6%A8%A1%E5%9E%8B/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>从点击到呈现 — 详解一次HTTP请求（2）</title>
        <link>https://blog.zrj.me/posts/2012-09-30-%E4%BB%8E%E7%82%B9%E5%87%BB%E5%88%B0%E5%91%88%E7%8E%B0-%E8%AF%A6%E8%A7%A3%E4%B8%80%E6%AC%A1http%E8%AF%B7%E6%B1%822/</link>
        <pubDate>Sun, 30 Sep 2012 16:38:56 +0800</pubDate>
        
        <guid>https://blog.zrj.me/posts/2012-09-30-%E4%BB%8E%E7%82%B9%E5%87%BB%E5%88%B0%E5%91%88%E7%8E%B0-%E8%AF%A6%E8%A7%A3%E4%B8%80%E6%AC%A1http%E8%AF%B7%E6%B1%822/</guid>
        <description>&lt;p&gt;上回说道服务器启动了监听服务，准备迎接来自客户机的请求。那么，我们以一次典型的浏览请求来解析：&lt;/p&gt;
&lt;p&gt;当我们开始在浏览器中输入网址的时候，浏览器其实就已经在智能的匹配可能得 url 了，他会从历史记录，书签等地方，找到已经输入的字符串可能对应的 url，然后给出智能提示，对于 google chrome 那种变态的浏览器，他甚至会直接从缓存中把网页展示出来，就是说，你还没有按下 enter，页面就出来了，这个过于奇葩，我们不详细讲。&lt;/p&gt;
&lt;p&gt;在例如输入了 baidu 或者 qq 之类的域名后，我们可以按下 ctrl + enter ，来自动补全，生成 qq.com 或者 baidu.com 的网址，然后发起请求。请求一旦发起，浏览器首先要做的事情就是解析这个域名，一般来说，浏览器会首先查看本地硬盘的 hosts 文件，看看其中有没有和这个域名对应的规则，如果有的话就直接使用 hosts 文件里面的 ip 地址，说道这里，大家可能想到，这个地方就存在安全隐患了，如果有病毒把一些常用的域名，修改 hosts  文件，指向一些恶意的 ip，那么浏览器也会不加判断的去连接，是的，这正是很多病毒的惯用手法。&lt;/p&gt;
&lt;p&gt;如果在本地的 hosts 文件没有能够找到对应的 ip 地址，浏览器会向 dns 域名解析服务器发起域名解析请求，dns 的域名解析是递归的，（还有另外 dns 是迭代的），递归的 dns 首先会查看自己的 dns 缓存，如果缓存能够命中，那么就从缓存中把 ip 地址返回给浏览器，如果找不到对应的域名的 ip 地址，那么就向上转发请求，然后把得到的这个域名对应的 nameserver 的地址取得，再向这个 namserver 去请求域名对应的 ip，最后把这个 ip 地址返回给浏览器，不过怎么说，这个递归查询的过程，对于浏览器来说是透明的，他只要坐等 ip地址送回来就可以了。对于 DNS 的进一步理解，可以看这里，&lt;a class=&#34;link&#34; href=&#34;http://zrj.me/archives/16&#34;  title=&#34;进一步理解 DNS&#34;
     target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;进一步理解 DNS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;得到 ip 地址后，浏览器会开始构造一个 http 请求，一个典型的 http request header 一般需要包括请求的方法，例如 GET 或者 POST 等，不常用的还有 PUT 和 DELETE 方法，更加不常用的还有 HEAD 和 OPTION 以及 TRACE 方法，一般的浏览器只能发起 GET 或者 POST 请求，应用层的 http 请求准备好后，浏览器在传输层发起一条到达服务器的 tcp 连接，这个时候应该开始三次握手的过程，tcp 包被封装到网络层的 ip 包里面，ip 包再被封装到数据链路层的数据帧结构中，再通过物理层的比特流送出去，这些分层的意义在于分工合作，数据链路层通过 CSMA/CD 协议保证了相邻两台主机之间的数据报文传递，而网络层的 ip 数据包通过不同子网之间的路由器的路由算法和路由转发，保证了互联网上两台遥远主机之间的点对点的通讯，不过这种传输是不可靠，于是可靠性就由传输层的 tcp 协议来保证，tcp 通过慢开始，乘法减小等手段来进行流量控制和拥塞避免，同时提供了两台遥远主机上进程到进程的通信，最终保证了 http 的请求头能够被远方的服务器上正在监听的 http 服务器进程收到，终于，数据包在跳与跳之间被拆了又封装，在子网与子网之间被转发了又转发，最后进入了服务器的操作系统的缓冲区，服务器的操作系统由此给正在被阻塞住的 accept 函数一个返回，将他唤醒。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;历史评论&#34;&gt;历史评论
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;smile&lt;/strong&gt; (2013-09-09 16:57:20):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;不是CSMA/CS协议，应该是CSMA/CD吧。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;ZRJ&lt;/strong&gt; (2013-09-09 18:37:07):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;呵呵，是的，笔误，修改过来了，谢谢指出哈。。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Jacky&lt;/strong&gt; (2014-05-02 11:20:15):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;DNS部分，好像少了一个，浏览器自身的DNS缓存～&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;ZRJ&lt;/strong&gt; (2014-05-03 09:38:38):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;嗯，dns 这块确实没讲好，不够清晰易懂，不要被我误导了，哈哈，像 chrome 这种的，还有 chrome://dns/，里面还有 prefetch&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;老生常谈-从输入url到页面展示到底发生了什么 丨 web技术笔记&lt;/strong&gt; (2017-09-01 14:38:22):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[…] &lt;a class=&#34;link&#34; href=&#34;http://zrj.me/archives/589&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://zrj.me/archives/589&lt;/a&gt;  […]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;从输入URL到页面显示发生了什么 | 言曌博客&lt;/strong&gt; (2018-03-07 14:07:34):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[…] &lt;a class=&#34;link&#34; href=&#34;http://zrj.me/archives/589&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://zrj.me/archives/589&lt;/a&gt;  […]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;xz&lt;/strong&gt; (2019-01-28 15:35:08):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;有线网络以太网采用的是CSMA/CD，but，无线网络Wi-Fi采用的是CSMA/CA，还是不太一样的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;ZRJ&lt;/strong&gt; (2019-04-16 10:20:52):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;嗯，是的，当时还没学习到无线，现在都是无线为主了，知识老旧了&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        
    </channel>
</rss>
