TCP(transmission control protocol)传输控制协议
特点:
- 面向连接,传输数据之前需要通过三次握手建立连接,数据传输之后需要通过四次挥手释放连接
- 可靠传输,通过停止等待协议实现, 无差错 不丢失 无重复 按顺到达
- 面向字节流,当发送方发送报文到TCP缓冲区, tcp可以根据实际情况(发送窗口=min(接收窗口,拥塞窗口))发送多少个字节
- 流量控制,通过滑动窗口协议来实现
- 拥赛控制,通过 慢开始->拥赛避免->快重传->快恢复
连接过程
1. 三次握手
- 由客户端向服务器发送SYN同步报文
- 当服务端收到SYN同步报文后,会返回给客户端ACK确认报文和SYN同步报文
- 客户端收到ACK确认报文和SYN同步报文后,会向服务端回一个ACK确认报文,此时客户端和服务端的连接正式建立
2. 四次握手
- 由客户端向服务端发送一个FIN结束报文
- 服务端会返回给客户端一个ACK确认报文,此时客户端发起的断开连接已经完成
- 服务端向客户端发送一个FIN结束报文
- 客户端会返回一个ACK确认报文给服务端, 至此,由服务端方向的断开连接已经完成
可靠传输:
停止等待ARQ(自动重传请求)协议
- 无差错情况
- 超时重传(发送方超时重传):当发送发发送报文,在规定时间内没有收到接受方的确认,发送方会重传报文,如果超过重传限制,会关闭连接
- 确认丢失(接收方丢弃重复的报文),当接收方接到发送方重复的报文, 会丢弃重复的报文,向发送方重传第一次收到的确认报文
- 确认迟到(发送方确认),当发送方出现超时重传时, 第一次发送的报文的确认后面才到达客户端,客户端收下迟到的确认, 但什么也不做
包重传次数:一个包的重传次数由系统决定,比如有些系统5次,如果重传5次还没成功就会发送一个reset报文(RST)断开TCP连接
连续ARQ协议 + 滑动窗口协议
SACK 选择性确认
原因:
- 在TCP通信过程中,如果发送序列中间某个数据包丢失(比如1、2、3、4、5中的3丢失了)
- TCP会通过重传最后确认的分组后续的分组(最后确认的是2,会重传3、4、5)
- 这样原先已经正确传输的分组也可能重复发送(比如4、5),降低了TCP性能
改进:
- 为改善上述情况,发展出了SACK(Selective acknowledgment,选择性确认)技术
- 告诉发送方哪些数据丢失,哪些数据已经提前收到
- 使TCP只重新发送丢失的包(比如3),不用发送后续所有的分组(比如4、5)
流量控制
- 通过滑动窗口来控制
拥赛控制
原因:
- 防止过多的数据注入到网络中
- 避免网络中的路由器或链路过载
过程:
- 慢开始 (拥塞窗口指数增⻓到阀值 ssthresh)
- 拥塞避免 ( 拥塞窗口加法增大, 线性增⻓)
- 网络拥塞 (丢包)
- 快重传算法 (接收方连续发送三个重复的确认报文M2, 接收方收到三个连续的对M2的重复确认,就理解重传M3)
- 乘法减小 阈值减半
- 快恢复: 从新的阈值开始进行线性增⻓
拥塞窗口: 一次可以发多少个端 ssm(数据链路层 1500 -> 网路层1480 -> 传输层 1460)
发送窗口 = min(接收窗口 拥塞窗口)
UDP(user datagrama protocol)用户数据报协议
特点
- 无链接,减少了建立和释放连接的开销
- 尽最大能力交付,不保证可靠传输, 因此不需要维护负责参数, 首部只有八个字节(TCP首部至少二十个字节)
- 面向报文,对于上层应用层的报文,既不合并也不拆分, 原封不动的作为传输层UDP的用户数据报的数据部分, 然后拼接一个UDP头部组成了UDP数据报,往下传递