计算机网络-传输层

计算机网络-传输层
4FGR5.1 传输层提供的服务
端口的作用
通过**“端口号”**标识本主机的一个特定进程
- 每台主机的端口号是相互独立的
- TCP、UDP两种协议的端口号也是相互独立的
TCP或UDP协议,通过Socket 套接字={IP地址:端口号},唯一标识网络中的一台主机上的一个应用进程
端口号的分类
- 服务器使用的端口号
- 熟知端口号(0~1023)
- 登记端口号(1024~49151)
- 熟知端口号(0~1023)
- 客户端使用的端口号——短暂端口号 49152~65535
- 服务器使用的端口号
功能
- 实现端到端(进程到进程)的通信
- 复用和分用
- 复用(从上到下)
- 在发送数据的时候,同一台主机上的多个进程可以使用同一个传输协议
- 分用(从下到上)
- 在接收数据的时候,传输层可以把数据正确交付到目的进程
- 复用(从上到下)
- 差错检测
- TCP检测出差错后丢弃数据,并通知发送方重传
- UDP检测出错误后直接丢弃,且不通知发送方
- 向应用层提供两种服务
- 面向连接的、可靠的端到端传输服务(TCP)——确保数据正确/完整,但开销大、实时性差
- 无连接的、不可靠的端到端传输服务(UDP)——数据可能出错/丢失,但速度快、开销小
5.2 UDP
UDP
- UDP首部很小,只占 8B
- UDP每次传输一个完整的报文,不支持报文自动拆分、重装
- UDP是无连接的、不可靠的(可靠性可以交给应用层处理),也不支持拥塞控制
- UDP支持一对一(封装成单播IP数据报)、一对多传输(封装成广播/多播IP数据报)
与TCP的区别
- TCP首部更大,占60~80B
- TCP支持报文自动拆分、重装,因此可以传输长报文
- TCP是有连接的、可靠的、支持拥塞控制
- TCP仅支持一对一传输(因为通信双方的传输层必须先建立连接)
UDP数据报格式
UDP检验(差错检验)
发送方计算原始数据之和(最高位进位要“回卷”),对其逐位取反,结果为校验和,一起发给接收方,接收方将所有数据相加,结果为1则正确,否则发送比特错误。
发送方:
接收方:
5.3 TCP
框架梳理
大致流程
- 建立连接(三次握手)
- 数据传输
- 释放连接(四次挥手,两次挥手只断开一方的连接)
建立TCP连接时,双方协商各自的MSS(最大段长)
每次建立TCP连接,可以传输多个报文(双向),TCP是面向字节流的(而UDP是面向报文的)。无论传输多少个报文,在TCP协议看来都是一连串字节流。
TCP连接大致流程:
TCP报文段
另译为“TCP段”
TCP首部和IP首部比特数相同
TCP段格式:
确认号具有累积确认的特性。
数据偏移字段标识TCP首部长度,以 \(\times 4B\) 为单位,填充字段负责为其凑足 \(4B\) 的整数倍。
窗口字段表示接受窗口的大小。从本报文段中的ack_seq算起,接收方还能接受多少数据。这个字段是实现流量控制的关键
校验和字段和UDP雷同,也需添加12B伪首部(将UDP伪首部的协议字段的17改为6,UDP长度字段改成TCP的)
注:在TCP首部中,并不会专门记录TCP数据部分长度(会根据IP首部、TCP首部的信息算出来)
保留字段(6bit)一般无用,置为0
标志位
- 紧急位URG=1时,紧急指针有效。表示这时紧急数据,应尽快插队发送。紧急指针的序号是独立的
- 推送位PSH=1时,表示希望接收方尽快回复(用于交互式通信)
- 复位位RST=1时,表示出现严重差错(如主机崩溃),必须释放连接。也可用于拒绝一个非法报文段(如恶意的黑客攻击)
- 同步位SYN=1时,表示这是一个连接请求或连接接受报文,只握手①和握手②时会让SYN=1
- 终止位FIN=1时,表明此报文段的发送方数据已发送完毕,要求释放传输连接。挥手①和挥手③时FIN=1
当标志位为1时,可称为(改标志位)段,如ACK段。
TCP连接管理
连接建立阶段
- 握手①②不能携带数据,握手③可以携带数据
- 握手①②固定消耗1个序号(握手②的确认号是握手①+1)
- 握手③如果不携带数据,就不消耗序号
TCP连接建立时的状态转换与耗时分析:
SYS可能是SYN的误写
释放连接阶段①②③④
- 只有挥手①和挥手③的FIN=1
- 挥手①和挥手③即使不携带数据,也要消耗一个序号(①③实际上往往也不会携带数据)
- 挥手②可以携带数据
- 挥手④不可以携带数据
TCP释放连接时的状态转换与耗时分析:
注意也有可能是服务器先发出挥手
由于终止等待2和关闭等待的时间极短,可忽略。其他时间计算可用RTT和MSL
TCP可靠传输、流量控制
可靠传输
- 序号——进程在建立连接时确定起始序号,数据传输过程中,每个字节对应一个序号
- 确认机制
- 重传机制
流量控制(滑动窗口机制)
- 接收方维持一个接收窗口
- 发送方维持一个发送窗口