• 互联网协议入门


    互联网协议入门(一) http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html

    互联网协议入门(二) http://www.ruanyifeng.com/blog/2012/06/internet_protocol_suite_part_ii.html

     

    1.  5层模型

     

    "实体层",它就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。

      

     

    "链接层"的功能,它在"实体层"的上方,确定了0和1的分组方式。

     

    以太网帧结构 http://www.cnblogs.com/mylinux/p/5553242.html

    IP数据包结构 http://www.cnblogs.com/mylinux/p/3988928.html

    TCP数据包结构  http://www.cnblogs.com/mylinux/p/5552738.html

     

    2. ARP协议: 从IP地址得到MAC地址。

    因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。通常情况下,对方的IP地址是已知的(后文会解释),但是我们不知道它的MAC地址。

     

    第一种情况,如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理。

    第二种情况,如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包 中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网 络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃 这个包。

    总之,有了ARP协议之后,我们就可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。

    3. DHCP协议

    首先,它是一种应用层协议,建立在UDP协议之上,所以整个数据包是这样的:

      (1)最前面的"以太网标头",设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。

      (2)后面的"IP标头",设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。

      (3)最后的"UDP标头",设置发出方的端口和接收方的端口。这一部分是DHCP协议规定好的,发出方是68端口,接收方是67端口。

    这个数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF- FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是 0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道"这个包是发给我的",而其他计算机就可以丢弃这个包。

    接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个"DHCP响应"数据包。这个响应包的结构也是类似的,以太网标头的 MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是 67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。

    新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数。

     

    4. 上网设置:小结

    这个部分,需要记住的就是一点:不管是"静态IP地址"还是"动态IP地址",电脑上网的首要步骤,是确定四个参数。这四个值很重要,值得重复一遍:

      * 本机的IP地址
      * 子网掩码
      * 网关的IP地址
      * DNS的IP地址

    有了这几个数值,电脑就可以上网"冲浪"了。

    5. DNS 原理入门 http://www.ruanyifeng.com/blog/

    DNS服务器的IP地址,有可能是动态的,每次上网时由网关分配,这叫做DHCP机制;也有可能是事先指定的固定地址。Linux系统里面,DNS服务器的IP地址保存在/etc/resolv.conf文件。

    5.1 工具软件dig可以显示整个DNS查询过程。

        
    $ dig math.stackexchange.com
    dig命令的+trace参数可以显示DNS的整个分级查询过程。
        $ dig +trace math.stackexchange.com
    dig命令可以单独查看每一级域名的NS记录。
        $ dig ns com
        $ dig ns stackexchange.com
    +short参数可以显示简化的结果。
        $ dig +short ns com
        $ dig +short ns stackexchange.com

     

    5.2 域名的层级


    DNS服务器怎么会知道每个域名的IP地址呢?答案是分级查询。
    请仔细dig的结果,每个域名的尾部都多了一个点。

    比如,域名math.stackexchange.com显示为math.stackexchange.com.。这不是疏忽,而是所有域名的尾部,实际上都有一个根域名。

    举例来说,www.example.com真正的域名是www.example.com.root,简写为www.example.com.。因为,根域名.root对于所有域名都是一样的,所以平时是省略的。

    根域名的下一级,叫做"顶级域名"(top-level domain,缩写为TLD),比如.com、.net;再下一级叫做"次级域名"(second-level domain,缩写为SLD),比如www.example.com里面的.example,这一级域名是用户可以注册的;再下一级是主机名(host),比如www.example.com里面的www,又称为"三级域名",这是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的。

    总结一下,域名的层级结构如下。

    主机名.次级域名.顶级域名.根域名 # 即 host.sld.tld.root

      DNS服务器根据域名的层级,进行分级查询。

    所谓"分级查询",就是从根域名开始,依次查询每一级域名的NS记录,直到查到最终的IP地址,过程大致如下。

      1. 从"根域名服务器"查到"顶级域名服务器"的NS记录和A记录(IP地址)

      2. 从"顶级域名服务器"查到"次级域名服务器"的NS记录和A记录(IP地址)

      3. 从"次级域名服务器"查出"主机名"的IP地址

    仔细看上面的过程,你可能发现了,没有提到DNS服务器怎么知道"根域名服务器"的IP地址。回答是"根域名服务器"的NS记录和IP地址一般是不会变化的,所以内置在DNS服务器里面。

     

    5.3 其他DNS工具


    除了dig,还有一些其他小工具也可以使用。
    (1)host 命令
    host命令可以看作dig命令的简化版本,返回当前请求域名的各种记录。
        $ host github.com
        github.com has address 192.30.252.121
        github.com mail is handled by 5 ALT2.ASPMX.L.GOOGLE.COM.
        github.com mail is handled by 10 ALT4.ASPMX.L.GOOGLE.COM.
        github.com mail is handled by 10 ALT3.ASPMX.L.GOOGLE.COM.
        github.com mail is handled by 5 ALT1.ASPMX.L.GOOGLE.COM.
        github.com mail is handled by 1 ASPMX.L.GOOGLE.COM.

        $ host facebook.github.com

        facebook.github.com is an alias for github.map.fastly.net.
        github.map.fastly.net has address 103.245.222.133

    host命令也可以用于逆向查询,即从IP地址查询域名,等同于dig -x <ip>。
        $ host 192.30.252.153
        153.252.30.192.in-addr.arpa domain name pointer pages.github.com.

    (2)nslookup 命令
    nslookup命令用于互动式地查询域名记录。
        $ nslookup
        > facebook.github.io
        Server:     192.168.1.253
        Address:    192.168.1.253#53

        Non-authoritative answer:
        facebook.github.io  canonical name = github.map.fastly.net.
        Name:   github.map.fastly.net
        Address: 103.245.222.133
        >

    (3)whois 命令
    whois命令用来查看域名的注册情况。
        $ whois github.com

  • 相关阅读:
    Android作业10/21
    Android作业10/07
    Android作业0930
    Android作业 0923
    第四周作业
    第七周
    第六周
    第四周作业
    3.10第二次
    jsp第一次作业
  • 原文地址:https://www.cnblogs.com/mylinux/p/5603044.html
Copyright © 2020-2023  润新知