目录
为什么第四次挥手客户端需要等待 2*MSL(报文段最长寿命)时间后才进入 CLOSED 状态?
常见网络协议
TCP与UDP
TCP与UDP区别
-
是否面向连接:UDP传输数据不需要建立连接,而TCP在传输数据前建立连接,传输完成后需要释放连接
-
是否可靠传输:远程主机接受到UDP报文后,不需要给出任何确认,并且不保证数据是否完整,不保证是否顺序到达。TCP是可靠的传输服务,实现无差错、不丢失、不重复并且按序到达
-
是否有状态:TCP是有状态,这个状态指的是记录自己消息是否发送了、是否被接受等,所以TCP要维持复杂的连接状态表。而UDP是无状态的,发出去就不管了
-
传输效率:UDP比TCP效率要快上很多,因为TCP需要连接、确认、重传等机制
什么时候选择TCP?什么时候选择UDP?
-
UDP一般用于即时通信,例如语音、视频、直播等
-
TCP用于对准确性特别高的场景,例如文件传输、发送和接受邮件、远程登录等
TCP三次握手和四次挥手
建立连接——三次握手
为什么要三次握手
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
-
第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
-
第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
-
第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常
释放连接——四次挥手
为什么要四次挥手?
TCP 是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。
举个例子:A 和 B 打电话,通话即将结束后。
-
第一次挥手:A 说“我没啥要说的了”
-
第二次挥手:B 回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话
-
第三次挥手:于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”
-
第四次挥手:A 回答“知道了”,这样通话才算结束。
为什么第四次挥手客户端需要等待 2*MSL(报文段最长寿命)时间后才进入 CLOSED 状态?
第四次挥手时,客户端发送给服务器的 ACK 有可能丢失,如果服务端因为某些原因而没有收到 ACK 的话,服务端就会重发 FIN,如果客户端在 2*MSL 的时间内收到了 FIN,就会重新发送 ACK 并再次等待 2MSL,防止 Server 没有收到 ACK 而不断重发 FIN。
MSL(Maximum Segment Lifetime) : 一个片段在网络中最大的存活时间,2MSL 就是一个发送和一个回复所需的最大时间。如果直到 2MSL,Client 都没有再次收到 FIN,那么 Client 推断 ACK 已经被成功接收,则结束 TCP 连接。
TCP如何保证传输的可靠性?
-
基于数据块传输:应用数据被分割成 TCP 认为最适合发送的数据块,再传输给网络层,数据块被称为报文段或段。
-
对失序数据包重新排序以及去重:TCP为了保证不发生丢包,给每个包一个序号。
-
校验和: TCP 将保持它首部和数据的检验和。目的检测数据在传输过程中是否有变化
-
重传机制:在数据包丢失或延迟的情况下,重新发送数据包,直到对方的确认应答。重传机制主要有:
-
超时重传:当发送方发送数据之后,启动一个定时器,等待目的端确认收到这个报文段。接收端实体对已成功收到的包发回一个相应的确认信息(ACK)。如果发送端实体在合理的往返时延(RTT)内未收到确认消息,那么对应的数据包就被假设为已丢失并进行重传。
-
快速重传:基于接收端的反馈信息来引发重传
-
SACK:在快速重传的基础上,返回最近收到的报文段的序列号范围,这样客户端就知道,哪些数据包已经到达服务器了
-
D-SACK:重复 SACK,在 SACK 的基础上,额外携带信息,告知发送方有哪些数据包自己重复接收了
-
-
流量控制:利用滑动窗口实现控制。流量控制是为了控制发送方的发送速率,保证接收方来得及接收,防止包丢失
-
拥塞控制:当网络拥塞的时候,减少数据的发送。
为什么需要流量控制?
因为双方在通信的时候发送方速率和接受方速率不一定相等,如果发送太快,会导致接收处理不过来。如果接收处理不过来,就会将数据放到接收缓冲区中,如果很多数据大量过来,接收缓冲区满了,那么只能丢掉数据包,浪费我们珍贵的网络资源,所以需要流量控制
TCP的拥塞控制是如何实现的
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。
为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。
TCP 的拥塞控制采用了四种算法,即 慢开始、 拥塞避免、快重传 和 快恢复。
-
慢开始: 慢开始算法的思路是当主机开始发送数据时,因为还不知道网络的符合情况。由小到大逐渐增大拥塞窗口数值。cwnd 初始值为 1,每经过一个传播轮次,cwnd 加倍。
-
拥塞避免: 拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢增大,即每经过一个往返时间就把发送方的 cwnd 加 1.
-
快重传与快恢复: 在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。
IP协议
IP(Internet Protocol,网际协议) 是 TCP/IP 协议中最重要的协议之一,属于网络层的协议,主要作用是定义数据包的格式、对数据包进行路由寻址,以便它们可以跨网络传播并到达正确的目的地。
ARP协议
全称地址解析协议(Address Resolution Protocol)解决的是网络层地址和链路层地址之间的转换问题,因为一个 IP 数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,ARP 协议解决了 IP 地址转 MAC 地址的一些问题。
MAC地址
媒体访问控制地址(Media Access Control Address)。如果说,互联网中每一个资源都由 IP 地址唯一标识(IP 协议内容),那么一切网络设备都由 MAC 地址唯一标识。
MAC地址才是一个网络设备真正的身份证号,IP地址只是一种不重复的定位方式