TCP三次握手与四次分手

基础信息

ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1,为1的时候表示应答域有效,反之为0;
SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1,ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。
FIN: 表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。

关注问题:

  • TCP三次握手的过程
    第一次握手的时候,客户端想要建立连接,于是给服务器端发送一个SYN包。
    第二次握手,服务器端收到了SYN包,发出一个SYN+ACK包。
    第三次握手,客户端收到了服务器的SYN+ACK包,服务器发送了确认包ACK

  • TCP四次挥手协议
    (终端请求的可以是服务器端也可以是客户端,这里假设是服务器端。)
    首先服务器端发送FIN报文给客户端意思是“我的数据传输完了。”,客户端收到FIN报文以后,就返回一个ACK包,意思是“你的请求我已经收到,但是我还没准备好要中断,等我消息。”(服务器端进入FIN_WAIT状态)
    等到客户端认为自己数据已经发送完全了,则给服务器端发送FIN包,意思是“我这边的数据也发送完了,可以准备好终端连接了。”服务器端收到了这个FIN包以后发送ACK包确认。客户端收到ACK就中断连接了,而服务器端等2个最大报文段生存时间(2MSL)以后还没有收到回复,TCP连接就关闭了。

  • 为什么链接的时候是三次握手,关闭的时候是四次握手?
    因为当服务器端收到客户端的请求时,可以同时发送一个SYN包和ACK包,SYN包是同步,ACK包是应答。
    但是关闭连接的时候,当服务器端收到FIN报文,并不能确认自己也一定把数据传完了,立即关闭socket,所以只能先回复一个ACK,告诉客户端,“你发的报文我收到了。”

  • 为什么需要两个最大报文段生存时间才关闭TCP?
    因为我们要假设网络是不可靠的,如果客户端没收到这个ACK回应,它回重新发送FIN报文。这时候如果服务器端已经关闭,那就尴尬了..

  • 为什么需要三次握手而不是两次握手?
    假设只有两次握手协议,某次客户端某个失效的报文,在网络长久地滞留,等到将来的某一刻发送给服务器端,服务器端发出一个ACK以为连接建立起来。而此时客户端处于close的状态,不理会服务器的确认,白白浪费了服务器的资源。
    简而言之,是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值