IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 后端开发【一大波有用知识】tcp/ip定时器与滑动窗口详解 -> 正文阅读

[网络协议]后端开发【一大波有用知识】tcp/ip定时器与滑动窗口详解

为什么udp有包长,而tcp没有包长。

首先,send()发送一次发送1k,发送一次缓冲区满了就会返回-1。2k发送出去后缓冲区被清空,send()才会被再次调用。最大传输片会打印四个包发送。而最大传输单元是在数据链路层对网卡的一些限制,如果mss大于mtu时候就会被分割,而mss小于mtu时候就会直接发送。所以udp需要包长,而tcp不需要因为mss+tcp包头就可以完成不需要包长。具体点说,就是帧需要,加上512,可以将包长进行计算出,这里不做重复的事减轻了很多后续工作。

  • 发送1m的文件

  • sendbuf 2k

  • mss(最大传输片)=512,mss是在包头的option中设置的。

  • mtu(最大传输单元)=1500

协议头分析

  • ACK表示确认

  • PSH表示应用程序发来数据赶紧处理呀宝贝

  • RST表示告诉对端你的数据不合法,重置

  • SYN表示同步头

  • FIN表示古德拜啦~断开前兆

慢启动的问题

?对数增长慢启动后,线性增拥塞控制,最后是要快速重传。

进入弱网环境,rtt(数据包往返)出现很长时间,这就叫抖动。

rtt=0.1rtt(new)+0.9rtt(old)这是一个消抖的过程,通信专业知识,有时间应该去学学一下研究通信啦!得出的值就可以判断是否超时。当然了,拥塞避免增长速度肯定是没有慢启动指数增长的快,但是面积大,面积就是传输的数量,所以拥塞避免是为了保证传输的量更加大。

如果接收端缓冲区buffer满了,但是没有丢失数据,还会发吗?会

就不会发了呀宝贝。回应上写的windows为0。服务端的recvbuf和回应客户端返回的window完全是两个不同的概念,但是两个值会一直接近。

如果服务器端recvbuf从无到有,如何告诉客户端我有空间了呢?

服务器主动告诉客户端,我的recvbuf不为0

客户端轮询

第一种服务器主动告诉客户端,优点是实时性比较好,但是缺点是发生丢包怎么办?将会陷入死锁的状态。如果做一个定时器会不会好一点?可是客户端关机了怎么办?

**TCP的做法是什么呢?

当服务器recvbuf为0的时候,客户端主动轮训发送探测包,服务器的有空间吗?服务器被动的回。

**

如果服务器主动发送回复客户端,客户端不回服务器多次发送可以不?做法是可行的,但是违背了原则,毕竟服务器也不愿意当舔狗,主动向全世界客户端宣布爱你。

滑动窗口的运行机制

两个指针表示收尾,第三根指针作为成功接收否的标记指针,尾指针后面的接收的指针不处理。

?TCPkeepalive和应用层keepalive,应用层的keepalive可控性更强,而TCPkeepalive很笨,有点像小刘同学嘎嘎幸亏她不知道要不然肯定会打我,应用层你感知不到好难受。

C++后台开发系统学习地址:C/C++Linux服务器开发高级架构师/C++后台开发架构师?

以下学习资料,C++后台开发面试题,教学视频,C++后台开发学习路线图,免费分享有需要的可以自行添加:学习资料群720209036 进去自取

问答环节

Q1:tcp利用send函数发送数据发现数据丢失了,需要在应用层对丢包重传处理吗?

答:利用tcp传输数据,发送数据是一定会发送到对端网卡。如果你发生丢包,那要注意send()返回值是为-1,应用层处理业务逻辑有问题。往往错误都是一些低端的错误。

Q2:滑动窗口的尾指针后面组织准备接受数据的状态,这是哪里在组织,操作系统吗?

答:是tcp协议组织的。

Q3:如图,当客户端有多个数据包同时发送给服务器,发送中途状态服务器的recvbuf满了,服务器需要立刻通知客户端吗?还是要等一个阶段的数据发送的差不多了再告诉客户端有一部分数据未接收成功?目前看来,这个状况是服务器性能问题,所以不会进入快速重传状态对吧?

答:要发送多少,是接收端返回数据。接收端接收数据数据以后,会回ack,ack里面就会确定,还能接受大小。

参考资料

Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:53:50  更:2022-04-09 18:54:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/31 4:34:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码