计算机网络端到端通信流程分析

144 阅读8分钟

一.从输入url到页面响应的整个宏观过程

1.输入了一个url地址

2.浏览器查找域名的IP地址

  • DNS查找
    • 浏览器缓存:在浏览器缓存中查找DNS,每个浏览器缓存时间不同
    • 系统缓存:如果浏览器缓存没找到就在系统缓存中使用gethostbyname查找
    • 路由器缓存:在路由器中查找DNS缓存
    • ISP的DNS缓存
      • 递归搜索:从根域名服务器开始递归搜索,从.com顶级服务器到域名服务器

3.浏览器给web服务器发送HTTP请求

GET http://facebook.com/ HTTP/1.1
 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
 User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]
 Accept-Encoding: gzip, deflate
 Connection: Keep-Alive
 Host: facebook.com
 Cookie: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...]
  • HTTP请求:
    • Connection要求服务器为了后面的请求不要关闭TCP连接
    • cookies跟踪网站状态匹配的键值。会存储登录用户名,密码和一些用户设置。以文本形式存储在客户机中,每次请求的时候发给服务器。
  • 斜杠问题
    • http://facebook.com/最后的斜杠是必要的
    • 不加斜杠浏览器不清楚到底是文件夹还是文件
    • 这样服务器会响应一个重定向,造成不必要的握手

4.服务器的永久重定向响应

HTTP/1.1 301 Moved Permanently
 Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,
 pre-check=0
 Expires: Sat, 01 Jan 2000 00:00:00 GMT
 Location: http://www.facebook.com/
 P3P: CP="DSP LAW"
 Pragma: no-cache
 Set-Cookie: made_write_conn=deleted; expires=Thu, 12-Feb-2009 05:09:50 GMT;
 path=/; domain=.facebook.com; httponly
 Content-Type: text/html; charset=utf-8
 X-Cnection: close
 Date: Fri, 12 Feb 2010 05:09:51 GMT
 Content-Length: 0
  • 服务器给浏览器响应一个301永久重定向响应
  • 让浏览器访问http://www.facebook.com/而不是http://facebook.com/
    • 原因:
      • 搜索引擎会认为这是两个地址,而搜索引擎知道301永久重定向,就会把www和不带www的地址归到一个网站
      • 不同的地址会占缓存

5.浏览器跟踪重定向地址

GET http://www.facebook.com/ HTTP/1.1
 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
 Accept-Language: en-US
 User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]
 Accept-Encoding: gzip, deflate
 Connection: Keep-Alive
 Cookie: lsd=XW[...]; c_user=21[...]; x-referer=[...]
 Host: www.facebook.com
  • 重新发送新的GET请求

6.服务器"处理"请求

  • 服务器处理请求并返回响应
  • web服务器软件
    • web服务器软件收到HTTP请求确定执行什么请求处理并生成HTML
    • 就是将地址映射为服务器的文件地址
    • 请求处理
      • 阅读请求及其参数和cookies
      • 也会更新数据,并将数据存储在服务器上
        • 小网站有SQL数据库
      • 生成HTML响应

7.服务器发回HTML响应

HTTP/1.1 200 OK
 Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,
 pre-check=0
 Expires: Sat, 01 Jan 2000 00:00:00 GMT
 P3P: CP="DSP LAW"
 Pragma: no-cache
 Content-Encoding: gzip
 Content-Type: text/html; charset=utf-8
 X-Cnection: close
 Transfer-Encoding: chunked
 Date: Fri, 12 Feb 2010 09:05:55 GMT

 2b3Tn@[...]
  • 以blob类型传输,整个响应体用gzip算法压缩
  • Content-type是text/html,让浏览器以HTML形式呈现

8.浏览器开始显示HTML

  • 浏览器还没完整接收全部HTML文档时,就开始显示

9.浏览器发送GET请求获取嵌入在HTML中的对象

  • 浏览器显示过程中,发现需要获取其他地址内容,此时发送请求获取文件
  • 过程同上
  • 这些静态文件会允许浏览器缓存
  • 服务器的响应会包含缓存的期限信息
  • 通常网站会使用第三方CDN(内容分发网络)

10.浏览器发送异步(AJAX)请求

  • 页面一直保持与服务器连接状态
  • 更新页面时会通过js代码给服务器发送异步请求

二.其中数据包在这个网络通信过程中的经历

1.应用层

  • 将要发送的数据内容形成一个应用层的报文data

2.传输层

  • 这些数据通过传输层发送,使用协议(TCP...)
  • 这里包上head,包含端口号,tcp的各种信息。组成tcp数据传送单位segment。
  • 利用这些信息发送的一方不断发送等待确认,发送一个数据段后,开启一个计数器,当收到确认后才发送下一个,如果超过技术时间仍未收到确认则重发
  • 接收端收到错误数据就丢弃,这就使得发送端超时重发
  • tcp协议控制了数据报的发送序列的产生,实现流量控制和数据完整。

3.网络层

  • 这些发送的数据送到网络层,继续打包,包上网络层的head
  • head包含源,目的的ip地址,这层的数据单元称为packet
  • 网络层负责如何穿过路由器,到达目的地址
  • 根据目的ip地址查找下一跳路由地址
  • 在本机查找本机的路由表route print
  • 查找过程:
    • 根据目的地址,得到目的网络号,如果在同一个内网,则直接放松
    • 如果不在同一个内网,则查询路由表,找到下一个路由
    • 如果找不到明确的路由,通过默认网关将数据传送给下一个指定的路由,所以网关也可能是路由器,也可能只是个网关
    • 路由器收到数据后,再次查询下一路由,若找不到就通过默认网关地址。数据包中含有一个最大路由跳数,如果超过这个跳数就会丢弃数据报,这可防止无限传递
    • 路由器收到数据包后,只会查看网络层的数据,目的ip,所以传输层的数据对它来说是透明的
    • 查找到下一跳ip地址后,还需要知道它的mac地址,要作为链路层数据的头部。这时候需要arp协议
      • 查找arp缓冲 arp -a可查看
      • 如果里面含有对应ip的mac地址就直接返回
      • 没有就需要发生arp请求,该请求包含源ip和源mac地址以及目的ip地址,在网内进行广播,所有主机会检查自己的ip和目的ip是否一样,如果一样就返回自己的mac地址,并将请求的ip mac都保存
      • 这样就得到了目的ip的mac地址

3.链路层

  • 将mac地址和链路层控制信息加入数据包中,形成Frame
  • Frame在链路层写一下完成相邻节点之间的数据传输,建立连接,控制传输速度,数据完整

4.物理层

  • 物理线路只负责将数据以bit为单位传输到下一个目的地

5.接收端

  • 接收到数据后,从物理层到链路层到网络层逐层解包

p.s.

  • 路由表查询过程中,路由表的建立依赖于路由算法。
    • 用于路由器之间更新维护路由表

三.TCP/IP的基本模型和基本概念

  • 物理层
    • 设备,中继器repeater,集线器hub。
    • 这一层来说,一个端口收到数据会转发到所有端口
  • 链路层
    • SDLC HDLC ppp协议
    • 网卡,网桥,集线器modem(存议
    • 所有交换机需要工作在数据链路层,但仅仅工作在链路层的是二层交换机
    • 其他什么三层,四层,七层交换机工作范围包括很大,但基本功能在二层
    • 有了mac地址表才避免了冲突,交换机通过目的mac地址知道把数据转发到哪个端口,不像hub转发到所有端口,所以交换机是可以划分冲突域的
  • 网络层
    • 网际协议IP:负责在主机和网络之间寻址,和路由数据包
    • 地址解析协议ARP:获得同一物理网络中的硬件主机地址
    • 网际控制消息协议ICMP:发送消息报告有关数据报的传送错误
    • 互联组管理协议IGMP:被IP主机哪来向本地多路广播路由器报告主机组成员
    • 这层设备有三层交换机,路由器
  • 传输层
    • TCP和UDP
    • 端口的概念
      • TCP/UDP使用IP地址标识网上主机,使用端口号标识应用程序。
      • 端口号是16位的无符号整数,TCP和UDP的端口号是两个独立的序列。
      • 利用端口号,一台主机上多个进程可以同时使用TCP/UDP提供的传输服务,并且是端到端的,数据由IP传递,但与IP数据报的传递路径无关。
      • 通过三元组唯一标识一个应用进程:协议+本地地址+本地端口号
      • tcp和udp可以使用相同的端口
      • 通过(协议+源端口+源ip+目的端口+目的ip)可以标识一组网络连接
  • 应用层
    • 基于tcp的有 Telnet FTP SMTP DNS HTTP
    • 基于UDP的有 RIP NTP DNS SNMP TFTP