首页 > 其他分享 >TCP和UDP的联系与区别

TCP和UDP的联系与区别

时间:2022-10-07 13:55:36浏览次数:51  
标签:UDP 区别 TCP 传输 连接 服务端 客户端

TCP

    TCP是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。TCP仅支持单播传输,面向字节流,提供全双工通信,是可靠传输。
    首先:TCP和UDP都是工作在传输层,用于程序之间传输数据的。数据一般包含:文件类型,视频类型,图片等等。

    建立连接

    一个TCP通信建立连接必须要经过三次握手才能建立起来,简单描述三次握手的过程:

  1. 当客户端向服务端发起连接时,会先发一包syn包连接请求数据,进行询问,能否建立连接。
  2. 如果服务端同意连接,则回复一包syn+ack包。
  3. 客户端收到之后回复一包ack包,连接建立。
    image
    三次握手的目的是使数据包的发送和接收同步, 经过三次握手之后,主机A才向主机B正式发送数据。

    断开连接

处于连接状态的客户端和服务端,都可以发起关闭连接请求,此时需要四次挥手来进行连接关闭。

  1. 假设客户端主动发起连接关闭请求,他需要向服务端发起一包fin包,表示要关闭连接,自己进入终止等待1状态,这是第一次挥手。
  2. 服务端收到fin包,发送一包ack包,表示自己进入了关闭等待状态,客户端进入终止等待2状态,这是第二次挥手
  3. 服务端此时还可以发送未发送的数据,而客户端还可以接收数据,待服务端发送完数据之后,发送一包fin包,进入最后确认状态。这是第三次挥手。
  4. 客户端收到之后回复ack包,进入超时等待状态,经过超时时间后关闭连接,而服务端收到ack包后,立即关闭连接。这是第四次挥手。
    image

UDP协议:

    首先UDP协议是非连接的,传输数据之前源端和终端不建立连接, 当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。 在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、 计算机的能力和传输带宽的限制; 在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。发送数据就是把简单的数据包封装一下,然后从网卡发出去就可以了,数据包之间并没有状态上的联系,正因为UDP这种简单的处理方式,导致它的性能损耗非常少,对于cpu,内存资源的占用也远小于TCP,但是对于网络传输过程中产生的丢包,UDP并不能保证,所以UDP在传输稳定性上要弱于TCP。

TCP和UDP的主要区别:

UDP TCP
是否连接 无连接 面向连接
是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥塞控制
连接对象个数 支持一对一,一对多,多对一和多对多交互通信 只能是一对一通信
传输方式 面向报文 面向字节流
首部开销 首部开销小,仅8字节 首部最小20字节,最大60字节
适用场景 对实时性要求较高但是对少量丢包并没有太大要求的场景,比如:域名查询,语音通话 对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如,传输文件,发送邮件

标签:UDP,区别,TCP,传输,连接,服务端,客户端
From: https://www.cnblogs.com/ouyan-/p/16759614.html

相关文章

  • TCP和UDP的区别
    1.TCPTCP的全称是TransmissionControlProtocol,传输控制协议。其首部字节为20~60字节1.1特点面向连接传输是可靠的,保证了数据的正确性和数据顺序以字节流的形式进行......
  • 使用mod_cluster 与 mod_proxy 区别
    1.mod_cluster简介       mod_cluster和mod_jk,mod_proxy类似,是一个基于httpd的负载平衡项目能够代理请求给基于Tomcat网络服务器集群(支持任何独立的Tomcat,独立......
  • Vue - data声明区别 data:{} 与 data(){return {}}
    data:{}:全局可见varvm=newVue({el:'#app',data:{title:'HELLO,WORLD!'}})data(){return{}}:只在当前组件中生效var......
  • JS基础 -- if分别使用return、break、continue的区别
    /**if分别使用return、break、continue的区别**break:使用break可以退出当前的循环**continue:用于跳过当次循环**return:使用return可以结束整个函数**下面用......
  • Class.forName()、Class.class、getClass() 三者区别以及instanceof与强制类型转换
    Java反射反射为在运行时期获取对象类型信息的操作。传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有......
  • SPAFA 和Dijkstra的区别
    Dijkstra算法和SPFA算法都可以用于求单源最短路,前者可以用小根堆进行优化,后者用就是用队列优化过的Bell-manFord,下面说一说这两者的区别:Dijkstra算法是基于贪心和DP的思......
  • 计算机网络原理(TCP/IP协议一):概述
    体系结构原则设计和实现TCP/IP协议族结构和协议Internet/内联网/外联网设计应用标准话进程与Internet体系结构相关的攻击有效沟通取决于使用共同的语言。这一观......
  • java类加载器 defineClass和loadClass的区别
    在阅读《自己动手写java虚拟机》时,通过观察P133~P135的代码classLoader会将加载过的class保存起来(包括defineclass的类),而只有在要加载一个类时 没有从已加载的类找到......
  • TCP与UDP的联系和区别
    TCP(传输控制协议)。是一种面向连接的、可靠的、基于字节流的传输层通信协议,使用三次握手协议建立连接、四次挥手断开连接。面向连接意味着两个使用TCP的应用(通常是一个......
  • HTTP中的重定向和请求转发的区别
    在学习JavaWeb时产生的疑问一、调用方式我们知道,在servlet中调用转发、重定向的语句如下:request.getRequestDispatcher("new.jsp").forward(request,response);//转发......