UDP与TCP协议

  • UDP协议
    • 特点
    • UDP协议端格式
    • 基于UDP的协议
  • TCP协议
    • 特点
    • TCP协议端格式
    • 滑动窗口
    • 流量控制
    • 拥塞控制
          • 慢启动
          • 快重传
  • 基于TCP的协议
  • 粘包问题
    • 定义
    • 如何解决粘包问题
    • UDP是否存在粘包问题
  • TCP与UDP使用场景

UDP协议

特点

1.无连接:知道对端的IP地址和端口号就可直接传输,减少开销和发送数据前的时延
2.不可靠:无确认,重传机制,若因故障无法传送到接收方,UDP协议不会给应用层返回任何错误信息
3.面向数据报:UDP对应用层交付下来的报文既不合并也不拆分,而是保留这些报文的边界。即应用层交给UDP多长的报文,UDP照样发送,一次发送一个报文。若发送方发送100个字节,接收端必须调用一次recvfrom接受100字节,而不能分10次接受。
4.UDP没有拥塞机制:网络上的拥塞不会使源主机的发送速率降低
5.UDP支持一对一,一对多,多对一,多对多的交互通信
6UDP的首部开销小:只有8字节,TCP20字节

UDP协议端格式

UDP与TCP协议_第1张图片

基于UDP的协议

NFS:网络文件系统
DNS:域名解析协议
DHCP:动态主机配置协议
TFTP:简单文件传输协议

TCP协议

特点

1.面向连接:建立连接,数据传输,释放连接
2.可靠:通过TCP传送的数据无差错,不丢失,按序到达,不重复
TCP提供全双工通信:TCP两端均有接收和发送缓存
4.面向字节流:应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交付下来的数据看成一串连续的无结构的字节流,并不知道所传送的字节流的含义。

TCP协议端格式

UDP与TCP协议_第2张图片

FIN::释放连接
ACK:确认号
SYN:同步报文段,请求建立连接,对方同意时,置为1
RST:复位,对方要求重新建立连接
PSH:提示接收端立刻从TCP缓冲区将数据读走
URG:紧急指针是否有效,文中有紧急数据应立即传送
16位窗口大小:指发送本报文段一方的接收窗口,并非自己的发送窗口。窗口值告诉对方:从本报文段首部的确认号算起,接收方允许对方发送的数量

滑动窗口

窗口大小:不需要等待确认应答而可以进行继续发送数据的最大值,直到收到第一个ACK,滑动窗口后移,继续发送数据操作系统为维护该窗口开辟发送缓冲区,存放已发送未应答的数据,只有已经应答的数据才可以删除。窗口越大,网络的吞吐率越高。

流量控制

接收端将自己的接收窗口大小放到TCP首部的窗口中,告诉发送方自己可以接受多少数据。
窗口越大,网络吞吐量越大
接收端一旦发现自己的接收缓冲区快满了。调整窗口大小值,继续发送给发送方
如果接收方接受缓冲区已满,将窗口值设为0,并传送给发送方,发送方不再发送数据,不过,每隔一段时间发送方发送一个窗口大小探测数据段,判断是否可以继续发送数据

拥塞控制

拥塞控制:防止网络因大量数据传送造成网络阻塞,降低传送速率;
拥塞控制四部分:慢启动,拥塞避免,快速重传,快速恢复

慢启动

慢启动:先发送少量数据,探探路,摸清当前网络阻塞状态,然后再决定要传送的数据速度
拥塞窗口:取决于网络的拥塞程度,将发送方的发送窗口设置为拥塞窗口大小,动态变化,发送开始时,拥塞窗口大小为1,然后递增。
慢启动特点:初始时慢,后续增长速度快,当超过阈值时,线性增长。
当TCP开始启动时,慢启动阈值等于拥塞窗口大小
当网络阻塞时,慢启动阈值减半,拥塞窗口值为1
少量的丢包,超时重传,大量丢包,网络阻塞。

快重传

发送端可能接收到重复的确认报文段,例如TCP报文段丢失或者接收端收到乱序的报文段并重排之。拥塞控制算法需判断当收到重复的确认报文段时,网络是否发生阻塞,或者说TCP报文是否真的丢失,具体做法是,发送端如果连续收到3个重复的确认报文段,就认为阻塞真的发生了。启动快重传和快恢复处理阻塞。

基于TCP的协议

HTTP协议
HTTPS协议
FTP协议
SSH协议

粘包问题

定义

粘包问题的包指的是应用层的数据包
在TCP的协议首部没有同UDP相同的报文长度,但有序号一说,将数据按序号排列进行传送,从应用层看只是一串连续的字节数据,因此,应用层不知道从哪部分开始到那部分结束是一个完整的应用层数据包。

如何解决粘包问题

明确两个包的边界
1.对于定长的包,保证每次按照固定的大小读取数据
2.对于变长的包,可在包头的位置,约定一个包总长度的字段,从而知道了包的结束位置
3.对于变长的包,可在包与包之间使用明确的分隔符

UDP是否存在粘包问题

对于UDP,若还未上层交付数据,UDP报文长度仍然存在,同时,UDP是一个一个将数据交付给应用层,有明确的数据边界
站在应用层的角度,使用UDP时,要么收到完整的报文,要么不收
故不会出现粘包问题。

TCP与UDP使用场景

TCP适用于可靠传输的情况,可用于文件传输,重要状态更新等情况
UDP用于高速传输和实时性要求较高的通信领域,可用于广播

你可能感兴趣的:(Linux)