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可以用于广播; 

猜你喜欢

转载自blog.csdn.net/qq_54773998/article/details/124201439