运输层概述
# 运输层概述
# 进程间基于网络的通信
计算机网络中实际进行通信的真正实体,是位于通信两端主机中的进程。
为运行在不同主机上的应用进程提供直接的逻辑通信服务,就是运输层的主要任务。运输层协议又称为端到端协议。
运输层向应用层实体屏蔽了下面网络核心的细节(例如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道。
根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输层协议,即面向连接的TCP和无连接的UDP
# TCP/IP运输层中的两个重要协议
# 运输层端口号
端口号只具有本地意义,端口号只是为了标识本计算机网络协议栈应用层中的各应用进程。在因特网中,不同计算机中的相同端口号是没有关系的,即相互独立。另外,TCP和UDP端口号之间也是没有关系的。
# 发送方的复用和接收方的分用
# UDP和TCP的对比
# 无连接的UDP和面向连接的TCP
UDP的连接和TCP的连接,他们的连接指的是逻辑连接关系,而不是物理连接。
# UDP和TCP对单播、多播和广播的支持情况
# UDP和TCP对应用层报文的处理
# UDP和TCP对数据传输可靠性的支持情况
# UDP首部和TCP首部的对比
# TCP报文段的首部格式
TCP是面向字节流的,而TCP的全部功能需要依靠其首部的各字段来实现。
# 序号和确认号
序号和确认号是TCP实现可靠传输的相关字段
序号:用来指出本TCP报文段数据载荷的第一个字节的序号。
确认号:用来指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。
确认标志位ACK:只有当ACK取值为1时,确认号字段才有效。ACK取值为0时,确认号字段无效。TCP规定:在TCP连接建立后,所有传送的TCP报文段都必须把ACK置1。
# 数据偏移
指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远,这实际上指出了TCP报文段的首部长度。
# 保留
- 占6比特
- 保留为今后使用
- 目前置为0
# 窗口
指出发送本报文段的一方的接收窗口的大小,即接收缓存的可用空间大小,这用来表征接收方的接收能力。
# 校验和
用来检查整个TCP报文段在传输过程中是否出现了误码。
# 终止标志位FIN
- 用于TCP“四报文挥手”释放连接。
- 当FIN=1时,表明此TCP报文段的发送方已经将全部数据发送完毕,现在要求释放TCP连接。
# 复位标志位RST
- 用于复位TCP连接。
- 当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接。
# 推送标志位PSH
- 发送方TCP把PSH置1,并立即创建一个TCP报文段发送出去,而不需要积累到足够多的数据再发送。
- 接收方TCP收到PSH为1的TCP报文段,就尽快地交付给应用进程,而不再等到接收到足够多的数据才向上交付。
# TCP三次握手建立连接
TCP是面向连接的协议,基于运输来传送TCP报文段,而TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。
TCP运输连接有三个阶段:
通过“三报文握手”来建立TCP连接。
基于已建立的TCP连接进行可靠的数据传输。
在数据传输结束后,还要通过“四报文挥手”来释放TCP连接。
三次握手的建立过程:
采用“三报文握手”而不是“两报文握手”来建立TCP连接,是为了防止已失效的TCP连接请求报文段突然又传送到了TCP服务器进程,因而导致错误。
# TCP四次挥手释放连接
# TCP的流量控制
# 基本概念
TCP为应用程序提供了流量控制(Flow Control)机制,以解决因发送方发送数据太快而导致接收方来不及接收,造成接收方的接收缓存溢出的问题。
# 流量控制方法
流量控制的基本方法:接收方根据自己的接收能力(接收缓存的可用空间大小)控制发送方的发送速率。
# TCP可靠传输的实现
1、虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大,这是因为:
- 网络传送窗口值需要经历一定的时间滞后,并且这个时间还是不确定的。
- 发送方还可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸。
2、TCP要求接收方必须有累积确认(这一点与选择重传协议不同)和捎带确认机制。
3、TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段。
# 参考
https://github.com/BloothOfYouth/Computer-Network-Notes
https://www.bilibili.com/video/BV1c4411d7jb/