当前位置:首页 » 《资源分享》 » 正文

HCIA 第三天 TCP建立、断开连接过程_G的博客

17 人参与  2021年09月22日 13:23  分类 : 《资源分享》  评论

点击全文阅读


文章目录

  • TCP连接建立的过程
    • 三次握手
  • TCP断开连接的过程
    • 四次挥手
      • 为什么要四次挥手?
  • TCP确保可靠性的机制

TCP连接建立的过程

回顾昨天讲的TCP头部有哪些信息

在这里插入图片描述
记住这几个标记位的含义:

SYN		synchronous建立联机		在连接建立时用来同步序号

ACK		acknowledgement 确认		为1时表明确认号字段有效

PSH		push传送					为1时接收方应尽快将这个报文段交给应用层

FIN		finish结束				为1时表明发送端数据发送完毕要求释放连接

RST		reset重置				为1时表明TCP连接出现故障必须重建连接

URG		urgent紧急				为1时表明紧急指针字段有效


Sequence number		顺序号码

Acknowledge number	确认号码

三次握手

所谓三次握手(Three-Way Handshake)即建立TCP连接,是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。

在这里插入图片描述

  1. 第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=X,并将该数据包发送给服务端,客户端进入SYN_SENT状态,等待服务端确认。
  2. 第二次握手:服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN和ACK都置为1,ACK number=X+1,随机产生一个值seq=Y,并将该数据包发送给客户端以确认连接请求,服务端进入SYN_RCVD状态。
  3. 第三次握手:客户端收到确认后,检查ACK number是否为X+1,ACK是否为1,如果正确则将标志位ACK置为1,ACK number=Y+1,并将该数据包发送给服务端,服务端检查ack是否为Y+1,ACK是否为1,如果正确则连接建立成功,客户端和服务端进入ESTABLISHED状态,完成三次握手,随后客户端与服务端之间可以开始传输数据了。



TCP断开连接的过程

由于TCP连接时双向的的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,也就是不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭

四次挥手

在这里插入图片描述

  1. 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
  2. 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1,Server进入CLOSE_WAIT状态。
  3. 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  4. 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

为什么要四次挥手?

确保数据能够完整传输。当被动方收到主动方的FIN报文通知时,它仅仅表示主动方没有数据再发送给被动方了。但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,再发送FIN报文给主动方,告诉主动方同意关闭连接,所以这里的ACK报文和FIN报文多数情况下都是分开发送的。



TCP确保可靠性的机制

  1. 确认
    每次数据的流通,都需要各自发一个ACK来进行确认

  2. 重传
    假如A给B发了一个包,B一直没有回复ACK,A就会怀疑B没有收到到,就会重新发送这个包,这就是重传

  3. 排序
    请添加图片描述

  4. 流控
    流控采用的机制是:滑动窗口

    TCP头部里面的窗口大小就是,允许一次能传几个包
    假如规定的窗口大小为10,就是说A给B传包的时候,一次性可以传10个,而B只用给A发送一次ACK,这就大大提高了传输效率,
    假如A给B传10个,B只收到了6个,那么下一次B给A发的ACK number就会是7,因为7-10的包没收到,而且A下一次的传输也就只会传7个了
    那么再假如B这次把A给的7个包全部收到了,那么下一次A就不一定会发7个包给B,而是会发7个以上的包(感觉就像有脑子一样,会压榨),总之,这个流控的过程就是动态的,所用的这个机制就叫做滑动窗口


点击全文阅读


本文链接:http://zhangshiyu.com/post/28372.html

连接  发送  服务端  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1