计算机网络:传输层和网络层
来源:互联网 发布:网络剧怎么赚钱 编辑:程序博客网 时间:2024/04/30 02:18
传输层介绍
传输层是客户程序和服务器程序之间的联络人,是一个进程之间的连接。
传输层服务
首先了解一下传输层所提供的服务。
进程到进程通信
TCP/IP协议簇的5层模型:
其中,网络层负责计算机层次的通信(主机到主机通信),网络层协议只把报文传递到目的计算机。然而,报文仍然需要递交给正确的进程,传输层协议即负责进程到进程的通信。
寻址:端口号
在客户-服务器模式中,客户进程和服务器进程有相同的名字,例如,如果要从远程机器上获得日期和时间,我们需要在本地主机上运行Daytime客户进程并在远程机器上运行Daytime服务进程。
操作系统都支持多用户和多程序运行,所以对通信来说,我们必须定义本地主机、本地进程、远程主机以及远程进程。我们使用IP地址来定义本地主机和远程主机,而使用端口号来定义进程。
在TCP/IP协议簇中,端口号是在0到65535之间的16位整数。
由于客户进程的生命周期通常很短,所以一般使用临时端口号,推荐值为大于1023。服务器进程必须使用一个熟知端口号。
ICANN将端口分为3类:
熟知端口:端口号范围:0~1023,由ICANN分配和控制;
注册端口:端口号范围:1024~49151,可在ICANN注册以防重复;
动态端口:端口号范围:49152~65535,即不受控制也不需要注册,可以由任何进程使用,是临时或私有端口号。
在TCP协议簇中的传输层协议需要IP地址和端口号,一个IP地址和一个端口号结合起来称为套接字地址。套接字地址唯一定义了一个进程。
封装与解封装
为了将报文从一个进程发送到另一进程,传输层协议负责封装与解封装报文,传输层的有效载荷称为分组。
流量控制
从数据的角度,如果当发送方生产数据项时,无需事先获得消费者的请求就会发送它们,这种传递称为推,如果生产者在消费者请求这些数据项之后进行发送,称为拉。
差错控制
网络层(IP)是不可靠的,如果应用层需要可靠性,我们需要使传输层变得可靠,要加入差错控制服务。传输层的差错控制负责以下几个方面:
1. 发现并丢弃被破坏的分组。
2. 记录丢失和丢弃的分组并重传它们。
3. 识别重复分组并丢弃它们。
4. 缓冲失序分组直到丢失的分组到达。
为了实现以上功能,需要对分组添加序号。
无连接和面向连接服务
传输层不关心分组的物理路径是否相同,传输层的无连接服务意味着分组之间的独立,面向连接服务意味着依赖。
传输层协议
简单协议
最简单的无连接协议既没有流量控制也没有差错控制。
发送方的传输层从发送方的应用层接收到报文,从中建立一个分组并发送它;接收方的传输层从网络层接收到这个分组,从分组中提取报文并传递到应用层。发送方一个接一个发送分组,甚至不考虑接收方能否承受。
UDP是这个最简单协议的轻微改动版。
停止-等待协议
停止-等待协议使用流量和差错控制。如果信道又粗又长,那么使用停止-等待协议将非常低效,因为它没有流水线。
回退N帧协议
为了提高传输效率(充满管道),当发送端等待接收端的确认信号时,必须传输多个分组。第一个实现这个目标的协议是回退N帧协议。该协议的关键是在于发送端可以发送多个分组,而接收端只能缓冲一个分组。保存被发送分组的副本,直到确认到达。
事实上,停止-等待协议就是一种特殊的回退N帧协议,只不过发送窗口大小为1。
选择性重复协议
回退N帧协议简化了接收方的进程,接收方只记录一个变量,失序的分组被简单地丢弃了。然而实际的下层网络层如果丢失了很多分组,那么这个协议是低效的。因为每当一个分组丢失或被破坏,发送方要重新发送所有未完成分组,即使有些失序分组已经被安全完整地接收了。
选择性重复协议只是选择性重发分组,即那些确实丢失的分组。
双向协议:捎带
使用捎带协议来提高双向协议的效率。当一个分组携带数据从A到B时,它也携带了确认反馈,这些信息确认了来自B的分组已到达;反之也一样。
因特网传输层协议
这里只讨论UDP和TCP协议。
UDP是不可靠的无连接传输层协议,由于在应用中简单高效而被使用,在那些应用中差错控制由应用层进程提供。
TCP是可靠的面向连接协议。
当然也有其他协议,如SCTP。
UDP:用户数据报协议
UDP只负责提供进程到进程之间的通信,此外没有给IP服务增加任何东西。
用户数据报
UDP的分组称为用户数据报,有8字节的固定头部,由4个字段组成,每个字段2字节。
头两个字段定义了源和目的端口号,第三个字段定义了用户数据报的总长,即头部加数据的长度。16位可以定义的总长度范围是0到65535。最后一个字段可以携带可选校验和。
UDP适用于这样的应用:他要求简单的请求-响应通信,而无需考虑流量控制和差错控制。对于需要传送成块数据的进程(如FTP),则通常不适用UDP。
传输控制协议:TCP
TCP显式定义了连接建立、数据传输以及连接拆除阶段来提供面向连接服务。
TCP提供的服务
流传递服务
与UDP不同,TCP是面向流的协议。TCP建立一种环境,在其中,两个进程好像由一个假想的“管道”连接。
发送和接收缓冲区
发送和接收的速度可能不同,所以TCP需要用于存储的缓冲区。实现缓冲区的一种方法是使用以一字节为存储单元的循环数组。
全双工通信
TCP提供全双工通信,每个方向TCP都有发送和接收缓冲区,它们能在双向发送和接收段。
TCP连接
TCP使用IP服务向接收方传递独立的段,但它控制连接本身。如果一个段丢失了或损坏了,则重新发送它。与TCP不同,IP不知道这个重新发送的过程。
TCP需要3个过程:连接建立、数据传输和连接终止。
建立连接(三次握手)
假设客户端进程想要和服务器进程建立连接,首先,服务器告诉它的TCP,他已准备好接收一个连接。这就称为被动打开。
客户程序发出请求进行主动打开,于是正式开始三次握手。
- 客户发送的第一个段是SYN段,其中只有SYN标志被置位,占用一个序号。它是一个控制段,但它不携带数据。
- 服务器发送第二个段,两个标志位SYN和ACK置位的段。
- 客户发送第三个段,使用ACK标志和确认序号字段来确认收到了第二个段。
连接终止
交换数据双方的任一方都可关闭连接,对连接终止的实现有两个方法:三次握手和带有半关闭选项的第四次握手。
三次握手
- 当客户进程接收到一个关闭命令后,客户的TCP发送第一个段:FIN段,其中的FIN位置位。
- 服务器TCP发送第二个段:FIN+ACK段。
- 客户端发送最后一段:ACK段。
半关闭
在TCP中,一端可以停止发送数据后,再继续接收数据。这就是所谓的半关闭。
网络层介绍
网络层提供主机到主机的通信。
网络层服务
分组
网络层的首要责任一定是分组:在源端将负载封装进网络层分组并且在目的端从网络层分组中解封负载。
路由
网络层负责将分组从源端路由到目的端。一个物理网络(多个LAN和多个WAN)是网络和连接它们的路由器的组合,从源端到目的端有多个路由器。网络层负责寻找最佳的路由。这就需要一些特点策略来定义最好的路由。
网络层通过使用一些路由协议来帮助路由器创建当分组到达时的一致性表格。
转发
转发可以定义为当分组到达路由器的一个端口时,路由器所采用的行为。决策表又称转发表,有时称为路由表。当路由器从它所连接的网络接收到一个分组时,它需要将分组转发到另一个所连接的网络上。
分组交换
路由器是一个创建了输入端口和输出端口连接的交换机,就像将输入连接到输出让电流流动的开关。
在网络层, 来自上层的报文被分割成可管理的分组,每个分组被从网络中发送。目的端在将报文传递到上层之前,等待所有属于同一个报文的分组到达。分组交换网络可以使用两个不同的方法来路由分组:数据报方法和虚电路方法。
数据报方法:无连接服务
简单来说,一份报文中的分组可能会也可能不会通过同一条通向目的端的路径。
虚电路方法:面向连接服务
属于同一报文的所有分组之间存在联系,在报文中的所有数据报被发送之前,应该建立虚连接从而定义数据报的路径。在建立连接之后,数据报可以沿着相同的路径发送。
分组不仅包含源和目的地址,而且包含流标号,它定义了分组应该经过的路径。
网络层性能
网络的性能可以通过延迟、吞吐量、分组丢失来度量。
延迟
网络中的延迟可以分为四类:发送延迟、传播延迟、处理延迟和排队延迟。
发送延迟是指将分组的所有位都发送完需要的时间,分组越长,岩松延迟越长。
传播延迟是指在传播介质中一个位从A点到B点所消耗的时间,取决于介质的传输速度。
处理延迟是指路由器从它的输入端接收分组、去除头部、执行差错检测并将分组传递到输出端口所需要的时间。
排队延迟是指分组在输入和输出队列中的等待时间。
吞吐量
网络中任意点的吞吐量被定义为一秒内通过这个点的位的数量,即数据发送速率。吞吐量遵循数据链路中的木桶效应,即由最小吞吐量决定。
路由器的结构
元件
我们可以说路由器有4个元件:输入端口、输出端口、路由处理器以及交换结构。
输入端口发挥物理层和链路层功能,也包括缓冲队列,用来在分组被发送到交换网络层之前存储它们。
输出端口发挥和输入端口相反的功能。
路由处理器发挥网络层功能,目的地址用来找到下一条地址以及输出端口号,同时分组从这个输出端口号发送出去。这个行为称为表格查询。
交换结构负责将分组从输入队列移动到输出队列。
网络层协议
当前版本的网络层协议可以被看做是一个主要协议和三个辅助协议。主要协议即因特网协议第四版(IPv4),负责网络层的分组、转发和传递。
因特网控制报文协议第四版(ICMPv4)帮助IPv4处理一些网络层传递中可能发生的错误;因特网组管理协议(IGMP)用于帮助IPv4多播;在网络层地址映射到链路层地址时,地址解析协议(ARP)用来将网络和数据链路层联合起来。
IPv4是一个不可靠且无连接的数据报协议——一个尽力而为的传递服务。IPv4是使用数据报的分组交换网的无连接网络。
IPv4数据报格式
IP使用的分组称为数据报,它是可变长分组,由两部分组成:头部和数据。头部长度可有20到60个字节组成,包含有与路由选择和传输相关的重要信息。
版本号
这4位版本号(VER)字段定义协议的版本,显然是4。
头部长度
这4位(HLEN)字段以4字节定义数据报头部的总长度。
差分服务
总长
这个16位字段定义了一个以字节计算的IP数据报总长度,它帮助接收设备知道什么时候分组完全到达。
标识、标记以及分段偏移
生存时间
由于路由协议的某些故障,数据报可能在因特网中循环,一遍又一遍地访问某些网络而没有到达目的端。生存时间字段(TTL)用于控制数据报访问的最大路由器数,超过则丢弃。
协议
在TCP/IP中,分组的数据段称为负载,它是另一个协议中的整个分组。例如,IP的数据报可以携带属于任意传输层协议如UDP或TCP的分组。
头部校验和
源和目的地址
选项
负载
IPv4数据报安全
IP协议易受三个安全问题的影响:分组嗅探、分组修改、IP欺骗。
分组嗅探
入侵者可能劫持一个IP分组并制作一份拷贝。这类攻击非常难以发现,但可以通过分组加密使得攻击者的企图无效。
分组修改
攻击者拦截分组,改变其内容,并将新的分组发送到接收方。可以使用数据完整性机制来发现这类攻击。
IP欺骗
一个攻击者可以伪装成其他人并创建一个IP分组,它携带另一个电脑的源地址。
总的说来,现在可以使用称为IPSec的协议避免以上攻击。
IPv4地址
一个IPv4地址是32位地址,它唯一并通用地定义了一个连接在因特网上的主机或路由器。注意,IP地址是连接的地址,如果设备移动到另一个网络,IP地址可能会改变。
IP地址是唯一的,而如果某个设备有两个到因特网的连接,那么它就有两个IP地址,
地址空间
地址空间是一个系统能够使用地址的总个数。IPv4使用32位地址,因此地址空间有2的32次方,大于40亿。
标记法
IPv4有三种常用的标记法:二进制标记法(基数2)、点分十进制标记法(基数256)以及十六进制标记法(基数16)。
例如:
二进制:10000000 00001011 00000011 00011111点分十进制标记法:128.11.3.31十六进制标记法:800B031F
地址层次结构
IPv4地址和邮箱地址一样,是有层次结构的,但是它被分为了两部分:前缀和后缀。前缀定义了网络,后缀定义了代码(设备到因特网的连接)。
前缀可以是固定长度的,也可以是变长的。定长的前缀称为分类寻址,现在已被废弃;变长的前缀叫作无类寻址。
分类寻址
分类寻址是定长前缀的,但还是有3种长度的前缀。(n=8,n=16以及n=24),整个地址空间分为五类(A,B,C,D,E类)。
但这种设计造成了地址耗尽,大多数地址被浪费了。
尽管分类寻址被废止了,但它的优势是前缀长度是固有的,不必提供额外信息来提取前缀和后缀。
无类寻址
为了补偿地址耗尽,类特权被从分配中消除。
不像分类寻址,无类寻址中前缀长度是可变的,前缀的长度可以在0到32之间变化。网络的大小与前缀的长度成反比。一个小的前缀意味着较大的网络;一个大的前缀意味着较小的网络。
前缀长度:斜杠标记法
如果给出地址,如何找出其前缀的长度呢?由于地址中的前缀长度不是固定的,我们将前缀的长度n添加到地址中,用斜杠来分隔。如:
12.24.76.8/823.14.67.92/12220.8.24.255/25
其中的8、12、25就是前缀长度。
从地址中抽取信息
给定任一地址,通常想要知道:地址的数目、块中首地址和末地址。由于前缀长度n已给出,于是有:
- 块中地址的数量通过N=2^(32-n)得出。
- 首地址:保持最左n位不变,并将最后侧的(32-n)位全设为0。
- 末地址:保持最左n位不变,并将最后侧的(32-n)位全设为1。
例如:
//一个无类地址为 167.199.170.82/27//网络中地址数量是2^(32-27)=2^5=32个地址
首地址:网络地址
首地址即网络地址,它用于将分组路由到目的端。网络地址就是网络的标识符。
块分配
块地址的分配责任交给一个全球性机构:因特网名称和编号分配组织(ICANN)。然而ICANN通常不向因特网个人用户分配地址,它给ISP分配一大块地址。
单播路由选择
在互联网中,如果数据报只发向一个目的端(一对一传递),我们使用单播路由选择,如果数据报发向多个目的端,我们使用多播路由选择,如果数据报应该传递到互联网中的所有主机,我们使用广播路由选择。
一般思想
在单播路由中,在转发表的帮助下,分组被一跳一跳地从源端路由到目的端。源端和目的端不需要转发表,只有将互联网中网络连接到一起的路由器才需要转发表。
从源端到目的端有很多条路由,分组必须决定采取哪条路由。
在下面的讨论中,互联网以带权图的形式表示。图由结点和边的集合表示。
最小代价路由
当使用带权图模型表示互联网时,从源路由器到目的路由器的最佳路由就是找到两者之间的最小代价。换言之,源路由器在所有可能的路由中找到代价最小的那条作为到目的路由器的路由。
最小代价树
最小代价树以源路由器为根,跨越了整个图,访问了所有其余结点。
路由选择算法
距离向量路由选择
距离向量(邻接表)
最小代价路由树是从根结点到所有目的结点的最小代价路径的组合,这些路径在图上连接在一起形成树。
距离向量的名称定义了根节点,索引定义了目的结点,每个单元格的值定义了从根到目的结点的最小代价。
和最小代价树不同,距离向量没有给出到目的结点的具体路径,而是仅仅给出了到目的结点的最小代价。
问题在于互联网中的每个结点最初如何创建相应的向量:结点从接口发送一些问候报文并发现临站的身份以及接口到临站的距离,结点把获得的距离插入相应的单元格,从而建立一个简单的距离向量,并且将其他单元格的值设为无限。
下面,为了向外扩充改进向量,互联网的结点需要通过交换信息相互帮助:在每个结点创建它的向量后,它向临站发送向量的副本。在一个结点从临站接收到一个距离向量后,它使用Bellman-Ford算法来更新距离向量。
链路状态路由选择
链路状态路由选择使用链路状态来定义链路(一条边)的特征,链路代表了互联网中的网络。
链路状态数据库(邻接矩阵)
每个结点都需要网络的完全图,这意味着它需要直到每条链路的状态,所有链路状态的集合称为链路状态数据库(LSDB),整个互联网只有一个LSDB。LSDB可以使用二维数组(矩阵)来表示,其中每个单元格的值定义了相应链路的代价。
问题在于如何创建这个LSDB,这可以通过称为泛洪的过程完成。每个结点可以给所有临站(与其直接相连的结点)发送问候报文,来收集每个临站的两条信息:节点的标识以及链路的代价。这两个信息的组合称为LS分组。
根据LSDB创建最小代价树的算法是迪杰特斯拉算法。
路径向量路由选择
距离向量路由选择和链路状态路由选择都是基于最小代价目标的,然而在一些例子这个目标不是优先考虑的事情,比如考虑到有些路由的安全性。
路径向量路由选择不基于最小代价路由,它采用的路由由源端控制决定。
单播路由选择协议
互联网结构
有很多私人通信公司运营的骨干网,他们提供全球连接。骨干网通过对等点连接在一起。
在较低层次有一些供应商网络使用骨干网来进行全球连接。
最终是一些使用提供商网络所提供服务的用户网络。
以上三种实体都可以称为因特网服务提供商或ISP,但分别处于不同的层次。
分层路由选择
当今的因特网中的路由选择不能只使用一种协议,理由有两点:扩展性问题和管理问题。
扩展性问题意味着转发表会非常巨大,在其中寻找目的端会相当耗时。
管理问题意味着每个ISP需要能控制自己的子网和路由器。
分层路由意味着将每个ISP看做一个自治系统(AS)。每个AS可以运行满足需要的路由协议,而全局因特网只运行一个全局协议来将所有AS连接到一起。
多播路由选择
我们需要区分多播和多个单播。
多播从源地址开始时是单个分组,这个分组被路由器复制。任何两个路由器之间只有分组的一份副本。
多个单播中,两个路由器之间可能有多个副本在传递,如一个人给一组人发送电子邮件。
多播比单薄效率更高,要求带宽小。多播在访问分布式数据库、电话会议、远程学习时得到应用。
下一代IP:IPv6
IPv6在增加了IPv4地址空间的同时重新设计了IP分组的格式并修改了一些辅助协议。以下给出了IPv6协议的主要变化:
- 更大的地址空间。IPv6地址是128位长,而IPv4是32位的。
- 更好的头部地址。
- 新的选项。
- 允许扩展。
- 支持资源分配。
- 支持更多的安全性。
从IPv4到IPv6的过渡
有三种策略实现新旧协议的平缓过渡:双协议栈、隧道以及头部转换。
双协议栈
IETF推荐所有的主机在完全过渡到IPv6前,使用双协议栈。换言之,一个站应该同时运行IPv4和IPv6,直到整个因特网使用IPv6。
当把分组发送到目的端时,为了确定使用哪个版本,主机要向DNS进行查询,如果DNS返回一个IPv4地址,那么源主机就发送一个IPv4分组;否则发送一个IPv6分组。
隧道技术
当两台使用IPv6的计算机要进行通信,但其分组要通过使用IPv4的区域时,就要使用隧道技术。当进入这种区域时,IPv6分组要封装成IPv4分组,当分组离开该区域时,再去掉这个封装。
- 计算机网络:传输层和网络层
- 计算机网络应用层和传输层及网络层协议有哪些?
- 计算机网络----传输层
- 【计算机网络】传输层
- 计算机网络基础--传输层
- 计算机网络学习-传输层
- 计算机网络传输层相关
- 【计算机网络】传输层
- 计算机网络读书笔记-----传输层
- 计算机网络:传输层
- 计算机网络--传输层
- 传输层--计算机网络
- 计算机网络-传输层
- 计算机网络-传输层
- 计算机网络之传输层
- 计算机网络---传输层
- 计算机网络--传输层
- 计算机网络传输层介绍
- 对于django中mysql中文乱码以及调用admin出错的解决办法
- Python logging模块详解
- 网络设备经典比喻
- 记数据结构之有向图的深度优先遍历,广度优先遍历
- 如何找出一个字符串中第一次且只出现一次的字符
- 计算机网络:传输层和网络层
- 常用逻辑芯片
- spring mvc 的Controller类是单例(singleton)的吗?
- 拖欠的Java笔记
- OpenCV 3 - 编译更强大的OpenCV(三) - BUG与崩溃齐飞
- C++实现操作系统进程调度(时间片轮转法)
- [十一]java作业
- 51Nod 1278 相离的圆
- poj 3259 Wormholes