TCP和UDP

2020年2月29日

TCP和UDP

TCP

传输控制协议(TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETFRFC 793定义。在简化的计算机网络OSI模型中的传输层。

TCP三次握手过程

  1. 客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三次握手的一部分。客户端把这段连接的序号设定为随机数X。
  2. 服务器端应当为一个合法的SYN回送一个SYN/ACKACK的确认码应为X+1,SYN/ACK包本身又有一个随机产生的序号Y。
  3. 最后,客户端再发送一个ACK。此时包的序号被设定为X+1,而ACK的确认码则为Y+1。当服务端收到这个ACK的时候,就完成了三次握手,并进入了连接创建状态。

3次握手的特点

没有应用层的数据 ,SYN这个标志位只有在TCP建立连接时才会被置1 ,握手完成后SYN标志位被置0。

TCP的四次握手

  1. 当 客户端完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求

  2. 服务器收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1

  3. 由服务器再提出反方向的关闭请求,将FIN置1

  4. 客户端对服务器的请求进行确认,将ACK置1,双方向的关闭结束

TCP的表头

  • 序列号(seq,32位长)
    • 如果含有同步化旗标(SYN),则此为最初的序列号,第一个数据比特的序列码为本序列号加一。
    • 如果没有同步化旗标(SYN),则此为第一个数据比特的序列码。
  • 窗口(WIN,16位长)
    • 表示从确认号开始,本报文的发送方可以接收的字节数,即接收窗口大小。用于流量控制
  • 标识符
    • URG=1:该字段为一表示本数据报的数据部分包含紧急信息,是一个高优先级数据报文,此时紧急指针有效。紧急数据一定位于当前数据包数据部分的最前面,紧急指针标明了紧急数据的尾部。
    • ACK=1:该字段为一表示确认号字段有效。此外,TCP 还规定在连接建立后传送的所有报文段都必须把 ACK 置为一。
    • PSH=1:该字段为一表示接收端应该立即将数据 push 给应用层,而不是等到缓冲区满后再提交。
    • RST=1:该字段为一表示当前 TCP 连接出现严重问题,可能需要重新建立 TCP 连接,也可以用于拒绝非法的报文段和拒绝连接请求。
    • SYN=1:当SYN=1,ACK=0时,表示当前报文段是一个连接请求报文。当SYN=1,ACK=1时,表示当前报文段是一个同意建立连接的应答报文。
    • FIN=1:该字段为一表示此报文段是一个释放连接的请求报文。

UDP

用户数据报协议(UDP)是同一层内另一个重要的传输协议,是一个简单的面向数据报的通信协议,是一种无连接的协议。

UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

特点

  1. UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。

  2. UDP是不可靠的,因为UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。

  3. UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文。

  4. UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。很多的实时应用(如IP电话、实时视频会议等)要去源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太多的时延。UDP正好符合这种要求。

  5. UDP支持一对一、一对多、多对一和多对多的交互通信。

  6. UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

  • 源端口:在需要对方回信时选用。不需要时可用全0。

  • 目的端口:这在终点交付报文时必须要使用到。

  • 长度:UDP用户数据报的长度,其最小值是8(仅有首部)

  • 检验和:检测UDP用户数据报在传输中是否有错。有错就丢弃。

TCPUDP 的区别

  1. TCP基于连接,UDP是无连接

  2. 对系统资源的要求(TCP较多,UDP少)

  3. UDP程序结构较简单,速度快

  4. 流模式与数据报模式

  5. TCP保证数据正确性,UDP可能丢包

  6. TCP保证数据顺序,UDP不保证。