TCP的运输连接管理

TCP是面向连接的协议,有三个阶段:连接建立、数据传送 和 连接释放。运输连接的管理就是使运输连接的简历和释放都能正常地进行。

在TCP连接建立过程中要解决一下三个问题:

1、  要使每一方都能够确知对方的存在: 所以需要三次握手。

2、  要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等)。

3、  能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配:建立TCB。

TCP连接的建立采用跟客户-服务器模式。主动发起连接建立的应用进程叫做客户端,而被动等待连接建立的应用进程叫做服务器。

*TCP三次握手 四次挥手

http://blog.csdn.net/whuslei/article/details/6667471

建立连接时:首先服务器被动打开处于listen状态,客户端启动后向服务器发送syn报文,服务器收到后发送syn+ack报文,然后客户端再向服务器发送ack报文;此时连接建立;可以发送数据;

当客户端已经没有数据要发送给服务器时,客户端想服务器发送fin报文,服务器收到后发送ack确认自己收到了,此时客户端不能在向服务器发送数据了,但服务器仍然可给客户端发送数据,当服务器发送完数据后,服务器发送一个fin报文告诉客户端我已经发完数据了,客户端回复一个ack确认报文,接下来,客户端会等待2MSL时间,因为确认报文可能中途丢失,如果在这2MSL等待时间内服务器没有发来任何消息说明服务器已经收到了报文,这是客户端就可以关闭了,服务端在收到ack报文时也可以关闭;

MSL(Maximum Segment Lifetime)即最长报文段寿命,RFC建议为2分钟,具体实现时可以使用更小的值。

保活计时器(keepalive timer):

当客户端发生故障时,服务端不能再收到客户端的数据,因此应当有措施是服务器不要白白等待下去。服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两小时。若两小时没有收到客户的数据,服务器就发送一个探测报文段,以后则每隔75秒发送一次。若一连发送了10个探测报文段后仍无客户的响应,服务器就认为客户端出了故障,接着就关闭这个连接。在这期间,若客户端重新启动收到了探测报文,则客户端发送一个复位信息,让服务器关闭连接。

状态转移图,异常转移,课后习题。

为什么需要三次握手和四次挥手?

三次握手:严格来说即使N次握手也不能保证双方百分百成功建立连接,因为只要最后一次确认丢失,双方就处于一种信息不对称的状态(这种不对称是当前时间点的不对称,对这个时间点以前的信息对称的)。成功建立连接的标志应该是:互相都知道对方都准备好传输数据,这种情况至少需要三次握手。以A为客户端,B为服务器端为例, 假如只使用一次握手:A向B发送了一个报文,然后双方都认为连接建立,这种情况其实已经相当于UDP无连接了,没有任何意义;假如使用二次握手:A向B发送syn报文,B向A发送一个ACK报文(可能也报文syn字段),这时B已经知道了A要向他建立连接,双方的信息基本对称了,然而此时B到A的报文段有可能丢失,那么A就无法判断B是否收到了自己的连接请求,A状态未知,B也知道A的这种情况,所以需要第三次握手,即A想B发出ACK报文,这时双方都知道对方都已经准备好传输数据(之前的的时间点准备好,当前的状态仍然是不对称)。

以上只是考虑了数据包丢失的情况,如果出现数据包延迟达到,就会出现“已失效的连接请求报文段”,比如A向B发送的连接请求报文延迟达到B,B误以为是新的连接请求,然后接受发出ACK报文,如果是二次握手B此时就进入了establishing 状态,但这是种错误的状态,因为A早已放弃这个连接了。

总之多少次握手都无法保证百分百成功建立连接,因为最后一次报文可能出现丢失,延迟达到等各种情况。三次握手成功只是能说明双方现在已经有相当高的概率可以正常通信了。

四次挥手:四次挥手实际上就是两个FIN报文和两个ACK报文,这四个报文必不可少。A没有数据要发送了必然会向B发送一个fin报文,B必然要回复个ACK报文。为什么B不能学习三次握手将fin和ack合二为一?,因为B受到fin报文后要通知上层应用程序,上层应用程序可能数据没有发送完毕,这时就不能发送fin,即使是发送完了,B也不应该将两者合二为一(通知上层应用可能需要很多时间,这些都是不确定的),最好的方法就是先发送ACK告诉对方,然后在合适的时机发送自己的fin。

在 TCP C/S 模式下,当 TCP 客户端想断开的时候,不能用 shutdown 和 closesocket 与 TCP 服务器断开,只有让 TCP 服务器端主动断开(TCP 客户端被动断开),TCP 客户端的端口才能立刻被释放。http://blog.csdn.net/HackerJLY/article/details/6116857

服务器端能不能主动断开连接?

可以,但是主动断开连接的一方要等待2MSL,在这期间内核不会释放资源,这对服务器来说是不利的。

断开连接后需要做哪些处理工作?

回收资源:socket、内存、端口号。

TCP 长连接和短连接

参考文献:http://www.cnblogs.com/liuyong/archive/2011/07/01/2095487.html

http://www.cnblogs.com/cswuyg/p/3653263.html

http://blog.chinaunix.net/uid-26000296-id-3758651.html

http://blog.sina.com.cn/s/blog_9720724f0101feg4.html

短连接: 指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接;

一般银行、http服务器都使用短连接。短连接一般是一对多。

长连接: 指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接;p2p、数据库连接。

通常的短连接操作步骤是:   连接→数据传输→关闭连接;

而长连接通常就是:   连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接;

KeepAlive

参考文献:

http://www.bubuko.com/infodetail-260176.html

http://www.cnblogs.com/cswuyg/p/3653263.html

KeepAlive在TCP和http中有不同的含义;

TCP中keepalive在上文中的保活计时器中已经说明;

http中的keepalive的意义实际上是使用持久连接(长连接),以前对于每个http请求都是建立一次连接。这样每个连接只能传输一个http请求和响应,为了提高效率,可以在HTTP的头域中增加Connection选项。当设置为Connection:keep-alive表示开启,设置为Connection:close表示关闭。显示一个页面往往需要几十个请求,用持久连接的方式只需要建立一次连接就行。

网络编程之TCP和UDP

TCP的运输连接管理的更多相关文章

  1. 计算机网络-5-10-TCP运输连接管理

    TCP的运输连接管理 TCP是面向连接的通信,运输连接是用来传送TCP报文的,TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程.因此,运输连接有三个阶段,即:建立连接,数据传送,连接释 ...

  2. 三报文握手 四报文握手 TCP运输连接管理

    三报文握手 四报文握手  TCP运输连接管理

  3. 运输层8——TCP运输连接管理

    目录 1. TCP的连接建立 2. TCP的连接释放 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3--传输控 ...

  4. TCP拥塞控制及连接管理

    在阅读此篇之前,博主强烈建议先看看TCP可靠传输及流量控制. 一.TCP拥塞控制 在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(congestion ...

  5. TCP系列07—连接管理—6、TCP连接管理的状态机

            经过前面对TCP连接管理的介绍,我们本小节通过TCP连接管理的状态机来总结一下看看TCP连接的状态变化 一.TCP状态机整体状态转换图(截取自第二版TCPIP详解) 二.TCP连接建立 ...

  6. TCP系列02—连接管理—1、三次握手与四次挥手

    一.TCP连接管理概述 正如我们在之前所说TCP是一个面向连接的通信协议,因此在进行数据传输前一般需要先建立连接(TFO除外),因此我们首先来介绍TCP的连接管理. 通常一次完整的TCP数据传输一般包 ...

  7. TCP系列04—连接管理—3、TCP连接的半打开和半关闭

    在前面部分我们我们分别介绍了三次握手.四次挥手.同时打开和同时关闭,TCP连接还有两种场景分别是半打开(Half-Open)连接和半关闭(Half-Close)连接.TCP是一个全双工(Full-Du ...

  8. TCP系列03—连接管理—2、TCP连接的同时打开和同时关闭

    在前面的内容中我们介绍了TCP连接管理中最常见的三次握手方式和四次挥手的方式.但是有可能A和B两端同时执行主动打开并连接对方或者同时执行主动关闭连接(尽管发生这种情况的可能性比较低低),这个时候的流程 ...

  9. TCP系列08—连接管理—7、TCP 常见选项(option)

    一.TCP选项概述 在前面介绍TCP头的时候,我们说过tcp基本头下面可以带有tcp选项,其中有些选项只能在连接过程中随着SYN包发送,有些可以延后.下表汇总了一些tcp选项 其中我标记为红色的部分是 ...

随机推荐

  1. spring-boot 配置jsp

    sring-boot 集成  jsp spring-boot默认使用的页面展示并不是jsp,若想要在项目中使用jsp还需要配置一番. 虽然spring-boot中也默认配置了InternalResou ...

  2. SSM整合笔记

    SSM整合笔记 1,创建maven项目 创建maven项目过程省略 ps:如果创建完maven项目之后项目报错,可能是没有配置Tomcat 2,在pom.xml里面导入相应的jar的依赖 <pr ...

  3. substring、slice、substr的区别

    首先定义一个变量便于下面测试:var str = "xx351223441";   substring: str.substring(form,to):从字符串里截取下标为form ...

  4. Catch the moments of your life. Catch them while you're young and quick.

    Catch the moments of your life. Catch them while you're young and quick.趁你还年轻利落,把握住生活中的美好瞬间吧!

  5. 用xaml画的带阴影3D感的圆球

    <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"> <E ...

  6. 《Unity預計算即時GI》笔记:二、光照图

    说明 这篇文章是对<Unity預計算即時GI>这个系列文章的笔记. 光照图 什么是光照图 光照图在第三章中有如下的定义,读起来很是费解. 一個光照圖(Chart)是表示一個光照貼圖的區域, ...

  7. windows 右键崩溃 解决方法

    [问题描述] 选中一个文件,右键之后无法弹出菜单,最后显示: 资源管理器未响应. [参考方法] https://www.jianshu.com/p/d627c941467a [方法介绍] 1.下载Sh ...

  8. vue-初识

    一:vue基础1.1.Vue是一套构建用户界面的渐进式框架1.2.引入vue:<script src="https://unpkg.com/vue/dist/vue.js"& ...

  9. IOS UIActivityIndicatorView动画

    ● 是一个旋转进度轮,可以用来告知用户有一个操作正在进行中,一般 用initWithActivityIndicatorStyle初始化 ● 方法解析: ● - (void)startAnimating ...

  10. 在RichTextBox控件中添加超链接文本

    实现效果: 知识运用: RichTextBox控件的AppendText方法 public void AppendText{string textData} //向控件中添加文本内容 和Process ...