zoukankan      html  css  js  c++  java
  • 计算机网络自顶向下 —— 链路层(二)

    前言

      继续说链路层

      web的请求 的三次我握手我写过一篇猝不及防的爱情
      详细的说了三次握手
     
      我是前端开发者
      其实web的请求每一天都有在用
      浏览器主动发起请求 请求成功后 服务器返回数据,拿到数据后,页面展示。
      这就是实际应用的一条龙服务
      然后再深入的了解一下web请求,我发现一位球友写的特别的详细,但是我找不到他的博客了,如果哪一天看到了。可以叫我注明出处。

    正文

    • 数据字段: (46-1500字节) 以太网的最大传输单元(MTU)是1500字节,最小长度是46字节。Ip数据报小于46字节,数据包必须被填充到46字节。
    • 目的地址 目的地的MAC地址
    • 源地址 源地址的MAC地址
    • 类型字段 类型字段允许以太网复用多种网络层协议
    • CRC 循环冗余检测
    • 前同步码 以太网帧以一个8字节的前同步码字段开始,该前同步码的前7个字节都是10101010,最后一个字节是10101011。前7个字节用于唤醒接收适配器,并且将他们的时钟和发送方的时钟同步。
    • MAC地址空间为6字节, 2^48比特
    • IPv4: 4字节, 2^32比特
    • IPv6: 21字节, 2^128比特

    DNS和ARP

    • Bob便携机上的操作系统生成DNS查询报文,将字符串www.google.com放入DNS报文的问题段中。该DNS报文则放置在一个具有53号目的端口的UDP报文段中。该UDP报文段则被放入具有IP目的地址的(68.87.71.226)和源IP地址(68.85.2.101)的IP数据报中。
    • Bob便携机则将包含DNS请求报文的数据报放入一个以太网帧中。该帧将发送到Bob学校的网络路由器,然而Bob便携机知道了学校的网关路由器的IP地址,但是不知道MAC地址,需要使用ARP协议查询。
    • Bob便携机生成一个具有目的IP地址68.85.2.1(默认网关)的ARP查询报文,将该查询报文放置在一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧交付给所有连接的设备,包括网关路由器。
    • 网关路由器在通往学校网络的接口上接受到包含该ARP查询报文的帧, 发现在ARP报文中目标IP地址68.85.2.1匹配其接口的IP地址。网关路由器因此准备一个ARP回答,指示他的MAC地址00:22:6B:45:1F:1B对应IP地址68.85.2.1。它将ARP回答放在一个以太网帧中,并向交换机发送该帧,再由交换机将帧交付给Bob便携机。
    • Bob便携机接收包含ARP回答报文的帧,并从ARP回答报文中抽取网关路由器的MAC地址。
     
    以下内容来自球友
    WEB页面请求的历程
     
     
    第一步:准备:通过DHCP、UDP等获取本机的动态IP
     
    (1)Bob的PC机首先生成DHCP请求报文,放入目的端口67和源端口68的UDP报文段。报文段放入广播目的IP地址(255.255.255.255)和源IP地址(0.0.0.0)的IP数据报中。
    (2)包含DHCP请求的数据报被放入以太网帧中,目的MAC地址为广播地址FF:FF:FF:FF:FF:FF,源MAC地址为PC适配器MAC地址。该帧在交换机所有出口端广播。
    (3)路由器接口(MAC地址:00:22:6B:45:1F)接收到该帧,抽取出IP数据报。广播IP地址表示该IP数据报需要节点的高层协议处理,所以分解出UDP报文上传UDP。DHCP服务器从UDP报文段中得到该请求报文。
    (4)服务器生成DHCP ACK报文,包括分配给PC的IP地址、DNS服务器IP地址、默认网关路由器IP地址(68.85.2.1)、子网块(68.80.2.0/24)。该报文放入UDP、IP数据报、以太网帧中,目的MAC地址为PC的MAC地址、源MAC地址为路由器刚刚收到帧的子网接口的MAC地址。
    (5)ACK报文发送到交换机。由于交换机通过自学习,之前从PC接收帧的时候得到MAC地址和端口的映射,所以直接将帧从连接PC的接口转发。
    (6)PC接收到帧,一步步抽取出ACK报文,记录下自己的IP地址、DNS服务器地址。配置IP转发表的默认网关,将目的地址为子网块之外的所有数据报发送向默认网关。
     
    第二步:仍在准备:通过ARP查询DNS
     
    (1)Bob的PC机生成DNS查询报文,www.google.com放入报文的问题段。DNS报文放入端口号53的UDP报文段中,UDP报文段目的IP为DNS服务器的IP地址,源IP地址为PC的IP地址的IP数据报,但是缺少默认网关的目的MAC地址(只知道IP地址)。
    (2)PC发送查询默认网关MAC地址的ARP查询报文,放入广播目的地址的以太网帧。向交换机发送该帧,交换机将该帧转发给所有出口端。网关路由器收到查询报文后,准备ARP回答,包括默认网关IP和对应的MAC地址。将ARP回答放入以太网帧,目的MAC地址为PC的MAC地址。发送该帧,通过交换机交付给PC。
    (3)PC获取该帧,抽取得到网关路由器的MAC地址。将步骤(1)中的数据报放入以太网帧,目的MAC地址为网关路由器的MAC地址。将帧发送给交换机,交付给网关路由器。
     
    第三步:仍在准备:通过DNS查询到网站的IP
     
    (1)网关路由器接收帧,抽取IP数据报。根据目的地址和转发表,决定下一跳路由器。将IP数据报放入链路层帧,发送至下一跳路由–comcast最左边路由器。
    (2)comcast最左边路由器接收到帧,抽取IP数据报,根据目的IP地址和转发表确定出口,向DNS服务器转发数据报。转发表已经根据域内路由协议和域间路由协议填好。
    (3)DNS服务器收到IP数据报,抽取出DNS查询报文,找到对应的IP地址,生成DNS回答报文,放入UDP报文段,反向寻址到学校路由器,最后通过交换机到PC。
    (4)PC从DNS报文中抽取出www.google.com对应的IP地址。
     
    第四步:WEB客户通过TCP和HTTP与服务器交互
     
    (1)PC生成一个目的端口号80的TCP SYN报文段,放入目的IP为谷歌的(www.google.com)IP地址的数据报中,将该数据报放置在MAC地址为00:22:6B:45:1F:1B(网关路由器)的帧中,并向交换机发送。
    (2)该数据报通过学校网络、comcast网络、谷歌网络到达谷歌服务器,服务器分配资源,产生TCP SYNACK报文段,放入数据报,反向到达PC。PC形成套接字,进入连接状态,第三次握手与之后的HTTP请求一起发送。
    (3)PC的浏览器生成获取URL的HTTP GET报文,写入套接字。生成的TCP报文段放入一个IP数据报中,到达谷歌服务器。
    (4)谷歌HTTP服务器从TCP套接字读取HTTP GET报文,生成HTTP响应报文,将请求的页面内容放入HTTP报文实体,将响应报文放入套接字,生成的TCP报文段放入IP数据报,经过网络到达PC。
    (5)PC的浏览器从套接字读取HTTP响应,从实体中抽取页面的html,终于显示web页面。
  • 相关阅读:
    定时刷新
    Codesmith生成oracle、mssql模版中的部分区别和基本功能备忘
    oracle使用中遇到的问题备忘
    存储过程内建临时表和临时函数,合并一个由存储过程返回的表
    烂MP3
    别人笑我太疯癫,我笑别人看不穿
    服务器被挂Iframe木马的解决方法(不是IIS映射修改,也不是ARP病毒,并且网页文件源代码里没有iframe代码的解决方法)
    随便记录下
    重构桌面飘着圣诞老人,利用策略模式和改造的代理模式让软件完全实现开闭原则,欢迎下载源代码分析
    Nhibernate连接oracle数据库报 Could not compile the mapping document异常的解决方法
  • 原文地址:https://www.cnblogs.com/ifannie/p/11186514.html
Copyright © 2011-2022 走看看