TCP&UDP协议

Posted ohana!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP&UDP协议相关的知识,希望对你有一定的参考价值。

目录

一,TCP协议

1.TCP协议的格式

2.TCP协议的特点

1)有连接

2)可靠传输

3)面向字节流

4)有接收缓冲区,也有发送缓冲区

5)大小不限

6)全双工通信

3.TCP协议的原理——可靠机制

1)确认应答机制

2)超时传输机制

3)连接管理机制 

4)流量控制机制

5)拥塞控制机制

4.TCP协议的原理——效率机制

1)滑动窗口机制

2)延迟应答机制

3)捎带应答机制

5.三次握手

6.四次挥手

二,UDP协议

1.协议格式

2.特点

1)无连接

2)不可靠

3)面向数据报

4)没有发送缓冲区,只有接收缓冲区

5)大小受限

三,TCP&UDP总结


一,TCP协议

1.TCP协议的格式

2.TCP协议的特点

1)有连接

通过三次握手建立连接和通过四次挥手关闭连接

2)可靠传输

网络传输的方式,是通过一跳一跳的方式来传递数据的,期间可能发生数据丢失

3)面向字节流

在连接没有关闭之前,可以多次接收数据,也可以多次发送数据

4)有接收缓冲区,也有发送缓冲区

  • 在确认应答机制和超时重传机制都会用到缓冲区
  • 接收数据:在接收数据时,先将数据保存到接收缓冲区,再交给程序
  • 发送数据:发送数据时,先写到发送缓冲区,然后再刷新缓冲区

5)大小不限

因为可以多次发送数据,所以大小不限,可以发送很大的数据

6)全双工通信

双方都可以接收或者是发送数据

3.TCP协议的原理——可靠机制

1)确认应答机制

解释:

  • 发送一个数据报之后,需要接收方回答一下是否收到了这个数据报

实现:

  • 在tcp协议中有32位序号报头,用于把数据一个字节一个字节的放进去,并且对数据进行了编号
  • 报头中的32位确认序号,将下一次需要发送的数据开始序号返回去,并将标志位ack(带确认信息)置为1

2)超时传输机制

解释:

  • 不论是发送的数据报丢失或是带确认信息的数据报丢失,都会导致发送端一直接收不到应答,需要重新传输

发送数据报丢失情况:

  • 对于发送端以为成功发送,接收端什么都没收到,肯定不会返回,因此直接重发接收端只需要返回确认应答数据报(缓冲区未被刷新,直接重新发送)

确认应答数据报丢失:

  • 对于发送端来说这次是真的成功发送了,同时接收端也接收到了并发出了应答确认数据报,但是,确认数据报丢失了,因此,等待一段时间后,发送端要重新发送,接收端再次收到数据报后发现已经接收过了,进行去重操作(利用序列号)后,再次返回确认应答数据报 

超时时间的计算:

  • Linux中(BSD Unix和Windows也是如此),超时以500ms为一个单位进行控制,每次判定超时重发的超时时间都是500ms的整数倍
  • 如果重发一次之后,仍然得不到应答,等待 2*500ms 后再进行重传
  • 如果仍然得不到应答,等待 4*500ms 进行重传。依次类推,以指数形式递增
  • 累计到一定的重传次数,TCP认为网络或者对端主机出现异常,强制关闭连接 

3)连接管理机制 

三次握手和四次挥手的具体过程

4)流量控制机制

解释:

  • 接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应
  • 因此TCP支持根据接收端的处理能力,来决定发送端的发送速度。这个机制就叫做流量控制

实现:

  • 接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 "窗口大小" 字段,通过ACK端通知发送端;
  • 窗口大小字段越大,说明网络的吞吐量越高;
  • 接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端;发送端接受到这个窗口之后,就会减慢自己的发送速度;
  • 如果接收端缓冲区满了,就会将窗口置为0;这时发送方不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端

方法:

  •  接受端返回的ack数据报中,包含了16位窗口大小的字段,用来标识接收端接收缓冲区的剩余大小,以此来控制发送端发送数据的速度
  • 滑动窗口大小就是发送数据的大小,是以流量窗口大小为其一个依据

5)拥塞控制机制

解释:

  • 发送数据时,先发一点数据,逐渐提高数据量,防止一次性发送的数据过多,导致大量的丢包
  • 拥塞窗口也是作为滑动窗口的一个参考值 

实现:

4.TCP协议的原理——效率机制

1)滑动窗口机制

解释:

就是一次发送多个数据报

窗口大小:可以一次性发送最多数据报的大小

具体窗口大小:取流量窗口和拥塞窗口中的最小值

发送时丢包:

这种丢包会导致以及后面的数据报都接收到了,也不会返回最后一次接收到ack,内部的检测机制会检测序号不连续,并且发现某一个数据报之前的ack连续返回三次,就会重新进行发送

ack丢失:

只要有一次的ack返回都证明之前的数据报都已经接收到了

2)延迟应答机制

解释:

  • 主要和滑动窗口大小有关,如果收到之后立马返回,就说明接收端的处理速度很快
  • 但是如果等待一定量的数据报再返回,就可以让窗口变得大些,传输的效率就会更高

控制:

  • 数量限制:每隔N个包就应答一次;
  • 时间限制:超过最大延迟时间就应答一次;
  • 具体的数量和超时时间,依操作系统不同也有差异;一般N取2,超时时间取200ms; 

3)捎带应答机制

解释:

就是为了方便也可以让一些返回数据一起返回给发送端

5.三次握手

syn标志位:申请建立连接的标志位

  • 客户端发送syn到服务端,申请建立客户端到服务端的连接
  • 服务端返回syn+ack给客户端(这是syn的第一次应答),及申请建立服务端到客户端的连接
  • 客户端接收到服务端返回的数据报,将状态设置为established,返回ack给服务端(这是syn的第二次应答),服务端接收到数据报,也将状态设置为established,建立了客户端到服务端的连接

6.四次挥手

fin标志位:关闭连接的标志位

  • 客户端发送fin到服务端,申请关闭连接
  • 服务端接收到后fin后,状态置为CLOSE_WAIT,并且返回一个ack(这个动作是tcp协议栈自己实现的,不需要程序调用代码执行)
  • 服务端发送一个fin到客户端,申请关闭到客户端的连接(程序员手动调用socket.close来发送),程序可以执行一些动作,如消耗资源等
  • 客户端返回ack(第三次fin的应答),且状态置为CLOSE_WAIT,需要等待一定的时间,置为CLOSED,服务端接收到这个数据报也置为CLOSED,关闭连接(第四次ack也可能出现丢包,那么服务端就需要重新发送第三个fin数据报给客户端,客户端需要进行应答)

二,UDP协议

1.协议格式

2.特点

1)无连接

不需要进行连接,只要知道对方的ip和端口就直接发送

2)不可靠

没有任何可靠机制,发送完就继续下一个,不知道上一个是否发送成功

3)面向数据报

应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并,不会像TCP一样可以循环发送

4)没有发送缓冲区,只有接收缓冲区

也和UDP的机制一样,因为不需要重复发送,没有可靠机制,那么就不需要等待接收端返回任何收到或是没收到的数据报,但是接收端可以有接收时的缓冲区,防止一次性数据报过大

5)大小受限

UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部)。

三,TCP&UDP总结

  • TCP用于可靠传输的情况,应用于文件传输,重要状态更新等场景;
  • UDP用于对高速传输和实时性要求较高的通信领域,例如,早期的QQ,视频传输等。另外UDP可以用于广播; 

以上是关于TCP&UDP协议的主要内容,如果未能解决你的问题,请参考以下文章

【网络协议笔记】第四层:传输层(Transport)TCP协议简介(1)

计算机网络传输层(TCP/UDP)

计算机网络传输层(TCP/UDP)

计算机网络传输层(TCP/UDP)

6.UDP协议

TCP UDP 封包过程