设为首页 收藏本站
查看: 2442|回复: 1

[经验分享] TCP协议的建立与释放及TCP的有限状态基

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-5-18 08:48:46 | 显示全部楼层 |阅读模式
一、TCP的链接建立(三次握手)
如下图所示:假定最初两端的TCP进程都处于关闭状态。下图中,client主动打开链接,server被动打开链接

QQ截图20160518084757.png
创建过程:
    ①、server的TCP服务器进程先创建传输控制块TCB(存储了每一个链接中的重要信息),准备接受client进程的连接请求。然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。如有,作出响应。

    ②、client的TCP客户进程也是首先创建传输控制模块TCB,然后向server发出连接请求报文段,这时首部中的同步位SYN =1,同时选择一个初始序号 seq =1000,TCP规定,SYN报文段不能携带数据,但要消耗一个序号。这时,TCP客户进程进入SYN-SENT(同步以发送)状态。mss表示最大段尺寸,
如果一个段太大,封装成帧后超过了链路层的最大帧长度,就必须在IP 层分片,为了避免这种情况,客户端声明自己的最大段尺寸,建议服务器端发来的段不要超过这个长度。
    ③、server收到连接请求报文段后,如同意建立连接,则向client发送确认。在确认报文段中应把SYN 为和ACK 位都置1,确认号是ack =1001,同时也为自己选择一个初始序号seq=8000。这个报文段也不能携带数据,但同样要消耗一个序号。这时TCP服务器进程进入SYN-RCVD(同步收到)状态。

    ④、TCP客户进程收到server的确认后,还要向server给出确认,确认报文段ACK 置1,确认号ack =8001,而自己序号为seq=1002,TCP的标准规定,ACK 报文段可以携带数据。但如果不携带数据则不消耗序号,这种情况下,下一个数据报文段的序号仍是seq =1002.这时,TCP连接已经建立,client进去ESTABLISHED(已建立连接)状态。

    ⑤、当servers收到client的确认后,也进入ESTABLISHED状态。
****************为什么client还要发送一次确认呢?主要是为了防止已失效的连接请求报文段突然又传送到了server,因而产生错误。**********************
二、TCP的连接释放(四次挥手)
如下图所示:
QQ截图20160518084812.png
释放连接过程:

    ①、数据传输结束后,通信的双方都可释放连接。现在client和server都处于ESTABLISHED状态。client的应用进程先向其TCP发出连接释放,并停止再发送数据,主动关闭TCP连接。client把连接释放报文段首部的FIN置1,其序号 seq=1021,它等于前面已传送过的数据的最后一个字节的序号加1.这是client进入FIN-WAIT-1(终止等待1)状态,等待server的确认。TCP规定,FIN报文段即使不携带数据,它也消耗一个序号。
    ②、server收到连接释放报文段后即发出确认,确认号是ack=1022,然后server就进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程这时应通过高层应用进程,而从client到server这个方向的连接就释放了,这时的TCP连接处于半关闭(half-close)状态,即client已经没有数据要发送了,但server若发送数据,client仍要接收。也就是说server到client这个方向的连接并未关闭。

    ③、client收到来自server的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待server发出的连接释放报文段。若server已经没有要向client发送的数据,其应用进程就通知TCP 释放连接。这是B发出的连接释放报文段必须使FIN=1 。现假定server的序号为8011.这是server就进入LAST-ACK(最后确认状态),等待client的确认。
    ④、client在收到server的连接释放报文段后,必须对此发出确认,在确认报文段中把ACK置1 ,序号为8012,然后进入到TIME-WAIT(时间等待)状态。这时候TCP连接还没有释放掉。必须经过时间等待计时器设置的时间2MSL后,client才进入到CLOSE状态。时间MSL叫做最长报文段寿命,建议设置为2分钟。

    ⑤、server接收到了client发出的确认,就进入CLOSED状态。

**************为什么client在TIME-WAIT状态必须等待2MSL时间呢?**********
    第一,为了保证client发送的最后一个ACK报文段能够到达server。

    第二,防止“已失效的连接请求报文段”出现在本连接中。

三、TCP有限状态基
    QQ截图20160518084828.png
每个方框中的大写英文字符串是TCP标准所使用的TCP连接状态名。状态之间的箭头表示可能发生的状态变迁。箭头旁边的字,表明引起这种变迁的原因,或表明发生状态变迁后又出现什么动作。图中三种不同的箭头表示的意义不同,粗实箭头表示对客户进程的正常变迁,粗虚箭头表示对服务器进程的正常变迁。另外一种细线箭头表示异常变迁。
    ①、CLOSED 状态时初始状态。
    ②、LISTEN:被动打开,服务器端的 状态变为LISTEN(监听)
    ③、SYN-RECVD:服务器端收到SYN后,状态为SYN;发送SYN ACK;
    ④、SYN_SENTY:应用程序发送SYN后,状态为SYN_SENT;
    ⑤、ESTABLISHED:当连接已经建立,客户端进入ESTABLISHED状态,服务器端收到客户端的确认后,服务器端也进入ESTABLISHED状态。
     ⑥、FIN_WAIT_1:应用程序端发送FIN,准备断开TCP连接
    ⑦、CLOSE_WAIT:服务器端在收到FIN后,发送ACK,状态为CLOSE_WAIT
    ⑧、FIN_WAIT_2:当客户端收到来自服务器端的确认后,就进入FIN_WAIT_2.

    ⑨、LAST_ACK:当服务器端没有要向客户端发送的数据,其应用进程就通知TCP释放连接。服务器端重复上次已发送过得确认号。这时服务器端就进入LAST_ACK状态。

    10、TIME_WAIT:客户端收到服务器端的连接释放报文段后,对此发出确认,然后客户端就进入了TIME_WAIT状态。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-218442-1-1.html 上篇帖子: TCP的连接建立与连接释放 下篇帖子: TCP/IP链接的三次握手与四次挥手
累计签到:3 天
连续签到:1 天
发表于 2016-5-20 14:11:41 | 显示全部楼层
之前在云主机部署过,但是使用起来还是不熟悉 刚好这本书看看

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表