java网络原理3
TCP协议核心机制详解
一、确认应答
确认应答是TCP实现可靠传输的核心机制之一。发送方发送数据后,接收方会对收到的数据进行确认,并返回确认应答(ACK)给发送方。发送方只有收到ACK,才认为数据已成功被接收方接收。例如,主机A向主机B发送数据段1 - 1000,主机B接收成功后,会向主机A发送确认应答,告知下一个期望接收的数据序号(如1001) ,以此确保数据按序到达且不丢失。
二、超时重传
当发送方发送数据后,若在一定时间内未收到接收方的确认应答,就会认为数据传输失败,进而重新发送该数据。这个等待的时间称为超时时间。比如网络出现拥塞,导致数据在传输过程中延迟或丢失,接收方无法及时返回ACK,发送方超时后就会重传数据,保证数据最终能被正确接收。
三、连接管理
- 三次握手建立连接:这是TCP建立连接的必要过程。第一次握手,客户端向服务器发送一个SYN包,请求建立连接;第二次握手,服务器收到SYN包后,回复一个SYN + ACK包,表示同意建立连接并确认客户端的请求;第三次握手,客户端收到SYN + ACK包后,再发送一个ACK包给服务器,至此连接建立成功。通过三次握手,能确保双方都具备发送和接收数据的能力,且能避免旧的连接请求干扰新连接。
- 四次挥手断开连接:通常是四次挥手来断开连接。客户端先发送一个FIN包,请求关闭连接;服务器收到FIN包后,回复一个ACK包,此时服务器还能继续向客户端发送数据;当服务器数据发送完毕,再发送一个FIN包给客户端;客户端收到服务器的FIN包后,回复一个ACK包,连接正式断开。但在某些情况下,可能会出现三次挥手的情况。
四、滑动窗口
- 原理:滑动窗口是一种提高TCP传输效率的机制。发送方和接收方都维护一个窗口,窗口大小表示在未收到确认应答的情况下,发送方可以连续发送的数据量。窗口越大,传输速度越快,但过大也会影响可靠性。接收方根据自身处理能力,通过调整窗口大小来控制发送方的发送速度,比如接收方处理能力有限时,会减小窗口大小,让发送方放慢发送速度。
- 效率提升与丢包处理:发送方可以批量发送数据,等收到一定数量的ACK后再继续发送,提高了传输效率。当出现丢包情况时,如果只是ACK丢包,在滑动窗口机制下,不需要做任何处理,因为ACK的确认序号表示该序号前的所有数据都已收到;如果是数据包丢包,后续的ACK会涵盖之前的确认,最终仍靠超时重传来解决。
五、流量控制
流量控制是基于接收方的处理能力,对发送方的发送速度进行限制。接收方通过告知发送方自己接收缓冲区剩余空间大小(即窗口大小)来控制发送方。例如,接收方应用程序调用read操作从接收缓冲区读取数据的速度,就代表了接收方的处理能力。如果发送方发送速度过快,接收方处理不过来,数据就会在接收缓冲区堆积,甚至导致数据被丢弃,所以需要流量控制来协调双方的传输速率。
六、拥塞控制
- 机制过程:
- 慢启动:初始情况下,窗口大小非常小,因为刚开始网络的畅通情况是未知的。随着数据的正常传输且不丢包,窗口大小按照指数方式增长,在短时间内快速提升窗口大小。
- 指数增长到线性增长转换:当窗口指数增长到一定程度(达到阈值) ,为防止窗口增长过快超出网络承载能力,增长方式变为线性增长。
- 丢包处理:当网络出现拥塞导致丢包时,窗口大小会大幅减小。一种处理方式是回到最初慢启动窗口大小,然后重复指数增长/线性增长的过程;另一种是重新计算阈值(丢包时窗口大小 / 2) ,从阈值开始作为新的拥塞窗口,继续线性增长,这种方式能使TCP的传输效率更稳定,避免大起大落。
七、学习与求职建议
- 学习资源:推荐学习《图解TCP/IP》和《图解HTTP》这类书籍,获取知识的途径可以是购买电子版或去图书馆借阅。在学校学习时,可利用上课时间,若老师管得不严,可自带电脑敲代码;若不允许带电脑,也可看书学习。学校宿舍不是理想的学习场所,可利用课余时间去图书馆等安静地方学习。
- 求职相关:对于就业来说,软考证书对找工作作用不大,考过了可写在简历上,但面试官不会因有无此证书改变看法。二级证书对于找工作是减分项,不建议写在简历上。企业比较认可的证书有ACM(认可度高但门槛高) 、蓝桥杯(含金量不如ACM,但目前认可度较高,尤其是国奖) 、大创(国奖) 。实习经历对就业非常重要,尤其是对于学院类学校的同学,是提升竞争力的性价比高的方式,在公司实习能大幅提升技术能力和综合素质。