您的位置:首页 > 理论基础 > 计算机网络

熟悉基本通信协议(4)传输层

2011-11-17 19:29 309 查看
 第四、(传输层的作用)传输层知识框架
总体框架如下:

(一)传输层完成的功能和任务

(二)理解TCP的功能和工作过程

(三)理解UDP的主要内容

详细介绍:
一、传输层协议概述纲领(传输层由软件来实现,而数据链路层由软件和硬件共同实现)

(一)从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层,传输层也叫运输层。


  传输层的功能有:

  (1)从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务、它是和会话层的界面端口。

  (2)传输层为应用进程之间提供端到端的逻辑通信,具有缓冲作用.(但是网络层是为主机之间提供逻辑通信。这也是传输层和网络层协议的主要区别。)

  (3)传输层还要对收到的报文进行差错检测、流量控制等。

  (4)建立连接控制。传输层需要两种不同的协议,即面向连接的TCP和无连接的UDP。(这句话还可以说成传输层向上提供可靠和不可靠的逻辑通信信道。)

  (5)传输层实现复用(即在一个网络上创建多个逻辑连接)和分用。
(二)IP协议的作用范围是主机到主机之间,而传输层协议TCP和UDP的作用范围是不同主机上的不同应用进程之间。
(三)应用进程之间的通信

  (1)两个主机进行通信实际上就是两个主机中的应用进程互相通信。

  (2)应用进程之间的通信又称为端到端的通信。

  (3)运输层的一个很重要的功能就是复用和分用。应用层不同进程的报   文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务。

  (4)“运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。
(四)TCP/IP体系的传输层中的两个协议

  (1) 用户数据报协议 UDP (User Datagram Protocol)

  (2)传输控制协议 TCP (Transmission Control Protocol)

  TCP与UDP:

  (1)两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU (Transport Protocol Data Unit)。

  (2)TCP传送的数据单位协议是 TCP 报文段(segment)

  (3)UDP 传送的数据单位协议是 UDP 报文或用户数据报。
(五)TCP与UDP的详细介绍如下:

  (1)UDP 在传送数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。

  (2)TCP则提供面向连接的服务。TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源.

  (3)运输层的 UDP 用户数据报与网际层的IP数据报有很大区别。IP 数据报要经过互连网中许多路由器的存储转发,但 UDP 用户数据报是在运输层的端到端抽象的逻辑信道中传送的。

  (4)TCP报文段是在运输层抽象的端到端逻辑信道中传送,这种信道是可靠的全双工信道。但这样的信道却不知道究竟经过了哪些路由器,而这些路由器也根本不知道上面的运输层是否建立了 TCP 连接。
(六)端口的概念:

  (1)端口就是运输层服务访问点 TSAP。

  (2)端口的作用就是让应用层的各种应用进程都能将其数据通过端口向下交付给运输层,以及让运输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。

  (3)从这个意义上讲,端口是用来标志应用层的进程。

  (4)端口用一个 16 bit 端口号进行标志。

  (5)端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。

  (6)两类端口:一类是熟知端口,其数值一般为 0~1023,一般分配给大的公司或机构、分配给某个应用。当一种新的应用程序出现时,必须为它指派一个熟知端口。另一类则是一般端口,用来随时分配给请求通信的客户进程。(举例说明:比如我的机器上有应用程序A,进程号是1073(所谓进程号是由操作系统来识别的,也就是由本机来管理),那么我这边需要有源端口和目的端口,源端口是可以是1024~65535之间的随机数字,是未了区别本机的其他进程;目的端口是1021(必须小于1024,即上边的0~1023),那么如果我要发出请求向B,那么对方机器也有一个应用程序B,进程号是1097,而且B程序必须有一个1021端口即和请求方或者客户端相同的端口方能实现通信,相反,如果B想向A发出请求,则过程是一样的。)
(七)插口(socket)

  (1)TCP使用“连接”(而不仅仅是“端口”)作为最基本的抽象,同时将 TCP 连接的端点称为插口(socket),或套接字、套接口。

  (2)插口和端口、IP 地址的关系是:插口=IP+端口号

(八)同一个同一个名词 socket有多种不同的意思


  (1)应用编程接口 API 称为 socket API, 简称为 socket。

  (2)socketAPI 中使用的一个函数名也叫作socket。

  (3)调用 socket 函数的端点称为 socket。

  (4)调用socke t函数时其返回值称为 socket描述符,可简称为 socket。

  (5)在操作系统内核中连网协议的 Berkeley 实现,称为 socket 实现.
二、UDP概述(用户数据报协议)
(一)概述:UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。

  (1)发送数据之前不需要建立连接。

  (2)UDP的主机不需要维持复杂的连接状态表。

  (3)UDP用户数据报只有8个字节的首部开销。

  (4)网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。(备注:端口是用报文队列来实现的。)
(二)UDP用户数据报的首部数据格式。

  (1)用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。

  首部格式如下:

     伪首部|源端口|目的端口|长度|检验和

  字节数: 12| 2 | 2 | 2 | 2

  (2)数据字段的格式如下:

     源IP地址|目的IP地址| 0 | 17 |UDP长度

对应字节数: 4 | 4 | 1 | 1 | 2

  说明:在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。
三、传输控制协议TCP
(一)小流程:发送端的应用进程通过端口向TCP的发送缓存里写入数据块,然后以报文段的形式传递到收方的接收缓存,对方的应用进程从接收缓存里读取数据块。(备注:TCP不提供广播和多播服务,因为广播和多播只在二三层才有,即数据链路层和传输层。)
(二)TCP报文的格式如下(非常重要牢记)

  (1)源端口和目的端口字段——各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。

  (2)序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。

  (3)确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。

  (4)数据偏移——占 4 bit,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位不是字节而是 32 bit 字(4 字节为计算单位)。

  (5)保留字段——占 6 bit,保留为今后使用,但目前应置为 0。

  (6)紧急比特 URG —— 当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

  (7)紧急指针字段 —— 占 16 bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。(实际上就是当URG=1时候,这个指针会指向紧急数据的最后一个字节的序号,而不要把紧急指针和紧急比特当作一个概念)

  (8)确认比特 ACK —— 只有当 ACK = 1 时确认号字段才有效。当 ACK = 0 时,确认号无效。

  (9)推送比特 PSH (PuSH) —— 接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付.

  (10)复位比特 RST (ReSeT) —— 当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

  (11)终止比特 FIN (FINal) —— 用来释放一个连接。当FIN = 1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

  (12)窗口字段 —— 占 2 字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限.

  (13)检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部.

  (14)MSS是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。

  (15)选项字段 —— 长度可变。TCP 只规定了一种选项,即最大报文段长度 MSS (Maximum Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”

  (16)填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。
(三)TCP 的数据编号与确认

  (1)TCP协议是面向字节的。TCP 将所要传送的报文看成是字节组成的数据流,并使每一个字节对应于一个序号。

  (2)在连接建立时,双方要商定初始序号。TCP 每次发送的报文段的首部中的序号字段数值表示该报文段中的数据部分的第一个字节的序号。

  (3) TCP的确认是对接收到的数据的最高序号表示确认。接收端返回的确认号是已收到的数据的最高序号加 1。因此确认号表示接收端期望下次收到的数据中的第一个数据字节的序号。
(四)TCP 的流量控制与拥塞控制

  滑动窗口的概念

  (1)TCP采用大小可变的滑动窗口进行流量控制。窗口大小的单位是字节。(朋友们千万要记住:在得到对方确认后就前移窗口,如果得不到确认窗口大小不变。)

  (2)在 TCP 报文段首部的窗口字段写入的数值就是当前给对方设置的发送窗口数值的上限。

  (3)发送窗口在连接建立时由双方商定。但在通信的过程中,接收端可根据自己的资源情况,随时动态地调整对方的发送窗口上限值(可增大或减小).

  (举例说明:发送端要发送 900 字节长的数据,划分为 9 个 100 字节长的报文段,而发送窗口确定为 500 字节。发送端只要收到了对方的确认,发送窗口就可前移。发送 TCP 要维护一个指针。每发送一个报文段,指针就向前移动一个报文段的距离。发送端已发送了 400 字节的数据,但只收到对前 200 字节数据的确认,同时窗口大小不变。现在发送端还可发送 300 字节。发送端收到了对方对前 400 字节数据的确认,但对方通知发送端必须把窗口减小到 400
字节。现在发送端最多还可发送 400 字节的数据)
(五)慢开始和拥塞避免

  (1)发送端的主机在确定发送报文段的速率时,既要根据接收端的接收能力,又要从全局考虑不要使网络发生拥塞。

  (2)因此,每一个 TCP 连接需要有以下两个状态变量:

接收端窗口 rwnd (receiver window) 又称为通知窗口(advertised window)。拥塞窗口 cwnd (congestion window)。
(六)接收端窗口 rwnd 和拥塞窗口 cwnd

  (1) 接收端窗口 rwnd:这是接收端根据其目前的接收缓存大小所许诺的最新的窗口值,是来自接收端的流量控制。接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。

  (2) 拥塞窗口 cwnd (congestion window):是发送端根据自己估计的网络拥塞程度而设置的窗口值,是来自发送端的流量控制。
(七)发送窗口的上限值

  (1)发送端的发送窗口的上限值应当取为接收端窗口 rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确定:

发送窗口的上限值 = Min [rwnd, cwnd]

  (2)当 rwnd < cwnd 时,是接收端的接收能力限制发送窗口的最大值。

  (3)当 cwnd< rwnd 时,则是网络的拥塞限制发送窗口的最大值.
(八)慢开始算法的原理

  (1)在主机刚刚开始发送报文段时可先将拥塞窗口 cwnd 设置为一个最大报文段 MSS 的数值。(注意:一开始要设置为MSS)

  (2)在每收到一个对新的报文段的确认后,将拥塞窗口增加至多一个 MSS 的数值。(因为得到确认后要前移,但是拥塞窗口还要设置最多为MSS)

  (3)用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理.

  (备注:“拥塞避免”并非指完全能够避免了拥塞。利用以上的措施要完全避免网络拥塞还是不可能的。“拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。)
(九)快重传和快恢复

  (1)快重传算法规定,发送端只要一连收到三个重复的 ACK 即可断定有分组丢失了,就应立即重传丢失的报文段而不必继续等待为该报文段设置的重传计时器的超时。

  (2)不难看出,快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。
(十)TCP的重传机制

  (1)重传机制是 TCP 中最重要和最复杂的问题之一。

  (2)TCP每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段.。
(十一)往返时延的方差很大。

  由于TCP 的下层是一个互连网环境,IP 数据报所选择的路由变化很大。因而运输层的往返时延的方差也很大。
(十二)TCP的运输连接管理

  运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。

  连接建立过程中要解决以下三个问题:


  (1)要使每一方能够确知对方的存在。

  (2)要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。

  (3)能够对运输实体资源(如缓存大小,连接表中的项目等,我在这里强调一下项目的概念,比如路由表中有很多项目,如第一条包括网络地址、子网掩码和下一跳的接口等,然后下一条也包括这些内容,这一条一条的或者一行叫做一个项目,所以路由表中有多个项目)进行分配。
(十三)客户服务器方式。

  (1)TCP的连接和建立都是采用客户服务器方式。

  (2)主动发起连接建立的应用进程叫做客户(client)。

  (3)被动等待连接建立的应用进程叫做服务器(server).
(十四)用三次握手建立TCP连接。

  A:主动打开 B:被动打开

  连接请求:=>?SYN, SEQ = x

  SYN, ACK, SEQ = y, ACK= x + 1 <=确认

   确认 =>?ACK, SEQ = x + 1, ACK = y + 1
(十五)建立TCP连接(要牢记)

  (1)A 的 TCP 向 B 发出连接请求报文段,其首部中的同步比特 SYN 应置为 1,并选择序号 x,表明传送数据时的第一个数据字节的序号是 x。

  (2)B的 TCP 收到连接请求报文段后,如同意,则发回确认。

  (3)B 在确认报文段中应将 SYN 置为 1,其确认号应为 x + 1,同时也为自己选择序号 y。

  (4)A 收到此报文段后,向 B 给出确认,其确认号应为 y + 1。

  (5)A的 TCP 通知上层应用进程,连接已经建立。

  (6)当运行服务器进程的主机 B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程,连接已经建立。

  至此,整个连接已经全部释放

  应用进程 ==> FIN, SEQ = x 通知主机应用进程B

  释放连接 ACK, SEQ = y, ACK= x + 1?<==确认

  A 不再发送报文

  (说明:从 A 到 B 的连接就释放了,连接处于半关闭状态。相当于 A 向 B 说:“我已经没有数据要发送了。但你如果还发送数据,我仍接收。”)
(十六)TCP的有限状态机

  (1)为了管理因特网,在网络管理中心设有管理信息库 MIB (Management Information Base)。(备注:这个管理信息库是在计算机中存在的,不要把它想象成额外的一个机构或者其他的东西)

  (2)管理信息库存放着各主机的 TCP 连接表。

  (3)TCP连接表对每个连接都登记了其连接信息。除本地和远地的 IP 地址和端口号外,还要记录每一个连接所处的状态。

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息