(4)捎带应答
在延迟应答的基础上,很多情况下,客户端服务器在应用层也是一发一收的 。这时候常常采用捎带应答的方式来提高效率,而ACK响应常常伴随着数据报文共同传输 。如:三次握手 。
TCP如何处理拥塞
网络拥塞现象是指到达通信网络中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象 。拥塞控制是处理网络拥塞现象的一种机制 。
拥塞控制的四个阶段:
慢启动
拥塞避免
快速重传
快速恢复
Socket
基于TCP协议的客户端和服务器工作:
文章插图
服务端和客户端初始化 socket,得到文件描述符
服务端调用 bind,将绑定在 IP 地址和端口
服务端调用 listen,进行监听
服务端调用 accept,等待客户端连接
客户端调用 connect,向服务器端的地址和端口发起连接请求
服务端 accept 返回用于传输的 socket 的文件描述符
客户端调用 write 写入数据;服务端调用 read 读取数据
客户端断开连接时,会调用 close,那么服务端 read 读取数据的时候,就会读取到了 EOF,待处理完数据后,服务端调用 close,表示连接关闭
listen 时候参数 backlog 的意义?
Linux内核中会维护两个队列:
未完成连接队列(SYN 队列):接收到一个 SYN 建立连接请求,处于 SYN_RCVD 状态;
已完成连接队列(Accpet 队列):已完成 TCP 三次握手过程,处于 ESTABLISHED 状态;
SYN 队列 与 Accpet 队列
int listen (int socketfd, int backlog)
参数一 socketfd 为 socketfd 文件描述符
参数二 backlog,这参数在历史内环版本有一定的变化
在早期Linux内核backlog是SYN队列大小,也就是未完成的队列大小 。在Linux内核2.2之后,backlog变成accept队列,也就是已完成连接建立的队列长度,所以现在通常认为backlog是accept队列 。但是上限值是内核参数somaxconn的大小,也就说accpet队列长度=min(backlog, somaxconn) 。
accept 发送在三次握手的哪一步?
我们先看看客户端连接服务端时,发送了什么?
客户端的协议栈向服务器端发送了 SYN 包,并告诉服务器端当前发送序列号 client_isn,客户端进入 SYNC_SENT 状态
服务器端的协议栈收到这个包之后,和客户端进行 ACK 应答,应答的值为 client_isn+1,表示对 SYN 包 client_isn 的确认,同时服务器也发送一个 SYN 包,告诉客户端当前我的发送序列号为 server_isn,服务器端进入 SYNC_RCVD 状态
客户端协议栈收到 ACK 之后,使得应用程序从 connect 调用返回,表示客户端到服务器端的单向连接建立成功,客户端的状态为 ESTABLISHED,同时客户端协议栈也会对服务器端的 SYN 包进行应答,应答数据为 server_isn+1
应答包到达服务器端后,服务器端协议栈使得 accept 阻塞调用返回,这个时候服务器端到客户端的单向连接也建立成功,服务器端也进入 ESTABLISHED 状态
从上面的描述过程,我们可以得知客户端 connect 成功返回是在第二次握手,服务端 accept 成功返回是在三次握手成功之后 。
客户端调用 close 了,连接是断开的流程是什么?
我们看看客户端主动调用了 close,会发生什么?
客户端调用 close,表明客户端没有数据需要发送了,则此时会向服务端发送FIN报文,进入FIN_WAIT_1状态
服务端接收到了 FIN 报文,TCP协议栈会为 FIN 包插入一个文件结束符 EOF 到接收缓冲区中,应用程序可以通过 read 调用来感知这个 FIN 包 。这个 EOF 会被放在已排队等候的其他已接收的数据之后,这就意味着服务端需要处理这种异常情况,因为EOF表示在该连接上再无额外数据到达 。此时服务端进入 CLOSE_WAIT 状态
接着,当处理完数据后,自然就会读到 EOF,于是也调用 close 关闭它的套接字,这会使得会发出一个 FIN 包,之后处于 LAST_ACK 状态
客户端接收到服务端的 FIN 包,并发送 ACK 确认包给服务端,此时客户端将进入 TIME_WAIT 状态
服务端收到 ACK 确认包后,就进入了最后的 CLOSE 状态
客户端进过 2MSL 时间之后,也进入 CLOSE 状态
推荐阅读
- 外贸代工协议?工厂里的订单都是怎么接到的?
- 张艺谋|冯小刚周星驰输了,张艺谋签1.5亿对赌协议,《满江红》只是起点
- 预定租房协议 订房协议
- 丰巢快递柜合作协议?丰巢快递柜是怎么收费的?
- 电子邮件传输协议的作用、?邮件服务器之间传送邮件通常使用什么协议?
- 2020优秀合伙销售协议范本 合伙经营利润分成协议
- 抢先看国内4大运营商详情 四大移动通信运营商
- 曝光三大通信运营商被约谈侵权内幕 三大运营商被约谈
- 2021年9月中国作家协议发起成立了文学联盟,中国现代十大作家有哪些?
- 红外通信的优缺点?红外通信技术的备特征点对成本有哪些影响?