对TCP和UDP的简单理解——通俗易懂,图文并茂
前言
tcp协议和udp协议都在传输层工作,他们的目标都是在程序之间传输数据(可是文本,图片,视频)对于tcp和udp都是二进制数。
TCP和UDP之间的区别是什么?
TCP是基于连接的,而UDP是基于非连接
将人与人的通信比喻为进程和进程之间的通信,基本有两种方式:
第一种为书信方式,第二种方式为打电话(不考虑速度因素)
TCP运行的三个过程:
三次握手,运输确认,四次挥手
三次握手:建立连接的过程
当客户端向服务端发起连接时,会先发一包连接请求数据过去询问,能否与你建立连接,这包数据我们称为SYN包
如果对端同意连接则回复一包SYN+ACK包
客户端收到之后回复一包ACK包,连接建立
因为这个过程中互相发送了三包数据,所以称之为三次握手。
为什么叫三次握手而不是两次握手?
服务端回复完SYN+ACK后就建立了连接,这是为了防止因为已失效的请求报文,突然传到服务器引起错误,假设采用两次握手建立连接,客户端向服务端发送了一个SYN包来请求建立连接,因为某些未知的原因SYN包并没有到达服务器,在中间某个网络节点产生了滞留
为了建立连接客户端会重发SYN包,这次的数据包正常送达,服务端回复SYN+ACK之后建立了连接
但是第一包数据阻塞的网络节点突然恢复,第一包SYN包又送达服务端,这时服务端会认为是服务端又发起了一个新的连接,从而在两次握手之后,进入等待数据状态
服务端认为是两个连接,而客户端认为是一个连接,造成了状态不一致,如果在三次握手的情况下,服务端收不到最后的ACK包,自然认为连接建立不成功
所以三次握手本质上来说,就是为了解决信道不可靠的问题,为了在不可靠的信道上建立可靠的连接,经过三次握手之后,客户端和服务端都进入了数据传输状态。
传输确认
tcp协议需要在不可靠的信道上保证建立可靠的连接,一包数据可能会被拆成多包发送,如何处理丢包问题,这些数据包到达的先后顺序不同,如何处理乱序问题
发送缓冲: 针对此问题,tcp协议为每一个连接建立了一个发送缓冲区
发送报文: 从建立连接的第一个序列号为0,后面每个字节的序列号就会增加1,发送数据时,取一部分数据组成发送报文
在其tcp协议头中,互附带序列号和长度,接收端在收到数据后,需要回复确认报文。
回复确认: 确认报文中的ACK= 接收序列号+长度,也就是下一包数据需要发送的起始序列号,一问一答的发送方式能够使得发送端确认发送的数据已经被对方收到,发送端也可以一次连续发送多包数据,接收端只需要回复一次ACK就可以了
切割发送: 这样发送端可以把待发送的数据,分隔成一系列的碎片,发送到对端,对端根据序列号和长度,在接收后重构出来完成的数据,假设其中丢失了某些数据包,在接收端可以要求发送端重传。
比如丢失了100-199这100个字节,接收端向发送端发送ACK = 100 的报文,发送端收到后重传中的一包数据,接收端进行补齐。以上过程不区分客户端和服务端,tcp是全双工的,两端均采用上述机制。
四次挥手
处于连接状态的客户端和服务端,都可发起关闭连接请求,此时需要四次挥手来进行连接关闭。假设客户端主动发起连接关闭的请求,它需要向服务端发起FIN包,表示要关闭连接,自己进入终止等待1状态,这是第一次挥手。
服务端收到FIN包,发送ACK包,表示自己进入了关闭等待状态,客户端进入终止等待2状态,这是第二次挥手。
服务端此时还可以发送未发送的数据,而客户端还可以接收数据,待服务端发送完数据以后,发送一包FIN包,进入最后确认状态,这是第三次挥手
客户端收到之后回复ACK包,进入超时等待状态,经过超时时间互关闭连接,而服务端收到ACK包后,立即关闭连接,这是第四次挥手。
为什么客户端需要等待超时时间?
这是保证对方已经收到ACK包,因为假设客户端送完最后一包ACK包后就释放了连接,一旦ACK包在网络中丢失,服务端将一直保留在最后确认状态
UCP协议
首先udp协议是基于非连接的,发送数据就是简单的把数据包简单的封装一下,然后从网卡发出去就可以了,数据包之间并没有状态上的联系,正因为UDP这种简单的数据处理模式,导致他们的性能损耗非常少,对于CPU内存资源的占用也远小于tcp,但是对于网络传输过程中产生的丢包,udp协议并不能保证,所以UDP在传输稳定性上要弱于tcp。
TCP和UDP之间的主要区别
TCP:
稳定可靠(适用于要求较高的场景,需要准确无误的传输给对方,比如传输文件,发送邮件,浏览网页等)
UDP:
速度快,但是可能产生丢包,所以适用于对实时性要求较高,但是对少量丢包,并没有太大要求的场景,比如域名查询,电话通信,视频直播等
udp还有重要的应用场景:即隧道网络(即常用的VPN,以及在SDN中用到的VXLAN也是一种)
心若所向,何惧道阻且长!
文章为个人总结,若有不正之处,欢迎大家评论留言指正!
对TCP和UDP的简单理解——通俗易懂,图文并茂相关推荐
- 常见通信协议HTTP、TCP、UDP的简单介绍
TCP HTTP UDP: 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则"说话",对方才能理解或为之服务. TCP HTTP UDP三者的关系: T ...
- Mac地址以及TCP和UDP的理解(黄梦岚)
假如黄梦岚看到这篇文章哈哈哈哈希望会 我们在了解IP地址和MAC地址的时候我们需要理解计算机系统分哪几层? 答: 1.物理层 2.数据链路层 3.网络层 主要就是这个几个其他的自己去百度我也不记得了 ...
- Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤...
TCP和UDP是两个传输层协议,广泛应用于网络中不同主机之间传输数据.对任何程序员来说,熟悉TCP和UDP的工作方式都是至关重要的.这就是为什么TCP和UDP是一个流行的Java编程面试问题. Jav ...
- 通信协议——HTTP、TCP、UDP
TCP HTTP UDP: 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则"说话",对方才能理解或为之服务. TCP HTTP UDP三者的关系: TCP/IP是个协 ...
- 通信协议:HTTP、TCP、UDP
TCP HTTP UDP: 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则"说话",对方才能理解或为之服务. TCP HTTP UDP三者的关系: T ...
- 简单理解TCP/IP传输层协议TCP和UDP
TCP/IP模型中的传输层主要负责端到端通信,和数据链路层类似,数据链路层负责点到点的通信.TCP/IP模型的传输层主要协议有TCP (Transmission Control Protocol,传输 ...
- TCP、UDP以及HTTP的简单讲解
先来一个讲TCP.UDP和HTTP关系的 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中 ...
- 接收udp数据_聊聊UDP、TCP和实现一个简单的JAVA UDP小Demo
最近真的比较忙,很久就想写了,可是一直苦于写点什么,今天脑袋灵光一闪,觉得自己再UDP方面还有些不了解的地方,所以要给自己扫盲. 好了,咱们进入今天的主题,先列一下提纲: 1. UDP是什么,UDP适 ...
- 通俗,通俗(白话)理解TCP和UDP的区别
TCP和UDP这两个所谓的协议常常出现在面试过程中,今天就此做一个自己的理解 一.TCP百度百科给出的解释是这样的: TCP(Transmission Control Protocol 传输控制协议) ...
最新文章
- 编译器是怎样工作的?用lex和yacc 写一个计算器(2)
- 无人驾驶岗平均月薪4.14万:因为稀缺,所以高薪
- Maven-学习笔记03【基础-Maven标准目录结构和常用命令】
- Effective Java之使类和成员的可访问性最小化(十三)
- 移动最小二乘_最小移动以形成弦
- 以后再想大数据杀熟就没那么容易了
- [bzoj3676]回文串[后缀数组+Manacher]
- 转行前端很迷茫,该怎么办?
- 二分法的样例 题解
- 5款免费的WordPress备份解决方案
- 测试环境服务器windows server 2003资源下载
- MATLAB常见问题:小数保留有效数字位数相关问题/除法结果问题/数据显示格式设置
- redis过期策略及配置方式
- 【MacOS】MacOS 添加虚拟打印机
- blankcount函数python,统计函数第五讲:计数函数COUNT和COUNTBLANK
- Android本地默认IP
- Error occurred when evaluating apply
- Windows 10配置GPU环境
- ASCII 编码对照表 一览表
- Beginning Auto Layout Tutorial in iOS 7: Part 2