【Coursera】Sixth Week(1)
Transport Layer
在学习完 Link Layer(Ethernet),Internetwork Layer(IP)之后,我们来到了TCP/IP协议簇的上半部分。
Review:Magic of IP
它做了啥?想办法把数据报从一个网络 通过 5 - 20 个路由器 转递到另外一个网络。
保持对网络中 畅通 或者 堵塞的路径 的跟踪,如果有可能的话想办法选择更好的路径。
但是不能保证 数据能到达目的地,如果转递过程中出现了差错,数据报会被丢弃。
这使得 它非常快速,和可伸缩性(scalable),最终 “具有可靠性”,因为它并没有把所有的事情都做了。
Internet Protocol
很多连接,节点。
很多路由。
Thinks can change dynamically(动态地),and the IP has to react(link up/down).
IP 有可能会扔掉 packet。
TCP:Transport protocol
- Build on top of IP.
- Assume IP might lose data.
- In case data gets lost, we keep a copy of the data. We send until we get an acknowledgement.
- If it takes "too long", just send it again.
TCP 弥补了在IP层中可能的错误,同时也使用了可用的资源。
底层的网络 有多快?(快的话,目的是节省时间,慢的话,目的是为了提高效率)它很可靠吗?如果底层的网络数据传输出现了错误,怎么办?这就是TCP考虑的问题。
所以 TCP协议 的核心是 如果我们发送了一些数据报,我们把它分片成一些 分组,然后我们一片片的发送它们,如果发送端收到了目的端的ACK(acknowledgement),就可以准备发送下一个数据了。与此同时,如果某些数据报片丢失了,发送端会重新发送数据报,直到收到目的端的ACK为止。
所以这就是 TCP 所做的最基本的工作。
这里有一个例子:
一个数据报被分成五片,大小分别是:100,200,300,400,500字节。首先 我们发送 100,200,300字节的三片数据,100,300到达目的地,200在途中销毁。过了一段时间,接收端发送ACK 告诉 发送端:
嘿,老哥,我收到了你发送的两片数据了,他们是 100 和 300,但是我还没有收到200的,能不能给我发送一下?
当然,发送端就“猜到”200的数据报片在转递过程中被遗失了,由于接收端已经收到了100,那么发送端丢弃了100的数据报片,从200开始重新发送。
第二次,发送端 发送200 和 300的数据报片,接收端发送ACK确认收到了。于是发送端继续发送 400,500 的数据报片,并且丢弃 200 和 300 的数据报片。dotdotdot···
所以,这有点像在 TCP的接收端和发送端 记账一样。
设计IP层的时候,我们要求它很快速,很灵活,但是我们同时也给予了它丢弃数据报的权力,我们并没有要求IP层进行存储的工作。
但是,很明显,在网络中有很多的路由器,连接上网络的PC却是以亿计数的。我们需要让数据的传输具有可靠性,所以在PC上我们需要有足够的内存来存储这些数据以防万一:在必要的时候重新发送数据报。
当我们连接一台计算机到网络上的时候,我们就在这台计算机上配置了内存来存储发送的数据,所以当计算机在发送数据的时候,它负责对发送的数据报进行复制并且保留复制品。它并不期望网络来做这个事情。
这非常的 absolutely brilliant,这个机制给互联网带来了无穷的好处。
当然了,在成功的背后,同样有许多的工程师为这个机制做出了贡献。
在1980年,很多人预言,Internet即将消亡,当时的学术界的技术不足以支撑Internet的发展。越来越多的计算机连接到网络中,导致网络越来越慢,逐渐有“crash”的倾向。
工程师 Van Jacobson 拯救了“世界”,发明了TCP协议。
Van Jacobson - Slow Start Algorithm
Van Jacobson:Packet Design,PARC首席工程师。
网络通过在不同的大学聚集的方式 逐渐地扩大。NFS 用56kb的电缆 把这些校园网络连接到了一起,形成了NSFNET 一期。这在当时很受欢迎,人们可以通过网络交流,发电子邮件等等。但是每一个校园都会让当时的网络超负载,丢失了很多分组。
当时 Van 在 Lawrence Berkerly 实验室做 high-energy 的物理实验,同时也在 Berkerly 校园教书,在上个世纪八十年代,每一门课都有一个信息群,任何作业都会被发送到网络上,Van 通过网络下载下来课程的资料,但是当时的网络非常缓慢,吞吐量为0,大概十分钟一个分组,这就很糟糕了。于是 Van 就和 Mike Karels 一起商讨,Mike 当时也领导了开发 Berkerly Unix 的BSD团队,他也被这个问题所困扰。
那个时候,运行TCP/IP最简单的方法就是,启动 Berkerly Unix,在 Unix 上有一个程序,但是性能实在是有点糟糕。这个小程序在运行小规模的测试的时候崩溃了,Van 和 Mike 花了很长的一段时间来找错误,尝试找出原因。他们的关注点就来到了 协议是如何处理这些带宽的变化,如何处理多个跳数。
接收端发送的 ACK 就像时钟一样,提醒 发送端 什么时候是安全的时刻来发送一个新分组。
TCP 运行的时候是相当完美的,但是困难的地方就在于 启动的时候,如果你突然启动,很容易造成某个网关的缓存饱和,当你重新发送的时候,又重新做了一遍这种我们不想看到的事情,所以总是会丢失分组。但是如果你逐渐的启动,就会得到一个时钟(ACK)来控制 TCP数据报输出队列,以便控制缓存,防止缓存过载。
那么是如何把这种机制 引入进全球的 TCP/IP 系统中呢?
Van 非常的机智,开发组里的内核黑客们开发了一个内核的程序,通过这个程序可以获取数据报,并导致内核错误。他们把这个程序通过全球用户的邮件列表(当时规模不大)用邮件发送到了网络上,许多用户来下载这个东西,并提供错误的反馈,Van 于是 发布了很多次新的版本,修改了这一错误,并且也潜移默化的把这个机制植入了用户的系统中。
2016/8/4
【Coursera】Sixth Week(1)的更多相关文章
- 【Coursera】Sixth Week(2)
DNS:Domain Name System The Domain Name System convert user-friendly names,like www.umich.edu, to net ...
- 【Coursera】Security Introduction -Ninth Week(2)
对于公钥系统,我们现在已经有了保证它 Confidentially 的一种方法:SSL.SSL利用了公钥的概念. 那么 who we are talking to? Integrity Certifi ...
- 【Coursera】Security Introduction -Ninth Week(1)
前言 Coursera 的 Internet History,Technology,and Security 进入最后一周的学习了,在这最后一周内,需要进行的内容是 public-key 公钥系统的讲 ...
- 【Coursera】Security Introduction -Eighth Week(2)
Review -Terminology(术语): Confidentiallity & Integrity 泄密 & 欺骗 Confidentiallity: Prevent unau ...
- 【Coursera】History: Dawn of Electronic Computing学后小结
今天学习了Coursera上University of Michigan开的互联网的历史.技术和安全课程的FirstWeek内容. 先是吐槽下这个Coursera,认证非常麻烦,PC端需要摄像头拍照. ...
- 【Coursera】支持向量机
一.最大间隔分类器 1. 函数间隔:\(γ^{i} = y^{i}(w^{T} x + b)\), 改变w和b的量级,对分类结果不会产生任何影响,但是会改变函数间隔的大小.因此,直接对函数间隔求最大值 ...
- 【Coursera】Internet History 读书笔记
前言 这个Internet History 有些令人劝退.电脑无法播放视频.手机不能播放.最后百度了改了hosts文件才可以. 附上解决方法: 解决coursera可以登录但无法播放视频 第一周 第三 ...
- 【Alpha】——Sixth Scrum Meeting
一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 对统计出现的问题进一步完善 学习将项目做成APK 郑靖涛 完善报表设计 协助设计账目一览表板块 杨海亮 测 ...
- 【Coursera】Security Introduction -Summary
对这门课程的安全部分进行一个小结. 往期随笔 第八周第一节 第八周第二节 第九周第一节 第九周第二节 前言:为什么互联网要提及安全 因为security牵扯到我们每一个人,有人每时每刻都想着要偷取别人 ...
随机推荐
- 应用笔画宽度变换(SWT)来检测自然场景中的文本
Introduction: 应用背景:是盲人辅助系统,城市环境中的机器导航等计算机视觉系统应用的重要一步.获取文本能够为许多视觉任务提供上下文的线索,并且,图像检索算法的性能很大部分都依赖于对应的文本 ...
- Unity 补充安装
当需要下载 安装Unity之时没勾选的一些组件时, 1.去Unity官网点开Unity旧版本 2.找到你的Unity版本,然后只要下载Unity安装程序 3.点开安装程序,去掉已安装组件的勾选,勾选你 ...
- word使用
1:插入图片,显示不完整,需要>点击上方的段落,选择单倍行距 2:wps 可以直接右键选择保存文件中的图片 3:word中换行符的标识符为^p ,可以用来替换换行符. 4:使word中某一段背 ...
- 图结构练习——判断给定图是否存在合法拓扑序列(sdutoj)
#include<stdio.h>#include<string.h>int d[15],map[15][15],vis[15];int main(){ int i,j, ...
- M2Eclipse:Maven Eclipse插件无法搜索远程库的解决方法
使用Eclipse安装了maven插件之后,创建Maven工程,发现添加依赖“Add Dependency”的时候无法自动搜索远程库. 如果不能搜索远程库那用这个插件有啥用撒... 查遍了所有的mav ...
- data.frame和matrix的一些操作
编写脚本的时候经常会涉及到对data.frame或matrix类型数据的操作,比如取指定列.取指定行.排除指定列或行.根据条件取满足条件的列或行等.在R中,这些操作都是可以通过简单的一条语句就能够实现 ...
- [LeetCode] 589. N-ary Tree Preorder Traversal_Easy
Given an n-ary tree, return the preorder traversal of its nodes' values. For example, given a 3-ary ...
- VMware Coding Challenge: The Heist
类似BackpackII问题 static int maximize_loot(int[] gold, int[] silver) { int[][] res = new int[gold.lengt ...
- Summary: Java中函数参数的传递
函数调用参数传递类型(java)的用法介绍. java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清. (一)基本数据类型:传值,方法不会改变实参的值. public class Te ...
- Linux基础命令---paste
paste 将指定的文件按照列的方式合并,将结果显示到标准输出设备上,相当于两个并列的cat命令. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.F ...