端口开放就可发送tcp连接吗_网络基础知识:TCP建立连接

一次性付费进群,长期免费索取教程,没有付费教程。

进微信群回复公众号:微信群;QQ群:460500587

 教程列表  见微信公众号底部菜单 |   本文底部有推荐书籍 

cd1206606a1a3aad1463dab004a82e09.png

微信公众号:计算机与网络安全

ID:Computer-network

TCP是面向连接的协议,所以每次发出的请求都需要对方进行确认。TCP客户端与TCP服务器在通信之前需要完成三次握手才能建立连接。本文介绍三次握手的过程。

1、第1次握手

第1次握手建立连接时,客户端向服务器发送SYN报文(SEQ=x,SYN=1),并进入SYN_SENT状态,等待服务器确认,如图1所示。

86964194649a79254947273fe7d4b3c3.png

图1  第1次握手

2、第2次握手

第2次握手实际上是分两部分来完成的,即SYN+ACK(请求和确认)报文。

服务器收到了客户端的请求,向客户端回复一个确认信息(ACK=x+1)。

服务器再向客户端发送一个SYN包(SEQ=y)建立连接的请求,此时服务器进入SYN_RECV状态,如图2所示。

196b698db4a3811e9e21d45ef512d8c1.png

图2  第2次握手

3、第3次握手

第3次握手,是客户端收到服务器的回复(SYN+ACK报文)。此时,客户端也要向服务器发送确认包(ACK)。此包发送完毕客户端和服务器进入ESTABLISHED状态,完成3次握手,如图3所示。

6050c19b072ed95a5c8b9e7b01e339cc.png

图3  第3次握手

SEQ表示请求序列号,ACK表示确认序列号,SYN和ACK为标志位。

4、分析握手过程中字段的变化

我们知道每一次握手时,TCP报文中标志位的值是不同的。为了更好地分析3次握手时每个标志位的变化,下面以抓包方式分析每个数据包的信息。

使用Wireshark捕获TCP连接数据包并进行分析。

1)捕获到3次握手包,如图4所示。图中,第22个数据包的源IP地址为192.168.59.135,目标IP地址为192.168.59.131。在Transmission Control Protocol中可以看到,Flags为SYN,并且值设置为1,表示该数据包是主机192.168.59.135向主机192.168.59.131发起的请求,希望建立TCP连接。Sequence number表示请求序列号EQ,值为0,是由主机192.168.59.135随机生成的。

350a67074b71637d8ec624fe1eed7302.png

图4  第1次握手

2)选择第23个数据包进行查看,如图5所示。该数据包源IP地址为192.168.59.131,目标IP地址为192.168.59.135。在Transmission Control Protocol中可以看到,Flags为(SYN,ACK),并且将SYN置为1,表示该数据包是主机192.168.59.131用来回复主机192.168.59.135发送的TCP连接请求。Acknowledgment number表示ACK,值为1。该值是回复主机192.168.59.135发来的连接请求SEQ,因此在SEQ的基础上加1,以代表确认。Sequence number值为0,该值是由主机192.168.59.131生成的,是向主机192.168.59.135发送的SYN,表示同意该主机发来的连接请求。

ae67e410f9515c319e246b3431cdf5d1.png

图5  第2次握手

3)选择第24个数据包进行查看,如图6所示。源IP地址为192.168.59.135,目标IP地址为192.168.59.131。在Transmission Control Protocol中可以看到,Flags为ACK。表示该数据包是主机192.168.59.135对主机192.168.59.131发来的同意连接数据包后做出的确认回复。Acknowledgment number的值为1,该值是在主机192.168.59.131发来的SEQ的基础上加1得到的。Sequence number的值为1,表示收到主机192.168.59.131发来的同意连接数据包后,再次向该主机发送连接请求,表示要连接了。

3ead6e4410407b9f23d64a8669c68967.png

图6  第3次握手

5、构造3次握手包

客户端与服务器通过3次握手建立连接,实际上是端口与端口之间的连接。用户可以伪造3次握手包,连接指定的端口,或者使用未启用的端口回复连接,以误导连接者,使其认为已经正确连接了端口。构造3次握手包需要使用netwox工具中编号为42的模块。

已知主机A的IP地址为192.168.59.131,端口443处于开放状态。主机B的IP地址为192.168.59.135,端口8080处于开放状态。通过主机A连接主机B,构造3次握手。

1)在主机A上构造第1次握手包,连接主机B的8080端口,执行命令如下:

root@daxueba:~# netwox 42 -x -s 192.168.59.131 -d 192.168.59.135 -S443 -D 8080 -n 2

输出信息如下:

IP______________________________________________________________.

|version|  ihl   |      tos       |            totlen

|___4___|___5___ |____0x00=0_____ |___________0x0028=40___________

|                  id               |r|D|M|       offsetfrag

|____________0x2262=8802________|0|0|0|________0x0000=0_________

|           ttl  |      protocol  |           checksum

|_____0x80=128___|______0x06=6____|____________ 0x2013__________

|                                 source

|__________________________192.168.59.131_________________________

|                                destination

|__________________________192.168.59.135_________________________

TCP_____________________________________________________________.

|               source port       |           destination port

|____________0x01BB=443__________ |__________0x1F90=8080__________

|                                 seqnum

|_____________________ 0xA97F8D14=2843708692_____________________

|                                 acknum

|_________________________0x00000000=0__________________________

| doff | r | r | r | r | C | E | U | A | P | R | S | F|   window

|_ 5_| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0|______0x05DC=1500______

|              checksum           |            urgptr

|___________0x59CC=22988___________|__________0x0000=0__________

上述输出信息的IP部分为IP数据报字段。其中,源IP地址为192.168.59.131,目标IP地址为192.168.59.135。TCP部分为TCP数据报字段。其中,源端口为443,目标端口为8080,并且S的值为1,表示SYN值为1。

2)通过抓包验证的确构造了第1次握手包。捕获的数据包如图7所示。图中,第13个数据包源IP地址为192.168.59.131,目标IP地址为192.168.59.135。在Transmission Control Protocol中可以看到Flags为(SYN),并且SYN的值被设置为1,说明该数据包为成功构造的第1次握手包。第14个数据包为主机B返回的[SYN,ACK]响应包。

192533171531bfdf447dc9a664b86388.png

图7  构造第1次握手包

3)如果构造的握手包连接主机B未开放的端口,将不会收到对应的[SYN,ACK]响应包。例如,连接端口8081,捕获数据包如图8所示。其中,第9个数据包为构造的第1次握手包。由于目标主机8081端口未开放,没有收到第2次握手包。

2431b2bae30c599636f08b7b18f9a67f.png

图8  端口未开放

4)为了干扰判断,这时就可以在主机B上构造第2次握手包了。执行命令如下:

root@daxueba:~# netwox 42 -x -s 192.168.59.135 -d 192.168.59.131 -S 8081 -D 443 -n 3

输出信息如下:

IP______________________________________________________________.

|version |  ihl  |      tos       |            totlen

|___4___ |___5___|____0x00=0_____ |___________0x0028=40___________

|                  id                     |r|D|M|       offsetfrag

|____________ 0x37E2=14306_______ |0|0|0|________0x0000=0_________

|           ttl  |      protocol  |           checksum

|_____0x80=128___|______0x06=6____|____________ 0x110E____________

|                                 source

|__________________________192.168.59.135_________________________

|                                destination

|__________________________192.168.59.131_________________________

TCP_____________________________________________________________.

|               source port       |           destination port

|____________ 0x1F91=8081_________|_________ 0x01BB=443__________

|                                 seqnum

|_____________________ 0xAC34C455=2889139285_____________________

|                                 acknum

|_________________________ 0x0000C166=49510______________________

| doff | r | r | r | r | C | E | U | A | P | R | S | F|   window

|_ 5_  | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |__________

0x05DC=1500__________

|              checksum           |            urgptr

|___________ 0x5E5E=24158_________|___________0x0000=0___________

从IP部分可以看到,源IP地址为主机B的地址192.168.59.135,目标IP地址为主机A的地址192.168.59.131。从TCP部分可以看到,源端口为8081,目标端口为443,并且A和S的值为1,也就是SYN和ACK的值为1。

5)通过抓包验证成功构造的第2次握手包,如图9所示。其中,数据包源IP地址为192.168.59.135,目标IP地址为192.168.59.131。在Transmission Control Protocol中可以看到,Flags为(SYN,ACK),并且SYN和Acknowledgment的值被设置为1,说明该数据包为成功构造的第2次握手包。这样,就可以干扰主机A的判断,使其认为主机B上的8081端口是开放的。

d06184c759b0e2554c511043bc8ac119.png

图9  构造第2次握手包

6)在主机A上构造第3次握手包,执行命令如下:

root@daxueba:~# netwox 42 -x -s 192.168.59.131 -d 192.168.59.135 -S 443 -D 8080 -n 4

输出信息如下:

IP______________________________________________________________.

|version |  ihl  |      tos       |            totlen

|___4___ |___5___|____0x00=0______|___________ 0x003C=60__________

|                  id                     |r|D|M|       offsetfrag

|____________ 0x029B=667________|0|0|0|________0x0000=0_________

|           ttl  |      protocol  |           checksum

|_____0x80=128___|______0x06=6____|____________ 0x3FC6____________

|                                 source

|__________________________192.168.59.131_________________________

|                                destination

|__________________________192.168.59.135_________________________

TCP_____________________________________________________________.

|               source port       |           destination port

|____________0x01BB=443___________|__________0x1F90=8080__________

|                                 seqnum

|_____________________ 0x6339F336=1664742198_____________________

|                                 acknum

|_________________________ 0x000018C9=6345________________________

| doff  | r | r | r | r | C | E | U | A | P | R | S | F|   window

|_ 5_  | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |__________

0x05DC=1500__________

|              checksum           |            urgptr

|___________ 0x0A33=2611__________|__________0x0000=0____________

68  65  6c  6c   6f  2c  20  68   6f  77  20  61   72  65  20  79  # hello,

how are y

6f  75  20  3f     # ou ?

从TCP部分可以看到,A的值为1,也就是ACK的值。下面的信息为TCP分段数据信息。

7)抓包验证成功构造了第3次握手包,如图10所示。在Transmission Control Protocol中可以看到,Flags为(ACK),并且Acknowledgment的值被设置为1,说明该包为成功构造的第3次握手包。

4d618579aea68ca2a28235266f413d36.png

图10  构造第3次握手包

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值