当前位置:网站首页>TCP和UDP详解
TCP和UDP详解
2022-07-31 03:08:00 【一只咸鱼。。】
文章目录
提示:以下是本篇文章正文内容,Java系列学习将会持续更新
一、UDP协议
UDP全称为用户数据报协议。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。
1-1 UDP协议报文格式:
1-2 UDP协议的特点:
- 无连接:只知道对端的IP和端口号就可以发送,不需要实现建立连接。(就像寄信)。
- 不可靠:没有确认机制, 没有重传机制。如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息。
- 面向数据报: 应用层交给UDP多长的报文, UDP原样发送既不会拆分,也不会合并。所以UDP不能够灵活的控制读写数据的次数和数量。
- UDP存在接收缓冲区,但不存在发送缓冲区。UDP没有发送缓冲区,在调用send to时会直接将数据交给内核,由内核将数据传给网络层协议进行后续的传输动作。UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报文的顺序和发送UDP报的顺序一致,如果缓冲区满了再到达的UDP数据报就会被丢弃。
为什么UDP不需要发送缓冲区? 因为UDP不保证可靠性,它没有重传机制,当报文丢失时,UDP不需要重新发送,而TCP不同,他必须具备发送缓冲区,当报文丢失时,TCP必须保证重新发送,用户不会管,所以必须要具备发送缓冲区。
- 大小受限。UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部)。
1-3 扩展问题
- UDP本身是无连接,不可靠,面向数据报的协议,如果要基于传输层UDP协议,来实现一个可靠传输,应该如何设计?
- UDP大小是受限的,如果要基于传输层UDP协议,传输超过64K的数据,应该如何设计?
二、TCP协议
TCP全称传输控制协议,必须对数据的传输进行控制。
2-1 TCP协议报文格式:
源端口号/目的端口号:表示数据从哪个进程来,要到那个进程去
32位序号:序号是
可靠传输
的关键因素。TCP将要传输的每个字节都进行了编号,序号是本报文段发送的数据组的第一个字节的编号,序号可以保证传输信息的有效性。比如:一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为401。32位确认序号:每一个ACK对应这一个确认号,它指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。
4位首部长度(数据偏移): 表示该TCP头部有多少个32位bit(有多少个4字节),所以TCP头部大长度是15 * 4 = 60。根据该部分可以将TCP报头和有效载荷分离。TCP报文默认大小为20个字节。
6位标志位:
URG
: 它为了标志紧急指针是否有效。ACK
:标识确认号是否有效。PSH
: 提示接收端应用程序立即将接收缓冲区的数据拿走。RST
:它是为了处理异常连接的, 告诉连接不一致的一方,我们的连接还没有建立好, 要求对方重新建立连接。我们把携带RST标识的称为复位报文段。SYN
: 请求建立连接; 我们把携带SYN标识的称为同步报文段。FIN
: 通知对方, 本端要关闭连接了, 我们称携带FIN标识的为结束报文段。16位的紧急指针:按序到达是TCP协议保证可靠性的一种机制,但是也存在一些报文想优先被处理,这时就可以设置紧急指针,指向该报文即可,同时将紧急指针有效位置位1。
16位窗口大小:如果发送方发送大量数据,接收方接收不过来,会导致大量数据丢失。然后接收方可以发送给发送发消息让发送方发慢一点,这是流量控制。接收方将自己接收缓冲器剩余空间的大小告诉发送方叫做16位窗口大小。发送发可以根据窗口大小来适配发送的速度和大小,窗口大小最大是2的16次方,及64KB,但也可以根据选项中的某些位置扩展,最大扩展1G。
16位校验和:发送端填充,CRC校验。如果接收端校验不通过, 则认为数据有问题(此处的检验和不光包含TCP首部也包含TCP数据部分)。
2-2 什么是可靠性?
- TCP会尽自己最大的努力,将数据发送给对方
- 如果真的遇到发送不过去的情况,TCP至少会告诉发送进程,数据发送失败了
- 保证不会收到错误的数据(通过checksum)
- TCP能保证收到的数据一定是有序的(按照发送进程发送时的顺序)
- TCP会根据对方的接收能力和网络线路的承载能力,进行流量的控制
TCP做了哪些机制保证了可靠性?
- 确认应答机制
- 超时重传机制
- 连接管理机制
2-2-1 确认应答机制
接收方(对方的TCP)有责任对收到的数据进行确认(acknowledge) 应答。
TCP将每个字节的数据进行编号,即序列号。每一个ACK都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据;下一次你从哪里开始发。
2-2-2 超时重传机制
主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B;
如果主机A在一个特定时间间隔内没有收到B发来的确认应答,就会进行重发;
因此主机B会收到很多重复数据。那么TCP协议需要能够识别出那些包是重复的包,并且把重复的丢弃掉。
这时候我们可以利用前面提到的序列号,就可以很容易做到去重的效果。
TCP为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算这个最大超时时间。
- Linux中(BSD Unix和Windows也是如此),超时以500ms为一个单位进行控制,每次判定超时重发的超时时间都是500ms的整数倍。
- 如果重发一次之后,仍然得不到应答,等待 2500ms 后再进行重传。如果仍然得不到应答,等待 4500ms 进行重传。依次类推,超时时间以指数形式递增。
- 累计到一定的重传次数,TCP认为网络或者对端主机出现异常,强制关闭连接。不会一直重传。
序列号去重。
超时时间递增。
不会一直重传。
2-2-3 连接管理机制
在正常情况下, TCP要经过三次握手建立连接
、四次挥手
断开连接,主要介绍TCP是如何建立和断开连接的。
2-2-3-1 三次握手
从标志位角度
SYN就是TCP中建立连接时的标识,ACK是确认标识。
首先主机A和主机B之间需要连接而客户端先发送一次SYN,服务器就会返回一个ACK,表示客户端要和服务器建立连接,然后服务器再给客户端发送一个SYN,客户端在返回一个ACK,表示服务器要和客户端建立连接,完成四次交互,就可以确保建立连接成功了,这是一个"双向奔赴"的过程,
而明明是四次交互,为什么被称为三次握手呢,就是由于中间这两次(SYN和ACK)是一定会合二为一的,只需要把ACK和SYN同时置为1就可以了,因此被称为三次握手。
为啥握手是三次?两次行不行?四次行不行?
四次可以,但是效率低,没有必要。每次传输的数据都需要进行一系列的封装和分用, 因此传输两次肯定要比传输一次慢很多。
两次是绝对不行的,两次只能确定双方中一方的发送和接收能力正常,另一方就不清楚了,这是不满足可靠性。
2-2-3-2 四次挥手
FIN是通知对方, 本端要关闭连接的结束报文段标识。这里四次挥手就是双方各自给对方发送FIN,并在收到对方的FIN请求后回复一个ACK。
三次握手的发起方一定是客户端,而四次挥手的发起方有可能是客户端,也有可能是服务器,而且三次握手中间两次是可以合并的,而四次挥手的中间两次是不一定能合并的,这里能否合并取决于B发送ACK和发送FIN的时机是否相同,相同的话是可以合并的,不相同的话是不能合并的,
而三次握手中服务器所发送的SYN和ACK都是由操作系统内核负责执行,收到客户端的SYN请求之后,会把ACK和SYN同一时间发送过去,这是同一时机发生的因此是可以合并的,
而四次挥手B给A发送的ACK是有操作系统内核负责的,而FIN请求只有当B中的代码执行到了socket.close()方法才会出发FIN,如果这两操作中间间隔的时间比较短是可以合并的,间隔时间长就不能合并了,这是无法确定的,因此一般情况下都是四次交互过程,也就是四次挥手!
总结:
提示:这里对文章进行总结:
以上就是今天的学习内容,本文是计算机网络的学习,详细讲解了TCP和UDP的工作原理、各自的特点,以及三次握手和四次挥手。之后的学习内容将持续更新!!!
边栏推荐
猜你喜欢
Discourse Custom Header Links
What is distributed and clustered?What is the difference?
Is interprofessional examination difficult?Low success rate of "going ashore"?Please accept this practical guide!
Mysql 45讲学习笔记(二十三)MYSQL怎么保证数据不丢
什么是系统?
SQL injection Less54 (limited number of SQL injection + union injection)
7、私信列表
10. Redis implements likes (Set) and obtains the total number of likes
局域网电脑硬件信息收集工具
Graphical lower_bound & upper_bound
随机推荐
【编译原理】递归下降语法分析设计原理与实现
CefSharp入门-winform
mycat的主从关系 垂直分库 水平分表 以及mycat分片联表查询的配置详解(mysql5.7系列)
The distance value between two arrays of LeetCode simple questions
[Compilation principle] Design principle and implementation of recursive descent parsing
[Godot][GDScript] 二维洞穴地图随机生成
Moxa NPort 设备缺陷可能使关键基础设施遭受破坏性攻击
大小端模式
Local area network computer hardware information collection tool
The use of font compression artifact font-spider
Recursive query single table - single table tree structure - (self-use)
CorelDRAW2022 streamlined Asia Pacific new features in detail
Discourse Custom Header Links
Chapter 9 SVM Practice
3.5 】 【 Cocos Creator slow operating system to stop all animations
TCP详解(二)
SonarQube的BUG定义
CloudCompare&PCL 计算两个点云之间的重叠度
What is a distributed lock?Three ways of implementing distributed lock
Mysql 45讲学习笔记(二十五)MYSQL保证高可用