仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 664|回复: 10
打印 上一主题 下一主题

[其他Linux] 来一发tcp要点进修-断开毗连

[复制链接]
萌萌妈妈 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 11:58:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
RedHatCentOS等等.学习linux不是逛自由市场,选定版本就要静下心来学习.不要今天换版本明天要升级.这样对你没有好处。
次要部分,四次握手:断开毗连实在从我的角度看不辨别客户端和服务器端,任何一方都能够挪用close(orclosesocket)之类的函数入手下手自动停止一个毗连。这里先临时说一般情形。当挪用close函数断开一个毗连时,自动断开的一方发送FIN(finish报文给对方。有了之前的履历,我想你应当分明我说的FIN报文时甚么器材。也就是一个设置了FIN标记位的报文段。FIN报文也大概附加用户数据,假如这一方另有数据要发送时,将数据附加到这个FIN报文时完整一般的。以后你会看到,这类附加报文还会有良多,比方ACK报文。我们所要掌控的准绳是,TCP一定会力所能及地到达最年夜效力,以是你可以想到的优化办法,我想TCP城市想到。
当主动封闭的一方收到FIN报文时,它会发送ACK确认报文(关于ACK这个器材你应当很熟习了)。这里有个器材要注重,由于TCP是双工的,也就是说,你能够设想一对TCP毗连上有两条数据通路。当发送FIN报文时,意义是说,发送FIN的一端就不克不及发送数据,也就是封闭了个中一条数据通路。主动封闭的一端发送了ACK后,使用层一般就会检测到这个毗连行将断开,然后主动断开的使用层挪用close封闭毗连。
我能够告知你,一旦当你挪用close(orclosesocket),这一端就会发送FIN报文。也就是说,如今主动封闭的一端也发送FIN给自动封闭端。偶然候,主动封闭端会将ACK和FIN两个报文合在一同发送。自动封闭端收到FIN后也发送ACK,然后全部毗连封闭(现实上还没完整封闭,只是封闭必要互换的报文发送终了),四次握手完成。如你所见,由于主动封闭端大概会将ACK和FIN合到一同发送,以是这也算不上严厉的四次握手---四个报文段。
在后面的文章中,我一向没提TCP的形态转换。在这里我仍是在夷由是否是该将那张到处通用的图拿出来,不外,这里我只给出断开毗连时的形态转换图,摘自:
<Palign=center>点击检察年夜图
给出一个一般封闭时的windump信息:
14:00:38.819856IPcd-zhangmin.1748>220.181.37.55.80:F1:1(0)ack1win65535
14:00:38.863989IP220.181.37.55.80>cd-zhangmin.1748:F1:1(0)ack2win2920
14:00:38.864412IPcd-zhangmin.1748>220.181.37.55.80:.ack2win65535
增补细节:
关于以上的四次握手,我增补下细节:1.默许情形下(不改动socket选项),当你挪用close(orclosesocket,以下说close不再反复)时,假如发送缓冲中另有数据,TCP会持续把数据发送完。
2.发送了FIN只是暗示这端不克不及持续发送数据(使用层不克不及再挪用send发送),可是还能够吸收数据。
3.使用层怎样晓得对端封闭?一般,在最复杂的堵塞模子中,当你挪用recv时,假如前往0,则暗示对端封闭。在这个时分一般的做法就是也挪用close,那末TCP层就发送FIN,持续完成四次握手。假如你不挪用close,那末对端就会处于FIN_WAIT_2形态,而本端则会处于CLOSE_WAIT形态。这个能够写代码尝尝。
4.在良多时分,TCP毗连的断开城市由TCP层主动举行,比方你CTRL+C停止你的程序,TCP毗连仍然会一般封闭,你能够写代码尝尝。
出格的TIME_WAIT形态:
从以上TCP毗连封闭的形态转换图能够看出,自动封闭的一方在发送完对对方FIN报文切实其实认(ACK)报文后,会进进TIME_WAIT形态。TIME_WAIT形态也称为2MSL形态。
甚么是2MSL?MSL即MaximumSegmentLifetime,也就是报文最年夜保存工夫,援用中的话:“它(MSL)是任何报文段被抛弃前在收集内的最长工夫。”那末,2MSL也就是这个工夫的2倍。实在我以为没需要把这个MSL切实其实切寄义弄分明,你所必要分明的是,当TCP毗连完成四个报文段的互换时,自动封闭的一方将持续守候必定工夫(2-4分钟),即便两头的使用程序停止。你能够写代码尝尝,然后用netstat检察下。
为何必要2MSL?依据和中的说法,有两个缘故原由:其一,包管发送的ACK会乐成发送到对方,怎样包管?我以为多是经由过程超时计时器发送。这个就很难用代码演示了。
其二,报文大概会被搅浑,意义是说,其他时分的毗连大概会被看成本次的毗连。间接援用的说法:Thesecondistoprovidea“bufferingperiod”betweentheendofthisconnectionandanysubsequentones.Ifnotforthisperiod,itispossiblethatpacketsfromdifferentconnectionscouldbemixed,creatingconfusion.
TIME_WAIT形态所带来的影响:
当某个毗连的一端处于TIME_WAIT形态时,该毗连将不克不及再被利用。现实上,关于我们对照有实际意义的是,这个端口将不克不及再被利用。某个端口处于TIME_WAIT形态(其
12下一页


如果你想在以后的生涯中在软件行业工作的话,学习linux是一项基本技能,所以打从你打算学习linux那天起,放弃windows吧!因为它除了能给你带来片刻的娱乐,别无其他;
萌萌妈妈 该用户已被删除
沙发
 楼主| 发表于 2015-1-16 13:07:44 | 只看该作者

来一发tcp要点进修-断开毗连

对于linux命令,一定要学会用man和info去查他们的解释;
实应当是这个毗连)时,这意味着这个TCP毗连并没有断开(完整断开),那末,假如你bind这个端口,就会失利。</P>关于服务器而言,假如服务器俄然crash失落了,那末它将没法再2MSL内从头启动,由于bind会失利。办理这个成绩的一个办法就是设置socket的SO_REUSEADDR选项。这个选项意味着你能够重用一个地点。
关于TIME_WAIT的插曲:
当创建一个TCP毗连时,服务器端会持续用原有端口监听,同时用这个端口与客户端通讯。而客户端默许情形下会利用一个随机端口与服务器真个监听端口通讯。偶然候,为了服务器真个平安性,我们必要对客户端举行考证,即限制某个IP某个特定端口的客户端。客户端可使用bind来利用特定的端口。
关于服务器端,当设置了SO_REUSEADDR选项时,它能够在2MSL内启动并listen乐成。可是关于客户端,当利用bind并设置SO_REUSEADDR时,假如在2MSL内启动,固然bind会乐成,可是在windows平台上connect会失利。
而在linux上则不存在这个成绩。(我的实行平台:winxp,ubuntu7.10)要办理windows平台的这个成绩,能够设置SO_LINGER选项。SO_LINGER选项决意挪用close时,TCP的举动。
SO_LINGER触及到linger布局体,假如设置布局体中l_onoff为非0,l_linger为0,那末挪用close时TCP毗连会立即断开,TCP不会将发送缓冲中未发送的数据发送,而是当即发送一个RST报文给对方,这个时分TCP毗连就不会进进TIME_WAIT形态。
如你所见,如许做固然办理了成绩,可是其实不平安。经由过程以上体例设置SO_LINGER形态,同等于设置SO_DONTLINGER形态。
断开毗连时的不测:
这个算不上断开毗连时的不测,当TCP毗连产生一些物理上的不测情形时,比方网线断开,linux上的TCP完成会仍然以为该毗连无效,而windows则会在必定工夫后前往毛病信息。
这仿佛能够经由过程设置SO_KEEPALIVE选项来办理,不外不晓得这个选项是不是关于一切平台都无效。
总结:
团体感到,越写越烂。接上去会讲到TCP的数据发送,这会触及到滑动窗口各类准时器之类的器材。我朴拙但愿列位可以多提定见。关于TCP毗连的断开,我们只需分明:1.在默许情形下,挪用close时TCP会持续将数据发送终了;2.TIME_WAIT形态会招致的成绩;3.毗连不测断开时大概会呈现的成绩。
4.maybemore...
</p>
上一页12


如果你只是想应付一下操作系统的课程,劝你最好别学,或者说不要指望能用的怎么样。
飘飘悠悠 该用户已被删除
板凳
发表于 2015-1-18 16:22:05 | 只看该作者
生成新的unispimsp.ksc。”另外得到回复后如果问题解决,向帮助过你的人发个说明,让他们知道问题是怎样解决的。
谁可相欹 该用户已被删除
地板
发表于 2015-1-27 11:30:09 | 只看该作者
其中不乏很多IT精英的心血。我们学透以后更可以做成自己的OS!?
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-5 11:20:31 | 只看该作者
学习Linux系统在服务中的配置方法及使用方法。Linux在服务器中应用相当广,应对常用的apache,samba,ftp等服务器基本配置清楚了解。[重点,应巩固学习]
小妖女 该用户已被删除
6#
发表于 2015-2-11 17:30:32 | 只看该作者
尽我能力帮助他人,在帮助他人的同时你会深刻巩固知识。
只想知道 该用户已被删除
7#
发表于 2015-3-2 17:55:28 | 只看该作者
说实话小时候没想过搞IT,也计算机了解也只是一些皮毛,至于什么UNIX,Linux,听过没见过,就更别说用过了。?
不帅 该用户已被删除
8#
发表于 2015-3-11 05:37:40 | 只看该作者
和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。
透明 该用户已被删除
9#
发表于 2015-3-17 21:35:57 | 只看该作者
熟读Linux系统有关知识,如系统目录树,有关内容可购书阅读或搜索论坛。
第二个灵魂 该用户已被删除
10#
发表于 2015-3-25 03:56:03 | 只看该作者
最好先搜寻一下论坛是否有您需要的文章。这样可以获得事半功倍的效果。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 05:05

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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