这是我在Coursera上的学习笔记。课程名称为《Computer Networks》,出自University of Washington。
由于计算机网络才诞生不久,目前正在以高速在发展,所以有些旧的教材可能都已经跟不上时代了。这门课程在2013年左右录制,知识相对还是比较新的。覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得非常仔细。学完这门课程之后对计算机网络会有比较深刻的了解。
本章讲述了这门课程的大致情况,讲述了协议、协议层等基本概念。
- 目标和动机
- 课程的主要目标就是介绍计算机网络中的通信过程
- 要点
- 互联网如何工作
- 浏览网页的时候发生什么
- 什么是VPN HTTP TCP/IP DNS等
- 计算机网络基础
- 为什么要学习计算机网络
- 为什么要学习计算机网络基础
- 因为所有的网络工作原理是一样的
- 因为益智
- 比如解决可靠性问题,用编码检查错误、绕过错误的路由
- 可靠性 安全性 网络增长 资源分配
- change / reinvention
- 互联网一直在变
- 如今的互联网和以前的互联网是不一样的
- CDN P2P VoIP IPv6 Mobile
- 以下不是本课程的目标
- 网络的应用
- 生活中的应用举例
- 工作、家庭、移动设备
- 用户通信
- 代替电话: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跳
- 用于计算机之间通信
- 将计算机连接到显示世界
- 互联的价值
- 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
- 简化互联网通信
- 支持两种网络服务
- 允许应用附加到不同的端口
- 接口列表
- 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,大部分流量是视频,内容开始主导互联网
推荐教材:计算机网络第五版
Git 使用笔记,布布扣,bubuko.com
Git 使用笔记
原文:http://blog.csdn.net/zlcd1988/article/details/25649961