TCP建立连接的三次握手和释放连接的四次挥手
来源:互联网 发布:js防水双组分配方 编辑:程序博客网 时间:2024/05/18 03:25
TCP建立连接3次握手
每一次TCP连接都需要三个阶段:连接建立、数据传送和连接释放。三次握手就发生在连接建立阶段。
建立连接3次握手目的解释
在谢希仁著《计算机网络》第四版中讲三次握手的目的是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
在另一部经典的《计算机网络》一书中讲三次握手的目的是为了解决网络中存在延迟的重复分组的问题。
谢希仁版《计算机网络》中的例子是这样的,已失效的连接请求报文段的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用三次握手,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用三次握手的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。
这个例子很清晰的阐释了三次握手对于建立可靠连接的意义。在Google Groups的TopLanguage中看到一帖讨论TCP三次握手觉得很有意思。贴主提出的问题,在众多回复中,有一条回复写道:这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的. 请注意这里的本质需求,信道不可靠, 数据传输要可靠. 三次达到了, 那后面你想接着握手也好, 发数据也好, 跟进行可靠信息传输的需求就没关系了. 因此,如果信道是可靠的, 即无论什么时候发出消息, 对方一定能收到, 或者你不关心是否要保证对方收到你的消息, 那就能像UDP那样直接发送消息就可以了. 。这可视为对三次握手目的的另一种解答思路。
名词解释
ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。
FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接
seq就是序号,ack是确认号,seq是数据包本身的序列号;ack是期望对方继续发送的那个数据包的序列号
TCP协议终止链接要四次(主机A为client ,主机B为server)
1、当主机A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FIN给主机B。
2、主机B收到A发送的FIN,表示收到了,就会发送ACK回复。
3、但这是B可能还在发送数据,没有想要关闭数据口的意思,所以FIN与ACK不是同时发送的,而是等到B数据发送完了,才会发送FIN给主机A。
4、A收到B发来的FIN,知道B的数据也发送完了,回复ACK, A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接了。
A为什么等待2MSL,从TIME_WAIT到CLOSE?
在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
三次握手:
A:“喂,你听得到吗?”A->SYN_SEND
B:“我听得到呀,你听得到我吗?”应答与请求同时发出 B->SYN_RCVD | A->ESTABLISHED
A:“我能听到你,今天balabala……”B->ESTABLISHED
四次挥手:
A:“喂,我不说了。”A->FIN_WAIT1
B:“我知道了。等下,上一句还没说完。Balabala…..”B->CLOSE_WAIT | A->FIN_WAIT2
B:”好了,说完了,我也不说了。”B->LAST_ACK
A:”我知道了。”A->TIME_WAIT | B->CLOSED
A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED
- TCP 建立连接的三次握手 和释放连接的四次挥手 图解
- 通俗易懂地讲解TCP建立连接的三次握手和释放连接的四次挥手
- TCP建立连接的三次握手和释放连接的四次挥手
- 通俗易懂地讲解TCP建立连接的三次握手和释放连接的四次挥手
- (运输层)TCP的连接建立(三次握手)和连接释放(四次挥手)
- TCP连接的建立 (三次握手) 和释放 (四次握手)
- TCP连接的建立 (三次握手) 和释放 (四次握手)
- TCP连接的建立和释放(三次握手和四次挥手)
- TCP连接的建立(三次握手)和释放(四次挥手)
- TCP建立连接(三次握手)和释放(四次挥手)的详细解释
- 剖析TCP/IP协议建立和释放连接的三次握手与四次挥手过程
- TCP的三次握手建立连接与四次挥手释放连接
- 简述TCP连接的建立与释放(三次握手、四次挥手)
- TCP协议建立连接的三次握手四次挥手机制
- TCP建立连接三次握手和释放连接四次握手
- TCP建立连接三次握手和释放连接四次握手
- TCP建立连接三次握手和释放连接四次握手
- TCP连接的三次握手,四次挥手
- Panda总结
- 第十周 项目1
- papers for metric learning
- ...
- Bannear实现一个详情页面
- TCP建立连接的三次握手和释放连接的四次挥手
- c# 判断时间是否在 某一时间段内
- sscanf--格式化转换字符数组
- 常见浏览器兼容性问题与解决方案
- index range scan,index fast full scan,index skip scan
- 第12周 【项目三】 Floyd算法验证
- 第十三周项目3-分块查找
- 1.关于SQL查询效率,100w数据,查询只要1秒,与您分享:
- Plsql创建连接DBlinks