• TCP与UDP的区别


    一、TCP协议

      TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议。也就是说,在收发数据前,必须和对方建立可靠地连接。

      1、一个TCP连接必须先经过三次“对话”才能建立起来。

       (1)、第一次对话:主机A向主机B发出连接请求数据包:“我想给你发送数据,可以吗?”。

       (2)、第二次对话:主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发送?”。

       (3)、第三次对话:主机A再发出一个数据包确认主机B的同步要求:“我现在就发,你接着吧!”。

      三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

      2、三次“对话”其实就是TCP的三次握手过程:

       (1)、第一次握手:主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B,向主机B 请求建立连接,通过这个数据段,主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我。

       (2)、第二次握手:主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用这个序列号作为起始数据段来回应我;

       (3)、第三次握手:主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:我已收到回复,我现在要开始传输实际数据了,这样3次握手就完成了,主机A和主机B 就可以传输数据了。 

      3、TCP建立连接要进行三次握手,而断开需要进行四次挥手

       (1)、第一次:当主机A完成数据传输后,将控制位FIN设置为1,提出停止TCP连接的请求 ;

       (2)、第二次:主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK设置为1;

       (3)、第三次:由主机B再提出反方向的关闭请求,将FIN设置为1 ;

       (4)、第四次:主机A对主机B的请求进行确认,将ACK设置为1,双方向的关闭结束。

      ACK:是TCP报头的控制位之一,对数据进行确认。由目的端发出,告诉发送端这个序列号之前的数据都收到了。只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求数据重发,保证数据的完整性。

      SYN:同步序列号,TCP建立连接时将这个位置设为1.

      FIN:当TCP完成数据传输需要断开时,提出断开连接的一方将这个位置设置为1.

    二、UDP协议

      UDP(User Data Protocol,用户数据报协议)是一个非连接的协议,在传输数据之前,发送端和接收端不用建立连接。当它想传输数据时就简单的去抓取来自应用程序的数据,并尽可能快的把它扔到网络上。

      在发送端,UDP传输数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读取一个消息段。

      由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的信息。

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

      

    三、TCP与UDP的区别

      1、基本区别

       (1)、TCP是基于连接的,UDP是无连接的;

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

       (3)、UDP的程序结构较简单;

       (4)、TCP是流模式,UDP是数据报模式;

       (5)、TCP可以保证数据的正确性,UDP可能会丢包;

       (6)、TCP可以保证数据的顺序,UDP不保证;

      2、UDP的应用场景

       (1)、面向数据报方式时;

       (2)、传输的网络数据大多为短消息时;

       (3)、一个服务端拥有大量的客户端时;

       (4)、对数据安全性没有特殊要求时;

       (5)、网络负担非常重,但对响应速度要求高时;

      3、TCP的应用场景

       (1)、面向连接时;

       (2)、对实时性要求不高,对准确性要求相对较高时;

       (3)、需要保持数据完整性时;

    PS:因作者能力有限,如有误还请谅解;

  • 相关阅读:
    Jupyter notebook 读取文件的问题
    机器学习-数据清洗和特征选择
    机器学习-逻辑回归
    Java教程
    13.并发编程
    redis 实现
    CyclicBarrier介绍
    Future模式衍生出来的更高级的应用
    并发编程 futuretask
    整理POST请求方式
  • 原文地址:https://www.cnblogs.com/WHL5/p/9428850.html
Copyright © 2020-2023  润新知