TCP与UDP特点与区别

TCP/IP协议

IP地址(IP Address)
计算机分布在世界各地,要想和它们通信,必须要知道确切的位置。确定计算机位置的方式有多种,IP 地址是最常用的,例如,114.114.114.114 是国内第一个、全球第三个开放的 DNS 服务地址,127.0.0.1 是本机地址。

其实,我们的计算机并不知道 IP 地址对应的地理位置,当要通信时,只是将 IP 地址封装到要发送的数据包中,交给路由器去处理。路由器有非常智能和高效的算法,很快就会找到目标计算机,并将数据包传递给它,完成一次单向通信。

目前大部分软件使用 IPv4 地址,但 IPv6 也正在被人们接受,尤其是在教育网中,已经大量使用。

端口(Port)
有了 IP 地址,虽然可以找到目标计算机,但仍然不能进行通信。一台计算机可以同时提供多种网络服务,例如Web服务、FTP服务(文件传输服务)、SMTP服务(邮箱服务)等,仅有 IP 地址,计算机虽然可以正确接收到数据包,但是却不知道要将数据包交给哪个网络程序来处理,所以通信失败。

为了区分不同的网络程序,计算机会为每个网络程序分配一个独一无二的端口号(Port Number),例如,Web服务的端口号是 80,FTP 服务的端口号是 21,SMTP 服务的端口号是 25。

端口(Port)是一个虚拟的、逻辑上的概念。可以将端口理解为一道门,数据通过这道门流入流出,每道门有不同的编号,就是端口号。

协议(Protocol)
协议(Protocol)就是网络通信的约定,通信的双方必须都遵守才能正常收发数据。协议有很多种,例如 TCP、UDP、IP 等,通信的双方必须使用同一协议才能通信。协议是一种规范,由计算机组织制定,规定了很多细节,例如,如何建立连接,如何相互识别等。
协议仅仅是一种规范,必须由计算机软件来实现。例如 IP 协议规定了如何找到目标计算机,那么各个开发商在开发自己的软件时就必须遵守该协议,不能另起炉灶。

所谓协议族(Protocol Family),就是一组协议(多个协议)的统称。最常用的是 TCP/IP 协议族,它包含了 TCP、IP、UDP、Telnet、FTP、SMTP 等上百个互为关联的协议,由于 TCP、IP 是两种常用的底层协议,所以把它们统称为 TCP/IP 协议族。

TCP UDP 介绍

TCP(Transmission Control Protocol,传输控制协议):是一种面向连接的、可靠的、基于字节流的传输层通信协议。

UDP(User Datagram Protocol,用户数据报协议):,是 OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

TCP UDP 特点

TCP特点:
  1、tcp是面向连接的,通信之前需要建立连接,通信结束之后还需释放连接(三次握手,四次挥手)
  2、tcp提供了很可靠的支付服务,可靠也就是说:tcp的数据没有重复、没有丢失、没有错误、并且和发送端的数据是一致的。
  3、tcp是面向字节流的。也就是tcp是以字节为单位,虽然传输的过程中数据被划分为了一个一个数据报文,但是这只是为了方便传输,接收端最终接受到的数据和发送端接收到的数据是一样的。
  4、tcp提供全双工通信:就是tcp的两端即可以作为发送端,也可以作为接收端。
  5、最重要的一点就是一个tcp的连接只能有两个端点,支持一对一通信。
  6、tcp首部含有20个字节。

UDP特点:
  1、首先udp是无连接的,通信结束也不需要释放连接。
  2、upd是一种不可靠的协议,发出去就不管了。
  3、udp是一种面向报文的链接;udp数据传输的单位是报文,而且不会对数据做任何的拆分和拼接操作。在发送端,应用程序给传输层的udp什么样的数据,udp不会对数据进行拆分,最会增加一个udp头并且交给网络层。在接收端,udp收到网络层的数据之后,除去ip(网络层协议)数据报头部后便交给应用层,不会做任何的拼接操作。
  4、udp是不存在拥塞控制的,并且始终就是用恒定的速率发送数据,并不会根据网络拥塞情况对发送速率做调整。这个状况下就会存在优势和弊端;弊端就是:网络拥塞时有些报文就会丢失,所以才说udp是不可靠的协议;他的优点就是有些使用场景允许报文丢失,比如:直播,语音通话,但是对实时性要求比较高。
  5、udp支持一对一,一对多,多对多,多对一通信。
  6、udp首部的开销比较小,只有8个字节。相对于tcp来说,效率还是很高的。

TCP UDP 优缺点

TCP优点:可靠,稳定。tcp的可靠体现在tcp在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认,窗口,重传,拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。

TCP缺点:速度慢,效率低,占用系统资源高,易被攻击。TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制,重传机制,拥塞机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU,内存等硬件资源。而且,因为TCP有确认机制,三次握手机制,这些也导致TCP容易被人利用,实现DOS,DDOS,CC等攻击。

UDP优点:速度快,比TCP稍安全。UDP没有TCP的握手,确认,窗口,重传,拥塞控制等机制。UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的。比如:UDP Flood攻击。

UDP缺点:不可靠,不稳定。因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会容易丢包。

TCP UDP 区别

TCP基于连接,需要经过三次握手建立可靠连接,可简单类比打电话过程:A打给B(1),B接通电话并向A问好(2),A听到B的问好后向B问好(3),之后开始聊正事,且聊天过程式实时同步有序的。

UDP不基于连接,类似于线上聊天,给对方发消息不经过对方同意,发送的消息对方可能未收到,也可能收到乱序的消息。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode613. 直线上的最近距离(SQL)

表 point 保存了一些点在 x 轴上的坐标,这些坐标都是整数。 写一个查询语句,找到这些点中最近两个点之间的距离。 | x | |-----| | -1 | | 0 | | 2 | 最近距离显然是 1 ,是点 -1 和 0 之间的距离。所以输出应该如下: | …

三次握手与四次挥手

三次握手 三次握手是指在建立TCP连接时,需要client端和server端共进行三次信息确认。 第一次握手:建立连接。client发送连接请求报文段(SYN位置为1,Sequence Number为x),然后,client端进入SYN…

leetcode619. 只出现一次的最大数字(SQL)

表 my_numbers 的 num 字段包含很多数字,其中包括很多重复的数字。 你能写一个 SQL 查询语句,找到只出现过一次的数字中,最大的一个数字吗? --- |num| --- | 8 | | 8 | | 3 | | 3 | | 1 | | 4 | | 5 | | 6 | 对于上面给出的样例…

socket入门

socket 简介 Socket即套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络…

leetcode614. 二级关注者(SQL)

在 facebook 中,表 follow 会有 2 个字段: followee, follower ,分别表示被关注者和关注者。 请写一个 sql 查询语句,对每一个关注者,查询他的关注者数目。 比方说: ------------------------- | follow…

SPI、I2C、UART 三种串行总线对比介绍

转载自https://blog.csdn.net/oqqHuTu12345678/article/details/65445338 参考博客 https://blog.csdn.net/xiaodingqq/article/details/80342459 https://blog.csdn.net/weiqifa0/article/details/8845281 https://www.zhihu.com/question/22632011 http://www.360doc.cn/…

leetcode1045. 买下所有产品的客户(SQL)

Customer 表: ---------------------- | Column Name | Type | ---------------------- | customer_id | int | | product_key | int | ---------------------- product_key 是 Product 表的外键。 Product 表: ---------------------- | C…

Oracle利用序列实现自动增长列

在SQL Server以及MySql中都有相应的自动增长列类型,而Oracle中则没有此类型,那如果要实现自动增长列需要怎么办呢. 我们可以利用序列来实现.插入数据时候,可以像sql以及mysql一样,不用显示指定需要自动增长的列的值. 代码实现如下: CREATE TABLE SYS_ROLES ( ID integer NOT NU…

C++ new和malloc的区别

这里先对new和delete简单进行一下总结,然后再细说new和malloc的区别。 一、new和delete C语言提供了malloc和free两个系统函数,完成对堆内存的申请和释放。而C则提供了两个关键字new和delete; 1.1 规则 new/delete是关键字,效率…

leetcode620. 有趣的电影(SQL)

某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。 作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为…

leetcode1050. 合作过至少三次的演员和导演(SQL)

ActorDirector 表: ---------------------- | Column Name | Type | ---------------------- | actor_id | int | | director_id | int | | timestamp | int | ---------------------- timestamp 是这张表的主键. 写一条SQL查询语句获取合作…

linux内核相关知识

参考https://www.cnblogs.com/xdyixia/p/9248240.html linux内核启动过程 一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader),Linux 内核,文件系统,应用程序。其中 Bootloade…

栈与堆的区别(内存分配与数据结构)

参考自https://blog.csdn.net/K346K346/article/details/80849966/ 堆(Heap)与栈(Stack)包含两层含义: 程序内存布局场景下的内存管理方式数据结构中的两种常见的数据结构 1. 程序内存分配中的堆与栈 1.1 栈介绍 …

leetcode10. 正则表达式匹配 一道没有解释的字符串dp困难题

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符 * 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。 说明: s 可能为空,且只包含…

string相关库函数

char *strcat(char *dest, const char *src) 功能 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。 参数: dest – 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。 src – 指向要追加的字符串,该…

leetcode44. 通配符匹配 又是一道没有解释的字符串dp困难题

给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 ? 和 * 的通配符匹配。 ? 可以匹配任何单个字符。 * 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 的小写…

深入学习卷积神经网络(CNN)的原理知识

转载自https://www.cnblogs.com/wj-1314/p/9754072.html 在深度学习领域中,已经经过验证的成熟算法,目前主要有深度卷积网络(DNN)和递归网络(RNN),在图像识别,视频识别,语…

java中如何生成随机数?

java中如何生成随机数? package com.test.util; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; public class CharacterUtils {/*** 第一种方法;length为产生的位数*/public static String getRandomString(int…

leetcode132. 分割回文串 II

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 返回符合要求的最少分割次数。 示例: 输入: "aab" 输出: 1 解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。 思路:dp[i]…

为什么需要智能指针

参考自https://www.cnblogs.com/round1/p/12906648.html 主要为了避免以下Bug: 内存泄露 :对象无法被释放,最常见的问题。野指针 : 指针指向未知。重复释放 : 顾名思义。 (一)内存泄露 : 1. 抛出异常&…