[计算机网络]十、TCP的拥塞控制和4个计时器、常用协议原理和命令
目录
1、常用协议原理和命令
1.1、查找协议的端口号
1.2、arp协议
1.2.1、arp协议在工作的时候有2中类型的数据包
1.2.2、arp病毒的工作原理
1.3、TCP/IP详细图
2、TCP的流程控制
2.1、滑动窗口
2.2、拥塞控制
2.2.1、拥塞控制算法⭐⭐⭐
2.3、TCP的差错控制
3、计时器
3.1、重传计时器——为了控制丢失的数据段⭐⭐⭐
3.2、坚持计时器——为了防止零窗口死锁
3.3、保活计时器——防止两个TCP之间的连接长时间的空闲
3.4、时间等待计时器——连续终止期间使用的
4、TCP的应用
5、UDP的使用
5.1、UDP的封装格式
5.2、UDP的流控和差错控制
6、TCP/IP协议栈
1、常用协议原理和命令
要记住的协议:
- http(Hyper Text Transfer Protocol):超文本传输协议 。端口号:80
- https(Hyper Text Transfer Protocol Secure):安全超文本传输协议。端口号:443
http和https,可以理解为传输的内容是明文(http)和传输的内容是加密的(https)
- ftp(File Transfer Protocol):文本传输协议。端口号:21
- dns(Domain Name System):域名系统。端口号:53
- smtp(Simple Mail Transfer Protocol):简单邮件传输协议。发邮件的。端口号:25
- snmp(Simple Network Management Protocol):简单网络管理协议。端口号:161
- tftp(Trivial File Transfer Protocol):普通文件传输协议,大部分用udp工作。端口号:69
1.1、查找协议的端口号
[root@fttsaxf ~]# cat /etc/services|grep snmp # 查找端口号
snmp 161/tcp # Simple Net Mgmt Proto
snmp 161/udp # Simple Net Mgmt Proto
1.2、arp协议
arp协议(Address resolution protocol):地址解析协议;工作在网络层,端口号出现在传输层,所以arp协议没有对应的端口号。
日常中,先使用dns解析协议得到IP地址然后再用arp协议得到MAC地址。例如:www....-->ip-->mac
作用:将IP地址解析为MAC地址
图中的缓存表是arp缓存表
[root@fttsaxf ~]# arp -a # windows和linux的命令都是这个
? (192.168.29.1) at 00:50:56:c0:00:08 [ether] on ens33
gateway (192.168.29.2) at 00:50:56:ee:e5:6d [ether] on ens33
1.2.1、arp协议在工作的时候有2中类型的数据包
arp request(请求包)
arp response (响应包)
用封装的角度去理解,从网络层和数据链路层,牵扯到的设备有交换机、pc机和路由器
1.2.2、arp病毒的工作原理
arp病毒的危害:导致整个局域网里的主机找不到正确网关,从而导致不能上网
工作原理:伪造arp广播包,IP地址还是网关的,但是mac地址不是正确的网关的,因为交换机只查看mac地址。
如何防范?
设置静态的MAC-->IP对应表,不要让主机刷新你设定好的转换表。把电脑和网关的IP地址和mac地址互相绑定。
[root@fttsaxf ~]# arp -a
? (192.168.29.1) at 00:50:56:c0:00:08 [ether] on ens33
gateway (192.168.29.2) at 00:50:56:ee:e5:6d [ether] on ens33
[root@fttsaxf ~]# ip route
default via 192.168.29.2 dev ens33
169.254.0.0/16 dev ens33 scope link metric 1002
192.168.29.0/24 dev ens33 proto kernel scope link src 192.168.29.128
# -s,static 默认情况下arp缓存表的记录时动态更新的
[root@fttsaxf ~]# arp -s 192.168.29.2 00:50:56:ee:e5:6d
[root@fttsaxf ~]# arp -a
? (192.168.29.1) at 00:50:56:c0:00:08 [ether] on ens33
gateway (192.168.29.2) at 00:50:56:ee:e5:6d [ether] PERM on ens33
arp防火墙,可以帮助我们绑定
1.3、TCP/IP详细图
2、TCP的流程控制
2.0、引入
停止等待协议(发一个报文,停止发送,等待确认收到,然后继续发送。弊端:效率极低)和连续ARQ协议(弊端:怎么能够确定中间包收到了呢?客户端连读向服务端发送了三个包(1,2,3包),若是2号包丢了,那么服务端只会确认收到了1号包,即会收到最大的连续包的序号)
连续arq协议:分为退回n帧协议和选择重传协议
2.0.1、退回n帧协议
例如,如果发送方发送了前5个分组,而中间的第3个分组丢失了。这时接收方只是对前两个分组发出确认(采用的是累计确认方式)。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。这就叫做Go-back-N(回退N),表示需要再退回来重传已发送过的N个分组。可见当通信线路质量不好时,连续ARQ协议会带来负面的影响。这种效率很低的
2.0.2、选择重传协议(SR)
windows默认200毫秒确认一次。
[root@nginx-kafka02 ~]# cd /proc/sys/net/ipv4/
[root@nginx-kafka02 ipv4]# cat tcp_sack # 这就表示我们内核使用的是选择重传协议
1
# tcp_ack=1,表示开启了选择重传协议:记录有哪些包到了哪些没到,不需要重传丢失包及其之后的所有包。
2.1、滑动窗口
下面通过例子说明如何利用滑动窗口机制进行流量控制
2.2、拥塞控制
不拥塞情况
拥塞情况
中间链路带宽比较窄,传输时窗口大小根据拥塞窗口(记为Cwnd)的大小变为5。这样就提醒了前边的滑动窗口只发送小于或者等于5的数量的包过来,win的值是参考Cwnd的值来定的。
发送方的窗口大小=min(拥塞窗口,接收方发过来的win值)
图片因为链路的堵塞,丢包了,只接受到了102一个确认 (即只收到了seq=101的包)
2.2.1、拥塞控制算法⭐⭐⭐
TCP进行拥塞控制的算法有四个:
- 慢启动
- 拥塞避免:经过一个RTT时间就增加1
- 快重传
- 快恢复(出现了快重传就执行快恢复 )
对于ssthresh初始值,不同的操作系统和不同的操作系统内核都是不同的。
这样就能是数据传输达到最大的效率
2.3、TCP的差错控制
TCP差错控制的3种方式
- 校验和
- 确认
- 受损伤的数据段
- 丢失的数据段
- 重复的数据段
- 失序的数据段
- 确认的丢失
- 超时
这些机制就体现了TCP的可靠性。
3、计时器
- 重传计时器
- 坚持计时器
- 保活计时器
- 时间等待计时器
3.1、重传计时器——为了控制丢失的数据段⭐⭐⭐
3.2、坚持计时器——为了防止零窗口死锁
A收到win=0的确认,等待对方发送确认来通知窗口的大小,并启动坚持计时器。若是在坚持计时器超时之前接收到通知窗口大小的ack,那么A就继续发送后续的数据段;若是在坚持计时器超时之前没有接收到通知窗口大小的ack,那么A会发送探测数据段(这个报文段只有一个字节的数据,有一个序号,但它的序号永远不需要确认;甚至在计算对其他部分的数据的确认时该序号也被忽略。探测报文段提醒对方:确认已丢失,必须重传。),提醒接收端确认已丢失,如果没有坚持计时器和探测数据段,ack丢失时(我们知道TCP对于确认包是不需要发送确认的,若是确认包丢失了,接收TCP这边会认为自己已经完成任务了,就等待发送TCP发送报文段;但是发送TCP由于没有收到确认,就等待对方发送确认来通知窗口的大小),双方会进入等待死锁的状态。
3.3、保活计时器——防止两个TCP之间的连接长时间的空闲
设想有这样的情况:客户已主动与服务器建立了TCP连接。但后来客户端的主机突然出故障。显然,服务器以后就不能再收到客户发来的数据。因此,应当有措施使服务器不要再白白等待下去。这就是使用保活计时器。服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两小时。若两小时没有收到客户的数据,服务器就发送一个探测报文段, 以后则每隔75秒钟发送一一次。若一连发送10 个探测报文段后仍无客户的响应,服务器就认为客户端出了故障,接着就关闭这个连接。
3.4、时间等待计时器——连续终止期间使用的
A发送了最后一个ACK后,不立即关闭连接,等时间等待计时器超时后再关闭。时间等待计时器设置的时间是2MSL。MSL叫做最长报文段寿命,RFC793建议设为2分钟。但是对于现在的网络,MSL = 2分钟可能太长了一些。因此TCP允许不同的实现可根据具体情况使用更小的MSL值。
4、TCP的应用
443是HTTPS默认端口
可以查看/etc/services,里面包含了协议使用的默认端口
5、UDP的使用
稍微记一下
5.1、UDP的封装格式
5.2、UDP的流控和差错控制
- UDP没有流控机制
- UDP只有检验和来提供差错控制
- 需要上层协议来提供差错控制,例如:TFTP协议
6、TCP/IP协议栈
[计算机网络]十、TCP的拥塞控制和4个计时器、常用协议原理和命令相关推荐
- 计算机网络(10)-----TCP的拥塞控制
TCP的拥塞控制 拥塞(congestion) 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏. 拥塞控制 拥塞控制就是防止过多的数据注入到网络中,这样可以使网 ...
- 【计算机网络】-TCP的拥塞控制及拥塞控制方法
TCP的拥塞控制及拥塞控制方法 TCP的拥塞控制 TCP的拥塞判断 TCP拥塞控制的方法 基于窗口的拥塞控制 拥塞窗口 慢开始 拥塞避免 快重传 快恢复 TCP拥塞控制总体流程图 TCP拥塞控制综合例 ...
- 计算机网络复习总结:什么是OSI7层模型、5层模型、TCP/IP 4层模型,各层协议导航
个人总结整理相关计算机网络知识点,出发点是各类问题以及比较重要的部分. 一.OSI 七层模型 OSI 的七层模型从上到下依次是: 应用层 表示层 会话层 运输层 网络层 数据链路层 物理层 七层模型开 ...
- 【计算机网络】TCP协议经典十五连问(半连接、重传、滑动窗口、流量窗口、拥塞控制、SYN Flood攻击、粘包拆包)
文章目录 1. 讲下TCP三次握手流程 2.TCP握手为什么是三次,不能是两次?不能是四次? 2.1 为什么握手不能是两次呢? 2.2 为什么握手不能是四次呢? 3. 讲下TCP四次挥手过程 4. T ...
- 计算机网络:TCP滑动窗口的流量控制和拥塞控制
1. 前言 最近在研究网络通信底层通信原理,所以不得不复习一波计算机网络传输控制协议.那么对于程序开发人员,了解底层网络通信原理,对于我们理解BIO.NIO网络通信十分重要.所以对于程序开发人员来说, ...
- 计算机网络 | 谈谈TCP的流量控制与拥塞控制
文章目录 一.TCP的流量控制 1.利用滑动窗口实现流量控制[⭐⭐⭐] 2.如何破解[死锁]局面❓ 二.TCP的拥塞控制 1.拥塞控制的一般原理 ① 解决网络拥塞的误区 ② 拥塞控制与流量控制的关系[ ...
- 【网络通信与信息安全】之深入解析TCP的“拥塞控制”原理
一.前言 ① TCP 与 UDP 概念 在涉及到网络知识的面试中,TCP 和 UDP 是经常被提及的两个概念,它们是 OSI 模型中的运输层中的协议: TCP 全称为传输控制协议.这种协议可以提供面向 ...
- TCP协议-TCP的拥塞控制
一.拥塞控制概述 TCP模块除了要进行流量控制外,还有一个重要的任务,就是提高网络利用率,降低丢包率,并保证网络资源对每条TCP连接的数据流的公平性.这就是拥塞控制要解决的问题. 在计算机网络中的链路 ...
- 计算机网络之TCP滑动窗口
文章目录 计算机网络之TCP滑动窗口 1.详细讲一下TCP的滑动窗口 2. 聊聊 TCP 的滑动窗口 计算机网络之TCP滑动窗口 1.详细讲一下TCP的滑动窗口 在进行数据传输时,如果传输的数据比较大 ...
- 「 计算机网络 」TCP的粘包拆包问题
「 计算机网络 」TCP的粘包/拆包问题 参考&鸣谢 大病初愈,一分钟看懂TCP粘包拆包 雷小帅 TCP 的粘包拆包以及解决方案 一乐说 文章目录 「 计算机网络 」TCP的粘包/拆包问题 一 ...
最新文章
- 为什么应该学习Kotlin
- 移动互联网的创新与91生态
- 对ZNNT-5NM力矩传感器进行标定
- CoreOS 和 Kubernetes 1.5 自主运行 Kubernetes、Container Linux
- flink on yarn两种提交模式
- 如何模拟鼠标的拖拽行为.
- java parseint null_java.lang.NumberFormatException: null Integer.parseInt的方法错误 具体问题代码在补充 到底怎么更改...
- 1-1 顺序表操作集 (20 分)
- 05-雷海林-mysql备份原理与在TDSQL中的实践
- Linux 打包 压缩 解压缩 命令
- NSDate的简单用法
- 使用 Linux 15 年后,我重新回到 Windows:感觉非常糟糕
- 明白了一个重要的道理
- 防止图片盗链和资源恶意下载
- RAC中参数文件的配置
- jedis操作set_使用 JedisAPI 操作 Redis
- 管理学基础 形成性考核一
- css的优先级及复合选择器权重计算
- 《时空幻境》Braid.v1.010.r2-RES-patch
- 提升生产力,7 款好用的原型图工具推荐给你
热门文章
- Flex ANE介绍
- python格式化字符串固定宽度_python – 格式化固定宽度的字符串(unicode和utf8)
- 无线局域网安全(一)———WEP加密
- 自动化运维工具inception+archer
- springboot 内存参数 启动
- 解决qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in ““ even though it was found.问题
- 桐桐的新闻系统【模拟】
- UPC 桐桐的爬山计划
- 找到了airdrop无法发现对方的原因了,原因你想不到!
- Windows System32下常见快捷指令