Chinaunix首页 | 论坛 | 博客
  • 博客访问: 201395
  • 博文数量: 24
  • 博客积分: 608
  • 博客等级: 中士
  • 技术积分: 371
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-22 21:10
文章分类

全部博文(24)

文章存档

2012年(24)

分类: 系统运维

2012-07-14 14:03:30

connect函数

1.       函数原型:

#include

int connect(int sockfd, const sturct sockaddr* servaddr, socklen_t addrlen)

由客户端发起TCP三次握手过程,servaddr是服务器套接字地址结构。客户在调用connect函数前不需要调用bind函数,内核会选择一个临时的端口。

2.       connect函数出错情况分析

2.1       超时:超时的前期工作上一篇已经介绍了。unp说“若TCP客户没有收到SYN分节,则返回ETIMEOUT错误”。

[root@localhost unp]# date;./client 192.168.197.20;date

2012 07 14 星期六 13:10:35 CST

connect error: Connection timed out

2012 07 14 星期六 13:11:38 CST

 

说明:arp映射是假的,若客户主机(192.168.197.20)没有收到ARP请求,它将永远收不到ARP应答,可以看到超时时间为63秒,下面是抓包情况(Ominpeek抓包软件,此软件很好!)

1       192.168.197.10        192.168.197.20                 78     0.000000

2       192.168.197.10        192.168.197.20                 78     0.999882

3       192.168.197.10        192.168.197.20                 78     3.000087

4       192.168.197.10        192.168.197.20                 78     7.001960

5       192.168.197.10        192.168.197.20                 78     15.002222       

6       192.168.197.10        192.168.197.20                 78     31.001919       

 

2.2       若客户的SYN的响应是RST,表明服务器主机在我们指定的端口没有进程与之等待(没有运行服务器程序的主机)。客户接收到RST就马上返回ECONNREFUSED错误。这是一种硬错误。

这个实验也很好做。

[root@localhost unp]# date;./client 192.168.197.5;date

2012 07 14 星期六 13:25:51 CST

connect error: Connection refused

2012 07 14 星期六 13:25:51 CST

 

首先我Ubuntu虚拟机IP192.168.197.5,此时没有运行server程序,所以会出现这种情况。抓包看看:

192.168.197.10        192.168.197.5          0.000481 TCP  Src=53237,Dst= 9877,....S.,S=3521322144,

192.168.197.5 192.168.197.10                 0.000617 TCP  Src= 9877,Dst=53237,.A.R..,S= 0

可以看到,首先客户端发送了一个SYN请求,服务器返回的是RST异常终止此连接.

 

2.3       最后一种情况是路由不可达。不过这个和第2种情况到底有什么本质的区别还不太了解,因为下面这条命令返回的错误不总是“No route to host”,有些时候还会出现refused的情况,这个是为什么??

[root@localhost unp]# date;./client 220.181.112.143;date

2012 07 14 星期六 13:39:17 CST

connect error: No route to host

2012 07 14 星期六 13:39:21 CST

这里220.181.112.143是百度的地址。时差只有4秒。。。

 

[root@localhost unp]# date;./client 220.181.112.143;date

2012 07 14 星期六 13:44:52 CST

connect error: Connection refused

2012 07 14 星期六 13:45:13 CST

时差大约20秒。

 

这个实验不太好做,tcp详解p88页介绍了主机不可达的知识。

阅读(2060) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~