- 论坛徽章:
- 1
|
本帖最后由 jiufei19 于 2012-06-03 15:36 编辑
进行socket编程时, 我们都知道服务器端要进入listen状态,即如下代码所示:
103 if(listen(sockfd, 5)==-1){
...
}
上述listen系统调用的参数5就是backlog参数,根据TCPIP Illustrated卷1的说明,该参数规定了TCP层可以容纳的连接请求队列长度(应用层尚未进行处理),并且给出了一个示例来说明该参数的具体效果,作为对照,我在fedora 8中也进行了类似实验,程序在上述listen执行后中断下来,并且将backlog参数设置为1,结果发现linux下似乎该参数没有什么作用, 超过2个客户端发来的连接请求仍然可以被处理(不过好像第3个客户端的处理和前2个略有不同),而不是像卷1中描述的那样,超过backlog规定数目客户端需要不停发SYN进行连接尝试。
下面是我用tcpdump抓包后的结果,192.168.1.137是服务器端, 192.168.146.1 是客户端,可以看到前3组似乎都完成了3次握手,但是从第3组开始,服务器端不停发出SYN分段
IP 192.168.146.1.veritas-ucl > 192.168.1.137.cslistener: S 1365328955:1365328955(0) win 64240 <mss 1460>
IP 192.168.1.137.cslistener > 192.168.146.1.veritas-ucl: S 2551711032:2551711032(0) ack 1365328956 win 5840 <mss 1460>
IP 192.168.146.1.veritas-ucl > 192.168.1.137.cslistener: . ack 2551711033 win 64240
IP 192.168.146.1.2153 > 192.168.1.137.cslistener: S 1339035798:1339035798(0) win 64240 <mss 1460>
IP 192.168.1.137.cslistener > 192.168.146.1.2153: S 2781121692:2781121692(0) ack 1339035799 win 5840 <mss 1460>
IP 192.168.146.1.2153 > 192.168.1.137.cslistener: . ack 2781121693 win 64240
IP 192.168.146.1.2154 > 192.168.1.137.cslistener: S 870525075:870525075(0) win 64240 <mss 1460>
IP 192.168.1.137.cslistener > 192.168.146.1.2154: S 2986811472:2986811472(0) ack 870525076 win 5840 <mss 1460>
IP 192.168.146.1.2154 > 192.168.1.137.cslistener: . ack 2986811473 win 64240
IP 192.168.1.137.cslistener > 192.168.146.1.2154: S 2986811472:2986811472(0) ack 870525076 win 5840 <mss 1460>
IP 192.168.146.1.2154 > 192.168.1.137.cslistener: . ack 2986811473 win 64240
IP 192.168.1.137.cslistener > 192.168.146.1.2154: S 2986811472:2986811472(0) ack 870525076 win 5840 <mss 1460>
IP 192.168.146.1.2154 > 192.168.1.137.cslistener: . ack 2986811473 win 64240
IP 192.168.1.137.cslistener > 192.168.146.1.2154: S 2986811472:2986811472(0) ack 870525076 win 5840 <mss 1460>
IP 192.168.146.1.2154 > 192.168.1.137.cslistener: . ack 2986811473 win 64240
IP 192.168.1.137.cslistener > 192.168.146.1.2154: S 2986811472:2986811472(0) ack 870525076 win 5840 <mss 1460>
IP 192.168.146.1.2154 > 192.168.1.137.cslistener: . ack 2986811473 win 64240
IP 192.168.1.137.cslistener > 192.168.146.1.2154: S 2986811472:2986811472(0) ack 870525076 win 5840 <mss 1460>
IP 192.168.146.1.2154 > 192.168.1.137.cslistener: . ack 2986811473 win 64240
上述结果我无法理解,请教各位帮忙解释下
[ 本帖最后由 jiufei19 于 2009-7-3 17:54 编辑 ] |
|