我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【计算机网络】传输层协议——TCP(下)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【计算机网络】传输层协议——TCP(下)

文章目录

整个网络中的所有主机和设备 遵守的是 TCP/IP协议

如: 一个班中有30个人,进行考试,只有2个或者3个人挂科了,这很正常
但若只有2个或者3个人过了,其他人都挂科了,就很不正常

同样是挂科,挂少和挂多 是不同的事情


当主机A给主机B发送消息时
若发送1000个报文,只有1个或者2个人丢失了,就认为算是正常丢包,进行超时重传 补发数据即可


发送1000个报文 丢失 900多个,主机A绝对不认为是自己发送的问题,认为是网络的问题

把网络出现的潜在问题的状态 称为 网络拥塞

当处于网络拥塞时,会影响网络覆盖的所有主机,不仅主机A出现大量丢包,其他主机也会出现大量丢包


大量丢包时,发送方的发送策略是什么?
先减少发送量
1. 给网络继续有缓冲的时间
2. 给所有主机继续摸清楚网络的严重情况


如果出现网络拥塞,则需保证
1.保证网络拥塞不能加重
2. 在网络拥塞有起色的情况下,尽快恢复网络通信


慢启动

TCP引入 慢启动 机制,先发少量的数据,摸清当前网络拥堵状态,再决定按照多大的速度传输数据

当前判定网络拥塞了,主机A向主机B发送一个报文,先进行询问,若收到应答,则主机A再发送两个报文向主机B
若再收到应答,则 主机A发送4个报文,依次类推
若能收到应答,则下次发送当前2倍的报文数量
若收不到应答,收到主机A给主机B发送的报文过不去,当前发送的数据量就能直观反映出网络拥塞的严重程度

报文从发送1个、2个、4个,叫做 网络状态的探测


拥塞窗口 可以看作是 发送方主机,衡量网络健康状态的指标
需要借助 拥塞窗口,来衡量 网络拥塞的严重程度
当发送超过拥塞窗口大小的报文时,可能会出现网络拥塞的情况


滑动窗口最终大小

滑动窗口 = min(对端主机的接收能力win ,网络的拥塞窗口)
一次向对端发送的数据量,取决于 对端主机的接受能力与网络拥塞窗口的最小值

所以最开始时,拥塞窗口为1,每收到一次ACK应答,拥塞窗口加1
每次发送数据包时,将拥塞窗口和接收端主机反馈的窗口大小作比较,取较小值作为实际发送的窗口

为什么采用指数增加的方案,来设计对应的拥塞窗口的增加速度?

如:有一个地主,有很多的房子,手下有一个佃农,租地主的房子
佃农欠了地主一年多的房租,有一天地主向佃农讨要房租
佃农就开始诉苦,想要等把粮食卖了再还
地主不同意这种做法,然后出了一个看似很好的方法给佃农
地主告诉佃农,今天给我一粒米,明天给我两粒米,每次按照指数增加 给我一个月就算把房租还上
佃农一听非常高兴,就同意了这种做法
可佃农刚给了十天不到,就发现自己给不起了


这种增加特点为 前期很慢,一旦过了临界点后,增加速度就非常快
所以慢启动只是前期慢,但是增张速度快


地主一想,这样一直指数增长上去,佃农也还不起,压榨有些过头了
所以地主就换了一种偿还方式,前期还是指数增加还,还到一定程度就用这么还了,按照线性增长还即可
如:还到1w后,每次只需固定增加1000即可


为了不增加那么快,因此不能使拥塞窗口单纯的加倍
引入一个慢启动的阈值
当拥塞窗口超过整个阈值,不再按照指数方式增长,而是按照线性方式增加

刚开始 由于是慢启动,以指数增加,增长速度很快,当达到 慢启动的阈值(ssthresh)时,不在以指数增加
而是以线性方式增加,当拥塞窗口大小探测到24时, 发现造成 网络拥塞
慢启动的阈值变为原来的一半,变为新的ssthresh值
同时 拥塞窗口被置为1,重新按照指数增长,当再次到达新的 慢启动的阈值时,再次以线性方式增加

将数据从发送缓冲区 拷贝到接收缓冲区

作为接收方,通过应答 通告给对方 更大的 报头的窗口 ,从而进一步提高发送方的发送效率

对方就会更新出更大的滑动窗口


只要当把接收方的数据尽快向上层交付,才能使接收缓冲区的剩余空间 更多,即 报头的窗口更大

所以给接收方的上层更多的时间进行读取
1.让它在这段时间内,尽快读取
2. 若一直在读,读取更多


所以引入了 延迟应答 的概念,在不超过它的超时时间的范围内,等待一会,再应答
延迟应答的本质 是提高效率

一般延迟应答 有两者延迟策略
1. 数量限制 :每隔N个包就应答一次
2. 时间限制:超过最大延迟时间就应答一次

并不清楚对方是如何发的,TCP面向字节流,收发不直接相关,别人如何发的并不清楚
要保证 读到一个完整的报文
要么读一个,要么读多个,但每一个都可以分开,这样才可以对应用层报文正确处理

读取时,对下一个保文,多读或者少读的情况,称为数据包的 粘包问题


如: 假设你家蒸了包子,刚出了一锅包子,你饿的不行,伸手就去拿
此时拿到的包子可能是半个包子,也可能一下拿了好几个
因为包子与包子之间是粘在一起的

所以正常把包子蒸好后,立马把包子一个个的分开,此时再去拿包子就是一个个的了
把包子分开 可以看作是解决数据包的粘包问题

粘包问题的本质 :明确包子之间的边界

方案1
采用定长报头,发送方基于套接字 基于应用层 发送的报文大小都是定长的(1024、4096)
所以对方在读取数据时,必须在(1024)4096个字节下读取,读不到不往上交付

方案2
在报文与报文之间添加特殊符号
如:在报文与报文之间用 空格 作为分隔符

进程终止

将链接建立好了,客户端的进程与服务端的进程 使用对应的文件描述符
使客户端和服务器 双方进行通信
若通信双方有一方的进程直接崩掉了,那维护的链接怎么办?

一个进程曾经申请了很多资源,最终进程挂掉了,进程所申请的内存不在了
进程的PCB 地址空间等都被操作系统管理着
操作系统在创建进程时,申请资源,当进程崩溃了,操作系统要将对应的资源回收


所以当进程退出时,该进程通过系统调用创建的链接或文件,会被操作系统自动关掉

机器重启

当打开画图板时,若不关闭画图板,而直接将电脑关机,此时操作系统就会提示,当前系统中还有正在运行的进程,是否要终止
若点击是,则关机之前,先会把进程杀掉
关机之前,进程首先将自己的资源回收

所以在服务里启动 更多的进程,关机时,时间会更久一点
关机之前 会自动进行四次挥手,把链接全部断开,进程全部杀掉

网线断开

客户端和服务器在正常通信,双方正在收发消息,把客户端的网线拔了
当客户端打开浏览器访问某一个页面时,浏览器会立马识别到页面发生变化了,无法正常工作

说明拔网线这种硬件行为,可以被本地的操作系统识别

底层网络出现问题,对应的链接在客户端上,操作系统能识别到网络无法正常通信,所以链接维护就没有意义, 操作系统可以做到把链接直接关掉

服务器是不知道网线被拔了,就出现了 链接状态 认知不一致的问题
服务器有对应的保活策略,定期问客户端的TCP链接,是否活着,若没有应答,会把链接关掉

TCP协议,需要在底层维护,全连接队列,最大长度是 listen函数的第二个参数+1
如:listen函数的第二个参数为1,则最多连接成功2个


若再有连接,则服务器都会处于 SYN_RECV状态
若服务器长时间不处理ACK,因为上层一直有两个连接存在,所以服务器压力很大
所以会维护一点时间,若还是完成不了三次握手,该链接会被释放掉

全连接:已经处于连接成功状态,还未来得及被上层取走


如:假设你是一个海底捞服务员,里面已经坐满人了 当有客人来询问时,你要是说已经满了,去其他地方就餐吧,客人就走了 但是极有可能再过几分钟时,里面有位置了,对应的桌椅 就要空闲几分钟

所以就推出了让客人排队的方式
此时再有客人来询问,你就可以告诉他,里面已经满了,但是再过几分钟就有位置了,可以排队等待下
这样就可以使座椅的利用率达到百分百

要排队的理由 就在于 要 时时刻刻保证自己餐厅内部资源的使用率是百分百

结论:
海底捞不能没有外部排队

全连接队列不能没有,当服务器内部有一些客户退出了,把对应的网络资源腾出来了,立马在底层把连接获取上来
对外提供服务,不会让服务器处于空转的情况


若海底捞的老板,在外面安排非常多的座位,用于客户排队,但排很长的队,客户是不愿意的
有这些座位的钱还不如 将餐厅扩大一些

队列不应该太长,将维护队列的成本嫁接到服务器上面,让服务器有更大的吞吐量

来源地址:https://blog.csdn.net/qq_62939852/article/details/133012268

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【计算机网络】传输层协议——TCP(下)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【网络原理】应用层协议 与 传输层协议

✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 目 录 🏉一. 应用层协议⚾️二. 传输层协议👒1. UDP 协议
2023-08-18

网络传输模型/TCP协议/IP地址

基本模型层次划分需要说明的是在网络传输层TCP可靠而UDP不可靠传输层说明说明一: 作为Python开发,咱们都是在应用层的HTTP协议之上进行开发的。说明二: 网络编程,主要是了解我们Python能编写的最低的层次, 即传输层的基本情况。
2023-01-30

2021下半年网络工程师高频考点:传输层协议

  为帮助大家备考2021下半年网络工程师考试,今天编程学习网小编为大家整理了2021下半年网络工程师高频考点:传输层协议,希望对大家备考会有帮助。  考点21、传输层协议  【考法分析】  本考点的基本考法是UDP和TCP协议特点、了解TCP首部中的各个字段含义,掌握常见应用所使用的传输层端口号。  【要点分析】  1、
2021下半年网络工程师高频考点:传输层协议
2024-04-19

计算机网络中提供不可靠的数据传输协议是php吗

这篇文章主要介绍了计算机网络中提供不可靠的数据传输协议是php吗,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。提供不可靠的数据传输协议不是php,而是udp;udp是Inte
2023-06-15

计算机网络中路由选择协议位于哪一层

这篇文章将为大家详细讲解有关计算机网络中路由选择协议位于哪一层,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。路由选择协议位于网络层。当一个计算机发送一个分组时,在网络上网络协议栈的每一层都附加一些信息给它
2023-06-20

计算机网络之十二:HTTP协议

一:HTTP简介HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet En
2023-06-04

计算机网络之十三:HTTPS协议

一:对称加密在对称加密算法中,加密和解密使用的密钥是相同的。二:非对称加密在非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的。一是作为公开的公钥,一是作为谁都不能给的私钥。三:数字证书1.数字证书简介数字证书是互联网通信中标志通信
2023-06-04

计算机网络中常用的应用层协议包括哪些

这篇文章主要为大家展示了“计算机网络中常用的应用层协议包括哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“计算机网络中常用的应用层协议包括哪些”这篇文章吧。网络协议指的是计算机网络中互相通信的
2023-06-15

了解计算机网络协议的原则与要素两者

  计算机网络协议是有关计算机网络通信的一整套规则,或者说是为了进行数据交换而制订的规则、约定和标准。网络协议由语法、语义和时序三大要素组成。现在就跟着小编共同来学习一下:了解计算机网络协议的原则与要素两者。  想必不需要小编多说,大家都应该知道一点,那就是不管是做事亦或是做人,我们都需要有一个规则来约束我们。在这一个
了解计算机网络协议的原则与要素两者
2024-04-18

23张图详解路由协议:计算机网络的核心技术

在 TCP/IP 通信中,网络层的作用是实现终端的点对点通信。IP 协议通过 IP 地址将数据包发送给目的主机,能够让互联网上任何两台主机进行通信。IP 地址可以识别主机和路由器,路由器可以把全世界的网络连接起来。

win10此计算机缺少一个或多个网络协议如何解决

今天小编给大家分享一下win10此计算机缺少一个或多个网络协议如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。根据不同
2023-07-01

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录