TCP协议 VS UDP协议

TCP协议

TCP(Transmission Control Protocol 传输控制协议)

特点

  1. TCP是面向连接的服务,可靠的进程到进程通信的协议(重传机制)
  2. TCP报文段封装在IP数据包中
  3. IP首部 + TCP报文段(包含TCP包头,应用层数据)

TCP包头

  1. 源端口号(16bit),是客户端进程随机生成的,一般是从50000开始的
  2. 目标端口号(16bit),一般是服务器固定的
  3. 序列号(32bit,seq),TCP为每个字节都进行了编号
  4. 确认号(32bit,ack),通过ack来确认每个字节是否收到,判断是否需要重传
  5. 首部长度(4bit)
  6. 保留(6bit)
  7. 六个控制位(开关位,占1Bit)
    • URG,置为1时,紧急指针才能使用(紧急位)(了解)
    • ACK,跟确认号是开关和灯泡的关系,置为1时,确认号才能使用
    • PSH,为0时,不需要将数据推送到应用层,为1时,将数据推送到应用层(推送位)(了解)
    • RST,应用层出现故障时,置为1,强制断开会话(强制断开连接位)
    • SYN,置为1时请求建立连接(建立连接位,同步位,对方会发送包表示自己也置为1表示连接已经建立)建立连接成功后会置为0
    • FIN,置为1时断开连接(请求断开连接位,对方会发包表示确认,但是只是一个确认包,单向断开)
  8. 窗口大小(16Bit),流量控制,拥塞控制
  9. 校验和(16Bit),校验整个TCP段
  10. 紧急指针(16Bit)
  11. 选项

TCP的三次握手

  1. 客户端发送SYN报文(Seq=x,SYN=1)
  2. 服务器收到报文后,发送SYN+ACK报文(Seq=y,ack=x+1,SYN=1,ACK=1)(ack=x+1表示我已经收到你的报文了)
  3. PC1收到报文后,发送ACK报文(Seq=x+1,ack=y+1,ACK=1)(此时SYN值已经置为0,SYN值只有在三次握手的前两次为1)

TCP的四次挥手

  • TCP的四次握手断开连接(两次单向断开)
    1. PC1发送FIN/ACK(FIN=1,ACK=1)(请求断开连接,应用层已经断开连接了)
    2. PC2收到报文,发送ACK报文(ACK=1,单向断开)将缓存中的数据发送(有就发送,没有就走第三步)
    3. PC2发送FIN/ACK报文(FIN=1,ACK=1)(请求断开连接)
    4. PC1传输层发送ACK报文(ACK=1) 会话正式解除

TCP的重传机制

当PC端每发送一个报文,都会开启一个计时器,如果没有回包(超过了计时器时间),就会重新发送一次

TCP的安全问题

  • TCP半连接,SYN Flodd攻击/SYN泛洪攻击,不断发送SYN报文
  • 反射式SYN泛洪攻击,黑客伪装的SYN报文中不写自己的源IP,而将源IP替换成互联网上的IP,服务器收到请求后,会发送第二次报文给互联网上的PC,但是互联网的PC并没有要求建立连接,不会作出回应。

防护

防火墙防护原理:收到SYN报文时,防火墙并不会将报文转发给服务器,而是会“冒充”服务器给请求的人发送第二次报文,如果没有回应,则干掉这次连接。

UDP协议

UDP(User Datagram Protocol)

特点

  • 花费的开销小,传输效率较高

UDP包头

  1. 源端口号(16bit)
  2. 目标端口号(16bit)
  3. UDP长度(16bit),用来指出UDP的总长度,为首部加上数据(四层+五层数据)
  4. UDP校验和(16bit),用来完成对UDP数据的差错检验,它是UDP协议提供的唯一可靠机制

TCP VS UDP

TCP UDP
是否连接 面向连接 无连接
是否可靠 可靠传输,适用流量控制和拥塞控制 不可靠传输
连接对象个数 只能一对一通信 支持一对一,一对多,多对一和多对多交互通信
传输方式 面向字节流 面向报文
首部开销 首部最小20个字节,最大60个字节 首部开销小,仅8字节
适用场景 适用于要求可靠传输的应用,例如文件传输 适用于实时应用,例如IP电话,视频会议,直播等

小结

  • TCP向上层提供面向连接的可靠服务,UDP提供无连接的不可靠服务
  • UDP没有TCP传输可靠,但是可以在实时性要求高的地方应用
  • 对数据准确性要求高,速度可以相对慢的,可以选用TCP
posted @ 2021-09-02 11:08  携兮  阅读(230)  评论(0)    收藏  举报