[关闭]
@perkyoung 2015-11-26T13:19:47.000000Z 字数 8740 阅读 1883

TCP/IP协议-1

运维


引言

发展简史

ARPA(美国国防部的远景研究规划局)提出提出一种设想,希望找到连接计算机的方法,便于共享研究成果,以便节省成本和开支。

在一次ACM(计算机协会)的会议上,ARPA提出了小网络ARPANET的概念,每个主机可以连接到IMP(接口报文主机)这个特殊的计算机上,IMP也可互相连接。1969年,ARPANET已经成为现实,4个节点通过IMP连接成网络,他们分别是加州大学洛杉矶分校(UCLA),加州大学Santa Barbara分校(UCSB),斯坦福研究院(SRI)和犹他(Utah)大学。提供主机通信的软件称为网络控制协议(NCP)。

因特网的诞生

ARPANET核心组的成员共同Vint Cert和Bob Kahn进行一个研究项目,就是将不同的网络连接起来,这个要解决很多问题,比如不同的分组长度,不同的接口,不同的传输速率,以及不同的可靠性需求,然后这俩哥们提出了一个新的概念,就是使用成为网关的设备作为中间的硬件,以便把分组从一个网络传送到另一个网络。

传输控制协议/网际协议(TCP/IP)

Vint Cerf和Bob kahn在1973年发表了里程碑论文,阐述了分组端到端交付的协议。这是NCP的一个新的版本。这篇关于传输控制协议(TCP)的协议包括很多概念:封装数据报,以及网关的功能。有一个很激进的观点是,把纠错的责任从IMP移到了主机。这时候ARPANET的管理权移交到了国防通信署(DCA)

在1977年10月,由3个不同的网络(ARPANET,分组无线网,分组卫星网)组成的互联网成功问世。网络之间的通信成为可能。
不就之后,当局决定将将TCP划分为两个协议:传输控制协议(TCP),和网际协议(ip)。这个新的组合被称为TCP/IP

1981年伯克利分校修改了unix操作系统,支持TCP/IP,并且将源代码公开出来,其他厂商可以基于这些代码构造他们自己的产品。

MILNET

1983年ARPANET拆分成两个网络,军方使用的MILNET和非军方使用的ARPANET

因特网的发展

新协议,入比ipv4更有优势的ipv6正在开发中
新技术,更多的带宽
多媒体应用的增加,以前是共享数据,现在更多的音视频加入了进来

协议和标准

协议定义了要通信的是什么,怎样进行通信,以及何时进行通信。也就是,语法,语义,时序

标准创建委员会

国际标准化组织(ISO)
国际电信联盟-电信标准部(ITU-T)
美国国家标准化局(ANSI)
电气和电子工程师学会(IEEE)
电子工业协会(EIA)
万维网联盟(W3C)
开放移动联盟(OMA)

管理机构

所有的通信技术是由一些政府机构来管理,例如,联邦通信委员会(FCC)

OSI模型和TCP/IP协议族

1990年以前,人们对OSI(open systems interconnection,开放系统互联)抱有很大的希望,都以为它将成为数据通信的最终标准,但是到后来占据主导地位的是TCP/IP,OSI压根就没有被完全实现过

协议分层

通信太复杂,所以需要分层,每层都有一个协议。分层有什么作用呢?
比如,A用英文写了一封信,然后通过加密机器加密,然后给了楼下的邮局,邮局运输该加密文件,运输到B所在低的邮局,该邮局交给B,B通过解密机器加密该信件,然后阅读。这个就用到了3层的结构

OSI模型

OSI模型仅仅是一个模型,不是一套协议,他的作用是展示两个不同的系统怎样才能做到互相通信,且不需要改变底层的硬件和软件逻辑。他不是协议,是为了更好地理解并设计出灵活、稳健的网络体系结构而存在的模型,为OSI框架的各种协议的创建提供基础,这才是他的本意。
OSI

分层的体系结构

分层的体系结构
如图,第3层需要调用第2层的服务,并且向第4层提供服务。并且从逻辑上看,像是一台机器的第x层与另外一台机器的x层进行通信。

层与层之间的通信

报文从第七层一直传递到第一层,在第一层中完整的数据包被转换成可传送到接收设备的层次
层与层之间存在接口。定义了必须向上提供什么样的信息和服务
1~3层可以看做是网络支撑层,这些层的任务是在物理上,使数据从一个设备传送到另外一个设备。
5~7层看做是用户支撑层,这些层使得一些本来没有关系的软件系统之间有了互操作性。
第4层,运输层,将这两部分连接起来。使底层发送的是高层使用的形式

OSI的各层

物理层,负责将比特位从一跳(结点)移动到下一跳。关心以下内容

数据链路层,把物理层转换成可靠的链路。它使物理层对上层(网络层)看起来好像是无差错的。任务包括:

网络层,负责把分组从源点交付到终点。这可能要跨越多个网络(链路)。如果说数据链路层监督的是同一个网络(链路)两个系统的分组交付,那网络层就是确保每个分组从源点除法并最终抵达目的地,换言之,如果两个系统是同一个网络,则一般来说就不需要网络层。网络层的任务包括:

运输层,负责完整报文进程到进程之间的交付。网络层管理的是单个分组从源点到终点的交付,它并不考虑他们之间的关系,就认为他们完全独立,只要到达目的地就ok。但是运输层要保证整个报文原封不动有序到达,他要监督从源点到终点这一级的差错控制和流量控制。运输层的任务包括:

TCP/IP协议族

TCP/IP没有会话层和表示层,即使比他晚的OSI模型发布之后,TCP/IP也没有增加这两层。可以理解为应用层是OSI模型最高三层的合并

TCP/IP协议族的分层

物理层,没有定义特定的协议,他支持所有标准的和专用的物理层的协议。假如两条不同的链路由路由器连接,那这个路由器就最少要支持两种物理层的协议。
数据链路层,同样没有定义任何特定的协议,他支持所有标准的和专用的协议。这一层仍然发生在两跳或两个结点之间,不过单位是称为的分组。一个帧就是封装了来自网络层的数据的分组,并为它附加一个首部,有时候还要增加一个尾部。在首部,除了一些在通信时需要用到的信息外,最主要的是增加源地址和目的地址,目的地址是为了指明正确的接受者,源地址实现了某些协议对源地址的响应和确认。
网络层,TCP/IP支持的是网际协议。是TCP/IP协议使用的传输机制。IP传输的是称为数据报的分组,这些分组可能走不同的路由,可能按照不同的顺序到达,也可能会重复,IP不会跟踪这些数据报经过的路由,只管送达,也不管重排。
如图,在网络层发生的通信
网络层的通信

运输层,和网络层最重要的区别是,网络中所有的节点都必须有网络层,但是只有两端的计算机上才需要运输层。网络层负责将一个个独立的数据报从a到b,运输层则负责把完整的报文(也称报文段、用户数据报或分组)从a到b。运输层传送的单位可疑是报文段、用户数据报、或者分组,取决于运输层使用的具体协议

编址

TCP/IP协议需要四个级别的地址:物理地址,逻辑地址,端口地址,特定应用程序地址,每种地址对应每一层。

物理地址

物理地址也称为链路地址,包含在链路层所使用的帧中。仅对链路(局域网或广域网)有效。该地址长度随网络不同而不同。
物理地址
如上图,物理地址10向87的节点发送了一个帧。两个结点通过链路相连接,在数据链路层,帧的首部包含这两个物理地址,一般目的地址在前,源地址在后,尾部有用于差错校验的附加位。发送放的数据链路层接收到上层数据之后,附加一个首部和一个尾部,成为一个帧。这个帧通过局域网传播,每个物理地址不是87的帧都丢弃这个帧,匹配这个物理地址的计算机将接收这个帧,检查帧后被卸掉首部尾部,交给上层。
绝大部分局域网使用48位(6字节)的物理地址,用12个十六进制数字表示。例如07:01:02:01:3c:4b
物理地址可以是单播多播广播物理地址。有写网络支持所有的这三种地址。比如以太网。不支持的就需要用单播来模拟多播或广播。

逻辑地址

如果说物理地址仅仅局限在局域网中,那逻辑地址就是放眼整个互联网(多个独立网络组成的网络)。不同局域网的物理地址格式是不一样的,所以就需要一种全局性的编制系统来唯一地表示每台主机,做到与底层网络无关。目前吟哦网的逻辑地址是32位地址。
逻辑地址
如上图,每个设备(计算机或路由器)在每条连接上都有一对地址(逻辑和物理)。在本例中,两台计算机都只连接了一条链路,因为只有一对地址。不过每个路由器都连接到了3个网络上(途中只有两个),因此每个路由器都有三对地址,一条连接对应一对地址。为什么路由器的每个连接都要有独立的逻辑地址呢?应该是路由功能选路的时候用到。
下面来阐述一下上图的整个过程:
1. 逻辑地址为A,物理地址为10为发送方,逻辑地址为P,物理地址为95为接收方。传输层将数据给了网络层之后,网络层为每个数据报增加源逻辑地址和目的逻辑地址(顺序正好和链路层相反),然后接着往数据链路层传?不,因为我们知道,数据链路层是增加了要增加物理地址,但是现在无法得知下一跳的物理地址(不要和最终的物理地址混淆,因为不在一个网络,根本跳不过去),然后网络层咨询他的路由表,并找出下一跳的路由器1,其逻辑地址是F,然后通过ARP协议,获取逻辑地址为F的路由器的物理地址,获取之后,数据报传到下一层,也就是链路层,链路层增加源物理地址和目的物理地址(刚才arp协议解析出来的地址),分装成帧,在网络中发送,除了路由器1,其他多有接收到该数据的都丢弃,因为和自己的物理地址不一致,然后数据最终传到了路由器1。
2. 这些分组经过路由器1协议栈的物理层,链路层,在网络层剥去物理地址,哎,发现目的逻辑地址不是自己,自己还需要继续转发这个数据报。下一跳在哪呢?这是路由器1会查看自己的路由表,找到路由器2,逻辑地址是N,ARP获取其物理地址为33。然后路由器1通过自己的T/99口发送这个数据报,在路由器1的链路层继续增加物理地址,但是此时的物理源地址已经不是以前的10了,变为了99,目的物理地址变为了33.但是逻辑地址是始终不变的。
3. 到达路由器2之后,经过逻辑地址选路,选择了从路由器2的Z/66口出,arp之后获取物理地址,在次替换物理地址,数据最终到达接收方。
物理地址逐跳而变,逻辑地址保持不变

端口地址

发送到主机并不是万事大吉,因为主机运行了太多的进程,所以需要一种方法对不同的进程打上标号。也就是这些进程也需要有地址,给一个进程指派的标号成为端口地址。TCP/IP中的端口地址长度为16位

底层技术

点到点广域网

在因特网中我们遇到的第二种类型的网络是点到点的广域网。它从公共网(如电话网)中获取一条线路来连接两个远程设备。

56K调制解调器

调制解调器
上传时,模拟信号必须在交换站采样,采样和噪声限制了通信,这表示上传的数据被限制在33.6kbps。但是下载时候没有采样的问题,信号不受量化噪音的影响,因而不会收到香农定理的容量限制。下载可达到56kbps。电话公司对话音信号的采样速率是每秒8000个采样,每个采样用8位编码,其中1位是用于控制,所以7*8000,就是56000bps,56kbps

DSL技术

数字用户线,使用本地用户线(电话线,注意是电话线,不是电话网)来支持告诉数字通信的技术,他是一组技术的统称。比如ADSL,VDSL,HDSL,SDSL。这组技术常标记为xDSL
ADSL,非对称数字用户线,不平均的分割了本地环路中居民用户的可用带宽。下行速度大大高于上行速度,不适合企业用户,因为企业用户对上行速度也有要求。分割带宽如下图

SDSL,对称数字用户线,为企业用户设计,把可用带宽平均分配到了下行和上行两个方向
HDSL,高数据率数字用户线,取代T-1线的计数
VDSL,甚高数据率数字用户线,类似ADSL,不过使用的是同轴电缆、光缆以及双绞线电缆,用于短距离传输。

交换广域网

不使用星形拓扑结构,而是采用交换机产生多条路径。

连接设备

转发器(或集线器)

工作在物理层的设备。携带信息的信号在网络中只能传播有限的距离,衰减会破坏信号的完整性。转发器就是在这个信号变弱之前接收这个信号,再生或者重演之前的比特模式,再发出去。在星型拓扑结构中,一个转发器就是一个多端口的设备,称为集线器,可以用作一个连接点,同时又具有转发的功能。例如A到B的一个分组到达集线器,集线器修复信号,然后广播,只有B接收这个数据,其他机器都丢弃。

网桥(两层交换机)

工作在物理层和数据链路层,物理层:放大信号,防止衰减;数据链路层:检查帧中的mac地址。
网桥有过滤功能,检查mac地址,决定从哪个口转发出去,避免了广播风暴。所以网桥是有一张表的,并且他不改变帧mac地址。
透明网桥,是可以令所有站都完全不知道他存在的一种网桥。网桥加入到系统或这从系统中删除,其他的机器是不知道的,不需要重新配置。
学习能力:动态专发表,从帧的运动规律中逐渐学习的网桥。
学习过程:假如A,B,C,D连接到网桥,且这个网桥的转发表为空,这时候,A发送数据到D,由于转发表没有这个映射,所以,他就向所有其他三个端口发送数据(洪泛方式),但是,网桥已经知道了A是从哪里过来的,所以就记录了A对应的端口。以后D想B发送数据,依然采用洪泛方式,此时记录了D对应的端口,时间长了之后,所以的机器都发送过数据,所有的物理地址对应的端口也就都知道了。
两层交换机,多端口网桥。
网桥端口较少,两个端口连接两个hub(集线器),多个主机连接到这两个集线器上面,所以网桥是一个端口对应多个mac地址,但是交换机有很多个端口,是一对一的,交换机可以当做是多个网桥的集合。

路由器(三层交换机)

三层设备,工作在物理层、数据链路层和网络层。对应的功能也就是再生信号、检查在帧中的物理地址、检查网络层地址进行路由选择。连接局域网,广域网
路由器与转发器或者网桥的区别:

举例说明:
路由器与网桥

网络层简介

交换

电路交换

在报文传递之前,源点和终点首先建立起一条物理电路,然后报文完整地从一端传递倒另一端。正如两个人打电话

分组交换

需要将来自上层的网络分成多个分组,再传输,到达目的地之后再重装。

网络层的分组交换

因特网的分组交换在网络层最初设计成无连接服务,不过最近的趋势是面向连接的服务转变。注意,这个是网络层的,和tcp没关系

无连接服务

无连接的服务,就是为了简单,每个数据报独立存在,可能经过不同的路径,乱序地到达目的地。只是上层的传输层从对这些数据报进行排序。此类网络中的交换机成为路由器。

每个分组在选择路由的时候都需要首部信息:源地址,目的地址。目的地址用于选择路由,源地址由于如果发生差错,则可以发送差错消息。
所以,在无连接的分组交换网中,转发判断的依据是该数据报的目的地址

面向连接的服务

这一部分以后再看,目前较多的是无连接的网络层
面向连接的服务,数据报之间是有关系的。在发送之前首先建立路径,出了包含源地址和目标地址外,还要有一个流标号(虚拟电路标识符)。

网络层的服务

经典例子

网络层服务-经典例子

源计算机提供的服务

源计算机的网络层提供四种服务:分组化处理、查找下一跳的逻辑地址、查找下一跳的物理地址(mac地址)、对数据报进行分片操作。如下图:
源计算机提供服务-网络层
网络层主要接收来自上层的几个信息:数据、数据长度、逻辑目的地址、协议ID以及服务类型(稍后讨论)。处理完成后,生成了数据报片和下一跳的mac地址,一并交给链路层。
分组化处理
任务就是要将来自上层的数据封装成到一个数据报中。添加首部(包括逻辑地址)、分片相关的一些信息、数据长度以及其他选项。网络层还要包含一个只计算该数据报首部的校验和。注意,上层只提供了目的逻辑地址,源地址则来自本层(任何主机都要知道自己的逻辑地址)。
查找下一跳的逻辑地址
如果不在同一个网络,则数据报就要交付给下一个路由器,通过路由表并找到下一跳的逻辑地址。
查找下一跳的MAC地址
网络层可以查找另一个表来确定下一跳的逻辑地址对应的mac地址。这个任务交给了ARP辅助协议。
分片
这时候就直接交付给链路层?还是不行,因为大多数局域网和广域网都会对一个帧所携带的数据的最大长度(MTU)加以限制,而网络层准备好的数据有可能会超过这个限制,所以需要被分为更小的单元。每个分片都需要有首部,和一些额外的信息,以指明该数据片在整个数据报中的位置。

各个路由器提供的服务

各个路由器提供的服务
一个数据报要涉及到路由器的两个接口,一个入口,一个出口。入口接收到数据,在网络层获取数据报,查找下一跳逻辑地址,查找下一跳的mac地址,如果有必要,还要分片,交付给链路层,链路层会添加首部,物理地址(注意,这时候mac地址和之前不一样了)。因为这个链路的MTU可能更小。路由器一般涉及到上层(传输层),当然有特殊情况,以后会讨论。

目的计算机提供的服务

这里就比较简单,不需要转发,但是需要重组数据报片,从中将数据提取出来保存,所有的数据到齐之后,重组完成交付上层。关键点,网络层会设置一个重组定时器。如果超市,所有数据报片会被销毁。并发送一个差错报文,此时所有的数据报都需要被重新发送。在重组完成之前,网络层不会向上层提交任何数据报片,对上层是完全透明的。并且分片是很复杂的过程,在中间的路由器也可能对数据报进行了再次分片。

其他与网络层相关的问题

差错控制

对损坏、丢失以及重复的数据报进行检测的机制,还包括纠错机制。网络层其实不提供真正意义的差错控制,链路层已经有了差错控制机制。链路层的逐跳的差错控制还不够彻底。因为如果在路由器处理数据时出现了差错(路由器有时候会继续分片操作),链路层是无法检测出来的。但是如果如果网络层提供同样的差错控制,效率就会很低。所以网络层对数据报增加检验和字段,可以控制在首部出现的任何损坏,而不是针对整个数据报,源点计算一下校验和,路由器再次计算一遍。比如防止目的地址损坏。网络层没有直接提供差错控制,但是使用了另一个协议ICMP。

流量控制

网络层不提供流量控制,原因:

拥塞控制

发送速度超过了网络或者路由其的容量,就可能发生拥塞现象。这时,某些路由器会丢失一些数据段,但是数据段丢失越多,情况会越糟糕,上层的差错控制就重发这些丢失分组的副本。
无连接网络解决拥塞的方法有:

面向连接网络中的拥塞控制:
以后再看。暂时不重要

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注