计算机网络-运输层
运输层协议概述
进程间的通信
运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层
image.png
通信的真正端点并不是主机而是主机中的进程
网络层和运输层的区别
image.png
运输层的两个主要协议
TCP 传输控制协议
UDP 用户数据报协议
UDP:一种无连接协议
提供无连接服务。
在传送数据之前不需要先建立连接。
传送的数据单位协议是 UDP 报文或用户数据报。
对方的运输层在收到 UDP 报文后,不需要给出任何确认。
虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。
TCP:一种面向连接的协议
提供面向连接的服务。
传送的数据单位协议是 TCP 报文段 (segment)。
TCP 不提供广播或多播服务。
由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
运输层的端口
为了标志本计算机应用层中的各进程
image.png
服务端端口!=客户端端口
客户端端口-短暂端口
当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
UDP 协议
UDP 只在 IP 的数据报服务之上增加了很少一点的功能:
复用和分用的功能
差错检测的功能
特点
UDP 是无连接的,发送数据之前不需要建立连接,,因此减少了开销和发送数据之前的时延。
UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
UDP 是面向报文的。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。UDP 一次交付一个完整的报文。
UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很适合多媒体通信的要求。
UDP 支持一对一、一对多、多对一和多对多的交互通信。
UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。
image.png
UDP 首部格式
image.png
伪首部仅仅是为了计算检验和
端口分用
image.png
当运输层从 IP 层收到 UDP 数据报时,就根据首部中的目的端口,把 UDP 数据报通过相应的端口,上交最后的终点——应用进程
传输控制协议 TCP
TCP 是面向连接的运输层协议。
每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一)。
TCP 提供可靠交付的服务。
TCP 提供全双工通信。
面向字节流
TCP 中的“流”(stream) 指的是流入或流出进程的字节序列。
“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流。
image.png
TCP 不关心应用进程一次把多长的报文发送到 TCP 缓存。
TCP 对连续的字节流进行分段,形成 TCP 报文段
TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)
TCP连接
同一个 IP 地址可以有多个不同的 TCP 连接。
同一个端口号也可以出现在多个不同的 TCP 连接中
TCP 连接的端点叫做套接字 (socket)
套接字
image.png
每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定
image.png
可靠传输工作原理
理想传输条件
传输信道不产生差错。
不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据。
在这样的理想传输条件下,不需要采取任何措施就能够实现可靠传输。
然而实际的网络都不具备以上两个理想条件。必须使用一些可靠传输协议,在不可靠的传输信道实现可靠传输。
停止等待协议
每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
出现插查错
接收方B 接收数据后检测出现错误,丢弃
传输过程中丢失
超时重传
接收方B 不会发送任何消息回发送方,此时发送方A 超过一定时间后,会重新发送到接收方
确认丢失
接收方发B 送给发送方A 的确认丢失
这会触发发送方A 超时重传,接收方又收到了重传的分组M1 。这时 接收方B 应采取两个行动:
丢弃这个重复的分组 M1,不向上层交付。
向 发送方A 发送确认。不能认为已经发送过确认就不再发送,因为 发送方A 之所以重传分组M1 就表示 A 没有收到对 M1 的确认。
确认迟到
传输过程中没有出现差错,但 接收方B 对分组 M1 的确认迟到了。
发送方A 会收到重复的确认。对重复的确认的处理很简单:收下后就丢弃。
接收方B 仍然会收到重复的 分组M1,并且同样要丢弃重复的 M1,并重传确认分组。
自动重传请求 ARQ
重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组。
连续ARQ协议
滑动窗口协议比较复杂,是 TCP 协议的精髓所在。
发送方维持的发送窗口,它的意义是:位于发送窗口内的分组都可连续发送出去,而不需要等待对方的确认。这样,信道利用率就提高了。
连续 ARQ 协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置
累计确认
对按序到达的最后一个分组发送确认,到这个分组为止的所有分组都已正确收到了
Go-back-N
如果发送方发送了前 5 个分组,而中间的第 3 个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。
这就叫做 Go-back-N(回退 N),表示需要再退回来重传已发送过的 N 个分组
TCP 报文段首部格式
image.png
源端口和目的端口字段——各占 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 字节的伪首部(源ip,目的ip,0,17,长度)
TCP 的运输连接管理
连接建立
数据传送
连接释放
image.png
image.png