计算机网络之TCP协议详解

系列文章目录

第一章 计算机网络之http协议详解
第二章 计算机网络之https协议详解
第三章 计算机网络之TCP协议详解


文章目录

  • 系列文章目录
  • 前言
      • TCP 传输控制协议
        • TCP的封装格式
        • 三次握手
        • 四次断开/四次挥手
        • 计时器
          • 重传计时器——为了控制丢失的数据段
          • 坚持计时器——为了防止零窗口死锁
          • 保活计时器——防止两个TCP之间的连接长时间的空闲
          • 时间等待计时器
        • TCP的流控机制
          • 滑动窗口——网络不堵的情况
          • 拥塞窗口——拥塞控制
        • 差错控制
          • 效验和


前言

TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层协议。它提供了数据传输的可靠性和有序性,并能够进行流量控制和拥塞控制。TCP的特点是通过三次握手建立连接,通过四次挥手结束连接;数据传输时采用滑动窗口机制,保证数据的可靠性;同时具有拥塞控制和流量控制的功能,在网络中起到了重要的作用。TCP常被用作应用层协议(如HTTP、FTP等)的底层传输协议。——by chatgpt

tcp协议学就完了,伙计。


TCP 传输控制协议

——Transmission Control Protocol

可靠的、面向连接的协议

传输效率低

面向连接体现在:三次握手、四次断开

可靠性体现在:序列号、确认号、计时器(包括重传、保活、时间等待等)

TCP的封装格式

tcp的封装格式

  • 序列号:数据段标记,用于到目的端对到达包重组
    确认号:告诉发送端这个序号之前的数据段都收到了
    控制位:
    URG:紧急指针有效位,与16位紧急指针配合使用 --urgent
    ACK:确认号,确认时为1 --acknowledgement
    PSH:通知接收端立即将数据提交给用户进程,不在缓存中停留,等待更多的数据 --push
    RST:重置,为1时请求重新连接 --reset
    SYN:同步,为1时请求建立连接 --sync
    FIN:断开,为1时请求断开连接 --FIN
    滑动窗口:指明本地可接收数据的字节数,最多65535

三次握手

一般都是客户机发起,但也有例外,如webhook:将信息推给用户

简述TCP协议的三次握手以及为什么2次握手不行_必看吧的博客-CSDN博客

seq为序列号,ack为确认应答号,等于收到报文段的seq+1

客户端和服务器各自有一个随机的初始序列号

第三次握手时,SYN=0,seq虽然+1,但因为ACK报文段没有携带数据所以并不会消耗序号,下一个数据报文段的序号仍然是seq=x+1

​ ack包携带序列号,但不携带数据就不占用序列号,不需要回复的包 基本不占用序列号

  • 对于序列号:单调递增,初始序列号随机生成ISN=M+md5(四元组),M与操作系统有关,一般单调递增,便于区分前后请求包

    ​ 后面的ISN=初始序列号+第一个字节偏移量,即第n个包的ISN-第(n-1)个包的ISN=第(n-1)个包的字节数

    ​ 随机初始序列号是从安全性出发,黑客不会那么容易猜到ISN,防止其伪造一些确认序列包,从而对服务器发起攻击

    ​ 序列号会回绕 ,到达尽头的时候,序列号会从0开始

为什么需要三次握手,而不是两次?
三次握手才能确立两方都已经准备好了,
如果两次握手,客户端没有收到来自服务器端的syn+ack包,而服务端又已经发送了
那服务端认为我发了,客户端认为服务器没有发送,最后可能要等到客户机重传计时器时间到了才能重新建立连接,或者客户机中断了等待,那服务器一直等着,就会形成死锁,当然服务器也会等待一定时间后自动断开,但还是浪费了许多服务器资源

四次断开/四次挥手

客户机和服务器都可以发起断开

四次断开

2MSL:2倍最长报文段寿命 --Maximum Segment Lifetime

​ 不同的系统可能不同,而且有时候理论上最长4分钟左右,但实际上可能也就一分多钟

为什么不是3次,是4次?

服务器可能还有数据没发完

当我们连接上nginx服务的网站,点击关闭网站后,是谁主动发起四次断开?

服务器端

当我们关闭网站时,客户机并不知道,也并不会发起断开

当服务器的保活计时器超时时发出探测数据段都没有回应时,服务器发起断开

计时器

重传计时器——为了控制丢失的数据段

发送方在重传计时器超时之前没有接收到ack,重传数据,并将重传计时器复位,超时前收到就撤销重传计时器

坚持计时器——为了防止零窗口死锁

用于处理TCP发送端的流量控制​ ——Persist Timer

当TCP发送方向接收方发送数据时,如果接收方的接收缓冲区已满,那么发送方就不能继续发送数据,否则数据包会被丢弃。为了避免这种情况,TCP发送方会定期发送一个只包含一个字节的特殊探测报文段(也称为Keep-Alive报文段),以检测接收方的接收窗口是否已经打开。如果发送方在等待接收方发送窗口更新时过长时间没有收到任何响应,那么它就会启动坚持计时器。坚持计时器定期发送探测报文段,直到接收方响应为止,从而确保在连接处于空闲状态时也能保持连接的状态。

保活计时器——防止两个TCP之间的连接长时间的空闲

server端在保活计时器超时前没有收到客户端发来的数据,就发送探测数据段,发了 10 个还没响应就断开连接

centos的nginx配置一般为65秒

时间等待计时器

连接中止期间使用,在发送最后一个ACK之后,不立即断开连接,而是等待一段时间(2MSL),保证能够接收到重复的FIN数据段

TCP的流控机制

滑动窗口——网络不堵的情况

指本机缓存里能接受多少数据

Win,滑动窗口的大小,指明本地可接收数据的字节数

当缓冲区满了就不在接收数据,

拥塞窗口——拥塞控制

是中间的传输网络的带宽的反馈

Cwnd --crowd 拥挤

四个算法:慢启动、拥塞避免、拥塞发生、快速恢复

拥塞控制

1-5分别是慢启动、拥塞避免、拥塞发生、拥塞避免、快速恢复

慢启动只是开始没,但会指数增长

差错控制

效验和

效验和不对就丢掉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/53414.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ROS-Noetic版本的安装(Ubuntu20.04环境)

ROS安装: 关于ROS的安装已经有很多好的博文供以参考,本文总结了一些安装过程中可能出现的报错情况已经解决方法。许多博文的教程步骤大差不差,建议是直接先按照官方步骤走,遇到问题再一步步解决。 ROS官方的参考链接: …

【机器学习】pytorch安装——环境配置(极简教程)

🥑 Welcome to Aedream同学 s blog! 🥑 文章目录 省流总结新建环境确定显卡型号安装显卡驱动安装pytorch国内镜像下载本地下载 验证安装成功 最近重新配置环境,简单记录一下。最近chatgpt等大语言模型和ai绘图火热,也为了方便很多…

淘宝天猫重组换血,原核心高管离职;Google Bard 大更新,数学和逻辑能力有所提升;K8s 1.27 发布|极客头条...

「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews) 一分钟速览新闻点&#…

【Redis】缓存一致性

文章目录 缓存一致性读缓存**双检加锁**策略 写缓存保障最终数据一致性解决方案先更新数据库,再更新缓存案例演示1->更新缓存异常案例演示2->并发导致 先更新缓存,再更新数据库案例演示->并发导致 先删除缓存,再更新数据库案例演示-…

Composer - 学习/实践

1.应用场景 熟练使用composer快速构建php web应用, 弄秦楚composer的基本工作原理. 2.学习/操作 文档 php三种工具pecl pear composer的区别_会飞的鱼的博客-CSDN博客_php-pear Composer 2.0 is now available! // Composer 2.0 is now available! 介绍 A multi-framework Co…

解读最佳实践:倚天 710 ARM 芯片的 Python+AI 算力优化 | 龙蜥技术

编者按:在刚刚结束的 PyCon China 2022 大会上,龙蜥社区开发者朱宏林分享了主题为《ARM 芯片的 PythonAI 算力优化》的技术演讲。本次演讲,作者将向大家介绍他们在倚天 710 ARM 芯片上开展的 PythonAI 优化工作,以及在 ARM 云平台…

解读最佳实践:倚天710 ARM芯片的 Python+AI 算力优化

编者按:在刚刚结束的 PyCon China 2022 大会上,龙蜥社区开发者朱宏林分享了主题为《ARM 芯片的 PythonAI 算力优化》的技术演讲。本次演讲,作者将向大家介绍他们在倚天 710 ARM 芯片上开展的 PythonAI 优化工作,以及在 ARM 云平台…

论文笔记:AugGPT: Leveraging ChatGPT for Text Data Augmentation

AugGPT:利用 ChatGPT 进行文本数据增强 摘要1 介绍2 相关工作2.1 数据增强2.2 小样本学习2.3 超大型语言模型2.4 ChatGPT:现在与未来 3 数据集3.1 亚马逊数据集3.2 症状数据集3.3 PubMed20k数据集 4 方法4.2 使用 ChatGPT 进行数据增强4.3 小样本文本分类…

好用的文献阅读插件(Easy Scholar、EasyPubMedicine、Sci-Hub X Now!)

目录 一、Easy Scholar 二、EasyPubMedicine 一、Easy Scholar Easy Scholar:自动显示期刊等级,帮助筛选优质论文。 安装: 点击浏览器右上角的“。。。”,选择“扩展”。 点击打开加载项 在浏览器的扩展商店中搜索“easy sch…

Zotero 6 文献管理 + 内置PDF阅读器 + 选中翻译

本来想叫《还在用知云?zotero 6内置PDF阅读器了 还带翻译插件的!》,想了想还是算了,不要做标题党,回归我朴实无华的标题吧。 如果你会用zotero只是来看翻译功能的,那你继续往下看。如果你还不会用zotero&a…

[科研神器]如何让ChatPDF帮你日读文献300篇

今天介绍一个新的工具ChatPDF,简直是读文献的绝对生产力啊。 我们要做的就是把PDF文件上传给它,让它帮你读,它会在几分钟内概述和理解整个文档你只需要提问就可以,而且支持中文。 ChatPDF的网址是:https://www.chatp…

【3款文献阅读的插件】

目录 01 easy Scholar 02 EasyPubMed 03 Sci-Hub X Now! 04 总结 重要事情说三遍:这个不涉及翻墙,这个不涉及翻墙,这个不涉及翻墙!!! 01 easy Scholar 点击下载文件,修改后缀名为zip文件&a…

文献阅读软件

文献阅读软件 上次对文献管理软件做了介绍,接下来对文献阅读及笔记整理软件进行介绍。 文献的基本格式是PDF,因此文献阅读软件的基本就是PDF阅读器,知网文献有专门的格式,没什么额外选择。因此,本文主要介绍的是PDF的…

文献阅读神器 ReadPaper

在以前我阅读文献的都是用的WPS,很多小伙伴用知云,但是今天我开始用ReadPaper了😄 推荐理由: 1.直接跳转参考文献 在一篇论文中参考文献,ReadPaper可以直接跳转阅读,不需要再去复制论文名字-搜索了。 就…

Python 带你花式过情人节

阅读文本大概需要 5 分钟。 一年 N 度的情人节又又又又又到了!有对象的人在享受着甜蜜的烦恼:今天 ta 会送我什么礼物?今天晚上去哪里度过?今天去哪里一起吃饭过节呢?啊!ta 竟然送我这么贵的礼物&#xff0…

这个情人节如何过得不一样?快来看哪个国家才是全球浪漫目的地 | 美通社头条...

美通社消息:这个情人节如何过得不一样?爱彼迎近期发布全球浪漫目的地,邀请情侣们住进令人怦然心动的房源,奔赴一场倾心已久的旅程。爱彼迎数据显示,泰国、马来西亚、菲律宾、巴西、南非等目的地,满足了情侣…

得分逼近ChatGPT,人类难以分辨!开源「原驼」爆火,iPhone都能微调大模型了

梦晨 发自 凹非寺来源 | 量子位 QbitAI 自动测试分数达到ChatGPT的99.3%,人类难以分辨两者的回答…… 这是开源大模型最新成果,来自羊驼家族的又一重磅成员——华盛顿大学原驼(Guanaco)。 更关键的是,与原驼一起提出的…

分享基个珍藏已久的良心网站,个个都很好用

推荐一:Poki 这几天4399要实名制了。玩起来挺麻烦的,还是换成Poki吧。也是一个收集游戏的网游网站,种类很多,有军事游戏,有动作游戏,有冒险游戏等等,我最喜欢的是公主换装游戏。 感觉瞬间回到…

GPT 4.0 你知道的和你不知道的?

GPT 4.0 人工智能聊天机器人 介绍GPT 4.0之前,先给大家介绍一下整理的一个类ChatGPT相关的工具,有可以总结论文的、微软作图的、反ChatGPT检测的、数据标注的等等工具,感兴趣的小伙伴可以访问:github链接 言归正传 今天我们主要…

【OpenAI 多模态预训练】VideoGPT?微软透露GPT-4或将在下周发布

【多模态预训练】VideoGPT?微软透露GPT-4或将在下周发布 先让我猜个名字,VideoGPT? 太绝了!看完ChatGPT之后就感觉OpenAI正在做多模态的预训练语言模型。万万没想到来的这么快。据介绍,GPT-4或将为多模态大模型&#…