tcp,udp
tcp
-
面向连接
-
面向字节流
-
可靠传输,流量控制和拥塞控制
-
不支持广播,只有两个端
-
首部最小20字节,最大60字节
tcp可靠性体现在
-
超时重发 发送方,发送内容出现误码或者丢包,接收方不会返回确认码(ACK),在超时时间截止时,接收方收不到确认码就会超时重发
- RTT 往返时间:自tcp数据发送到接收确认的时间间隔
- RTO 超时重传时间:一般设置为略大于RTT.(小于RTT会导致不必要的重传,过大于RTT会导致网络等待时间过长)
- Jscobson/Karels算法:由于复杂度网络变化,RTT一直在变,所以RTO要依据RTT的变化做出修改,以适应网络变化。
-
滑动窗口 TCP 头里有一个字段叫 Window,叫 Advertised-Window,这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。
滑动窗口分为发送窗口和接收窗口
-
发送窗口 大小取决于接受窗口,收到接受方确认ack就会发生[滑动]
-
接受窗口 大小取决于系统和硬件,收到发送方确认ack就会发生[滑动]
但接收端窗口滑动还必须前面的报文都确认的情况下,才会移动窗口左沿
-
-
流量控制 就是让发送方的发送速率不要太快,让接收方来得及接收
- 方式: 1.接收方发送滑动窗口给发送方,调整发送方的发送窗口大小。一般在发送方发送窗口过大时,可能接收方会收不到发送方的部分数据,就会去调整发送方窗口大小,进行流量控制。
-
拥塞控制 视频:https://www.bilibili.com/video/av52266048/
- 网络拥塞:网络需求量大于网络可提供的资源部分(带宽等),就形成了网络拥塞。
- 概要:
发送方维护拥塞窗口,将拥塞窗口作为发送窗口(swmd=cwnd),维护慢开始门限(ssthresh);
- cwnd < ssthresh,使用慢开始算法
- cwnd > ssthresh,停止使用慢开始,改用拥塞避免算法
- cwnd = ssthresh,既可以使用慢开始,也可以使用拥塞避免
- TCP四种拥塞控制算法
- 慢开始算法(1988 TCP Tahoe) 拥塞窗口大小以指数规律增长(1,2,4,8)
- 拥塞避免算法(1988 TCP Tahoe) 每轮次拥塞窗口加1,即线性规律增长
- 快重传(1990 TCP Reno) 就是使得发送方尽快进行重传,而不是等超时时重传计时器超时再重传 一旦收到三个重复确认,就知道丢失的数据报文段,开始执行快重传
- 快恢复(1990 TCP Reno)
udp
- 不面向连接
-
面向报文
-
不可靠传输
-
支持广播,支持一对多,多对多,多对一等
-
适用于实时应用: ip 电话、视频会议
- 首部仅8字节