网络原理 二

三.滑动窗口
批量传输,叫做滑动窗口
批量发送不是无限发送,是发送到一定程度,就等待ack,不等待直接发送数据是有上线的,而且是回来一个ack就立即发吓一跳,相当于总的要批量等待的数据一致的。(把批量等待数据的数量,就成为“窗口大小”)
收到一个ack就立即发下一条
在这里插入图片描述

上述批量传输数据的过程,称为 滑动窗口

在这里插入图片描述
上述是滑动窗口的基本过程

3.1批量发送的过程中,如果过出现丢包咋办??
可靠性第一,效率靠后

ack丢了
数据丢了
在这里插入图片描述
上述图中,相当于一半的ack都丢了,相当高的丢包率
注意!!这种情况,啥事没有!!!即使丢了这么多数据ack对于可靠性没有任何影响!!!
确认序号的含义,表示,该序号之前的数据都已经收到了
后一个ack,能够涵盖前一个ack的意思!!(当收到2001这个ack的时候,此时发送方就知道了,2001之前的数据都收到了,1-1000这个数据也受到了,1001这个ack丢了就丢了,无所谓!!!)

情况二数据丢了
在这里插入图片描述
在这里插入图片描述
滑动窗口,快速重传,是在批量传输大量数据的时候,会采取措施
如果你就只传输一条聊天,少量的,低频的操作
就不会按滑动窗口这么搞了
仍然是前面朴素的确认应答和超时重传了

四.流量控制(保证可靠性的机制)
滑动窗口,批量发送
窗口越大,相当于批量的数据越多,整图的速度就越快
在这里插入图片描述
通过流量控制,本质上就是让接收方来限制一些发送方的速度
本质上就是 让发送的慢点,甚至堵塞一下

2.1具体怎么控制??
让ack报文中携带一个“窗口大小”这样的字段
在这里插入图片描述
在这里插入图片描述

五.拥塞控制
在这里插入图片描述
在这里插入图片描述
拥塞控制:做的事情,就是衡量中间节点,传输的能力
拥塞控制,是要亨利中间路径,中间路径上有多少个节点?每个节点当前的情况?
甚至,每次传输、走的路径都不同
于是就通过实验的方式,找到一个合适的发送了!!!
动态平衡!!!
在这里插入图片描述
另外,网络的拥堵情况,也不是一成不变的,时刻都在变化
此时拥塞控制的这样的策略就也能很好的是有变化的网络环境了
拥塞窗口(拥塞控制,实验出来的窗口)
流量控制的窗口
实际发送方的窗口大小 = min(拥塞窗口,流控窗口)
在这里插入图片描述
六.延时应答
TCP可靠性的核心,是确认应答
ACK要发,但是 不是立即发,而是稍微磨蹭一会再发,这是为了提高效率

TCP中绝对传输效率的关键元素就是 窗口大小!!
窗口大小即受到流量控制 也受到拥塞控制 两方面共同约束
在这里插入图片描述
在这里插入图片描述
延时应答的效果,就是通过这个延时,让接收方应用程序,趁机多消费一点数据,此时反馈的窗口大小就会更大一点,此时发送方的发送速率就能更快一些了(同时也能满足让接收方能够处理过来)

七.捎带应答.
基于延时应答
客户端服务器,之间的通信模型,通常都是“一问一答”这种模式的
在这里插入图片描述
一问一答的机制
在这里插入图片描述
所以为啥四次挥手,有可能是三次挥完,就是捎带应答起到的效果!!

八.面向字节流
粘包问题!!
所谓的“一句话”“就相当于一个”应用层数据报“
当A给B连续发了多个应用层数据报之后,这些数据就都积累到B的接收缓冲区中,紧紧挨在一起,此时B的应用程序再度数据的时候,就难以区分从哪到哪是一个完整的应用层数据报,就很容易读出 半个包/一个半
解决方案 :
定义分隔符: 比如约定A 和 B每说一句话都以.结尾
约定长度::约定数据的前四个字节,表示整个数据报的长度
这俩都是 自定义应用层协议 的注意事项!!
像前面的xml或者json,本质上都是通过分隔符的方式来实现的

九.异常情况
1.进程关闭/进程崩溃:
进程没了,socket是文件,随之被关闭,虽然进程没了,但是连接还在,仍然可以继续四次挥手
2.主机关机(正常流程关机):
先杀死所有的用户进程,socket也会随之关闭,也会触发四次挥手,如果过会挥完更好,比如对方发来fin过来了,咱们没来得及ack就关机了,此时对端就会重传fin,重传几次之后,发现都没有ack,尝试重置连接,如果还不行,就直接释放连接
3.主机掉电(拔电源,啪一下 很快的):
在这里插入图片描述
4.网线断开:同上
TCP小结:
1.确认应答
2.超时重传
3.连接管理
4.滑动窗口
5.流量控制
6.拥塞控制
7.延时应答
8.捎带应答
9.面向字节流=>粘包问题
10.异常处理=>心跳包

TCP和UDP的差别:
应用场景:TCP可靠传输,效率没那么高。
UDP不可靠传输,效率高

十.网络层
1.IP协议:
地址管理:
每个网络上的设备,要能分配一个地址(唯一性)
IP协议表示IP地址,是有32位整数,0-42亿9千万
动态分配IP
NAT
主要是依赖了路由器的NAT功能
不是所有的数据通过路由器转发就一定触发NAT
在这里插入图片描述
在这里插入图片描述
路由选择:
A给B发消息,具体走那条路线?
在这里插入图片描述
在这里插入图片描述
我这个主机所在位置的局域网下,得到的ip
在这里插入图片描述
我的主机的外网ip(不是我主机独有的)是我所在地区的所有主机都可能都是共用这一个外网ip
在这里插入图片描述
如果我还有一个主机也被路由器包装成了一样的源地址 正好访问相同的目的ip,此时访问的内容不一样 如何让他们回到各自的主机上 ,此时就可以交给路由器去处理了(因为路由器做了替换,所有他返回到路由器上自然就记得)还有就是可以通过”端口号“ 返回

2.IPv6
IPv4是传统的IP协议,使用4个字节,32位来表示ip地址
IPv6是更新一些的ip协议,使用16个字节,128位来表示ip地址
在这里插入图片描述
IP地址的组成
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
特殊的IP地址
在这里插入图片描述
广播功能,是你在不能预先知道对方IP是啥,需要探测,这个情况下使用的

Ip位127开头的
127.*称为环回ip
在这里插入图片描述
环回ip对应特殊的虚拟网卡IO,通过环回ip传输的数据,走这个虚拟网卡(这个过程没有io操作,纯内存操作),要比一般的这种普通ip的数据传输要快。

主机号为1. 192.168.0.1一般作为“网关ip”,大部分情况下,并不绝对,习惯用法,不是强制约定!!
网关:局域网的出入口

路由选择
从A到B之间,具体路线怎么走 ,A和B之间存在很多种不同的路线具体走哪条路,这就是路由选择要做的事情
这个听起来,很像我们常见的高德地图,但是高德地图是站在上帝的角度(高德的服务器,对于整个地区的地图是非常清楚的,掌握信息非常全面)就成了带权图的最短路径问题了。

但是网络上,则没这么容易了!!! 网络环境更复杂
所以某个路由器,无法把整个网络环境都记录下来的,路由器只能记录周围的情况(也就是能知道自己的邻居都是谁)

路由器又是怎么知道的?
路由器内部使用了一个数据结构 “路由表”这样的数据结构来记录邻居的信息
实际的转发过程,是渐进式的,类似于“问路一样”逐渐接近最终目标!
在这里插入图片描述
这个路由表中的:下一跳表现 就会把咱们的数据报指引向更上一级的路由器,然后越上一级的路由器,就越见多识广(路由器和路由器是不一样的!!!)
在这里插入图片描述
上述的过程就是 路由转发 过程(简化版的)

数据链路层
以太网 数据链路层/物理层

以太网数据帧
在这里插入图片描述
正因为如此,mac地址就可以作为网络上身份的一种有效技术手段
在这里插入图片描述
不同的数据链路层协议,对应不同的硬件物理设备,此时传输数据的上限也不一样

把这个数据链路层数据帧,最大载荷长度,称为MTU
如果承载的数据,长度超过MTU,就会在IP层进行分包 ,是每个分出来的结果,都能在MTU之内
在这里插入图片描述
拆包重组的过程
在这里插入图片描述
虽然MTU有限制,但是没关系,仍然可以保证传输一个更大的数据
虽然IP能拆包,仍然不能改变UDP最大长度是64k这样的现实
由于拆除的这些IP数据报只有一份UDP首部,这个首部里能够填写UDP长度的地方,也还是只有两个字节 64k这个限制还是存在的!!
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值