Internet History,Technology,and Security -Transport Control Protocol(TCP)(Week6)
Week6
Technology: Transport Control Protocol(TCP)
Welcome to Week 6 of IHTS. We are in our second week of the more technical bits of the course. I try to keep the technical bits interesting and not go into too much detail.
This week, we’ll be covering transport control protocol (TCP). The Transport layer is built on the Internetwork layer and is what makes our network connections reliable.
hello,上周我们主要学习了第一层Link和第二层 Internet Protocol(IP),接下来让我们继续学习第三层Transport Control Protocol。
Transport Layer
通过之前的学习我们已经知道网络层的主要作用:定义网络地址、区分网段、子网内MAC寻址、对于不同子网的数据包进行路由。它还有一个神奇之处,在网络内部没有临时的长期储存仓库,所有的长期储存都在网络之外,这也是IP传输速度如此之快的原因。但因为它只考虑了一方面,所以在其他方面也存在缺陷。其中之一就是可能在数据传输中,存在数据丢失的情况,如果存在数据丢失的情况下,就需要一个层去负责恢复,而这层也就是我们今天要主讲的Transport Layer。
TCP层是基于IP层的,其目的之一就是补偿IP层中可能出现的错误,并最大限度地利用可用资源。TCP/IP组网是为了有效地传输,所以我们需要知道我们的网络是快还是慢,这就是我们用TCP层要解决的问题。底层网络的速度有多快,可靠性有多高,如果出现问题,我们应该如何处理。因此,TCP/IP协议的核心思想就是在发送数据时,将数据分成多个包,然后将每个包发送出去。然后我们保留它们,直到它们得到另一边的确认回复,然后我们才把它们扔掉。在某些情况下,如果数据包丢失,则可以再次发送,直到最终在目的系统中确认为止。
同时这样在确认恢复后丢掉数据包的做法使得网络对储存方面没有太大的要求。却把对存储的要求放在终端的设计中。当我们把计算机、笔记本电脑、手机等连入网络中时,它们自己有保存数据拷贝的责任,不期望网络去帮它们做存储工作。这是极好的机制,是互联网成功的原因之一。
当连接的设备越来越多,网络就变得越来越拥堵,网络主干的速度就变得越来越慢了,以至于开始出现故障。于是在上世纪八十年代,有一种预言说因特网即将失败。而且这个观点在以前被不少人支持,因为他们认为学术界没有能力让互联网继续发展下去。当时的人甚至还认为让IBM等电子厂商去搞网络,其他的人们就花钱用供应商的网络。正所谓时势造就英雄,在这种绝望的背景下,工程师 Van Jacobson 站了出来,他创造的补丁,解决了网络堵塞问题。挽救了Internet,真是一个惊艳绝伦的天才啊。接下来就让我们来介绍介绍他吧。
Van Jacobson - Slow Start Algorithm
扶大厦之将倾,挽狂澜于即倒,说的可谓是Van Jacobson,在当时网络危机说法越演越烈,它的慢启动算法和TCP流量控制算法拯救了整个网络世界。NSFNet和Ethernet让大学网络在当时十分受欢迎,许多人通过网络交流、收发电子邮件等,人们都为这种新技术感到激动不已。但是越来越多接入的电脑让网络负载加大,网速变慢,很多packet在传输中丢失。
慢启动,是传输控制协议使用的一种阻塞控制机制。慢启动也叫做指数增长期。慢启动是指每次TCP接收窗口收到确认时都会增长。增加的大小就是已确认段的数目。这种情况一直保持到要么没有收到一些段,要么窗口大小到达预先定义的阈值。如果发生丢失事件,TCP就认为这是网络阻塞,就会采取措施减轻网络拥挤。
Van Jacobson当时在Lawrence Berkeley实验室做研究员,那是80年代中期,每一门课都有一个消息群,像一个小新闻组,所有的作业会放到网上。Van试着从LBL的办公室下载课程材料到Berkeley Evans Hall的一个机器上,他发现网络吞吐量为零,这无疑太糟糕了。于是他找到Mike Karels,发现Mike Karels也深受这个问题的困扰,两人决定一起合作去解决这个困恼。
网络吞吐量:网络中的数据是由一个个数据包组成,防火墙对每个数据包的处理要耗费资源。吞吐量是指在没有帧丢失的情况下,设备能够接受的最大速率
当时最简单运行TCP/IP的方法是启动Berkeley Unix,因为它内嵌了一个ARPA资助的非常好的应用,但是这个程序的性能十分糟糕,在进行小规模测试的时候崩溃了,Van他们努力了几个月来找到问题出在哪,但却没有突破口,这时候Van认为这是因为不了解线路是怎样工作的,如果能明白它的工作原理,那自然也就有相应的处理方法,于是他们将关注点转移到协议的本身和协议的配置方面来。
TCP congestion control
在当时,Van提出了一个这样一个模式,如上图所示。横向代表时间,网络传输数据需要一定时间。纵向的容器粗细不同代表带宽的不同,在图片中是十倍的差距,实际可达几百倍。比较粗的,代表网络两端,一端是发信源,另一端是目的源。发送者有大量packet需要发送,如果一次都让它们进入网络,可能会引起拥塞。这时上文提到的acknowledgement(下文简称为ACK)就很有用了。我们控制进入网络的packet速度,每当目的源收到一个ACK,我们发送端再发送packet。ACK其实像一个时钟一样,提示何时网络是通畅的,这时就可以发送packet而不造成网络拥塞。这个机制运行起来后,新的packet发送不会让瓶颈(网络)内的packet造成拥塞。
这是一个非常好的模式,在交换一周分组之后运行的很好,然而这是出现了一个问题。如何启动它?这就需要上文提到的慢启动算法。如果你使用慢启动,逐渐地启动这个机制,让它慢慢跑起来,那么就能防止网络拥塞,这也是TCP的目标。关于慢启动算法,视频中不是没有过多的阐述它,所以我找了一些资料,可以试着参考参考。
而如何让这种机制植入到全球的TCP/IP中的呢?Van使用了一个比较偏门的办法,他让组内的资深内核黑客编写了一个程序,这个程序会获得用户数据报,并发生内核错误,他们把所有这些程序打包 放在TCP/IP的邮件列表上,很多人会去下载试用,于是程序崩溃,Van就获取他们的反馈信息,并将其修复,再崩溃,又修复,如此循环,最终生成了一个不会发生内核错误的版本。
The Domain Name System
Domain Name System,域名系统,是一个为任何连接到网络的电脑、服务器、或其他任何资源命名的分层分散式系统。它将各种信息与域名分配给每个参与的实体。最突出的特点是它使用对人类友好的、更容易记住的域名去代替数字的IP地址,实现定位和识别计算机服务和设备与底层网络协议。通过提供一个全球分布式目录服务,域名系统是因特网功能的一个重要的组成部分,并且自1980年代以来一直在使用
为什么会存在域名系统呐?虽然因特网上的节点都可以用IP地址惟一标识,并且可以通过IP地址被访问,但即使是将32位的二进制IP地址写成4个0~255的十位数形式,也依然太长、太难记。因此,人们发明了域名(Domian Name),域名可将一个IP地址关联到一组有意义的字符上去。用户访问一个网站的时候,既可以输入该网站的IP地址,也可以输入其域名,对访问而言,两者是等价的。例如:微软公司的Web服务器的IP地址是207.46.230.229,其对应的域名是www.microsoft.com,不管用户在浏览器中输入的是207.46.230.229还是www.microsoft.com,都可以访问其Web网站。
域名的分层
除了代表各个国家顶级域名之外,ICANN最初还定义了7个顶级类别域名,它们分别是.com、.top、.edu、.gov、.mil、.net、.org。.com、.top用于企业,.edu用于教育机构,.gov用于政府机构,.mil用于军事部门,.net用于互联网络及信息中心等,.org用于非赢利性组织
随着因特网的发展,ICANN又增加了两大类共7个顶级类别域名,分别是.aero、.biz、coop、.info、.museum、.name、.pro。其中,.aero、.coop、.museum是3个面向特定行业或群体的顶级域名:.aero代表航空运输业,.coop代表协作组织,.museum代表博物馆;.biz、.info、.name、.pro是4个面向通用的顶级域名:.biz表示商务,.name表示个人,.pro表示会计师、律师、医师等,.info则没有特定指向
TCP Wrap Up
,
总的来说,TCP做的事就是弥补IP层所做的工作的不完美之处。数据到达时,可以不再是无序的;TCP使得数据在发送端储存了拷贝,如果没有收到ACK就会重复发送,确保数据不会丢失;TCP的缓存机制,使得互联网快速发展。
PS:(这两周都有些写课后思考,但是由于上一周内容太多,忘记加上去了,所以就决定把这两周的课后思考发在技术层次的最后一周,也就是下一周。)
Internet History,Technology,and Security -Transport Control Protocol(TCP)(Week6)的更多相关文章
- Internet History,Technology,and Security - Dawn of Electronic Computing(Week 1)
一 War Time Computing and Communication 讲到电子计算机,你不得不提起第二次世界大战,虽说二战是人类历史上史无前例的大灾难,不过从某种程度来说,它确实促进了社会的发 ...
- Internet History, Technology and Security (Week6)
Week6 The Internet is desinged based on four-layer model. Each layer builds on the layers below it. ...
- Internet History,Technology and Security
Internet History,Technology and Security(简单记录) First Week High Stakes Research in Computing,and Comm ...
- Internet History, Technology and Security (Get Started)
Abstract 课程名称:互联网的历史.技术和安全 coursera地址 制作方:密歇根大学(University of Michigan) 教师:Charles Severance, Associ ...
- Internet History, Technology and Security (Week 6)
Week 6 Technology: Transport Control Protocol (TCP) Welcome to Week 6 of IHTS. We are in our second ...
- Internet History,Technology,and Security - History Through Supercomputing(Week2)
时间飞逝,一周又过去了,这周我们来到了Internet History, Technology and Security (Week 2)的学习,从标题就可以看出,这周主要是介绍“互联网”雏形的诞生. ...
- Coursera: Internet History, Technology, and Security
课程网址:https://www.coursera.org/learn/internet-history 学习笔记: Week 1: History - Dawn of Early Computing ...
- Internet History, Technology, and Security(week8)——Security: Encrypting and Signing
Hiding Date from Ohters Security Introduction Alice and Bob是密码学.博弈论.物理学等领域中的通用角色之一.Alice(代表A)和Bob(代表 ...
- Internet History, Technology, and Security(week6)——Technology: Transport Control Protocol(TCP)
前言: 这周开始学习分层网络模型的第三层,传输层. Transport/Reliability: Transport Layer TCP层的目的是补偿IP层中可能出现的错误,并充分利用可用资源.由于I ...
随机推荐
- 螺旋矩阵II
Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral ord ...
- day20191010ClassNotes
笔记: 1.DAO模式组成部分: 程序 ----> 数据库 实体类 数据库中的表 工具类:公共的数据库连接.关闭.公共的增删改.查询 接口 : 程序提倡的是面向接口编程,从而降低程序的耦合性 实 ...
- Day01-变量/常量/数据类型/流程控制之 if
1.变量 把程序运行的中间结果临时的存在内存里,以便后续的代码调用.代指一些复杂的.过长的数据. 声明变量 name = 'Dylan' # 把数据'Dylan'声明(赋值)给变量 nmae,以便后 ...
- 请问1^x+2^x+3^x+\cdots +n^x的算式是什么呢?
目录 总结 请问\(1^x+2^x+3^x+\cdots +n^x\)的算式是什么呢? 一.求和式\(\sum\limits_{i=1}^n{i}\)的算式 如何证明求和简式\(\sum_{i=1}^ ...
- Spring Boot 2.0 学习笔记(一)——JAVA EE简介
本章内容:JAVA EE>Spring>Spring Boot 一.JAVA EE简介 1.1 Java ee优点:结束了Web开发的技术无序状态,让程序员.架构师用同一种思维去思考如何架 ...
- 理解Redis的单线程模式
0.概述 本文基于的Redis版本为4.0以下,在Redis更高版本中并不是完全的单线程了,增加了BIO线程,本文主要讲述主工作线程的单线程模式. 通过本文将了解到以下内容: Redis服务器采用单线 ...
- NSURLSession使用(整理版)
NSURLSession使用 1.NSURLSession诞生于2013年,但其在前几年一直生活在NSURLConnection的阴影下,直到iOS9的出现,NSURLConnection被官方宣布弃 ...
- js练习-两个栈实现队列
目录 题 解 题 现在有个Q队列和栈A,栈B,栈只有两个方法,push()和pop(), 队列也只有两个方法,push()和pull(),队列的进和出都只能通过A和B的push和pop实现. // 大 ...
- DOM中的获得元素的方式
获取元素的方式:分为俩种: 1.直接获取:直接获取分为三种: a,获取单个元素: function demo1(){ var uid=document.getElementById("use ...
- jQuery操作页面的元素
主要有添加,替换,删除,清空三种方式: 添加又分为,在之前添加,在之后添加,在元素外之前添加,在元素外之后添加.每个添加方式又有俩种方法(效果一模一样): 俩种方法区添加,在原内容之后: p.appe ...