图片来自网络,侵删二、TCP模块是如何处理包的 这里主要说一下服务器端的TCP模块是如何处理包的,网卡接收到数据包,一顿操作之后给到IP模块,IP模块一顿操作之后给到TCP模块。我们假设现在是接收到第一个TCP包,控制位SYN=1,TCP模块会检查包的接收方端口号,并确认在该端口上有没有与接收方端口号相同的且正处于等待连接状态的套接字。嘿,这里就检查了端口是否开通了。如果不存在该套接字,则向客户端返回一个表示接收方端口不存在等待连接状态套接字的ICMP消息。
如果存在等待连接的套接字,则为这个套接字复制一个新的副本,并将发送方IP地址、端口号、序号初始值、窗口大小等必要参数写入这个套接字中,同时分配用于发送缓冲区和接收缓冲区的内存空间。然后生成代表接收确认的ACK号,用于从服务器向客户端发送的序号初始值,表示接收缓冲区剩余容量的窗口大小,并用这些信息生成TCP头部,委托IP模块发送给客户端。
这个包到达客户端之后,客户端会返回表示接收确认的ACK号,当这个ACK号返回服务器之后,连接就完成了。 这个过程,跟用什么应用是没关系的。
三、抓包分析在虚拟机中创建一个TCP 2233端口如下图在本地Telnet该端口,可以连接成功,用浏览器也能打开用ssh是不行的服务器端可以看到连接后的端口状态变化因为使用的是http应用,所以浏览器能打开是很正常的一个事情,但浏览器不一定能打开其他程序的TCP端口,我们看到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连接是否建立成功。