首页 > 编程知识 正文

高斯投影动画讲解(tcp udp区别)

时间:2023-05-06 05:00:59 阅读:86879 作者:1507

代码蛋(codeegg )第770条推文

作者鹿

来源|鹿动画学编程(公众号: Web_Coding ) )。

前言

因为TCP的三次握手过程是面试的一种,所以不仅要掌握整个TCP的握手过程,其中的细节也很受面试官的欢迎。

对于这一部分的掌握和TCP的四次挥手,鹿以视频的形式出现在所有人身上,使如此复杂的知识简单化了,理解也变得容易了。 特别是对初学者来说。

思维导图

什么是TCP

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

综上所述,我们明白了TCP的定义。 简单地说,TCP是双方通信的一种标准(协议)。

我们在学习TCP握手过程之前,首先必须了解TCP消息标头的几个标志信息。 在TCP握手的过程中会使用这些消息信息,所以如果不掌握这些信息,在握手的过程中所有人都会处于无知的状态,也是为了能够深入理解TCP三次握手的原理。

TCP头消息

2.1源端口和距离端口

两者分别是“源端口号”和“目的地端口号”。

源端口号是本地端口,目标端口是远程端口。

如果一个包(pocket )封装到数据段(segment )中,则会出现到上层协议的连接端口问题。

可以想象发送端有很多窗户,接收端也有很多窗户。 这些窗口中列出了不同的端口号,源端口号和目的地端口号分别表示从哪个规定的串行端口发送给对方。 端口因APP程度而异。 在以前的网络分层文章中有提到。

扩展:

APP应用程序的端口号和APP应用程序所在的主机的IP地址统称为套接字、IP:端口号,套接字在互联网上唯一地识别各个APP应用程序。 源端口的源IP目标端口的IP称为套接字对,套接字对是一个连接,一个客户端和服务器之间的连接。 2.2序列编号

称为“序列号”。 用于TCP通信中某个传输方向上的字节流的每字节号码,为了确保数据通信的秩序,避免网络中的顺序混乱。 接收方根据该编号,确认分割后的段是否位于原始数据包的位置。

更简单地说,每个字段在传输过程中用序列号标记自己的位置。 此字段用于确保字段的原始位置在两个传输过程中按传输顺序排列。 (发送方确保数据是什么顺序,即使成为接收方也是这个顺序)

PS :最初的序列号由自己决定,后线程的序列号由对方的ACK决定。

后面将描述sn_x=ACK_y(x的序列号=从y到x的ack )。 2.3知识编号

称为“序列号的确认”。 确认序列号是接收确认方希望接收的下一个序列号。 确认号码必须是最后成功接收的数据字节号码加1后的号码,并且仅当标志位的ACK标志为1时,确认号码字段有效。 主要用于解决无丢包问题。

确认编号=N时,表示正确接收了编号N-1之前的所有数据。

在这里,现在我们只需要知道它的作用是什么,数据传输时是一段一段的,全部用序列号来识别。 因此,接收方每次接收一个分隔符时,之后想要的下一个分隔符的序列号称为“序列号的确认”。

2.4TCP闪存

在TCP报头中有6个标志位,其中多个可以同时设置为1。 主要用于操作TCP的状态机,顺序为URG、ACK、PSH、RST、SYN、FIN。

不要求初学者全部掌握,这里只谈三个重点标志:

2.4.1确认

这个标志可以理解为发送端向接收端发送数据,发送时ACK为0,表示接收端还没有响应。 一旦接收方接收到数据后,将ACK设定为1,发送方接收后,就可以知道接收方接收到了数据。

此标志表示“启用了响应域”,这意味着TCP包中包含前面提到的TCP响应编号。 有0和1两个值。 如果为1,则响应域有效,反之为0。

2.4.2同步

表示“同步序列号”,是发送TCP握手的第一个数据包。

用于建立TCP的连接

。SYN 标志位和 ACK 标志位搭配使用,当连接请求的时候,SYN=1,ACK=0连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送一个只有 SYN 的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口。看下面动画:

2.4.3 FIN

表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送

FIN

标志位的 TCP 数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。

这个很好理解,就是说,发送端只剩最后的一段数据了,同时要告诉接收端后边没有数据可以接受了,所以用FIN标识一下,接收端看到这个FIN之后,哦!这是接受的最后的数据,接受完就关闭了。动画如下:

2.5 Window size

称为滑动窗口大小。所说的滑动窗口,用来进行流量控制。

为什么进行TCP三次握手?

如果之前你不了解网络分层的话,建议看看写的文章。

你真的懂网络分层模型吗?

第一,为了确认双方的接收与发送能力是否正常。第二,指定自己的初始化序列号,为后面的可靠传送做准备。第三,如果是 https 协议的话,三次握手这个过程,还会进行数字证书的验证以及加密密钥的生成到。

如果你了解 UDP 的话,TCP 的出现正式弥补了 UDP 不可靠传输的缺点。但是 TCP 的诞生,也必然增加了连接的复杂性。

TCP三次握手过程?

TCP 三次握手的过程掌握最重要的两点就是客户端和服务端状态的变化,另一个是三次握手过程标志信息的变化,那么掌握 TCP 的三次握手就简单多了。下面我们就以动画形式进行拆解三次握手过程。

初始状态:客户端处于closed 状态,服务器处于listen(监听) 状态。

第一次握手:客户端发送请求报文将SYN = j(1)初始化序列号发送给客户端,发送完之后客户端处于SYN_Send状态。

第二次握手:服务端受到 SYN 请求报文之后,如果同意连接,会以自己的SYN(服务端) = K(0)和ack(1) = SYN(客户端) + 1(ACK = 1)报文作为应答,服务器为SYN_Receive状态。

第三次握手:客户端接收到服务端的SYN + ACK,然后发送ack = SYN(服务端) + 1(ACK = 1)确认包作为应答,客户端转为established状态。

为什么不是一次、两次握手?

防止了服务器端的一直等待而浪费资源。

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。如果此时客户端发送的延迟的握手信息服务器收到,然后服务器进行响应,认为客户端要和它建立连接,此时客户端并没有这个意思,但 server 却以为新的运输连接已经建立,并一直等待 client 发来数据。这样,server 的很多资源就白白浪费掉了。

今日问题:

动画讲解大家能听懂吗?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。