从TCP协议到TCP通信的各种异常现象和分析
我们先试着领略第一点,accept会通过软间断陷入内核中,最终会挪用tcp协议的inet_csk_accept函数,该函数会从行列中查找是否有处于ESTABLISHED状态的套接字。假若有则返回该套接字,不然阻塞当前历程。也就是嗣魅这里只是一个查询的进程,并不参加三次握手的任何逻辑。 三次握手的本质是什么呢?现实上就是客户端与处事端一个不绝交换的进程,而这个交换进程就是通过3个数据包完成的。而这个数据包的发送和处理赏罚现实上都是在内核中完成的。对付TCP的处事端来说,当它收到SYNC数据包时,就会建设一个套接字的数据布局并给客户端回覆ACK,再次收到客户端的ACK时会将套接字数据布局的状态转换为ESTABLISHED,并将其发送停当行列中。而这整个进程跟应用措施没有半毛钱的相关。 当上面套接字插手停当行列时,accept函数就被叫醒了,然后就可以得到新的套接字并返回。但我们回过甚来看一下,在accept返回之前,着实三次握手已经完成,也就是毗连已经成立了。 其它一个是假如accept没有返回,客户端是否可以发送数据?谜底是可以的。由于数据的发送和接管都是在内核态举办的。客户端发送数据后,处事端的网卡会先吸取,然后通过间断关照IP层,再上传到TCP层。TCP层按照目标端口和地点将数据存入关联的缓冲区。假云云时应用措施有读操纵(譬喻read或recv),那么数据会从内核态的缓冲区拷贝到用户态的缓存。不然,数据会一向在内核态的缓冲区中。总的来说,TCP的客户端是否可以发送数据与处事端措施是否事变没有任何关系。 虽然,假如是整个呆板都卡死了,那就是其它一种环境了。这种环境就我们之前说明的第2种环境一向了。由于,因为呆板完全卡死,TCP处事端无法接管任何动静,天然也无法给客户端发送任何应答报文。 总结 本日我们首要先容了毗连成立进程中的各类非常环境,尚有其它一种环境是在数据的传输进程中。好比传输进程中处事器溘然掉电,可能措施crash等,后续我们将具体这些非常环境下在协议层的示意。
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |