1. 传输控制协议(TCP)
1.1 TCP的主要特点:
1.2 TCP协议的可靠性
- 应用数据将被分割成TCP协议认为最适合发送的数据块. [分段]
- TCP发送出一个报文段后, 它启动一个定时器, 等待目的端确认收到这个报文段. 如果不能及时收到一个确认,将重发这个报文段. [超时和重传]
- 当TCP收到发自TCP连接另一端的数据后, 将发送一个ACK确认. [确认]
- TCP保持头部和数据的校验和, 如果校验和有差错, TCP将丢弃这个报文段, 不予确认. [校验和]
- TCP需要对接收到数据报进行重新排列,然后将正确的数据传送给应用层. [数据报重排]
- IP数据报会发生重复, 接受方的TCP需要检查并丢弃重复的数据. [去重]
- TCP采用可变窗口进行流量控制, 根据对方缓冲区大小来协调发送方的发送速度, 避免缓冲区溢出数据丢失. 同时TCP还进行拥塞控制, 以进一步提高可靠性.[流量控制和拥塞控制]
- TCP对字节流的内容不作任何解释, 只负责传输字节流, 不存在编码问题.
1.3 TCP流量控制 – 滑动窗口机制
窗口大小表示发送方未经确认可发送的报文个数
发送方每当接收到一个确认报文, 滑动窗口就向前移动.
1.4 TCP 差错控制
1.4.1 差错检测和纠正:
TCP使用校验和、确认和超时来完成差错检测。纠正方式是简单的丢弃报文,等待新的报文重传。
1.4.2 TCP计时器
-
重传计时器:
- 如果在计时器截止时间之前收到了对该报文段的确认,则撤销此计时器
- 如果在收到确认报文之前计时器截止时间到,则重传报文段并将计时器复位
-
坚持计时器:
-
当接收方发送一个0窗口报文时, 发送发就会停止发送数据,直到接收方再发送一个非0窗口的ACK。 -
但是TCP中是不会对ACK进行确认的,如果这个非0窗口ACK丢失了,接收方就会一直等待发送方发送数据,进入死锁。 -
坚持计时器的作用就是:在发送方接收到一个0窗口通知报文时,启动一个坚持计时器,等计时器超时后,发送一个1字节的探测报文段, 它有一个序号,但是它的序号不需要确认,计算对其他数据确认时也忽略该序号。 -
如果没有收到接收方的响应,则将坚持计时器的值加倍和复位,直到增大到门限值(一般60s)为止,此后发送方就每隔60s发送一个探测保温段,知道窗口重新打开。 -
保持计时器(激活计时器):
- 如果客户端与服务端建立了连接,发送一些数据后就停止了发送(可能是故障)。若计时器超时后服务器还没收到客户端信息,就发送探报文,如果发送了10个探测报文还没有响应(每一个间隔75s),就假定客户出了故障,终止该连接。
- 服务端每当接收到数据时,就复位计时器
-
时间等待器:
- 时间等待计时器在连接终止期间使用
- 在时间等待期,连接处于一种过渡状态,时间等待计时器通常设置为2倍TTL
1.5 TCP传输连接建立、维护与释放
1.5.1 传输连接建立
- 主机A发送报文段宣布它愿意建立连接, 报文段包括关于从A到B的通信量的初始化信息。
- 主机B发送确认报文段确认A的请求。
- 主机B发送报文段确认A的请求,报文段包含B到A的通信量的初始化信息。
- 主机A发送确认报文段确认B的请求.
三次握手:
- A 发送SYN
- B发送 SYN + ACK (将SYN和ACK合并为一个报文段)
- A发送ACK (确认SYN+ACK报文段)
1.5.2 传输连接释放 – 四次握手
- 如果客户端打算终止连接,客户端发送FIN1报文段
- 服务端TCP程序接收到FIN1报文段后,发送ACK1报文段
- 服务端仍然可以在服务器到客户端方向继续发送数据,当没有数据需要发送时,服务端TCP程序通知操作系统释放从服务端到客户端的TCP连接,并向客户端发送FIN2报文段。
- 客户端TCP程序发送ACK2报文段, 切断服务端到客户端的TCP连接
2. 用户数据报协议(UDP)
2.1 UDP协议的主要特点
- 无连接、不可靠的传输层协议
- 只提供了有限的差错检验功能
2.2 UDP适用的范围
- 视频播放应用
- 简短的交互式应用
- 多播与广播应用
- UDP支持1对1、1对多、多对多的交互式通信,这一点TCP协议不支持
|