首页 > 代码库 > Git 使用笔记

Git 使用笔记

这是我在Coursera上的学习笔记。课程名称为《Computer Networks》,出自University of Washington。

由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了。这门课程在2013年左右录制,知识相对还是比较新的。覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细。学完这门课程之后对计算机网络会有比较深刻的了解。

本章讲述了这门课程的大致情况,讲述了协议、协议层等基本概念。


  • 目标和动机
    • 课程的主要目标就是介绍计算机网络中的通信过程
    • 要点
      • 互联网如何工作
        • 浏览网页的时候发生什么
        • 什么是VPN HTTP TCP/IP DNS等
      • 计算机网络基础
        • 计算机网络必须解决的问题
        • 哪种设计思路是最有价值的
    • 为什么要学习计算机网络
      • 因为好奇
      • 因为互联网改变世界
      • 因为工作前景好
    • 为什么要学习计算机网络基础
      • 因为所有的网络工作原理是一样的
      • 因为益智
        • 比如解决可靠性问题,用编码检查错误、绕过错误的路由
        • 可靠性 安全性 网络增长 资源分配
      • change / reinvention
        • 互联网一直在变
        • 如今的互联网和以前的互联网是不一样的
        • CDN P2P VoIP IPv6 Mobile
    • 以下不是本课程的目标
      • 学习IT职业技能
        • 配置路由器
  • 网络的应用
    • 生活中的应用举例
      • 工作、家庭、移动设备
      • 用户通信
        • 代替电话:VOIP、视频会议、即时通信、社交网络
        • 远程通信:实时交互
      • 资源共享
        • 大量用户使用相同的资源:3D打印 搜索机器 云端设备
        • 让每个用户更加高效:statistical multiplexing
      • statictical multiplexing
        • 多个用户共享宽带
        • 因为不是每个用户都同时占满宽带
        • 举例:1个100M的宽带分配给5M的用户,每个用户使用网络的概率是50%,能分配多少用户?这个很简单啊,100M/5M=20个用户。实际上20个用户并不是每时每刻都在同时使用,所以实际上能分配的用户超过20个。最后根据二项分布原理,得出能分配30个用户
        • 名词:statistical multiplexing gain。上一题中,该值等于30/20 = 1.5X
    • 内容分发
      • 相同的内容要分发多次
      • 使用replica可以使网络更加高效
      • Replica(镜像服务器)
        • 主服务器到每个用户需要经过3跳,那么4个用户就要12跳。如果有一个replica,距离主服务器2跳,距离每个用户都是1跳,那么总共的跳数就是2+4*1=6跳,节约了6跳
    • 用于计算机之间通信
      • 电子商务、预订
      • 自动化处理信息
    • 将计算机连接到显示世界
      • webcam gps 门锁
      • 这是即将发展的物联网
    • 互联的价值
      • Metcalfe定律 1980
        • N个节点的网络,其价值为N的平方
        • 网络越大,价值越高
  • 网络组件
    • 网络有哪些部分
      • 应用 节点 连接
        • 应用+节点=主机
        • 连接+节点=路由器
    • 部件名称
      • 应用、用户:Skype iTunes Amazon
      • 主机、终端:笔记本 手机 PC
      • 路由器、交换机、HUB、中间系统:AP 电缆 DSL调制解调器
      • 连接、通道:有线、无线
    • 连接的种类
      • 全双工:双向同时通信
      • 半双工:双向非同时通信
      • 单工:单向通信
    • 无线通信
      • 所有的消息都是广播的,一端发送,所有端都能接收到
      • 无线的连接会相互干扰
    • 网络举例
      • Wifi(802.11)、企业网/以太网、ISP、电缆/DSL、移动/电话、蓝牙、电话、卫星
    • 按规模分类
      • 个人网PAN:蓝牙
      • 局域网LAN:WIfi、以太网
      • 城域网MAN:线缆、DSL
      • 广域网WAN:大的ISP
      • 互联网Internet
    • 互联网
      • 互联网就是将各种规模的网络链接成一个整体
    • 网络边界
      • 网络 = 主机 + 路由器 + 连接
      • ISP = 路由器 + 连接
    • 关键边界
      • Socket:应用和主机的边界
      • Traceroute:主机和主机的边界
  • Socket
    • 网络应用接口
      • 定义了应用如何使用网络,让应用之间能够通过主机进行通信
    • 应用之间的通信过程
      • 客户端
    • SocketAPI
      • 简化互联网通信
      • 支持两种网络服务
        • Stream流式
        • Datagram数据报
      • 允许应用附加到不同的端口
    • 接口列表
      • SOCKET BIND LISTEN ACCEPT CONNECT SEND RECEIVE CLOSE
    • Socket编程通常的程序
      • 客户端连接服务器
      • 客户端向服务器发送请求
      • 服务器返回数据
      • 断开链接
    • Socket程序接口调用情况
      • 客户端SOCKET,服务端SOCKET
      • 服务端BIND    LISTEN    ACCEPT*
      • 客户端CONNECT*    SEND
      • 服务端RECEIVE*    SEND
      • 客户端RECEIVE*    CLOSE
      • 服务端CLOSE
      • *星号表示阻塞操作
    • 客户端程序示例
      • socket()
      • getaddrinfo()
      • connect()
      • ...
      • send()
      • recv()
      • ...
      • close()
    • 服务端程序示例
      • socket()
      • getaddrinfo()
      • bind()
      • listen()
      • loop{  accept()
      • ...
      • recv()
      • ...
      • send()   }
      • close()
  • Traceroute 路由跟踪
    • 网络服务API隐藏了网络传输的细节
    • Traceroute
      • 这是广泛使用的命令行工具,unix中是traceroute,windows是tracert
      • 它的作用是探测网络信息传播的路径
  • 协议和分层
    • 计算机网络需要模块化
      • 计算机网络实现了很多功能,为了减少复杂度,引入了模块的概念
    • 协议和层
      • 协议和层是计算机网络中的主要结构。协议是水平的,而层是垂直的。只有同类的协议才能进行通信,每种协议只能使用下一层的协议进行通信。
      • 协议栈:1层~N层叠加是一个协议栈
        • 举例:用无线设备浏览网页,协议栈是HTTP TCP IP 802.11
    • 封装
      • 底层的协议将高层的协议进行封装,并加上自己的特殊信息
      • 就像写信一样,邮局无法看到邮件中的内容
      • 协议的封装就像洋葱,一层一层地封装
      • 封装的时候可能出现加密、压缩、分段、重组等
    • demultiplexing 拆封
      • 底层协议为什么知道高层协议是什么呢?因为底层协议中包含了高层协议的种类信息。比如ethertype value、IP protocol field、TCP port number
    • 分层的好处
    • 隐藏信息,使重用性更高
    • 隐藏信息,使得无线设备能和有线设备进行透明通信。HTTP - TCP - IP - 802.11 - IP - Ethernet - IP - TCP - HTTP
  • 分层的坏处
    • 封装过多使消息太长
    • 隐藏信息,有些应用可能需要知道是无线还是有线
  • 参考模型
    • 一点小建议
      • 每层协议需要实现哪些功能呢?这里有一些可以参考的协议模型。
    • OSI 7层协议模型
      • 应用层:提供用户所需要的功能
      • 表示层:转换不同的表示方法
      • 会话层:提供任务对话
      • 传输层:提供端对端的对话
      • 网络层:将信息封装成包
      • 数据链路层:将信息封装成帧
      • 物理层:发送比特信息
    • 互联网参考协议
    • 应用层:7层 HTTP DNS BGP RTP SMTP
    • 传输层:4层 TCP UDP
    • 网络层:3层 IP
    • 链路层:1 2 层 802.11 3G Ethernet Cable DSL
    • 层上表可以看出,IP协议是核心
  • 标准机构
    • ITU:G.992  H.264 MPEG4  ADSL
    • IEEE:802.3  802.11
    • IETF:RFC2616 HTTP/1.1 RFC1034/1035 DNS
    • W3C:HTML5 CSS
  • 基于协议层的名词
    • 传输单位
      • 应用层:消息
      • 传输层:分段
      • 网络层:包
      • 链路层:帧
      • 物理层:比特
    • 设备
      • 物理层:中继器,HUB
      • 交换机、网桥:链路层
      • 网络层:路由器
      • 应用层:代理、网关
      • 所有的设备看起来都差不多
  • 层的注意事项
    • 一个层中可能有多个协议一起工作
    • 有时候很难说清某一层到底是什么协议
  • 互联网历史
    • 大概的互联网时间线
      • ARPANET:1969 10^3
      • NSFNET:1982 10^6
      • 现代网络:2005 10^9
    • ARPANET 起点
      • 目的是分享资源
      • 第一个网络只有4个节点
      • 第一个杀手级应用就是电子邮件
      • 影响
        • 分组交换(packet switching)
        • 去中心化的控制
    • NSFNET 成长
      • 支持教育网
      • 经典的互联网协议出现了:TCP/IP   DNS   BGP   SOCKET
    • 现代互联网 WEB诞生
      • ISP  IXP
      • Web大发展,CDN  ICANN,大部分流量是视频,内容开始主导互联网

推荐教材:计算机网络第五版