阅读:1225回复:8
一个tcp连接的基础问题:
我使用一个sniffer工具查看了两台机器之间的包传递过程:
1、A->B SYN 2、B->A SYN+ACK 3、A->B ACK 4、A->B PSH+ACK 5、B->A ACK 请问各位老大: 4是什么意思啊?书上介绍psh是尽快传给应用层 5又是什么意思呢?握手不是三次就可以了么? 我自己写了一个程序大体流程如下: 其中:A为客户端,B为服务器,DRIVER为服务器B的IMD驱动程序 1、A->DRIVER SYN 2、DRIVER->A SYN+ACK 3、A->DRIVER ACK 此时,DRIVER->B发送1中的SYN 4、B->A SYN+ACK 5、A->B ACK 6、A->B PSH+ACK 7、B->A RST(?????????????) 上面的流程第7个让我看不懂,明明握手已经建立了,怎么服务器会给客户端发送rst包呢?可能是什么原因呢? :( |
|
沙发#
发布于:2003-08-25 17:36
自己悟了一天,好像明白了,第三步中不能直接转发第一步中的syn包,对客户端来讲,序号错了,可是:
想请教各位大侠,我如何能得到客户端的当前的sequence number呢? |
|
板凳#
发布于:2003-08-25 23:04
第一个请求就有客户端的随机产生的初始序列号了
服务端返回时使用客户端初始序列号和自己随机产生的初始序列号,以后各端发出新的包时将自个的序列号加一,而对方的序列号使用对方传过来的最新的序列号,应该是这样子吧! |
|
地板#
发布于:2003-08-26 09:28
有些明白了。
给分先。 |
|
地下室#
发布于:2003-08-28 14:02
麻烦帮我看一下下面的流程有什么问题啊?
SYN=15 11 28 fc ACK=0 1、CLIENT------------------->DRIVER SERVER SYN=00 00 00 02 ACK=15 11 28 fd 2、CLIENT<-------------------DRIVER SERVER SYN=15 11 28 fd ACK=00 00 00 03 3、CLIENT------------------->DRIVER SERVER 现在客户端认为连接已经建立,可以传数据了。 SYN=15 11 28 fc ACK=0 4、CLIENT DRIVER--------------------> SERVER(就是1中的包直接转发) SYN=32 b6 8a de (系统分配的) ACK=15 11 28 fd 5、CLIENT<------DRIVER<-------------------- SERVER 现在客户端认为以前的连接1可能以前的连接是错的,client将会发送连接1确认报文6过来(也就是3的确认报文,syn数值应该变么???) SYN=15 11 29 61 ACK=00 00 00 03 6、CLIENT------>DRIVER-------------------- >SERVER 比较奇怪的是下面这个报文7:syn=ack???? (服务器直接返回一个rst包) SYN=00 00 00 03 ACK=00 00 00 03 7、CLIENT<------DRIVER<-------------------- SERVER 随后服务器重新发送5的确认包8:(而且sequence number 没有变??????) SYN=32 b6 8a de ACK=15 11 28 fd 8、CLIENT<------DRIVER<-------------------- SERVER 客户端对数据报8返回rst包9:syn=ack???? SYN=15 11 28 fd ACK=15 11 28 fd 9、CLIENT------>DRIVER-------------------- >SERVER |
|
5楼#
发布于:2003-08-28 14:08
上面的是在服务器端安装了驱动程序后,客户端和服务器端进行握手交互的syn和ack的值,其中第二步中的syn=00 00 00 02是我自己指定的。
不明白的是: 1、 第三步客户端发来的ack包如果我不理会,客户端会再次发确认包,服务器(真实的服务器,非我的DRIVER)会发rst包断掉,可是,第5步的syn+ack包为什么客户端就不管了呢? 2、 我这样前三步由DRIVER和客户端握手,以后由真实服务器和客户端握手的方法是不是有问题啊? |
|
6楼#
发布于:2003-08-28 14:10
终于可以上开发网了,老大会过来啊
|
|
7楼#
发布于:2003-08-28 14:40
有些晕,你用正确的驱动,然后使用netspy看一下包的过程,跟你自己的对比一下,也许会找到原因!
|
|
8楼#
发布于:2003-08-28 15:08
这些是用sniffer看的,和正确的对比得到的这许多疑问。
前三个是driver代替服务器和客户端握手 后面的是driver只作中间传递作用,由服务器和客户端之间建立握手 |
|