为什么telnet可以⽤来检查TCP端⼝是否正常?
为什么Telnet可以⽤来检查TCP端⼝是否正常?
【问题背景】我们在⽇常的⽹络运维中,经常有这样的场景,实施了⽹络安全策略变更后,如何验证TCP端⼝已经可以正常经过防⽕墙访问了,我们经常采取的⼿段就是Telnet该服务器的TCP端⼝。那么为什么是Telnet,其他应⽤不⾏吗?为什么tetnet可以检查TCP端⼝正常打开?为什么是TCP端⼝,UDP端⼝不⾏吗?
【结论】先看结论,节约时间。其实除了Telnet,其他使⽤TCP端⼝的应⽤也是可以的,只不过Telnet⽐较容易看到结果,多数服务器⽀持,使⽤⽅便。Telnet之所以可以检查TCP端⼝,是因为Telnet使⽤了TCP协议。为什么UDP不⾏,因为Telnet使⽤的是TCP端⼝,UDP可以使⽤NetCat等应⽤检查。
telnet ip 端口号
【解】
⼀、TCP和UDP的区别,TCP三次握⼿
正常知识储备,哪哪都有,这⾥不再说了,上⼀个三次握⼿的图,好结合下⾯的内容看⼀下。
图⽚来⾃⽹络,侵删
⼆、TCP模块是如何处理包的
这⾥主要说⼀下服务器端的TCP模块是如何处理包的,⽹卡接收到数据包,⼀顿操作之后给到IP模块,IP模块⼀顿操作之后给到TCP模块。故事就从这⾥说起。我们假设现在接收到的是第⼀个TCP包,控制位SYN=1,TCP模块会检查包的接收⽅端⼝号,并确认在该端⼝上有没有与接收⽅端⼝号相同的且正处于等待连接状态的套接字。嘿,这⾥就检查了端⼝是否开通了。如果不存在该套接字,则向客户端返回⼀个表⽰接收⽅端⼝不存在等待连接状态套接字的ICMP消息。
如果存在等待连接的套接字,则为这个套接字复制⼀个新的副本,并将发送⽅IP地址、端⼝号、序号初始值、窗⼝⼤⼩等必要参数写⼊这个套接字中,同时分配⽤于发送缓冲区和接收缓冲区的内存空间。然后⽣成代表接收确认的ACK号,⽤于从服务器向客户端发送的序号初始值,表⽰接收缓冲区剩余容量的窗⼝⼤⼩,并⽤这些信息⽣成TCP头部,委托IP模块发送给客户端。
这个包到达客户端之后,客户端会返回表⽰接收确认的ACK号,当这个ACK号返回服务器之后,连接就完成了。
这个过程,跟⽤什么应⽤是没关系的。
三、抓包分析
在虚拟机中创建⼀个TCP 2233端⼝,使⽤的是web应⽤,可通过http访问,如下图
在本地Telnet该端⼝,可以连接成功,⽤浏览器也能打开
⽤ssh是不⾏的
服务器端可以看到连接后的端⼝状态变化
因为使⽤的是http应⽤,所以浏览器能打开是很正常的⼀个事情,但浏览器不⼀定能打开其他程序的TCP端⼝,我们看到ssh是失败的,抓包看⼀下如果使⽤ssh,TCP是否建⽴成功
如上图所⽰,当我们使⽤ssh登录服务器时,TCP的三次握⼿是正常建⽴的,也就是说,检查TCP端⼝是否能正常建⽴连接,⽤其他应⽤也可以,不⼀定要Telnet。那么为什么还要⽤Telnet,可能只是⽐较⽅便,就好像我们刚才使⽤了ssh,其实也是可以看得出来有没有端⼝号的返回是有差异的,只不过没那么直观。
四、为什么是Telnet
我们使⽤Telnet的时候,⽐如启⽤的是web应⽤,Telnet也能进⼊可编辑端⼝。我们都知道,Telnet可以远程登录远端设备,默认使⽤TCP 23端⼝。这⾥就涉及Telnet的⼯作原理,Telnet并不是⼀个单纯的本
地应⽤,登录使⽤Telnet服务时需要在服务器端启⽤Telnet服务器软件,并监控TCP 23端⼝。客户端使⽤Telnet登录远程服务器时,先建⽴TCP连接,TCP连接建⽴成功之后,Telnet客户端并没有检查所连TCP是否存在Telnet服务器应⽤,⽽是进⼊等待输⼊的状态,正常情况下应该输⼊⽤户名及⼝令或者命令发送给远程服务端,服务
器Telnet应⽤将相应命令执⾏后返回回显信息。显然,我们只需要利⽤Telnet建⽴TCP连接的特性即可看出TCP连接是否建⽴成功。(下图是Telnet建⽴连接成功后进⼊等待输⼊的模式,看时间,什么都没做,就关闭了连接)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。