第七章 传输层

7.1 传输层的两个协议

传输层是整个网络体系结构中的关键层次之一,主要负责向两个主机中进程之间的通信提供服务。由于一个主机同时运行多个进程,因此运输层具有有复用和分用功能。传输层在终端用户之间提供透明的数据传输,向上层提供可靠的数据传输服务。传输层在给定的链路上通过流量控制、分段/重组和差错控制来保证数据传输的可靠性。传输层的一些协议是面向链接的,这就意味着传输层能保持对分段的跟踪,并且重传那些失败的分段。

TCP:传输控制协议,用于可靠传输(丢包重传、排序)
要发送的内容多,需要将发送的内容分成多个数据包发送
流量控制(接收端告诉发送端发送速度提高还是降低)
拥塞避免(发送端感知网络是否丢包,自动调整发送速度)
建立连接(协商参数,例如MTU,是否支持选择性确认等)

UDP:用户报文协议,用于不可靠传输
要发送的内容少,一个数据包就能发送全部内容
无需流量控制、拥塞避免

传输层协议和应用层协议之间的关系
传输层协议加一个端口号来标识一个应用层协议,展示了传输层协议和应用层协议之间的关系
即应用层协议=TCP/UDP + 端口
在这里插入图片描述
端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。端口是传输层服务访问点,它在传输层的作用类似于IP地址在网络层的作用或者MAC地址在数据链路层的作用,只不过IP地址和MAC地址标识的是主机,而端口标识的是主机中的应用进程

服务器和端口之间的关系
服务使用应用协议和客户端通信
操作系统有些服务为本地计算机提供服务,有些服务为网络中的计算机提供服务
服务启动,就会使用TCP或UDP协议的某个端口侦听客户端请求

服务和端口的关系
在这里插入图片描述
客户端端口的作用
在这里插入图片描述
端口和网络安全的关系
客户端和服务器之间的通信使用应用层协议,应用层协议使用传输层协议+端口标识,如果在网络设备疯掉TCP/UDP某个端口,就不能访问其对应的服务,就可以实现网络安全
在这里插入图片描述
较上图,仅开放必要的窗口
在这里插入图片描述
在网络设备上控制端口
在这里插入图片描述

7.2 用户数据包协议UDP

UDP是无连接的,即发送数据不需要建立连接,因此减少了开销和发送数据之前的时延
UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表(内有很多参数),通信的两端不用保持连接,因此节省系统资源
UDP是面向报文的,发送方的UDP对应用程序叫下来的报文,在添加首部后就向下交付给网络层。UDP对应用层叫下来的报文,既不合并,也不拆分,而是保留这些报文的边界
在这里插入图片描述
UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低
UDP支持一对一、一对多、多对一和多对多的交互通信(组播使用UDP协议)
UDP首部开销小,只有8个字节

UDP首部包括四个字段:源端口、目的端口、长度和校验和,每个字段的长度是两个字节
伪首部包括:源地址、目的地址、UDP数据长度、协议类型
在这里插入图片描述
校验和校验过程中包括数据部分
计算UDP校验和例子:
在这里插入图片描述

7.3 传输控制协议TCP

TCP是面向连接的传输层协议。即应用程序在使用TCP协议之前,必须先建立TCP连接。在传送数据完毕后,必须释放已经建立的TCP链接。在传送数据完毕后,必须释放已经建立的TCP连接。这就是说,应用进程之间的通信好像在“打电话”:通话前要先拨号建立连接,通话结束后要挂机释放连接

建立连接三次握手,释放连接四次握手

每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)
TCP提供可靠交付的服务。也就是说,通过TCP连接传送的数据,无差错、不丢失、不重复且按序发送、按顺序接收
TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。在发送时,应用程序把数据传送给TCP的缓存后,就可以做自己的事情,而TCP在合适的时候把数据发送过去;在接收时,TCP把收到的数据放入缓存,上层的应用进程在合适的时候读取缓存中的数据
TCP面向字节流(即TCP传送时是逐个字节传送)。TCP中的“流”指的是流入到进程或从进程流出的字节序列
在这里插入图片描述
TCP报文的首部格式
TCP协议能够实现分段传输、可靠传输、流量控制、网络拥塞避免等功能,因此TCP报文的首部要比UDP报文首部字段要多,且首部长度不固定
在这里插入图片描述
1、源端口和目的端口各占两个字节,分别写入源端口号和目的端口号。传输层的复用和分用功能都需要通过端口实现
2、序号占4字节,范围是0-2^32-1。当序号超出最大范围时,下一个序号就又回到0.TCP是面向字节流的,在一个TCP连接中传送的字节流的每一个字节都按顺序编号
在这里插入图片描述
3、确认号,占4字节,是期望收到对方下一个报文段的第一个数据字节的序号
TCP协议能够实现可靠传输,接收方收到几个数据包后,就会给发送方发送一个确认数据包,告诉发送方下一个数据包该发第多少个字节了
若确认号为N,则表明到序号N-1为止的所有数据都已经正确收到
4、数据偏移,占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上指出TCP报文段的首部长度,且数据偏移的单位为4字节。由于4位二进制数能够表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大长度
5、保留字段,占6位,为今后使用
6、紧急位URG,当URG=1时表明紧急指针有效,它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不需要按原来的排队顺序来传送
7、确认位ACK,仅当ACK=1时确认号字段才有效,当ACK=0时确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1
请求建立连接的数据包ACK为0,因为此时未建立连接
8、推送位PSH,当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应(接收TCP收到PSH=1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满后再向上交付)
9、复位位RST,当RST=1时,表明TCP连接中出现严重错误,必须释放连接,然后再重新建立运输连接
10、同步位SYN,在建立连接时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。若对方同意建立连接,则应该响应的报文段中使SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接建立请求或连接接受请求
11、终止位FIN,用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放传输连接
12、窗口字段,2字节。TCP有流量控制的功能,窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量
13、检验和,2字节。检验和字段的检验范围包括首部和数据两部分。同UDP一样,在计算校验和时,要在TCP报文段前面加上12B的伪首部(只需将UDP伪首部协议字段的17改为6)

7.4 可靠传输

1、停止等待协议TCP
无差错情况与超时重传
在这里插入图片描述
当A未收到B给的确认数据包,则超过一定时间后自动超时重传——能够实现可靠性传输

出现差错或丢失
在这里插入图片描述
改进的停止等待协议——连续ARQ协议和滑动窗口协议
在这里插入图片描述
A端具有发送窗口,发送窗口内的数据包无需等待确认连续发送,每一个数据包都有一个计时器,如果超时会自动重发,B端收到这四个数据包后发送一个确认M4数据包,表示让A端发送M5,然后A端发送窗口向后滑动,继续发送M5-M8,如此往复

以字节为单位的滑动窗口技术详解
在这里插入图片描述
在这里插入图片描述
确认的改进:选择确认SACK
TCP通信时,如果发送序列中间的某个数据包丢失,TCP会通过重传最后确认的分组后续的分组,这样原先已经正确传输的分组也可能重复发送,降低了TCP性能。为改善这种情况,发展处SACK技术,使TCP只重新发送丢失的包,不用发送后续所有的分组,而且提供相应机制使接收方能告诉发送方哪些数据丢失,哪些数据已经提前收到等

选择性确认最多表示4个字节块
在这里插入图片描述

7.5 流量控制

流量控制指接收端控制发送端的速度
在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,这称为接收窗口rwnd;发送方根据其当前网络拥塞程序的估计而确定的窗口值,这称为拥塞窗口cwnd
A的发送窗口的实际大小取rwnd和cwnd中的最小值
在这里插入图片描述

7.6 拥塞控制

拥塞控制,是指防止过多的数据注入网络,来使网络中的路由器或链路不致过载

有拥塞控制的网络
在这里插入图片描述
拥塞控制和流量控制的区别:拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素;流量控制往往是指点对点的通信量的控制,即接收端控制发送端,它所要做的是抑制发送端发送数据的速率,以使接收端来得及接收

1、慢开始和拥塞避免
在这里插入图片描述
发送的数据包个数以指数倍增长,以探测该轮次是否会造成拥塞

拥塞避免算法
在这里插入图片描述
快重传
快重传算法首先要求接收方每收到一个失序的分组后就立即发出重复确认(为的是使发送方及早知道有分组没有到达对方)而不要等待自己发送数据时才进行捎带确认
快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待为丢失的报文段设置的重传计时器到期
在这里插入图片描述
快恢复算法
在这里插入图片描述

7.7 TCP连接管理

TCP建立连接
1、请求建立TCP连接
客户机的TCP向服务器的TCP发送一个连接请求报文段
此时发送方发出的数据:SYN=1,ACK=0,seq=x
2、TCP连接确认
服务器的TCP收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并为该TCP连接分配TCP缓存和变量
此时接收方发出的数据:SYN=1,ACK=1,seq=y,ack=x+1
3、确认的确认
当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量
此时发送方发出的数据:SYN=0,ACK=1,seq=x+1,ack=y+1

服务器端的资源实在完成第二次握手时分配的,而客户端的资源实在完成第三次握手时分配的
在这里插入图片描述

TCP释放连接
1、客户机打算关闭连接时,向其TCP发送一个连接释放报文段,并停止发送数据,主动关闭TCP连接
此时FIN=1,seq=u
发送FIN报文时,发送FIN的一端不能再发送数据,但对方还可以发送数据
2、服务器收到连接释放报文段后立即发出确认,此时客户机到服务器这个方向连接已释放,TCP连接处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭
此时ACK=1,seq=v,ack=u+1
3、若服务器已经没有要向客户机发送的数据,就通知TCP释放连接
此时FIN=1,seq=w,ack=u+1
4、客户机收到连接释放报文段后,必须发出确认
此时TCP连接还未释放,必须经过时间等待计时器设置的时间2MSL后,A才进入连接关闭状态
此时ACK=1,seq=u+1,ack=w+1
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值