三次握手四次挥手及TCP协议特点

接着上一篇。

三次握手

tcp固定的头部结构中,含有6位标志:

 其中我们主要介绍一下ACK,SYN,FIN三个标志。

ACK标志,表示确认号是否有用,我们称带有ACK标志的tcp报文为确认报文段;

SYN标志,表示请求建立连接,称带有SYN标志的tcp报文为同步报文段;

FIN标志,表示通知对方本端要关闭连接了,称为结束报文段。

connect()返回成功,三次握手完成

四次挥手

 close()方法用来关闭 TCP 连接。此时,会进行四次挥手。

特殊情况下可能执行三次挥手,是第二次和第三次挥手合为一次,即回应和数据包发出同时进行。

关于三次握手和四次挥手的观察,可以使用tcpdump查看TCP连接的建立与关闭

TCP协议特点

TCP转移状态

TCP连接的任意一端在任一时刻都处于某种状态,当前状态可以通过netstat命令查看,

我们先来看一张图:

在上图中,TIME_WAIT状态存在的原因有两点:

1)可靠地终止TCP连接

2)保证让迟来的TCP报文段有足够的时间被识别并丢弃

 流式服务特点

基于流(stream)的数据没有长度的限制,可以进行无限制的存取

 但这种方式就会带来一个问题——粘包

举个例子:当客户端连续快速发送了多个数据,recv(1),recv(abc),recv(23),这些数据都被存入缓冲区封包,而这时候客户端就不知道数据开头和结尾在哪儿。

解决粘包:1)设置标记作为分隔符;

2)避免连续发送,一发一收。

应答确认和超时重传

发送端发送数据给接收端,接收端收到数据后会给发送端一个确认消息表示已经收到了消息。在发送端未收到确认信息前,数据会一直被保留,直到确认后才丢弃。这也构成了TCP的可靠性。

滑动窗口

TCP协议是利用滑动窗口实现流量控制的。发送方的滑动窗口如下所示:

 在 TCP 的报头中有一个字段叫做接收通告窗口,这个字段由接收端填充,是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。所以发送端就会有一个发送窗口,这个发送窗口的大小是由接收端填充的接收通告窗口的大小决定的,并且窗口的位置会随着发送端数据 的发送和接收到接收端对数据的确认而不断的向右滑动,将之称为滑动窗口。

拥塞控制

几种方法:

1)慢开始

2)拥塞避免

3)快速重传

4)快速恢复

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值