tcp建立连接和关闭连接一定要三次和四次握手?????????????????

liulili19830401 2009-04-14 10:42:55
1建立连接时,如果客户机和服务器同时发出建立连接请求,那建立全双工的连接不是变成四次握手了???
2关闭连接时,如果客户机发出关闭请求,然后服务器收到关闭请求的同时也想发出关闭请求,把FIN和ACK一起发送,那不是变成三次握手不就可以了??
...全文
412 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinzh130 2009-08-05
  • 打赏
  • 举报
回复
1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

http://blog.pfan.cn/xman/44384.html 这里说的很明白。

lin_style 2009-04-15
  • 打赏
  • 举报
回复
time_wait(应该是这么写) 至少有两个作用
一个是端口下次的重用,二是断开的超时处理

lin_style 2009-04-15
  • 打赏
  • 举报
回复
楼主你的三次握手想法早已经有了。

具体看UNP。

至于为什么要四次,查看UNP。我这里可以提出一种情况,当你发到一半的时候突然硬关闭,比如断网了,拨掉网线了。你的端怎么办?是否还是要做个超时,所以最后一次断开状态是time_wait(应该是这么写)
  • 打赏
  • 举报
回复
1建立连接时,如果客户机和服务器同时发出建立连接请求,那建立全双工的连接不是变成四次握手了???

这个应该可以分别发起2个TCp连接吧,2者可以没有影响啊,反正2个连接双方的Sequence Number都不一样啊,建立的通信端口号也不一样啊。
hityct1 2009-04-15
  • 打赏
  • 举报
回复
mark
zhangzhao123 2009-04-15
  • 打赏
  • 举报
回复
study
liliangbao 2009-04-15
  • 打赏
  • 举报
回复
顶顶顶~~~
kiffa 2009-04-14
  • 打赏
  • 举报
回复
同时打开确实要发送4份报文,也即所谓的四次握手,比正常的三次多一次。需要注意的是同时打开的条件:
服务器:从本机8888端口建立连接到客户机的6666端口
客户机:从本机6666端口建立连接到服务器的8888端口
而且两端几乎同时发送SYN,这样才构成同时打开。并且这里的客户端和服务器只是为了描述方便,单从这个例子讲,两端处于对等地位,每端既是服务器,又是客户端。

若仅仅只是:
服务器:从本机8888端口建立连接到客户机的6666端口
客户机:从本机8888端口建立连接到服务器的6666端口
则只是建立两条独立的连接。
liliangbao 2009-04-14
  • 打赏
  • 举报
回复
TCP在建立连接时又分三步走:
第一步是请求端(客户端)发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号;
第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。
第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。然后才开始通信的第二步:数据处理。
服务器是等待连接请求,而不发连接请求的~
baihacker 2009-04-14
  • 打赏
  • 举报
回复
呵,看看RFC文档...
因为你发起请求的时候,对方是在一个等待回应的状态,估计会处于错误状态吧.
比如A,B同时请示.A的请求到B,B是在等待回应,而没有得到,于是就出错了.(估计)
morris88 2009-04-14
  • 打赏
  • 举报
回复
1. 这种情况貌似有个专业术语,叫做同时打开
2. 这个貌似叫做捎带确认

3 次握手和 4 次握手,指的是正常情况是这样的...
liliangbao 2009-04-14
  • 打赏
  • 举报
回复
帮顶~
liulili19830401 2009-04-14
  • 打赏
  • 举报
回复
我们正常情况tcp建立连接和关闭连接一定要三次四次握手??

1建立连接时,如果客户机和服务器同时发出建立连接请求,那建立全双工的连接不是变成四次握手了???
2关闭连接时,如果客户机发出关闭请求,然后服务器收到关闭请求的同时也想发出关闭请求,把FIN和ACK一起发送,那不是变成三次握手不就可以了??
oyljerry 2009-04-14
  • 打赏
  • 举报
回复
1.建立连接后就是全双工了,后面一次可以跳过了
2.关闭连接同样是双工,关闭了,就双方断开了
sherrik 2009-04-14
  • 打赏
  • 举报
回复
upupup

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧