Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1396081
  • 博文数量: 277
  • 博客积分: 2551
  • 博客等级: 少校
  • 技术积分: 3918
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-21 22:46
文章分类

全部博文(277)

文章存档

2017年(3)

2016年(9)

2015年(65)

2014年(27)

2013年(85)

2012年(61)

2011年(27)

分类: LINUX

2013-04-27 17:48:37

      采用TCP协议连接的2端,在通讯的过程中协议的细节有一定的差别。
      连接建立阶段
         连接发起者syn中的seq与连接接收者syn中的seq相差1
         在连接建立时,双方需要通报自己的seq开始值,滑动窗口大小,包的最大字节数
         滑动窗口的使用,使得通讯的两端不需要收到一个数据后,就马上发出ack,可以一直发送,只要seq不超过初始seq值+滑动窗口值
      数据传输
         数据接收者的ack中的seq等于数据发送者的seq+数据长度
         有时可能多次接收数据,发送一次ack
         每次发送数据时,都要将数据从应用层拷贝到内核,数据在发送前都要检查连接是否有异常
      连接关闭
         连接关闭者发起的fin中seq与连接关闭ack的seq值相同
      tcp协议中有一个重要的协议命令reset,reset表示重置连接,一般来说server校验client信息不符时,会发送rst到client,这个命令常用于server意外重启,很多防火墙也用它来断开client连接。 
      reset命令的发起者,reset命令一发送,发送缓冲区中的所有包都被清掉,而接收者的接受缓冲区的数据也会被清理。
      fin命令是正常关闭,它会根据缓冲区的顺序来发送,就是发送fin之前的数据都要发送完毕,才会发fin包,所以rst用来异常关闭连接的。
     
阅读(1444) | 评论(0) | 转发(0) |
0

上一篇:系统优化

下一篇:tcp/ip协议新认识(四)

给主人留下些什么吧!~~