UDP和TCP协议

Table of Contents

UDP和TCP协议

1、UDP

1.1、数据包格式

源端口号(16位)
目的端口号(16位)
UDP长度(16位)
UDP校验和(16位)
数据

1.2、特点

  1. 沟通简单。不需要一肚子花花肠子(大量的数据结构、处理逻辑、包头字段)。前提是它相信网络世界是美好的,秉承性善论,相信网络通路默认就是很容易送达的,不容易被丢弃的。
  2. 轻信他人。它不会建立连接,虽然有端口号,但是监听在这个地方,谁都可以传给他数据,他也可以传给任何人数据,甚至可以同时传给多个人数据。
  3. 愣头青。做事不懂权变。不知道什么时候该坚持,什么时候该退让。它不会根据网络的情况进行发包的拥塞控制,无论网络丢包丢成啥样了,它该怎么发还怎么发。

1.3、使用场景

  1. 需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用。这很好理解,就像如果你是领导,你会让你们组刚毕业的小朋友去做一些没有那么难的项目,打一些没有那么难的客户,或者做一些失败了也能忍受的实验性项目。
  2. 不需要一对一沟通,建立连接,而是可以广播的应用。咱们小时候人都很简单,大家在班级里面,谁成绩好,谁写作好,应该表扬谁惩罚谁,谁得几个小红花都是当着全班的面讲的,公平公正公开。长大了人心复杂了,薪水、奖金要背靠背,和员工一对一沟通。
  3. 需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的时候。记得曾国藩建立湘军的时候,专门招出生牛犊不怕虎的新兵,而不用那些“老油条”的八旗 兵,就是因为八旗兵经历的事情多,遇到敌军不敢舍死忘生。

TCP三次握手

握手过程

  • SYN(Synchronize sequence numbers): TCP首部中的同步序号标志
  • ACK(Acknowledgement): 确认字符
时间段 客户端 服务端
活动 状态 活动 状态
CLOSED CLOSED
CLOSED LISTEN
第一次握手 主动发起连接SYN SYN-SENT 收到发起的连接 SYN-RCVD
第二次握手 收到SYN和ACK SYN_SENT 返回SYN并ACK客户端的SYN SYN_RCVD
第三次握手 发送ACK的ACK ESTABLISHED 收到客户端的ACK ESTABLISHED

为什么不是两次握手?

A为客户端,B为服务端

防止服务端建立单方面连接

在A建立连接,发生了第一个请求的时候,由于丢包或超时导致第一个请求包丢了。
A不能确定结果,于是不停的发。终于,一个请求包到了B(A不知道这个请求包到了B)。
B收到了请求包,知道了A的存在。
然后,A发出的迟到的请求包到了B。B认为这个是一个正常的请求,因此建立了连接。

上述过程就是两次握手,我们可以看到如果B在第二次握手以后,继续确认客户端的ack(即第三次握手),就不会建立上面荒谬的连接。

为什么不四次握手?

三次握手可以双方的消息有去有去有回,四次握手完全没有必要。

即便更多次数的握手,也不能保证连接可靠

三次握手的作用?

  • 建立连接;
  • 确定TCP包的起始序号;(序号是一个32位的计数器,每4ms加1,防止出现冲突)

TCP四次挥手

过程

时间段 客户端 服务端
活动 状态 活动 状态
ESTABLISHED ESTABLISHED
第一次挥手 发送FIN FIN-WAIT-1 接收FIN CLOSED-WAIT
第二次挥手 收到ACK FIN-WAIT-2 发送ACK CLOSED-WAIT
第三次挥手 收到FIN,ACK FIN-WAIT-2 发送FIN,ACK LAST_ACK
第四次挥手 发送ACK TIME-WAIT 收到ACK LAST_ACK