`
白粥若水
  • 浏览: 100838 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

《TCP/IP详解》_卷一_TCP连接的正常建立与关闭

 
阅读更多

TCP是一个面向连接的协议。这就意味着,通信双方之间有一个虚拟的,看不见的管道将之连起来,数据可以在管道中双向的同时传递。

 

TCP连接的建立与UDP不同,后者无需任何的预先的握手。

 

TCP的连接分为三步:

1、请求端(客户端)发送一个SYN段(在前一篇日志中输了,SYN是用来发起一个连接的)指明客户打算连接的服务器的端口,以及初始序号ISN.ISN是客户端选择的,它随时间而变化,因此每个连接都将具有不同的ISN

 

2、服务端发回一个包含服务器的初始序号的SYN报文段(注意::这个初始序号ISN,是服务器自己的ISN,与1中的ISN无关)作为应答。同时,将确认序号设置为客户的ISM(即1中的ISN)+1 用来对客户的SYN报文段进行确认。一个SYN将占用一个序号。

 

3、客户必须将确认序号设置为服务器的ISN+1以对服务器的SYN进行确认

 

 

 

这个过程叫做三次握手(three-way handshake)

 

 

 

 

TCP连接的断开需经过四次握手:

在实际中,通常先断开连接的是客户端,这里,也采用这种断开流程

 

1、首先,当客户端完成发送任务后就能发送一个“断开”报文(称为FIN)来终止这个方向的连接

 

2、当另一端(服务端)收到这个FIN之后,通知应用层在这个方向的连接(当然,这个与TCP/IP无关),并发送回这个FIN的ACK(还记得么,这个标志表示确认序号有效)

 

3、还是服务端,向客户端发送FIN报文

 

4、最后,客户端,返回3中FIN的ACK报文

 

 

这就是TCP“正常”断开的过程,当然,因为特殊原因而断开就不同了,如:断电了等。这里就不赘述了----实际上,我现在也不清楚,哈哈

 

 

 

PS:关于TCP的连接,我是这样形象记忆的:

1、客户端首先想服务端说暗号(含义包括端口和ISN):“天王盖地虎!”

 

2、服务端返回下句暗号(确认序号:即上面ISN+1)“宝塔镇河妖”,并说自己这边的暗号(自己的ISN):“踏破铁鞋无觅处”

 

3、客户端返回暗号(确认序号:2中ISN+1)“那人却在灯火阑珊处”

 

 

 

 

 

再PS:如何选择初始序号??

 

系统初始化时,初始的发送序号为1。以后,这个变量没0.5秒+64000,没9.5个小时回到0,即没8ms加1.另外,没加一个连接,这个变量+64000

 

 

 

 

0
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics