TCP的连接

1 TCP的关闭
要注意的有:
1有主动关闭与被动关闭两种
2C/S两端都要正确处理req/ack分组丢失的情况
3TCP的状态,关于TIME_WAIT,CLOSE_WAIT的存在,看一下下图就都清楚了。

3 TIME_WAIT存在的理由
1)正确处理最后一个ACK丢失的情况,需要等待2MSL,重发。也就是说,对方给你发来FIN后,你进入了TIME_WAIT且同时发了一个ACK给对方,这个意思是告诉对方你已经知道对方没什么东西可以发了,这个ACK是要对方知道你确实收到了FIN,但如何保证对方能收到FIN呢,就要保持在TIME_WAIT状态,这样才可以超时重发.这就是TCP的可靠性和双向通讯都要可靠.

2)防止前一个连接的包干扰同一IP地址+端口号的包。
3)主动方(先发FIN的那一方)进入time_wait状态.

2004年10月14日9:50:21
UDP没有这么多讲究,也没有复杂的流控算法。
在TCP关闭时的函数有shutdown,与close.注意两者语意的不同,前者可以关闭单向连接,

2006年8月12日
http://www.freesoft.org/CIE/Course/Section4/11.htm
http://www2.ics.hawaii.edu/~esb/2004fall.ics451/nov17.html
注意上面几个FIN,RST等语句的意思,
FIN只是告诉对方,我没什么好发的了,是close时发的一个信息,但这时候你还得继续接收对方的信息,因为对方没有告诉你,他发送完成,为了保证TCP的可靠性,你虽然想关闭,但这时候还不能关闭!,一定要等到对方同意关闭才行!你这个时候处在FIN_1状态,等对方给你ACK后处在FIN_2状态,等收到对方的FIN后才进入TIME_WAIT状态.
而对方一接收到你的FIN后立即进入CLOSE_WAIT状态.
如果你是接收方,recv,对方是send方,而你首先结束连接close,这时候对方如果不检测连接状态,只是连续的发send,它还不知道你是否close了,一定要对方recv一下才知道你发了FIN,真是奇怪!

posted on 2004-08-13 10:11  embed  阅读(1302)  评论(3编辑  收藏  举报

导航