文章目录
第五章 传输层
5.1传输层提供的服务
5.1.1传输层的功能
传输层的功能如下:
(1)传输层提供的是应用进程之间的逻辑通信(端到端通信)。网络层提供的是主机到主机之间的逻辑通信。
(2)复用和分用。复用是指发送方不同的应用进程都可使用同一个传输层协议传送数据,分用是指接收方的传输层能够把数据正确的交付到目的应用进程。
网络层也有复用分用的功能,网络层的复用指的是发送方不同协议的数据都可以封装成IP数据报发送出去。分用指的是接收方的网络层可以将数据交给相应的协议。
(3)传输层要对收到的报文进行差错检测,网络层只检查IP数据报的首部,不检验数据部分是否出错。
(4)提供了两种不同的传输协议,即面向连接的TCP和面向无连接的UDP。网络层无法同时实现两种共协议。
传输层对高层实现透明传输。
5.1.2传输层的寻址与端口
1.端口的作用
SAP(Service Accessing point)服务访问点
能够让应用层的各种应用进程将其数据通过端口向下交付发给传输层,以及将应用层的数据传输通过端口到传输层。
端口标识的是主机中的应用进程。IP地址和MAC地址标识的是主机。
数据链路层的SAP是MAC地址,网络层的SAP是IP地址,传输层的SAP是端口
传输层使用的是软件端口
2.端口号
应用进程通过端口号进行标识,端口号长度为16bit,能标识2^16个端口。
端口号只具有本地意义。标识计算机中的各进程。根据端口号范围可将端口分为两类:
(1)服务器端使用的端口号。分为两类:一类是熟知的端口号,数值为0 ~ 1023,一类是登记端口号,数值为1024 ~ 49151。
一些常用的端口号:
应用进程 | FTP(文件传输) | DNS | TFTP(小文本传输) | HTTP | SNMP | SMTP | TELNET(远程登录) |
---|---|---|---|---|---|---|---|
端口号 | 21 | 53 | 69 | 80 | 161 | 25 | 23 |
(2)客户端使用的端口号。数值为19152 ~ 65535.这类端口号仅在客户进程运行时才能动态选择。又称为短暂端口号(临时端口)。通信结束后,这个端口号就不存在了,可以被之后的进程使用了。
3.套接字
套接字实际上是一个通信端点,即:
套接字Socket = (IP地址:端口号)
唯一标识某一台网络中的某一应用(进程)
5.1.3无连接服务与面向连接服务
TCP/IP协议族在IP层上使用了两个传输协议:一个是面向连接的传输控制协议(TCP),采用TCP时,传输层向上提供的是一条全双工的可靠逻辑连接。另一个是UDP,传输层向上提供的是一条不可靠的逻辑信道。
TCP提供面向连接的服务,在传送数据之前必须先建立连接,传输结束后要释放连接。TCP不提供广播或组播服务。
TCP由于提供是可靠传输,开销必然较大,占用更多的处理机资源,主要适用于可靠性更高的场所,比如FTP,HTTP,TELNRT等。
UDP是一个无连接的非可靠传输层协议。在IP上提供了两个附加服务,多路复用和对数据的错误检查。
UDP简单,执行速度比较快,实时性好,适用于TFTP,DNS,SNMP,RTP
IP数据报和UDP数据报的区别:IP数据报在网络层要经过路由的存储转发,UDP数据报在传输层的端到端的逻辑通信中传输,封装成IP数据报在网络层传输时,UDP数据报的信息对路由是不可见的。
TCP和网路层虚电路的区别:TCP报文段在传输层抽象的逻辑信道中传输,对路由器不可见;虚电路所经过的交换结点都必须保存虚电路状态信息。传输层采用TCP不影响网络层提供无连接服务,若在网络层中采用虚电路方式,则无法提供无连接服务。
5.2UDP协议
5.2.1UDP数据报
1.UDP概述
UDP仅在IP数据报服务上增加了两个最基本的服务:复用和分用以及差错检测。
UDP优点:
(1)无需建立连接。无需引用建立连接的时延。
(2)无连接状态。TCP需要在端系统中维护连接状态。此连接状态包括接收和发送缓存,拥塞控制参数和序号与确认号的参数。
(3)分组首部开销小。TCP又20B的首部开销,而UDP仅有8B的开销。
(4)应用层能更好的控制要发送的数据和发送时间。UDP没有拥塞控制,因此网络中的拥塞不会影响主机的发送效率。能容忍一些数据的丢失,但不允许有较大的时延。
(5)UDP支持一对一,一对多,多对一和多对多的交互通信。
UDP常用于一次性传输较少数据的网络应用。
UDP不保证可靠交付,不意味着应用对数据的要求是不可靠的,维护可靠性的工作可由用户在应用层完成。
UDP是面向报文的。
UDP常用于多媒体应用(IP电话,实时电话会议,流媒体等。)
2.UDP首部格式
UDP数据报包含两部分:UDP首部和用户数据。UDP首部有8B,4个字段组成,每个字段的长度都是2B(16位),各字段的意义如下:
(1)源端口。源端口号。在需要回信的时候选用,不需要时可用全0;
(2)目的端口。目的端口。在终点交付报文时必须使用到。
(3)长度。UDP数据报的长度(包括首部和数据),最小值为8.
(4)校验和。检测UDP数据报在传输中是否有错。有错就丢弃,该字段是可选的,当源主机不想计算校验和时,直接令该字段为0。
当传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报相应的端口上交给应用进程。
5.2.2UDP校验
UDP校验和的方法和IP数据报首部校验和的计算方法相似,不同的是,IP数据报的校验和只校验IP数据报的首部,但UDP的校验和则检查首部和数据部分。
在计算校验和的时候,要在UDP数据报之前增加12B的伪首部。
(1)通过伪首部,可以检查源端口号,目的端口号和UDP用户数据报的数据部分。还可以检查IP数据报的源IP地址和目的地址。
(2)若校验出的结果是错误的,可以丢弃,也可以发送给上层(附带错误报告)
(3)若UDP数据报部分的长度不是偶数个字节,则需要填充一个全0的字节。
UDP的纠错能力并不强,但是好处就是简单,处理速度快。
5.3TCP协议
5.3.1TCP协议的特点
TCP是在不可靠的IP层上实现的可靠的数据传输协议,主要解决传输的可靠,有序,无丢失和不重复的问题。TCP的主要特点如下:
(1)TCP是面向连接的传输层协议,TCP连接是一条逻辑连接。
(2)每条TCP连接只能有两个端点,每条TCP连接只能是端到端的(进程对进程)。
(3)TCP提供可靠交付的服务,保证传送的数据无差错,不丢失,不重复且有序。
(4)TCP提供全双工通信。TCP连接的双方都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
发送缓存存放的数据:
- 准备给发送方TCP准备发送的数据
- TCP已发送但尚未收到确认的数据
接收缓存用来存放以下数据:
- 按序到达但尚未接收应用程序读取的数据
- 不按序到达的数据
(5)TCP是面向字节流的,虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据仅视为一连串的无结构的字节流。
TCP和UDP在发送报文时采取的方式完全不同。UDP报文的长度由发送应用进程决定,而TCP报文的长度则根据接收方给出的窗口值和当前网络的拥塞程度来决定。如果应用进程传到TCP缓存的数据块太长,TCP就会划分短一些再传送,太短的话积累到足够多的字节后再构成报文段发送出去。
5.3.2TCP报文段
TCP传送的数据单元称为报文段。TCP报文短既可以用来运载数据,又可以用来建立连接,释放连接和应答。一个TCP报文段分为首部和数据两个部分。
TCP各个字段的意义:
(1)源端口和目的端口。各占2B。端口是运输层与应用层的服务接口,运输层的复用和分用都要通过端口来实现。
(2)序号。占4B。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
(3)确认号。占4B。是期待收到对方下一个报文段的第一个数据字节的序号。若确认号为N,表明到序号N - 1 为止的所有数据都已正确的收到。
(4)数据偏移(首部长度)。占4位。TCP首部的最大长度为60B。
(5)保留。占6位。保留为今后使用,目前置为0;
(6)紧急位URG。URG = 1 时,表明系统中有紧急数据,应尽快传送(相当于高优先级的数据)。数据从第一个字节到紧急指针所指字节就是紧急数据。
(7)确认位ACK。当ACK = 1 时确认号字段才是有效的。ACK = 0 时,确认号无效。
TCP规定:当连接建立后,所有的ACK都必须置为1.
(8)推送位PSH(push)。接收方TCP收到PSH = 1的报文段时,尽快的交付给接收应用进程,而不在等到整个缓存都填满了再向上交付。
(9)复位位RST(reset)。当RST = 1时,表明TCP连接中出现严重差错,必须重新释放连接,然后再次建立运输连接。
(10)同步位SYN。SYN = 1 时表示这是一个连接请求或连接接收报文。当SYN =1 ,ACK = 0时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN = 1,ACK =1;
(11)终止位FIN(finish)。用来释放连接,当FIN = 1时,表明此报文段的发送方的数据已经发送完毕,要求释放连接。
(12)窗口。占2B,指的是允许对方发送的数据量。
(13)校验和。占2B。
(14)紧急指针。占2B。指出在本报文段中紧急数据共占用多少字节。
(15)选项。长度可变的。最大报文段长度。
(16)填充。为了使整个首部是4B的整数倍。
5.3.3TCP连接管理
TCP是面向连接的协议,有三个阶段:建立连接,数据传送,连接释放。
TCP主要解决三个问题:
(1)使得每一方能够确知对方的存在。
(2)允许双方协商一些参数。
(3)能够对运输实体资源进行分配。
TCP连接的端口即为套接字(Socket)或插口。
TCP连接的建立采用的是客户/服务器模式。主动发送连接的进程是客户端(client),被动等待建立连接的进程是服务器(Server)。
1.TCP连接的建立
连接的建立,通常称为三次握手。
建立连接前服务器处在收听状态。
第一步:客户机的TCP向服务器的TCP发送连接请求报文段。同步位 = 1。这时客户进程进入同步已发送状态。
第二步:服务器TCP收到连接请求报文段后,如同意建立连接,向客户机发回确认,并为该TCP分配缓存和变量。在确认报文段中,把SYN和ACK位都置为1,此时TCP服务器进程进入同步收到状态。
第三步:当客户机收到确认报文段后,向服务器给出确认,并为该TCP连接分配缓存和变量。确认报文段的ACK = 1;客户进程进入已连接状态。
这样就可以传送应用层数据。TCP提供的是全双工通信。
服务端的资源是在完成第二次握手时进行分配的。客户端的资源分配是在完成第三次握手时分配的。
2.TCP的释放
TCP释放的过程称为四次握手。
第一步:客户机打算关闭连接时,向其TCP发送连接释放报文段,并停止发送数据,主动关闭TCP连接。将终止位FIN置为1;此时客户进程进入终止等待1状态。
第二步:服务器收到连接释放报文段后即发送确认。此时客户端到服务端方向的连接就释放了。服务器进入关闭等待状态。
第三步:服务器向客户端发送FIN = 1 的连接释放报文段。服务器进入最后确认状态。
第四步:客户机收到连接释放报文后,必须发出确认。ACK = 1,此时TCP连接还未释放,必须经过时间等待计时器设置的最长报文段寿命后,客户机才进入连接关闭状态。
5.3.4TCP可靠传输
TCP的任务就是在IP层数据层不可靠的基础上建立可靠的数据传输服务。TCP的校验机制与UDP一样。
1.序号
2.确认
3.重传
有两种事件会导致TCP对报文段进行重传:超时和冗余ACK。
(1)超时
(2)冗余ACK(冗余确认)
5.3.5TCP流量控制
TCP的流量控制是基于滑动窗口的控制协议。TCP采用的不是停等协议,采用的是累计确认机制。
传输层和数据链路层流量控制的区别是:
传输层定义的是端到端用户之间的流量控制,数据链路层定义两个中间的相邻结点的流量控制。数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的可以动态变化。
5.3.6TCP拥塞控制
拥塞指的是防止过多的数据注入网络,保证网络的路由器或者链路不至过载。出现拥塞时,端点并不了解拥塞发生的细节,对于通信连接的端点来说,拥塞往往表现为通信时延的增加。
拥塞控制与流量控制的区别:拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,设计所有的主机,所有的路由器,以及降低网络传输性能有关的所有因素。流量控制往往指的是点对点的通信量的控制。
4种拥塞控制算法:慢开始,拥塞避免,快重传,快恢复。
TCP协议要求发送方维护以下两个窗口:
(1)接收窗口rwnd。
(2)拥塞窗口cwnd。
发送窗口的上限值应取接收窗口和拥塞窗口中较小的一个。
1.慢开始和拥塞避免
(1)慢开始算法
(2)拥塞避免算法
(3)网络拥塞的处理
ssthresh的值不能小于2
2.快重传和快恢复
(1)快重传
(2)快恢复
在TCP连接建立和网络出现超时时,采用慢开始和拥塞避免算法,当发送方接收到冗余ACK时。采用快重传和快恢复算法。