[摘抄]一次网页访问各互联网协议实例

家门口
摘抄自阮大的互联网协议入门首先假定这是本机器设置

*  本机的IP地址:192.168.1.100
*  子网掩码:255.255.255.0
*  网关的IP地址:192.168.1.1
*  DNS的IP地址:8.8.8.8
  1. 访问www.google.com
  2. DNS协议
    • 将网址转化为IP地址,已知DNS服务器为8.8.8.8,于是向这个地址发送一个DNS数据包(53端口),数据包如下
      image
      然后DNS服务器作出响应,告诉我们Google的IP地址是172.194.72.105
  3. 子网掩码

    • 解析来判断这个IP地址是不是在同一个子网络,这里用到子网掩码 ,已知子网掩码时255.255.255.0,本机用自己的IP地址192.168.1.100做一个二进制AND运算,计算结果为192.168.1.0,然后对Google的IP也做一下AND运算,结果为172.194.72.0,两个结果不相等,所以不为同一个子网络。
    • 因此,我们要向Google发送数据包,必须通过网管192.168.1.1转发,也就是说,接收方的MAC地址是网关的MAC地址。
  4. 应用层协议

    • 浏览网页用的是HTTP协议,他的整个数据包结构是这样的
      image
      HTTP部分的内容类似于下面这样:
      * GET / HTTP/1.1            
      * Host: www.google.com      
      * Connection: keep-alive       
      * User-Agent: Mozilla/5.0 (Windows NT 6.1) ......    
      * Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8    
      * Accept-Encoding: gzip,deflate,sdch    
      * Accept-Language: zh-CN,zh;q=0.8     
      * Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3    
      * Cookie: ... ...
      
      我们假定这个部分的长度为4960字节,它被嵌在TCP数据包中。
  5. TCP协议
    • TCP数据包数据包需要设置端口,接收方(Google)的HTTP默认端口是80,发送方(本机)的端口是1024-65535之间的整数,这里假定是51375。
    • TCP标头的长度为20字节,加上嵌入HTTP数据包,总长度变为4980字节。
  6. IP协议
    • 然后,TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的,发送方是192.168.1.100(本机),接收方是172.194.72.105(Google)
    • IP数据包标头为20字节,加上嵌入的TCP数据包,总大小为5000字节。
  7. 以太网协议
    • 最后,IP 数据包嵌入以太网数据包,以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到,这里ARP即本机
      • 发送一个包含在以太网数据包中的数据包,其中包含网关的IP地址,在对方的MAC地址这一栏,填FF.FF.FF.FF,表示这是一个广播地址它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。)。
    • 以太网数据包的部分,最大长度为1500字节,而现在的IP数据包长度为5000字节,因为每个包都有自己的IP标头(20字节),所以四个的IP数据包长度分别为150015001500560
      image
  8. 服务器响应
    • 经过多个网关转发,Google的服务器172.194.72.105收到了这四个以太网数据包。
    • 根据IP标头的序列号,Google将这四个包拼接起来,取出完整的TCP数据包,然后读出里面的HTTP请求,接着做出HTTP响应,用TCP协议发回去
    • 本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信.