【计算机网络】TCP协议与UDP协议的区别

发布于:2022-11-09 ⋅ 阅读:(585) ⋅ 点赞:(0)

目录

TCP

TCP的首部格式

TCP的三次握手与四次挥手

三次握手

四次挥手

UDP

UDP的首部格式

总结


TCP

  • 传输控制协议 TCP是面向连接可靠传输层协议(传输数据前,必须建立连接);
  • 每一条 TCP 连接只能有两个端点(服务器、客户端),所以每一条 TCP 连接只能是点对点的(一对一,一个一个);
  • TCP 面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的报文段);
  • TCP 具备“可靠性传输”、“流量控制”、“拥塞控制”等功能;

TCP的首部格式

序号 数据流中每个字节都有自己的序号,序号字段代表每次数据的发送位置
确认号 主要出现于接收方的报文中,如果没有收到,确认号=序号(停留在上一次)
数据偏移

数据部分距离报文首部的偏移量

保留 为今后使用,现设置为0
控制位 紧急URG =1时优先传输
确认ACK 对已接收数据的确认,=1时确认号才有效
同步SYN 建立连接时:SYN=1,ACK=0请求连接;SYN=1,ACK=1同意连接(响应)
推送PSH =1,尽快交付进程,不等缓存填满
复位RST =1,连接出错,要释放连接,重新建立连接
终止FIN 用于释放连接,=1表示发送完毕。并要求释放
窗口 用于滑动窗口技术,实现流量控制
校验和 检验范围:首部+数据,计算校验和要在TCP报文前+12字节的伪首部
紧急指针 配合PSH使用,指出紧急数据有多少,紧急数据放在报文数据的最前面
选项 配合快速重传的SACK方法使用,指明选择性重传的数据

TCP的三次握手与四次挥手

三次握手

第一次握手

        根据TCP首部内容,表示这是一个请求建立连接的数据包,其中seq=x为所传送数据的第一个字节的序号。

第二次握手

  • 确认ACK=1,代表服务器同意连接
  • 序号seq=y 的值由服务器指定,表示服务器发送数据时的第一个数据字节的序号
  • 确认号ack=x+1,表示已经收到客户端发送的x个字节数据,并告诉客户端下次应从数据的第 x+1个字节开始发送


第三次握手

  • 确认ACK=1,表示收到服务器的确认数据包
  • 序号seq=x+1,表示发出的数据包就是数据的第x+1个字节
  • 确认号ack=y+1,表示收到服务器发送y字节数据,并告诉服务器下次应从数据的第y+1个字节开始发送

四次挥手

第一次挥手

  • 首先客户端向服务器发送连接释放的请求报文(数据包),并停止发送数据
  • 在连接释放报文(数据包)的TCP首部中:终止FIN=1,确认ACK = 0
  • 终止FIN=1,意味着客户端要主动释放客户端—>服务器的TCP连接;序号位seq为u,u值由客户端指定,随后等待B的确认。

第二次挥手

  • 服务器收到连接释放的报文之后,给客户端发送确认报文。从客户端到服务器这个方向上的连接就释放了,TCP连接处于半关闭状态。此时客户端无法发送数据给服务器,但是服务器还可以发送数据给客户端,客户端仍可以接收
  • 在服务器发送给客户端确认报文的TCP首部中:终止FIN=0,确认ACK=1,序号位seq=v,确认号ack=u+1
  • 确认ACK=1表示收到了客户端发送的数据包,同意客户端释放连接

第三次挥手

  • 若服务器已经没有向客户端发送的数据了,其应用进程就通知TCP释放连接,并向客户端发送确认报文
  • 在确认报文的TCP首部中:确认ACK=1,终止FIN=1
  • 确认ACK=1,表示服务器已经把需要发给客户端的数据发完了;终止FIN=1,表示服务器要释放服务器—>客户端的TCP连接
  • 此后服务器不再向客户端发送数据,但能接收数据

第四次挥手

  • 客户端收到服务器的连接释放报文段后,向服务器发出确认报文
  • 在确认报文的TCP首部中:确认ACK=1,终止FIN = 0
  • 确认ACK=1,表示收到服务器的确认报文,并同意服务器释放连接

 

UDP

        一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。当

运输层使用UDP协议时,向其上层提供的也是无连接不可靠的传输服务。发送方给接收方发送

UDP用户数据报,若传输过程中用户数据报受到干扰而产生误码,接收方UDP可以通过该数据报

首部中的校验和字段的值检查出产生物码的情况,但仅仅丢弃该数据报其他什么也不做。发送方给

接收方发送UDP用户数据报,如果该数据报被英特网中的某个路由器丢弃了,发送方UDP不做任

何处理,因为UDP向上层提供的是无连接不可靠的传输服务。
 

UDP的首部格式

  • 16位源端口号:表示数据从哪里来。
  • 16位目的端口号:表示数据要到哪里去。
  • 16位UDP长度:表示整个数据报(UDP首部+UDP数据)的长度。
  • 16位UDP检验和:如果UDP报文的检验和出错,就会直接将报文丢弃。

 

总结

类型 特点 性能 应用层场景 首部
是否面向连接 传输可靠性 传输效率 所需资源
TCP 面向连接 可靠 要求通信数据可靠 20-60字节
UDP 无连接 不可靠 要求通信速度快 8字节
  • TCP 是面向连接的,UDP 是面向无连接的
  • UDP程序结构较简单
  • TCP 是面向字节流的,UDP 是基于数据报的
  • TCP 保证数据正确性,UDP 可能丢包
  • TCP 保证数据顺序,UDP 不保证
本文含有隐藏内容,请 开通VIP 后查看