Chinaunix首页 | 论坛 | 博客
  • 博客访问: 132484
  • 博文数量: 24
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-14 15:19
文章分类

全部博文(24)

文章存档

2014年(6)

2008年(3)

2007年(15)

我的朋友

分类: LINUX

2007-07-31 11:25:56

TCP连接的建立与终止

TCP连接的建立

TCP建立连接的过程被大家亲切地称为三次握手的过程J

       其实TCP建立连接的过程还是很简单的,比较重要的地方有三个,一个是标志位的设置与交互,一个是Windows SizeMSS的区分,还有一个就是初始化序号ISN与确认序号之间的交互过程。

       发送SYN的一段被称作主动打开,接收这个SYN并发回SYN+ACK的一端被称作被动打开,主动打开的一端接收到SYN+ACK后,回一个ACK作为连接建立阶段的结束,至此,一个TCP连接就建立起来的J

       另外在TCP建立连接的过程中,一个比较晦涩的地方就是ISN,也就是初始化序号的选择,在RFC中建议这个ISN采用一个随即的序号,但是在现在大多数的实现中,这个ISN都是0

TCP连接的终止

       TCP终止连接是一个四次握手的过程,同时也是一个在连接的每个方向上的二次握手的过程。

       希望终止连接的一方可用发送FIN+ACK来请求终止一个方向上的数据发送,接收到FIN+ACK的一段可以回一个ACK来确认,通过两次这样的操作(四次握手)就可以终止全双工的TCP了。

       不过需要注意的是,发送了FIN+ACK并且接受到了ACK的一方仍然可以继续接收数据。

       同时需要注意的是,SYNFIN是要占用一个序号的,这也是为什么SYN+ACK与针对FIN+ACKACK确认序号有效(相对与之前的SYNFIN+ACK的序号加1)的原因。

       通常用户层的close操作会引发双方的主动关闭,也就是四次握手。

       利用特殊的应用层函数(shutdown)可以执行单方向关闭的操作,但是这种操作很不常用。

建立连接的异常

       还能有什么异常???无非就是超时吗!

       建立连接异常了怎么办?重发SYN来解决。

       重发多少次?一般是三次,75秒后放弃。

 

MSS的选取

       MSS的选取是一个很烦人的事情,MSS涉及到双方的协商,协商不通过的办法,涉及到分段,还和MTU相关,总之是个很烦人的东西。

       MSS表示本端所能接收的最大报文段长度,是指数据段的长度,不包含任何头部。

       当然,如果没有分段发生,MSS还是越大越好,MSS的选取通常就是用MTU减去IPTCP的头部字节总数。所以对于Ethernet来说,MSS可以达到1460字节,对于8023封装来说,MSS可以达到1452字节。

阅读(1255) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~