TCP 特性:确认应答、超时重传、连接管理(三次握手,四次挥手)

一、UDP 协议

无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接

不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层 回任何错误信息

面向数据报: 不能够灵活的控制读写数据的次数和数量
应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并;

二、TCP 协议

TCP全称为 “传输控制协议(Transmission Control Protocol”)。
要对数据的传输进行一个详细的控制。

其他基本特性:
滑动窗口、流量控制
延迟应答、捎带应答、粘包问题、保活机制、面向字节流

实现可靠传输的基础:

(一) 确认应答(ACK)机制

TCP将每个字节的数据都进行了编号,即为序列号。
每一个 ACK 都带有对应的确认序列号,表示已经收到的最后一个数据。
例:
在这里插入图片描述(二)超时重传机制

a. 主机 A 发送数据给主机 B 之后, 可能因为网络拥堵等原因, 数据无法到达主机 B;

例:
在这里插入图片描述

b. 如果主机 A 在一个特定时间间隔内没有收到主机 B 发来的确认应答, 就会进行重发;

例:
在这里插入图片描述
(三) 连接管理机制

a. 建立连接(三次握手)

建立连接的原因:
验证通信双方发送能力和接受能力是否正常;
通信双方需要协商一些重要参数;

建立连接的过程:
在这里插入图片描述

服务端状态:
LISTEN:服务器启动完成,等待客户端建立连接
ESTABLISHED:连接建立成功,随时可以传递数据(读写数据)

三次握手,只握手两次可不可以?
答:不可。如果没有主机 A 向主机 B 发送的 ACK,主机 B 不能确定主机 A 是否收到自己的回应。
三次握手,握手四次可不可以?
答:可以。但是主机 B 的 ACK 和 SYN 是同一时间触发的,一起发送更加高效。

b. 断开连接(四次挥手)
在这里插入图片描述
如果服务器端发出的 ACK 丢了,但是 FIN 被收到了(印证了服务器端已经收到了客户端发出的 FIN),不会触发超时重传机制。

PS:注意 TIME_WAIT 和 CLOSE_WAIT 状态
TIME_WAIT:主动断开连接的一方进入 TIME_WAIT 状态。
此时四次挥手的过程已经完成,但是不能立即释放连接,而要以此状态保持一段时间(2 MSL),确保另一方收到 ACK 之后,再断开连接。
如果服务端没有收到客户端发送的 ACK, 会触发超时重传 FIN 数据。单方传输时间限制是 1 MSL,因此客户端等待的时间是 2 MSL。
CLOSE_WAIT:服务器端若没有调用 close 方法,会导致四次挥手只挥两次,从而使连接不能正常关闭。
一旦发现服务器上出现大量的 CLOSE_WAIT,说明发生了 bug,有文件泄漏的可能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值