深入浅出TCP与UDP协议

深入浅出TCP与UDP协议

网络协议是每个前端工程师的必修课,TCP/IP协议族是一系列网络协议的总和,而其中两个具有代表性的传输层协议,分别是TCP与UDP,本文将介绍这两者以及他们之间的区别。

一、TCP/IP网络结构模型

计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由那一边先发起通信、使用那种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称之为协议(protocol)。

TCP/IP 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。

网络参考模型

当通过http发起一个请求时,应用层、传输层、网络层和链路层的相关协议依次对该请求进行包装并携带对应的首部,最终在链路层生成以太网数据包,以太网数据包通过物理介质传输给对方主机,对方接收到数据包以后,然后再一层一层采用对应的协议进行拆包,最后把应用层数据交给应用程序处理。

网络通信就好比送快递,商品外面的一层层包裹就是各种协议,协议包含了商品信息、收货地址、收件人、联系方式等,然后还需要配送车、配送站、快递员,商品才能最终到达用户手中。

一般情况下,快递是不能直达的,需要先转发到对应的配送站,然后由配送站再进行派件。

配送车就是物理介质,配送站就是网关, 快递员就是路由器,收货地址就是IP地址,联系方式就是MAC地址。

快递员负责把包裹转发到各个配送站,配送站根据收获地址里的省市区,确认是否需要继续转发到其他配送站,当包裹到达了目标配送站以后,配送站再根据联系方式找到收件人进行派件。

二、UDP

通过上图我们可以知道,链路层定义了主机的身份,也就是MAC地址,而网络层则定义了IP地址,明确了主机所在的网段,有了这两个地址,数据包就可以由一个主机发送到另一个主机,但是,网络的通信一般都是从一个主机的某个应用程序发出,由另一个主机的应用程序接收,而每台主机都会运行很多程序,所以当数据包发送到主机上时,我们不知道应该哪个程序接收数据包。

因此传输层引入了UDP协议来解决这个问题,为了给每个应用程序标识身份,UDP协议定义了端口,同一个主机上的每个应用程序都需要指定唯一的端口号,并且规定网络中传输的数据包必须加上端口信息。 这样,当数据包到达主机以后,就可以根据端口号找到对应的应用程序了。如下图所示:

因此我们可以总结它的几个特点:

1、面向无连接

首先UDP是不需要连接到主机的,想发数据直接就可以发送。

也就是说:

  • 在发送端,应用层将数据传递给传输层的UDP协议,UDP协议只会给数据增加一个UDP头标识。
  • 而在接收端,网络层将数据传递给传输层,UDP只是去除IP报文后就传递给应用层。

2、不可靠性

不可靠性体现在无连接上,由于UDP通信是不需要建立连接的,不管接收方是否接收到数据,所以肯定是不可靠的。

此外,由于UDP没有拥塞控制,会以恒定的速度发送数据,即使网络条件不好的时候,也不会对发送速率进行调整。这样会导致在网络条件不好的情况下容易导致丢包——数据丢失,但是优点也是明显的,在某些对实时性要求高的应用场景下,使用UDP比TCP更好,比如qq电话,微信视频等。

3、头部开销小

UDP数据包由首部和数据两部分组成,首部长度为8个字节,主要包括源端口和目标端口;数据最大为65527个字节,整个数据包的长度最大可达到65535个字节。

UDP 头部包含了以下几个数据:

  • 两个十六位的端口号,分别为源端口(可选字段)和目标端口
  • 整个数据报文的长度
  • 整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的错误

因此 UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的。

但是由于UDP协议比较简单,实现容易,但这恰恰也是它的缺点,没有确认机制,一旦发出,不知道主机是否接收到数据包,这无法满足对数据传输可靠性高的需求,因此诞生了TCP协议。也就是说TCP协议是具有确认机制的UDP协议。

三、TCP

为了使主机之间能够保持畅通的通信,提供可靠的连接服务,TCP采用了三次握手确立连接,和四次挥手断开连接:

在了解TCP如何建立连接和断开连接之前,我们先了解一下TCP的几个标识,即:SYN()、ACK()、FIN()。

三次握手

为了准确无误的传输数据,TCP协议采用了三次握手的策略:

1、客户端采用TCP协议将带有SYN标志的数据包发送给服务器,等待服务器确认。

2、服务器接收到SYN数据包后,必须确认SYN信号,即自己发送的ACK标志,同时也会想客户端发送一个SYN标志。

3、当客户端接收到ACK+SYN包后,会向服务器端发送ACK包,完成三次握手。

此时,客户端和服务器端就建立了连接,开始传送数据。

如图所示:

四次挥手

由于TCP/IP协议是要占用端口号的,而计算机的端口号却是有限的,如果不断开的话,肯定会造成计算机资源的浪费。

1、当客户端的数据传送完毕时,客户端会发送一个带有FIN标志的数据包。使得服务器端明白自己要断开连接了。

2、由于TCP的连接是双向的,所以断开时也应该是双向的;当服务器收到FIN标志的数据包时,会向客户端发送ACK包,并断开客户端到服务器端的连接,不再接收客户端发送的数据,但服务器仍然可以发送数据给客户端。

3、当服务器端发送完数据后,会向客户端发送一个带有FIN标志的数据包,使得客户端明白自己要断开连接了。

4、当客户端收到断开连接请求后,向客户端发送确认应答。然后客户端会进入等待状态,该状态会持续2MSL。如果这段时间内服务器都没有重发请求,就进入CLOSE状态。

如图所示:

TCP协议的特点

  • 面向连接

    面向连接是指,两个主机传送数据之前,必须建立连接,这样保证了数据传送的可靠性。

  • 点对点传输

    每条TCP传输连接只能有两个端点,只能进行点对点的数据传输

  • 可靠传输

    TCP的三次握手和四次挥手保证了数据的可靠传输

  • 拥有拥塞控制

    当网络情况不好的时候,TCP会减小发送数据的速率和数量。保证数据的可靠传输

【面试题】

1、为什么不能使用两次握手连接?

现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分 组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

即:客户端未收到确认连接分组,会忽略服务端发来的任何数据分组 而服务端因为发出的分组超时后,会重复发送同样的分组,这就形成了死锁

2、为什么关闭的时候是四次挥手?

四次挥手不能像三次握手一样,三次握手可以将ACK+SYN 一起发送,ACK用于确认信息,SYN却是用来建立联机的;四次挥手中ACK是不能和FIN一起发送,ACK只是告诉客户端确认我收到了,等我将数据发送完毕之后会向其发送FIN的标志,所以四次挥手是不能够改变的。

四、TCP与UDP的比较

1、对比

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

2、总结

  • TCP 向上层提供面向连接的可靠服务 ,UDP 向上层提供无连接不可靠服务。
  • 虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为
  • 对数据准确性要求高,速度可以相对较慢的,可以选用 TCP

参考文章


原文地址:https://www.cnblogs.com/seanxushuo/p/11397195.html

时间: 2024-08-01 22:39:29

深入浅出TCP与UDP协议的相关文章

TCP与UDP协议的区别

首先TCP和UDP协议都是运行在运输层的协议. UDP协议:用户数据包协议 1.UDP协议是无连接的.也就说在数据发送之前并不需要建立连接(当然,在发送数据结束的时候也就不存在链接的释放),因此减少了开销和数据发送之前的时延. 2.UDP使用尽最大努力的交付,但是不保证可靠性的交付,因此主机不需要维持复杂的链接状态表. 3.UDP是面向报文.发送方的UDP对于应用程序进程交下来的报文,即不合并,也不拆分,而是保留这些报文的边界.这也就是说,应用层交付给UDP多长的报文,UDP就照样发送,即一次发

UNP(一):网络编程角度下的TCP、UDP协议

此博文是学习UNP(UNIX Network Programming)后的读书笔记,供以后自己翻阅回顾知识. TCP.UDP概述 在前面<计算机网络与TCP/IP>栏目下已经介绍过一些关于TCP.UDP的相关知识TCP/IP(三):传输层TCP与UDP,这里只是简单从UNIX网络编程的角度介绍TCP.UDP协议. 我们都知道UDP 缺乏可靠性.无连接的,面向数据报 的协议,如果想确保数据报到达目的地,必须自己在应用层实现一些特性:对端的确定.本端的超时和重传等.UDP面向报文的特性,使得UDP

运输层协议--TCP及UDP协议

TCP及UDP协议 按照网络的五层分级结构来看,TCP及UDP位于运输层,故TCP及UDP是运输层协议.TCP协议--传输控制协议UDP协议--用户数据报协议 多路复用及多路分解 图多路复用及多路分解 接受主机中的运输层实际上并没有直接将数据交给进程,而是通过一个中间的套接字来传递.由于在任何一个时刻接受主机上可能有多个套接字,所以每个套接字都已一个唯一的标识符. 主机如何将一个收到的运输层报文段定向到合适的套接字? 为达到这一目的,在每个运输层报文段中设置了几个字段,在接收端,运输层检查并标识

TCP与UDP协议分析

1 案例1:TCP与UDP协议分析1.1 问题1.通过抓包分析TCP与UDP的封装格式2.通过抓包分析TCP三次握手1.2 方案1.实验环境由两台主机PC1和PC2组成,PC1使用宿主机,PC2使用VMWare虚拟机,确保两台主机通信正常(需要关闭PC2的防火墙)2.在PC1上运行科来进行抓包3.在PC1上通过远程桌面访问PC2,然后在PC1上分析数据包,如图-1所示.1.3 步骤实现此案例需要按照如下步骤进行. 1.第一次握手,如图-2所示. 2.第二次握手,如图-3所示.3.第三次握手,如图

网络基础:TCP协议、UDP协议、均属于传输层协议;TCP和UDP协议有何不同?

传输层 传输层的主要工作是定义端口,标识应用程序身份,并将数据包交给对应的应用程序实现端口到端口的通信,并且传输层引入了TCP/UDP协议. 1. 如果有大量数据包.数据包大?时间很长,网络中断,怎么控制重新传输?怎么确保数据包正确完整---传输层 传输层封装数据包,通过定义的 TCP.UDP 协议实现按序一个一个发送,保证数据完整正确性: 2. QQ发消息,你必须使用QQ接受消息,才可以正常通信:但是电脑中不是只运行了QQ,还有其他程序,怎么确定由谁来处理消息 传输层定义端口的概念-- HTT

理解TCP和UDP协议

目录 TCP 协议 UDP协议 TCP和UDP的区别 TCP和UDP的使用场景 一 TCP协议 1.TCP的头部格式 理解TCP协议,首要的就是TCP协议的头部格式 ·        Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号:用于区别主机中的不同进程,而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一的确定一个TCP连接: ·        Sequence Number:用来标识从T

android实现基于TCP和UDP协议的即时通讯,含android端和服务器端

这几天学习了下在android中实现即时通讯的方法,一开始,自然是从基本的网络协议中开始尝试了,这样能够最大化的私人订制自己的应用,还能学习到更多的知识,好处多多,接下来就简单介绍下两种协议的不同点吧 TCP协议:提供IP环境下的数据可靠传输,它提供的服务包括数据流传送.可靠性.有效流控.全双工操作和多路复用.通过面向连接.端到端和可靠的数据包发送.就如给悬崖上的两人通信时,他必须先把桥建好,确认桥是没问题的情况下,才把信件交过去,以后大家每次通信时,都确认下桥没什么问题,再通过这座桥来回通信了

TCP与UDP协议

要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准, 从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族.不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中 应用层:TFTP,HTTP,SNMP,F

TCP、UDP协议间的区别(转)

一.TCP/IP协议是一个协议簇.里面包括很多协议的.UDP只是其中的一个.之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了. TCP/IP协议集包括应用层,传输层,网络层,数据链路层. 应用层包括: 超文本传输协议(HTTP):万维网的基本协议. 文件传输(TFTP简单文件传输协议): 远程登录(Telnet):提供远程访问其它主机功能,它允许用户登录internet主机,并在这台主机上执行命令. 网络管理(SNMP简单网络管理协议):该协议提供了监控网络设