Forever
Do not lose heart,you will be successful sooner or later。

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字段.滑动是指接收方发出的,拥塞是发送方发出的.

posted on 2012-05-17 14:18  sybtj  阅读(2311)  评论(0编辑  收藏  举报