Skip to content

Latest commit

 

History

History
63 lines (43 loc) · 4.71 KB

readme.md

File metadata and controls

63 lines (43 loc) · 4.71 KB

网络是怎样连接的

浏览器生成消息--探索浏览器内部

  • 生成 HTTP 消息
  • 根据域名查询 IP 地址
    • 由一些小的子网,通过路由器 29 连接起来组成一个大的网络。这里的子网可以理解为用集线器 30 连接起来的几台计算机 31,我们将它看作一个单位,称为子网。将子网通过路由器连接起来,就形成了一个网络(凡是通过集线器连接起来的所有设备都属于同一个子网)

    • 直接写 IP 地址不就好了吗?

实际上,如果用 IP 地址来代替服务器名称也是能够正常工作的 35。然而,就像你很难记住电话号码一样,要记住一串由数字组成的 IP 地址也非常困难 不过在设计 TCP/IP 架构的当时,在技术上还无法实现我们今天的搜索引擎,因此用名称来代替地址本身是有价值的 ``` * 用名称来确定通信对象不就好了吗?

    ```

从运行效率上来看,这并不能算是一个好主意。互联网中存在无数的路由器,它们之间相互配合,根据 IP 地址来判断应该把数据传送到什么地方。那么如果我们不用 IP 地址而是改用名称会怎么样呢? IP 地址的长度为 32 比特,也就是 4 字节,相对地,域名最短也要几十个字节,最长甚至可以达到 255 字节。换句话说,使用 IP 地址只需要处理 4 字节的数字,而域名则需要处理几十个到 255 个字节的字符,这增加了路由器的负担,传送数据也会花费更长的时间 域名并不仅是长,而且其长度是不固定的。处理长度不固定的数据比处理长度固定的数据要复杂,这也是造成效率低下的重要原因之一。 ```

* dns解析器内部原理

![dns解析器内部原理](https://github.com/wangning0/Autumn_Ning_Blog/blob/master/blogs/2016-1-24/images/1.png)


* 什么是根域?
    
    ```
     www.lab.glasscom.com.
     这样在域名的最后再加上一个点,而这个最后的句点就代表根域。不过,一般都不写最后那个句点,因此根域的存在往往被忽略,但根域毕竟是真实存在的,根域的 DNS 服务器中保管着 com、jp 等的 DNS 服务器的信息
    ```
* DNS服务器怎么顺藤摸瓜?

    ```
    将负责管理下级域的 DNS 服务器的 IP 地址注册到它们的上级 DNS 服务器中,然后上级 DNS 服务器的 IP 地址再注册到更上一级的 DNS 服务器中,以此类推,
    再从根域开始顺藤摸瓜找到任意一个域的DNS服务器
    ```
* DNS服务器之间的查询操作

![](https://github.com/wangning0/Autumn_Ning_Blog/blob/master/blogs/2016-1-24/images/4.png)

* 缓存?
    
    ```
    指的是将使用过的数据存放在离使用该数据的地方较近的高速存储装置中,以便提高后续访问速度的技术。这一技术有很多应用,如 CPU 和内存之间的缓存、磁盘和内存之间的缓存等,在网络中缓存也是一种用来提高访问速度的普遍性技术。
    
    这个缓存机制中有一点需要注意,那就是信息被缓存后,原本的注册信息可能会发生改变,这时缓存中的信息就有可能是不正确的。因此,DNS 服务器中保存的信息都设置有一个有效期,当缓存中的信息超过有效期后,数据就会从缓存中删除。而且,在对查询进行响应时,DNS 服务器也会告知客户端这一响应的结果是来自缓存中还是来自负责管理该域名的 DNS 服务器。
    ```
  • 数据通过类似管道的结构来流动(TCP)

  • 客户端和服务器之间收发数据操作的情形

  • 能不能用前面创建套接字时提到的那个描述符来识别套接字呢?

    这种方法其实是行不通的,因为描述符是和委托创建套接字的应用程序进行交互时使用的,并不是用来告诉网络连接的另一方的,因此另一方并不知道这个描述符。同样地,客户端也无法知道服务器上的描述符。因此,客户端也无法通过服务器端的描述符去确定位于服务器上的某一个套接字。所以,我们需要另外一个对客户端也同样适用的机制,而这个机制就是端口号。如果说描述符是用来在一台计算机内部识别套接字的机制,那么端口号就是用来让通信的另一方能够识别出套接字的机制 
    

用电信号传输 TCP/IP 数据——探索协议栈和网卡