加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

从TCP协议到TCP通讯的各类非常征象和说明

发布时间:2019-05-19 00:42:07 所属栏目:教程 来源:itworld123
导读:许多人总认为进修TCP/IP协议没什么用,认为一般编程开拓只必要知道socket接口怎么用就可以了。假如各人定位过线上题目就会知道,现实上并非云云。假如应用在局域网内,且装备统统正常的环境下也许确实云云,但假如一旦呈现诸如中间互换机不不变、物理处事
副问题[/!--empirenews.page--]

许多人总认为进修TCP/IP协议没什么用,认为一般编程开拓只必要知道socket接口怎么用就可以了。假如各人定位过线上题目就会知道,现实上并非云云。假如应用在局域网内,且装备统统正常的环境下也许确实云云,但假如一旦呈现诸如中间互换机不不变、物理处事器宕机可能其余非常环境时,此时引起的题目假如只逗留在套接字接口的领略层面将无法办理。因此,深入领略TCP/IP协议,对我们说明非常题目有很大的辅佐。

下图是收集通讯中常见的架构,也就是CS架构。个中措施包罗两部门,别离为客户端(Client)和处事端(Server)。虽然,现实的情形还要伟大的多,在客户端和处事端之间也许有多种差异种类和数目的装备,这些装备城市增进收集通讯的伟大性。天然,也会增进措施开拓容错的伟大性。

从TCP协议到TCP通讯的各类非常征象和说明

图1 根基架构

TCP的根基流程

在说明非常环境之前,我们先回想一下TCP协议的根基逻辑。在客户端和处事端可以或许收发数据之前起首必须成立毗连。毗连的成立在协议层面也是通过收发数据包完成,只不外在用户层面就是客户端挪用了一个connect函数。毗连的进程俗称“三次握手”,详细流程如图2所示。

从TCP协议到TCP通讯的各类非常征象和说明

图2 TCP的三次握手流程

TCP毗连的断开也是较量伟大的,必要颠末所谓的“四次挥手”的流程。其缘故起因是由于TCP是双工通讯,别离必要从客户端和处事端2侧断开毗连。

从TCP协议到TCP通讯的各类非常征象和说明

图3 TCP的四次挥手

其它一个较量重要的内容是TCP协议的状态转换,领略了这个内容,我们才气清晰呈现各类非常环境下数据包的内容。

从TCP协议到TCP通讯的各类非常征象和说明

图4 TCP状态转换图

本文只是简朴回想一下TCP的根基流程,具体的内容可以参考本号之前的文章《从TCP到Socket,彻底领略收集编程是怎么回事》

非常环境说明

相识了TCP的根基流程之后,我们再看一下各类非常环境。这些非常环境才是我们在后续办理题目的时辰的要害。相识了这些非常环境及道理,后头办理题目才气游刃有余。

1. 试图与一个不存在的端口成立毗连(主机正常)

这里的不存在的端口是指在处事器端没有措施监听在该端口。我们的客户端就挪用connect,试图与其成立毗连。这时会产生什么呢?

这种环境下我们在客户端凡是会收到如下非常内容:

  1. [Errno 111] Connection refused(毗连拒绝) 

详细寄义可以查一下Linux的相干手册,可能用搜刮引擎搜刮一下。试想一下,处事端原来就没有措施监听在这个接口,因此在处事端是无法完成毗连的成立进程的。我们参考‘三次握手’的流程可以知道当客户端的SYNC包达随处事端时,TCP协议没有找到监听的套接字,就会向客户端发送一个错误的报文,汇报客户端发生了错误。而该错误报文就是一个包括RST的报文。这种非常环境也很轻易模仿,我们只必要写一个小措施,毗连处事器上没有监听的端口即可。如下是通过wireshark捕捉的数据包,可以看到赤色部门的RST报文。

从TCP协议到TCP通讯的各类非常征象和说明

图5 数据包截图

继承深入领略一下,在操纵体系层面,TCP的处事端现实上就是从网卡的寄存器中读取数据,然后举办理会。对付TCP天然会理会出目标端口这个要害信息,然后按照这个信息查察有没有这样的套接字。这个套接字是什么呢?在用户层面是一个文件句柄,但在内核中现实是一个数据布局,内里记录了许多信息。这个数据布局存储在一个哈希表中,通过函数__inet_lookup_skb(net/inet_hashtables.h)可以实现对该数据布局的查找。对付上述环境,天然无法找到该套接字,因此TCP处事端会举办错误处理赏罚,处理赏罚的方法就是给客户端发送一个RST(通过函数tcp_v4_send_reset举办发送)。

2. 试图与一个某端口成立毗连但该主机已经宕机(主机宕机)

这也是一种较量常见的环境,当某台处事器主机宕机了,而客户端并不知道,如故实行去与其成立毗连。这种场景也是分为2种环境的,一种是方才宕机,其它一种是宕机了很长时刻。为什么要分这2种环境?

这首要根ARP协议有相关,ARP会在当地缓存失效,TCP客户端就无法想目标处事端发送数据包了。

  1. (192.168.1.100) 位于 08:00:27:1a:7a:0a [ether] 在 eth0 

相识了上述环境,我们说明一下方才宕机的环境,此时客户端是可以向处事端发送数据包的。可是因为处事器宕机,因此不会给客户端发送任何回覆。

从TCP协议到TCP通讯的各类非常征象和说明

图6 数据包截图

因为客户端并不知道处事端宕机,因此会一再发送SYNC数据包,如图6所示,可以看到客户端每隔几秒会向处事端发送一个SYNC数据包。这内里详细的时刻是跟TCP协议相干的,详细时刻差异的操纵体系实现也许稍有差异。

3. 成立毗连时,处事器应用被阻塞(可能僵死)

尚有一种环境是在客户端成立毗连的进程中处事端应用处于僵死状态,这种环境在现实中也会常常呈现(我们假设仅仅应用措施僵死,而内核没有僵死)。此时会呈现什么状态?TCP的三次是否可以完成?客户端是否可以收发数据?

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读