五、运输层
1、进程之间的通信
运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。
两台主机进行通信就是两个主机中的应用进程互相通信。
从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。也就是说,端到端的通信是应用进程之间的通信。
运输层有一个很重要的功能——复用(multiplexing)和分用(demulitiplexing)。复用指在发送方不同的应用进程都可以使用同一个运输层协议传达数据。分用是指接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程。
网络层是为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
运输层对收到的报文进行差错检测。运输层需要提供两种不同的运输协议,即面向连接的TCP和无连接的UDP.
运输层向高层用户屏蔽了下面网络核心的细节,它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
运输层的两个主要协议:用户数据报协议UDP、传输控制协议TCP
2、用户数据保协议UDP:
(1) UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。
(2) UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
(3) UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文。
(4) UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。很多的实时应用(如IP电话、实时视频会议等)要去源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太多的时延。UDP正好符合这种要求。
(5) UDP支持一对一、一对多、多对一和多对多的交互通信。
(6) UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。
注意:(1) 不使用拥塞控制功能的UDP有可能会引起网络产生严重的拥塞问题。
(2) 一些使用UDP的实时应用进程本身可以在不影响应用的实时性的前提下,增加一些提高可靠性的措施,如采用前向纠错或重传已丢失的报文。
UDP的首部格式:用户数据报UDP有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,由四个字段组成,每个字段的长度都是两个字节。各字段的意义如下:
(1) 源端口:源端口号。在需要对方回信时选用。不需要时可用全0。
(2) 目的端口:目的端口号。 这在终点交付报文时必须要使用到。
(3) 长度:UDP用户数据报的长度,其最小值是8(仅有首部)
(4) 检验和: 检测UDP用户数据报在传输中是否有错。有错就丢弃。
UDP计算校检和的方法和计算IP数据报首部校检和的方法相似。但不同的是:IP数据报的校检和只校检IP数据报的首部,但UDP的校检和使把首部和数据部分一起都校检。
3、传输控制协议TCP
(1)TCP最主要的特点
1)面向连接的运输层协议;
2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(端到端的通信);
3)TCP提供可靠交付的服务(高可靠性,确保传输数据的正确性,不出现丢失或乱序);
4)全双工方式传输;
5)采用字节流方式,即以字节为单位传输字节序列;
(2)TCP连接:TCP把连接作为最基本的抽象。
TCP连接的端点叫套接字或插口,套接字=IP地址:端口号)
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定
同一个IP地址可以有多个不同的TCP链接,而同一个端口号也可以出现在多个不同的TCP连接中。
4、可靠传输的工作原理
(1)理想的传输条件:传输信道不产生差错;不管发送方以多快的速度发送数据,接收方总是来得及处理接收到的数据
(2)停止等待协议
①无差错情况(5-9(a))
②出现差错(5-9(b))
超时重传
注意:A在发送完一个分组后,必须暂时保留已发送的分组的副本(用于超时重传),收到相应确认后才能清除;分组和确认分组都必须进行编号,以便明确哪一个发送出去的分组收到了确认,哪一个没有;超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些
③确认丢失和确认迟到
B重复收到分组M时,应该:丢弃这个重复的分组M;向A发送确认
上述这种可靠传输协议常称为自动重传请求ARQ
④信道利用率
(3)连续ARQ协议
当使用流水线传输时,就要使用连续ARQ和滑动窗口协议
5、TCP报文段的首部格式
(1)TCP是面向字节流的,但是TCP传送的数据单元却是报文段。一个TCP报文段分为首部和数据两部分,而TCP的全部功能都体现在它首部中各字段的作用
(2)概述:TCP报文段首部的前20个字节是固定的,因此TCP首部的最小长度是20字节。
(3)首部固定部分各字段的意义
1)源端口和目标端口:各占2个字节,分别写入源端口号和目的端口号。
2)序列号:占4个字节,表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0 开始。
3)确认号:占4个字节,是期望收到对方写一个报文段的第一个数据字节的序号。若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到。
4)数据偏移(TCP首部长度):占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度,由于4位二进制数能够表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大长度。
5)保留:占6位,保留为今后使用,但目前应置为0
6)紧急URG控制位:当URG=1时,表明紧急指针字段有效。它告诉系统此报文中有紧急数据,应尽快传送,而不要按原来的排队顺序来传送。当URG置1时,发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。这时要与首部中的紧急指针字段配合使用。
7)确认ACK控制位:仅当ACK=1时,确认号字段才有效,TCP规定,在连接建立后的所有传送的报文段都必须要ACK置1。
8)推送PSH控制位:发送方TCP把PSH置1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
9)复位RST控制位:当RST=1时,表明TCP连接中出现了严重差错,必须释放连接,然后再重新建立运输连接。
10)同步SYN控制位:在连接建立时用来同步序号,当SYN=1而ACK=0时,