TCP协议与UDP协议的区别

这篇具有很好参考价值的文章主要介绍了TCP协议与UDP协议的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、TCP协议 

1、TCP协议首部组成

2、TCP三次握手和四次挥手

2、1 三次握手

2、2 四次挥手 

3、代码实现

二、UDP协议

1、UDP特点  

2、首部格式 

3、代码实现

三、TCP和UDP的区别 


前言

        在我们的OSI七层模型或者是四层模型中,我们的传输层始终保持不变,传输层负责定义两台主机进程之间的通信,提供数据传输服务,提供端到端的可靠传输,所以我们需要用到的两个主要的协议是:

  • TCP协议:传输控制协议,提供面向连接、可靠的数据传输服务,主要提供完整性服务
  • UDP协议:用户数据协议,提供无连接、尽最大努力交互的服务,不保证数据的可靠性,主要提供及时性服务

一、TCP协议 

1、TCP协议首部组成:

        TCP协议与UDP协议的区别

源端口和目的端口(4个字节

        源端口是发送端,目的端口是接收方,各自占2个字节

序号(4个字节

        传送的数据的数据流中每一个字节都拥有自己的序号,序号表示本报文段所发送的数据的第一个字节的序号,代表每次数据发送的位置,每发送一次就累加一次该数据字节数的大小,序号是计算机生成的随机数。

确认号(4个字节

        期望收到对方的下一个报文段数据的第一个字节的序号

数据偏移(4位

        表示数据部分距离报文首部的偏移量,“数据偏移”的计算单位是4个字节,数据偏移量是占四位,那么最大表示为1111,最大1111表示15 x 4= 60个字节,即表示TCP首部最大长度为60个字节,因此“选项”部分最多40个字节。

保留字段(4位)一般设置为0

标志位(8位)      

  • 紧急(URG):URG=1表示紧急指针有效,需要尽快传送,不需要排队直接优先传输
  • 确认(ACK):对已接受数据的确认,默认为0,建立连接后,所以传送的报文都必须将ACK置为1,当ACK=1表示确认号字段有效
  • 同步(SYN:在链接建立时使用,SYN=1ACK=0表示是一个链接请求,若对方同意建立连接,则响应报文段为SYN=1ACK=1
  • 推送(PSH):接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
  • 复位(RST):当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
  • 终止(FIN:FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

窗口

        窗口值作为接受方让发送方设置其发送窗口的依据,单位为字节(限制是因为接受方的数据缓存空间是有限的)

检验和(2 字节

        检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。

紧急指针(16

        指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。

 2、TCP三次握手和四次挥手

 2、1 三次握手

TCP协议与UDP协议的区别

第一次握手:客户端向服务端发送了一个同步报文段

        SYN=1:表示客户端请求连接

第二次握手:服务端收到了用户端的请求,同意建立连接,然后服务器发送确认报文段给客户端

        SYN=1 ACK=1:表示同意建立连接

第三次握手:客户端收到了服务端同意连接的确认之后,开始发送第一个数据包   

        ACK:表示收到服务器的确认数据包 

2、2 四次挥手 

        TCP协议与UDP协议的区别 

 第一次挥手:客户端向服务端发送连接释放的请求报文,并且停止发送数据

        FIN=1:客户端主动释放客户端到服务端的TCP连接

第二次挥手:服务端收到了客户端的请求释放报文,客户端发送确认报文。从客户端到服务端这个方向上的连接就释放了,TCP连接处于半关闭状态。此时客户端无法发送数据给服务端,但是服务端还可以发送数据给客户端客户端仍可以接收。

        ACK=1:表示同意客户端释放连接请求

第三次挥手:服务端没有数据再发给客户端数据,其应用进程就通知TCP释放连接,并向客户端发送确认报文

        FIN=1 ACK=1:表示服务器释放服务器到客户端的TCP连接

第四次挥手:客户端收到服务端的释放报文段后,给服务端发送同意确认报文 

3、代码实现

        TCP进行数据的传输是基于流进行的

        客户端:使用的是Socket对象发送数据

public static void main(String[] args) {
	try(Socket clientSocket= new Socket("192.168.1.113",8080);) {
		//客户端接收服务端发送的数据
		try(BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));) {
			String result = reader.readLine();
			System.out.println(result);
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
}

         服务端:使用的是ServerSocket 对象接受数据

public static void main(String[] args) {
	try(ServerSocket server = new ServerSocket(8080);) {
		//服务器处于阻塞状态,等待客户端的连接
		Socket accept = server.accept();
		System.out.println(accept.getRemoteSocketAddress());
		//服务端向客户端发送数据
		try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(accept.getOutputStream()))) {
			writer.write("提货码:"+UUID.randomUUID().toString().substring(0,6).toUpperCase());
			writer.flush();
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
}

二、UDP协议

1、UDP特点  

  • 用户数据报协议UDP(User Datagram Protocol 是传输层的协议,无连接(即发送数据之前不需要建立连接)。
  • UDP 面向报文传输,不保证可靠交付,同时也不使用拥塞控制,适合多媒体通信的要求。
  • UDP 支持一对一、一对多、多对一和多对多的交互通信。
  • UDP 的首部开销小,只有 8 个字节

2、首部格式 

  • UDP的首部没有“序号”字段,因为UDP协议只需要传输一个数据包,所以不需要序号。
  • 用户数据报 UDP 有两个字段:数据字段首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。

 TCP协议与UDP协议的区别

3、代码实现

        UDP进行数据的传输使用的是数据包的方式 

        客户端 

public static void main(String[] args) {
	//设置数据包
	byte[] buff="你好啊!!!".getBytes();
	DatagramPacket packet = new DatagramPacket(buff, buff.length);
	packet.setData(buff);  //将需要的数据写入数据包
	
	//基于UDP的Socket
	//8081是设置自己的端口号
	try(DatagramSocket socket=new DatagramSocket(8081)) {
		//设置接收方的IP和端口
		socket.connect(Inet4Address.getByName("192.168.0.148"),8080);
		//发送数据包
		socket.send(packet);
		
		//接收接收端的回应
		byte[] buf=new byte[64];
		packet.setData(buf);
		socket.receive(packet);
		//接受到的内容
		String result = new String(packet.getData(),packet.getOffset(),packet.getLength());
		System.out.println("服务端发送的内容:"+result);
	} catch (IOException e) {
		e.printStackTrace();
	}
}

         服务端

public static void main(String[] args) {
	//创建数据包用于接收
	byte[] buff = new byte[64];
	DatagramPacket packet = new DatagramPacket(buff, buff.length);
	//监听8080端口
	try(DatagramSocket socket = new DatagramSocket(8080)) {
		
		//接受数据,存入数据包
		socket.receive(packet);
		System.out.println("来自客户端的字节内容:"+Arrays.toString(packet.getData()));
		System.out.println("来自客户端的字节长度:"+packet.getLength());
		System.out.println("来自客户端的字节位置:"+packet.getOffset());
		
		//接受到的内容
		String result = new String(packet.getData(),packet.getOffset(),packet.getLength());
		System.out.println("客户端发送的内容:"+result);
		
		//给发送方进行反馈
		packet.setData("收到了!!!".getBytes());
		socket.connect(Inet4Address.getByName("192.168.0.137"),8081);
		socket.send(packet);
	} catch (Exception e) {
		e.printStackTrace();
	}
}

三、TCP和UDP的区别 

  • 面向连接:TCP协议需要建立连接,仅支持一对一通信;UDP协议无需建立连接,支持一对一、一对多、多对一和多对多的交互通信。
  • 可靠传输:TCP协议通过确认应答、连接管理、流量控制、拥塞控制来确保可靠性传输;UDP不保证可靠性传输。
  • 性能效率:TCP协议传输效率慢,需要较多的资源开销。UDP协议传输效率快,需要较少的资源开销。
  • 首部格式:TCP协议的首部需要20-60个字节,UDP协议需要8个字节。
  • 应用场景:TCP要求通信数据可靠(比如文件传输、邮件传输等),UDP适用于哟求通信速度快(如音频、视频等)文章来源地址https://www.toymoban.com/news/detail-406124.html

到了这里,关于TCP协议与UDP协议的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TCP/UDP协议重温三次握手四次挥手 简单笔记

    术语储备: SYN: 同步位 ;SYN=1,表示进行一个连接请求 ACK: 确认位 ;ACK=1,确认有效 ACK=0,确认无效 ack : 确认号 ;对方发送序号+1 seq : 序号 ; 标识从TCP发端向TCP收端发送的数据字节流 FIN :表示 关闭连接 TCP/UDP协议都是传输层协议 TCP协议:(传输控制协议) 连接(三次握

    2024年02月09日
    浏览(35)
  • 10000字讲解TCP协议(确认应答,超时重传,三次握手,四次挥手等等众多机制)以及UDP协议(UDP报文,校验和)

    UDP它是属于TCP/IP协议族中的一种。是无连接的协议,发送数据前不需要建立连接,因为不需要建立连接,所以可以在网络上以任何可能的路径传输,至于有没有传输到目的地,UDP是不关心的,所以,UDP它是天然支持广播的,就类似学校的广播,只需要将声音传递给每个学生即

    2024年01月21日
    浏览(46)
  • 什么是三次握手与四次挥手( 一篇文章讲清楚TCP协议与UDP协议)

        关于TCP协议和UDP协议大家应该都有所耳闻,我们常用的网络通讯。比如浏览网页、软件聊天、以及你看到的这篇文章,都是通过这两种协议来进行数据传输的。 到底他们是如何工作的?这两种协议的区别又是什么呢?请随武汉海翎光电的小编一起耐心看完这篇文章,你一

    2024年02月09日
    浏览(36)
  • TCP/UDP的首部

    TCP 首部长度为20字节,加上选项部分最大可达60字节。 源端口,16位;发送数据的源进程端口。 目的端口,16位;接收数据的进程端口。 由于端口号最多为16位,因此端口号最大值为65535。 序号,32位;代表当前TCP数据段第一个字节占整个字节流的相对位置。 确认号,32位;代

    2024年02月16日
    浏览(28)
  • 【网络原理进阶篇】自定义协议,协议约定符,三次握手,四次挥手,TCP(保证可靠性机制)和UDP原理

    前言: 大家好,我是 良辰丫 ,我们已经学习了网络原理基础版,初步认识了网络,还学习了网络编程,了解了网络通信的各种程序,接下来我们更深入的了解网络是如何工作的.这篇文章我们主要介绍协议,UDP和TCP的一些原理.💞💞 🧑个人主页:良辰针不戳 📖所属专栏:javaEE初阶 🍎

    2023年04月24日
    浏览(79)
  • TCP协议与UDP协议的区别

    目录 前言 一、TCP协议  1、TCP协议首部组成 2、TCP三次握手和四次挥手 2、1 三次握手 2、2 四次挥手  3、代码实现 二、UDP协议 1、UDP特点   2、首部格式  3、代码实现 三、TCP和UDP的区别          在我们的OSI七层模型或者是四层模型中,我们的传输层始终保持不变,传输

    2023年04月09日
    浏览(31)
  • TCP协议和UDP协议的区别

    目录 一、简介UDP和TCP来源 OSI七层结构 TCP/IP协议模型 二、TCP协议: 1、TCP的功能: 2、UDP的代码实现: 3、TCP协议的组成:         4、TCP的连接管理:TCP的三次握手(建立连接)和四次挥手(释放连接) TCP的三次握手: TCP三次握手的原因: TCP的三次握手状态的改变 5、重

    2024年02月02日
    浏览(33)
  • 全面解析UDP协议(特点、报文格式、UDP和TCP的区别)

    UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。 特点 无连接:UDP通信

    2024年02月08日
    浏览(43)
  • TCP协议的概念以及与UDP的区别

    TCP的概念 (Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议,由IETF的RFC 793说明(specified)。TCP在IP报文的协议号是6。 一、传输控制协议 1 面向连接 意味着两个使用TCP的应用(通常是一个客户端和一个服务器)在彼此交换数

    2024年02月07日
    浏览(31)
  • TCP、UDP 协议的区别,各自的应用场景

    TCP 传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 UDP 用户数据报协议,是一个简

    2024年02月09日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包