目录
功能
传输层为应用程序之间提供端到端的逻辑通信(网络层是主机之间的逻辑通信),负责程序之间数据传输的效率以及可靠性,这些程序就称为端口。
端口用一个16位的端口号禁行标志,具有本地意义,只是为了标志计算机应用层的各进程。不同因特网中不同计算机的端口号没有联系,熟知的端口一般是0~1023,比如FTP:21,DNS:53
在TCP/IP协议栈,传输层有两个协议,QQ里面的文字聊天就是UDP,而传文件就是TCP协议
TCP
TCP(Transmission Control Protocol)传输控制协议,面向连接的传输层协议
传输中将文件分段,建立会话,可以达到可靠传输,有流量控制,面向字节流、全双工通信
每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的,TCP连接的端点叫套接字(socket),就是端口号拼接到IP地址(IP:端口)。
报文首部
在传输层完成TCP报文段,加上IP首部就在网络层进行传输,TCP首部主要是报文号和一些信息,20字节固定首部和可变部分。
源端口、目标端口:各占2个字节,一共32位;
序号:当前数据部分属于原文件的第几个字节,就是序号,用来区分还原发送的各个数据包
确认号:告诉发送者下一个数据的序号
数据偏移:记录TCP报文段数据开始的位置
URG:用来表示在TCP缓存中的优先级,为“1”时最优先
ACK:为0时确认号无效,为1时确认号有效,通信是用于保持会话
SYN: 同步时需要,SYN=1建立对话请求/同意会话;
PSH:为1时到达TCP缓存的数据包提前优先交给应用程序处理
RST:表示会话出现错误,必须重新建立连接才能通信
FIN:为1时表示将要释放链接
窗口: 占 2 字节,用来让对方设置发送窗口的依据。
紧急指针:在URG=1时,数值表示紧急数据的尾部在数据包多少字节处
可靠传输
工作原理--停止等待协议,依靠确认和重传机制,可以在不可靠的传输网络上实现可靠地通信,通常称作自动重传请求ARQ,重传的请求是自动进行的,接收方不需要请求发送方重传某个出错部分
停止等待协议
确认重传
为了提高信道利用率,可以使用流水线传输,发送方连续发送多个分组,不必等待对方的确认,一般可以获得最高的信道利用率。
这时使用连续ARQ协议,发送方维持发送窗口,窗口的数据发完后等待确认,然后移动窗口
- 以字节为单位的滑动窗口技术
- 超时重传
TCP发送一个报文段,就要设置一次计数器,计时器的设置时间到但没有收到确认,就要重传报文段
流量控制
如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。流量控制(flow control)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制。
避免网络拥塞
在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion)。
出现资源拥塞的条件: 对资源需求的总和 > 可用资源
若网络中有许多资源同时产生拥塞,网络的性能就要明显变坏,整个网络的吞吐量将随输入负荷的增大而下降。
开环控制方法就是在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。
闭环控制是基于反馈环路的概念。属于闭环控制的有以下几种措施:
- 监测网络系统以便检测到拥塞在何时、何处发生。
- 将拥塞发生的信息传送到可采取行动的地方。
- 调整网络系统的运行以解决出现的问题
UDP
UDP(User Data Protocol)用户数据报协议
一个数据包就可以完成数据通信,不需要建立连接、流量控制,是一种不可靠传输,不使用拥塞控制,适合多媒体通信要求,支持一对一、一对多、多对多、多对一通信,首部只有8个字节
UDP首部
长度:表示UDP数据报的长度
检验和:计算检验和时需要伪首部,即网络层的信息(12字节),一共20个字节
传输层和应用层协议的关系
常见应用层协议使用的端口:
http=TCP+80
https=TCP+443
RDP=TCP+3389
ftp=TCP+21
共享文件夹=TCP+445
服务和应用层的关系:
服务打开TCP或UDP的端口并进行侦听才能接收到的请求,客户端使用IP地址定位目标端口和服务。
服务器的网卡可以设置单独开放的端口,保证服务器网络的安全
TCP传输连接管理
传输连接分三个阶段:建立连接、数据传送、连接释放
一般采用客户服务器方式建立连接,主动发起连接的应用进程叫客户(client),被动等待连接建立的应用叫服务器(server)
三次握手建立 TCP 连接
客户端首先发送同步数据包;服务器收到请求的数据包,发出数据包进行回应,确认标记ACK就是1,seq由B指定,ack表示要求x+1字节的数据包;A收到后seq=x+1,表示发出了B需要的x+1数据包,ack=y+1,表示要求B发送y+1数据包
两个端状态都变为ESTAB-LISHED后,就可以建立数据传送连接
TCP连接释放
当不再发送数据,就会发出FIN=1请求结束连接,然后另一方发送数据包ACK=1,同意结束连接,然后等到最长报文等待时间后结束。