网络基础之 详解UDP与TCP(三次握手、四次挥手、确认应答、超时重传)

1.UDP(用户数据报协议)

UDP协议端格式:
网络基础之 详解UDP与TCP(三次握手、四次挥手、确认应答、超时重传)_第1张图片

  • 在UDP传输的过程总,如果校验和出错,数据就会直接被丢弃。
  • 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度,也就是说,一个UDP能传输的数据最大长度是64K,而64k在当今或联网环境下,是非常小的一个数字,如果需要传输的数据超过64k,就需要在应用层手动分包,多次发送,并在接收端手动拼装。
  • UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,有内核将数据传给网络层协议进行后续的传输动作。
  • UDP机油接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送的UDP报的顺序是一致的;如果缓冲区满了,再到达的UDP数据就会被丢弃。

UDP的特点

  • 无连接:只需要直到对端的IP和端口号就直接进行传输,不需要简历连接
  • 不可靠:没有确认机制,没有重传机制;如果因为网络故障,该段数据无法发送到对方,UDP协议层也不会给应用层返回任何错误信息
  • 面向数据报:数据只能一整条一整条的向应用层交付,不能灵活的控制读写数据的次数和数量

UDP的socket既能读,也能写,即为全双工。

2.TCP(传输控制协议)

网络基础之 详解UDP与TCP(三次握手、四次挥手、确认应答、超时重传)_第2张图片

  • 源端口与目的端口:分别表示数据从哪个进程来,要到哪个进程去;

  • 32位序号与确认序号:确认应答机制中的序列号与确认序号;

  • 4位TCP报头长度:解析时获取tcp头部,以4字节为单位(tcp头部最小20字节,最大60字节)

  • 6位标志位:
    - URG:紧急指针是否有效
    - ACK: 确认号是否有效
    - PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
    - RST: 对方要求重新建立连接; 把携带RST标识的称为复位报文段
    - SYN: 请求建立连接; 把携带SYN标识的称为同步报文段
    - FIN: 通知对方, 本端要关闭了, 称携带FIN标识的为结束报文段

  • 16位窗口大小:实现滑动窗口,以及进行流量控制

  • 16位校验和:发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题.( 此处的检验和不光包含TCP首部, 也 包含TCP数据部分. )

  • 16位紧急指针: 标识哪部分数据是紧急数据;

TCP的特点:

  • 面向连接:连接管理机制
  • 可靠传输:确认应答、超时重传等机制来保证
  • 面向字节流

2.1 连接管理机制

正常情况下,TCP要经过三次握手来建立连接,四次挥手来断开连接:
网络基础之 详解UDP与TCP(三次握手、四次挥手、确认应答、超时重传)_第3张图片

在建立连接时的三次握手过程中:

  • 第一次握手:建立连接时,客户端发送SYN包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;
    SYN包即为上文提到的:请求建立连接,携带SYN标识的数据报文段
  • 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

在数据传输过程中,用到的就是确认应答机制:

网络基础之 详解UDP与TCP(三次握手、四次挥手、确认应答、超时重传)_第4张图片

简单理解为:TCP将每个字节的数据都进行了编号,即为序列号,每一个ACK都带有对应的确认序列号,即告诉发送者,现在已经收到了哪里的数据,下次从哪里开始发。

简单理解四次挥手断开连接的过程:

  1. 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
  2. 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
  3. 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  4. 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

2.2 超时重传机制

超时重传可理解为:
主机A 发送一段数据给主机B,在一个特定的时间间隔内没有收到主机B 的确认应答,机会进行重发。

但是主机A未收到主机B发力啊的确认应答,也可能是因为ACK的丢失。。。。
在这种情况下,主机B就会收到很多重复的数据,搬TCP协议就需要识别出这些重复的包,并且将重复的包丢弃,此时利用序列号,就可能很好的达到去重的效果。

TCP为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算一个最大超时时间。

  • 操作系统会将超时时间以500ms为一个单位进行控制,每次判定超时重发的超时时间都是500ms的整数倍。
  • 如果重发一次以后,仍然得不到应答,将等待2*500ms后再进行重传
  • 如果仍然得不到应答,等待4*500ms后进行重传,以此类推,以指数形式递增
  • 类集到一定的重传次数,TCP认为网络或者对端主机出现异常,强制关闭连接

TCP的三次握手获取连接、四次挥手断开连接、确认应答与超时重传的机制很好的保证了TCP传输的可靠性

你可能感兴趣的:(网络基础之 详解UDP与TCP(三次握手、四次挥手、确认应答、超时重传))