Chinaunix首页 | 论坛 | 博客
  • 博客访问: 340739
  • 博文数量: 208
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 286
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-20 11:39
文章分类

全部博文(208)

文章存档

2014年(208)

我的朋友

分类: LINUX

2014-05-20 12:49:40

原文地址:TCP/IP 作者:czysocket_dara

 TCP/IP 4层网络

 TCP的3次握手

 TCP的4次挥手

TCP的SEQ和ACK
  在TCP通讯中,无论是建立连接,数据传输,友好断开,强制断开,都离不开Seq值和Ack值,它们是TCP传输的可靠保证.Seq是发送方告诉接收方,我当前已经发送了Seq个字节(不包括Eth头,IP头和Tcp头,也就是纯数据长度)给你,例如在建立连接双方握手时,发送方的Seq为0,发送的数据长度也为0,这时接收方收到数据帧后,会判断Seq+数据长度为0或者Seq+数据长度为1的话,那么在回应发送方的Ack的值就为1(也就表示确认号有效,为0的话就表示数据包中不包含确认信息,忽略确认号字段).在数据传输中,如果Seq+数据长度不为0或1并且数据长度不为0的话,则Ack就等于Seq+数据长度的值,这就表示我已经收到Seq+数据长度个字节的数据.发送方收到该Ack就会比较自己的Seq+刚发出去的纯数据长度,如果一致,则回应接收方的Ack,并且发送下一个包,否则将重发该包,若超时还没收到Ack也会重发该包.

TCP的MSS值
  TCP的MSS值是双方在建立连接时(3次握手)根据自身传输状况(例如网卡支持单帧大小,缓存大小等)所协商出来的单帧完整报文最大长度,一般在主机回应时就确定下来了,取两方的最小值一方,该值是放在TCP头的Option选项中.而UDP传输的MSS值是在应用层协商的,如TFTP协议.一般情况下MSS值是不能超过1518字节的,也就是网络传输中单个数据包不能大于1.48KB.

TCP的滑动窗口
  Tcp滑动窗口值表示在指定的时间内,发送方可以发送窗口值大小的数据后才需要收到一个接收方的Ack包(但并不总是填满整个窗口值).因为如果每发送一个数据包就需要得到一个回应,在网络状况佳的情况下,这会浪费很多资源,所以,该值会通过接收方的Ack包动态调节,在网络空闲的状态下会加大窗口值,在网络忙的情况下会缩小,以确保数据能实时可靠地传输.该值一般是MSS值的倍数.因此滑动窗口是接收方的流量控制.
  1.窗口的左边沿向右边沿靠近为窗口合拢,这种现象发生在数据被发送的确认时.
  2.当窗口右边沿向右边移动时.将允许发送更多的数据,称为窗口张开,发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时.
  3.当右边沿向左移动时,称为窗口,不建议使用这种方式.

TCP的拥塞窗口
  Tcp的拥塞窗口是发送方对流量的控制.发送方在初始化连接时拥塞窗口值为MSS值(以字节为单位),当收到接收方的Ack后,该值就会以指数增加一次,发送方会取滑动窗口和拥塞窗口的最小值作为发送上限.顺便说一下,滑动窗口和拥塞窗口是指TCP头的Window字段.滑动是指接收方发出的,拥塞是发送方发出的.
阅读(448) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~