网站推广办法,自建网站模板下载,进入qq空间登录,自媒体发布平台有哪些上一篇我们说了网络其实是不稳定的#xff0c;TCP和UDP其实是两个不同的对立者#xff0c;所以TCP为了保证数据在网络中传输的可靠性#xff0c;从丢包、乱序、重传、拥塞等场景有自己的一套打法。
TCP格式
源端口和目标端口是不可缺少的#xff0c;用以区分到达发送给拿…上一篇我们说了网络其实是不稳定的TCP和UDP其实是两个不同的对立者所以TCP为了保证数据在网络中传输的可靠性从丢包、乱序、重传、拥塞等场景有自己的一套打法。
TCP格式
源端口和目标端口是不可缺少的用以区分到达发送给拿个应用。 序号为了解决数据乱序的问题解决数据先来后到的顺序问题。确认序列号是为了保证对方又没有收到用来重传的。对于TCP来说会努力保证TCP层面数据的可靠性。
接下来就是SYN发起一个连接、ACK是回复、RST是重新连接。FIN是结束连接等。TCP 是面向连接的因而双方要维护连接的状态这些带状态位的包的发送会引起双方的状态变更。
最重要的一个就是流量控制是通过窗口大小进行设置的比如发送方和接收方的可以处理的能力。但是处理流量控制之外还有拥塞控制用以标记当前应该发送的数据速度。所以整体其实就是顺序问题、丢包问题、连接维护、流量控制、拥塞控制
TCP 的三次握手
三次握手的过程是这样的 客户端发送我要建立连接了 服务端我收到连接了开始建立 客户端好的 建立完成。
为什么说一定要三次握手呢其实网络是不稳定的二次握手其实没有办法保证建立连接。比如A发送了但是不知道B又没有收到可能会一直发送假设B收到了但是发送给A的响应消息可能丢失了A不一定能收到。
为什么三次 四次不行吗 或者 两次不行吗
如果是二次握手。我们可以假设这样一种情况。当第一次请求因为网络延迟而没有及时到达。客户端(超时重发)再次发送建立连接的请求服务端接收到客户端的请求响应给客户端。此时 连接建立成功发送数据结束后关闭连接但是因为第一次请求因为网络延迟 现在才到达也就是存在一个时间差服务端会误以为 客户端会再次建立一个链接。所以会创建一个新的连接。
客户端发送 syn标志的数据包 一次握手-服务端 服务端 发送syn ack标志的数据包 二次握手 客户端 客户端-发送带有带有ack标志的数据包 三次握手 服务端
客户端向服务端报告我要和你建立连接顺便把我自己的一个发送的能力发给服务器让服务器知道。服务器判断我是否可以给你创建连接把我的一个接收的能力返回给客户端只有三次握手 才能保证 双方的发送能力和接收能力都能达到一个协商的过程但是因为协议没有100%可靠的三次就够了四次也不能保证100%可靠。 并且TCP也通过包序号来保证数据 如果丢失了可以重传。 一开始都是CLOSE状态服务端启动监听某个端口处于LISTEN状态客户端发起第一次连接SYN服务端收到之后返回SYNACK处于SY-RCVD状态客户端收到之后处于ESTABLISHED状态因为它一发一收成功了所以服务端也处于ESTABLISHED。
TCP 四次挥手 首先我们应该梳理一下四次挥手流程客户端发送一个FIN终止信号表示客户端想要断开连接。当客户端FIN信号发送到服务端后服务端接收到客户端的终止请求服务端先发送一个ACK信号对客户端的FIN信号的确认。当服务端也想断开连接的时候服务端也需要发送一个FIN信号给客户端客户端响应客户端的FIN的确认。所以断开需要分别客户端发送一个FIN和ACK服务端也需要发送一个FIN和ACK。
四次挥手主动方为什么需要等待2MSL 首先我们先说一下主动断开方接收到被动关闭方的FIN的终止信号会立马发送一个ACK对于被动关闭方的确认进入TIME_WAIT时间等到2MSL关闭连接。 你可以解释一下什么MSL嘛 MSL表示最大报文生存周期任何报文在网络上存在的最长时间超过这个时间报文将被废弃。主动关闭方需要等待2MSL是为了 防止最后一次ACK没有被正确的传输到被动关闭方而被动关闭方需要发送第三次的FIN信号。
TCP 状态机
状态机说白了就是从一个状态迁移到另一个状态。
小结
本篇主要介绍创建连接关闭连接以及TCP的状态机。