1.运输层概述:


作用:复用和分用。
根据应用程序的不同需求,运输层有两种不同的运输协议,即面向连接的TCP和无连接的UDP。

运输层向高层用户屏蔽了网络核心的细节(如网络拓扑、所采用的路由选择协议),它使得应用进程看见的就是好像两个运输层实体之间有一条端到端的逻辑通信信道。
TCP/IP的运输层有两个主要协议:
(1)用户数据报协议UDP(User Datagram Protocol)--快速、简单、不可靠
(2)传输控制协议TCP(Transmission Control Protocol)--可靠
运输层这条逻辑通信信道对上层的表现因运输层使用的不同协议而有很大的差别。
TCP提供面向连接的服务,但不提供广播或多播服务,尽管下面的网络是不可靠的(只是尽最大努力交付),但这种逻辑通信信道就相当于一条全双工的可靠信道。(全双工:既可以发送..也可以接收..)
当运输层采用无连接的UDP协议时,这种逻辑信道是一条不可靠信道。(无连接,无所谓全双工、半双工)
为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法对TCP/IP体系的应用进程进行标志。
解决这个问题的方法就是在运输层使用协议端口号,简称端口。
端口用一个 16位端口号进行标志。端口号只具有本地意义,即端口号是为了标志本计算机应用层中的各进程。在互联网中,不同计算机的相同端口号是没有联系的。由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的IP地址,而且还要知道对方的端口号。

2. 用户数据报协议UDP
协议传送单元叫做UDP报文或用户数据报。
UDP只在IP的数据报服务之上增加了很少一点的功能:复用和分用的功能;差错检测的功能。
UDP的主要特点:
UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。
UDP使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
UDP是面向报文的。(UDP对于应用程序传送的报文,添加首部后就向下交付IP层;UDP对于IP层交上来的报文,去除首部后就原封不动地交付给上层。 )--保证了快速性;报文需要大小合适
UDP支持一对一、一对多、多对一和多对多的交互通信。
UDP的首部开销小,只有8个字节。

长度:数据和首部的长度和。最小为8个字节。
17:UDP的协议字段。
伪首部:计算检验和的时候使用。
3.传输控制协议TCP
协议传送单元叫TCP报文段。
TCP的特点:
TCP是面向连接的运输层协议。
每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一)。
提供可靠传输。
TCP提供全双工通信,收发两端都有缓存。
面向字节流。


TCP连接是一条虚连接而不是一条真正的物理连接。
TCP对应用进程一次把多长的报文发送到TCP的缓存中是不关心的。
TCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。
TCP可把太长的数据块划分短一些再传送。TCP也可等待积累有足够多的字节后再构成报文段发送出去。
4.TCP报文格式

源端口和目的端口字段--各占2字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
序号字段--占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
确认号字段--占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
数据偏移(即首部长度)--占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。“ 数据偏移”的单位是32位字(以4字节为计算单位)。
保留字段--占6位,保留为今后使用,但目前应置为0。
紧急URG--当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
确认ACK--只有当ACK = 1时确认号字段才有效。当ACK= 0时,确认号无效。确认号无效的情况:第一报或握手等。
推送PSH (PuSH) --接收TCP收到PSH= 1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向.上交付。
复位RST (ReSeT)--当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。.
同步SYN--同步SYN=1表示这是一个连接请求或连接接受报文。
终止FIN (FINish)--用来释放一个连接。FIN= 1表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
窗口字段--占2字节,用来让对方设置发送窗口的依据,单位为字节。
检验和--占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。
紧急指针字段--占16位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。
选项字段--长度可变。TCP最初只规定了一种选项,即最大报文段长度MSS。MSS”告诉对方TCP:‘‘我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节。”
填充字段--这是为了使整个首部长度是4字节的整数倍。
5.TCP的运输连接管理

TCP连接的建立采用客户服务器方式。
主动发起连接建立的应用进程叫做客户(client)。
被动等待连接建立的应用进程叫做服务器(server)。
TCP建立连接的过程叫做握手。
握手需要在客户和服务器之间交换三个TCP报文段。称之为三报文握手。
- A的TCP向B发出连接请求报文段,其首部中的同步位SYN= 1,并选择序号seq = x,表明传送数据时的第一个数据字节的序号是 X。
- B的TCP收到连接请求报文段后,如同意,则发回确认。B在确认报文段中应使SYN=1,使ACK= 1,其确认号ack=x+1,自己选择的序号seq= y。
- A收到此报文段后向B给出确认,其ACK=1,确认号ack=y+1。A的TCP通知上层应用进程, 连接已经建立。
- B的TCP收到主机A的确认后,也通知其上层的应用进程: TCP连接已经建立。

TCP连接释放过程比较复杂。数据传输结束后,通信的双方都可释放连接。
TCP连接释放过程是四报文握手。
- 数据传输结束后,通信的双方都可释放连接。现在A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP
连接。A把连接释放报文段首部的FIN=1,其序号seq=u,等待B的确认。 - B发出确认,确认号ack= u+ 1,而这个报文段自己的序号seq = v。TCP服务器进程通知高层应用进程。从A到B这个方向的连接就释放了,TCP连接处于半关闭状态。B若发送数据,A仍要接收。
- 若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。
- A收到连接释放报文段后,必须发出确认。

MSL-- Maximum Segment Lifetime ,最长报文寿命
- A为什么必须等待2MSL的时间?
- 第一,为了保证A发送的最后一个ACK报文段能够到达B。
- 第二,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。
6.可靠传输
停止等待协议:
“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
全双工通信的双方既是发送方也是接收方。
为了讨论问题的方便,我们仅考虑A发送数据而B接收数据并发送确认。因此A叫做发送方,而B叫做接收方。


自动重传请求ARQ (Automatic Repeat reQuest)
意思是重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组。
使用确认和重传机制,就可以在不可靠的传输网络上实现可靠的通信。



连续ARQ协议:
发送方维持的发送窗口,意义是:位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。这样,信道利用率就提高了。
连续ARQ协议规定,发送方每收到一个确认就把发送窗口向前滑动一个分组的位置。

累积确认:
接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示这个分组为止的所有分组都已正确收到了。
优点:容易实现,即使确认丢失也不必重传。
缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。
Go-back-N (回退N),表示需要再退回来重传已发送过的N个分组。
eg:如果发送方发送了前5个分组,而中间的第3个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。
TCP可靠通信的具体实现
TCP连接的每一端都必须设有两个窗口一个发送窗口和一个接收窗口。
TCP的可靠传输机制用字节的序号进行控制,TCP所有的确认都是基于序号而不是基于报文段。
TCP两端的四个窗口经常处于动态变化之中。TCP连接的往返时间RTT也不是固定不变的,需要使用特定的算法估算较为合理的重传
时间。






需要强调三点:
第一,A的发送窗口并不总是和B的接收窗口一样大(因为有一定的时间滞后)。
第二,TCP标准没有规定对不按序到达的数据应如何处理。通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。
第三,TCP要求接收方必须有累积确认的功能,这样可以减小传输开销。
接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。
但请注意两点:第一,接收方不应过分推迟发送确认,否则会导致发送方不必要的重传,这反而浪费了网络的资源。
第二,捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据。
TCP每发送一个报文段,就对这个报文段设置一次计时器。
只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。

问题:若收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,那么能否设法只传送缺少的数据而不重传已经正确到达接收方的数据?
答案:选择确认SACK(Selective ACK)就是一种可行的处理方法。

如果要使用选择确认,那么在建立TCP连接时,就要在TCP首部的选项中加上“允许SACK"选项,而双方必须都事先商定好。
由于首部选项的长度最多只有40字节,而指明一个边界就要用掉4字节,因此在选项中最多只能指明4个字节块的边界信息。
8.流量控制
9.拥塞控制
原理:
网络资源受限,发送端主动控制
TCP拥塞控制:
慢开始(小初始、指数增长 2^n)
拥塞避免(加法增大、乘法减小)
快重传
快恢复
主动队列管理AQM:
随机早检测(RED)
队列丢弃策略
TCP/IP运输层详解
3694

被折叠的 条评论
为什么被折叠?



