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

这篇具有很好参考价值的文章主要介绍了【计算机网络】传输层协议——TCP(下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 拥塞控制

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

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

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


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

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


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

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

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

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


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


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


慢启动

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

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

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

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


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


滑动窗口最终大小

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

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

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

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


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


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


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

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

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

2. 延迟应答

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

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

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

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


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

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

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


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

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

3. 粘包问题

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

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


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

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

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

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

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

4. TCP异常情况(面试题)

进程终止

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

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


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

机器重启

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

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

网线断开

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

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

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

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

5. 全连接队列

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

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


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

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


【计算机网络】传输层协议——TCP(下),计算机网络,计算机网络,tcp/ip如:假设你是一个海底捞服务员,里面已经坐满人了 当有客人来询问时,你要是说已经满了,去其他地方就餐吧,客人就走了 但是极有可能再过几分钟时,里面有位置了,对应的桌椅 就要空闲几分钟

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

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

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

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


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

队列不应该太长,将维护队列的成本嫁接到服务器上面,让服务器有更大的吞吐量文章来源地址https://www.toymoban.com/news/detail-713551.html

到了这里,关于【计算机网络】传输层协议——TCP(下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [计算机网络]深度学习传输层TCP协议

    💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录专栏:深度学习传输层TCP协议 🎉欢迎大家点赞👍评论📝收藏⭐文章 TCP全称为\\\"传输控制协议(Transmission Control Protocol\\\"),要对数据的传输进行⼀个详细的控制; 端口号(Port):标识了⼀个主机上进行通信的不同的应用程序; 端口号范围划

    2024年02月20日
    浏览(115)
  • 【计算机网络】TCP传输控制协议——三次握手

    一开始,客户端和服务端都处于CLOSE状态,先是服务端监听某个端口,处于LISTEN状态。 然后客户端主动发起连接SYN,之后处于SYN-SEND状态。 服务端收到发起的连接,返回SYN,并且ACK客户端的SYN,之后处于SYN-RECV状态。 客户端收到服务端发送的SYN和ACK之后,发送ACK的ACK,之后处

    2024年02月09日
    浏览(49)
  • 计算机网络笔记:TCP协议 和UDP协议(传输层)

    TCP 和 UDP都是传输层协议,他们都属于TCP/IP协议族。 TCP的全称是 传输控制协议 是一种 面向连接的、可靠的、基于字节流 的 传输层 通信协议。TCP 是面向连接的、可靠的流协议(流就是指不间断的数据结构) TCP报文 是TCP层传输的数据单元,也称为 报文段 ,一个TCP报文段由

    2024年02月02日
    浏览(53)
  • 【计算机网络】TCP|IP协议

    目录 前言 什么是TCP/IP协议? TCP/IP协议的层次结构 TCP/IP协议的工作原理 TCP/IP协议的重要性 结语   TCP/IP协议是当今互联网世界中最重要的网络协议之一,它是网络通信的基石,为数据在网络中的传输提供了可靠性和有效性。本文将深入探讨TCP/IP协议的重要性、基本原理以及其

    2024年02月03日
    浏览(60)
  • 计算机网络—网络原理之<TCP/IP 五层协议 >图解+详述

    当应用程序间需要进行网络通讯,在 TCP/IP 五层协议的应用层需要做的工作是,程序员 自定义应用层协议 。 当前要开发一个关于“点外卖软件”的一个项目,其中有一个功能为:获取用户的订单历史(后端服务器从数据库中取出数据返回给前端页面),类似像这样的功能,

    2024年02月07日
    浏览(62)
  • 计算机网络参考模型(OSI七层与TCP/IP协议)

    目录 1 为什么要分层 1.1 层次划分的必要性 1.2 层次划分的方法 1.2 层次划分的优点 2 七层和四层的定义 2.1 七层的介绍 2.1.1 OSI七层参考模型 2.1.2 OSI七层工作原理 2.1.3 PDU 2.2 四层的介绍 2.2.1 TCP/IP 参考模型 2.2.2 TCP/IP协议族的组成 2.2.3 数据封装和解封过程 2.2.4 设备与层的对应

    2024年02月08日
    浏览(55)
  • 计算机网络之TCP/IP协议第一篇:网络基础知识

    😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824   📚📚  工作微信:BigTreeJava 拉你进微信群,免费领取! 🍎🍎4:本文章内容出自上述:Spring应用课程!💞💞

    2024年02月09日
    浏览(66)
  • 计算机网络笔记:计算机网络体系结构(OSI七层模型、TCP/IP五层协议)

    计算机网络是一个复杂的、具有综合性技术的系统,它由计算机系统、通信处理机、通信线路和通信设备、操作系统以及网络协议等组成。为了更好地描述计算机网络结构,使计算机网络系统有条不紊地处理工作,需要定义一种较好的网络体系结构。分层结构就是一种较好地

    2024年02月07日
    浏览(55)
  • 【计算机网络】网络协议五层模型下的各层数据传输的结构(以TCP包为例)

    1.应用层      应用层的数据就是我们写的代码的内容。比如我要传一个字符串 “hello wolrd” 到目的主机,那么 报文M 就表示的是 hello world 的二进制(0 1)形式。      应用层就是我们主机的应用程序的那一层。比如你用 visual studio运行了你写好的代码程序,正在运行的代

    2024年02月03日
    浏览(50)
  • 【网络】- 计算机网络体系结构 - OSI七层模型、TCP/IP四层(五层)协议

    但凡学习计算机网络知识,肯定绕不过网络协议的,而说的计算机网络协议,总是会听到 OSI七层模型 、 TCP/IP四层协议 ,有些文章又会说成是 TCP/IP五层协议 ,刚入门学这些网络协议时,给我整得一愣一愣的。 这篇文章的目的就是把计算机网络体系的这几个协议给尽可能讲清

    2024年02月03日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包