网络知识复习-含图

OSI 七层模型

OSI ( Open System Interconnection )是理想化的模型,将网络进行分层,其目的是将
复杂的流程简单化,从而实现分而治之。(专人干专事)

一.网络分层的含义?

下层是为了上层提供服务的。

  • 应用层:用户最终使用的接口
  • 表示层:数据的表示、安全、压缩
  • 会话层:建立和管理会话的
  • 传输层: (主要提供安全及数据完整性保障) 网络层不可靠,保证可靠的传输
  • 网络层:(主要关心的是寻址) ,进行逻辑寻址,定位到对方,找到最短的路
  • 数据链路层: (主要关心两个设备之间传递数据),建立逻辑链接,将数据组合成数据帧进行传递 (差错校测,可靠传输)
  • 物理层:(核心是传输数据比特流),不关心具体的传输媒体(双绞线、光纤、同轴 电缆、无线…)

在这里插入图片描述
从图中可知,数据发送的过程中,数据包会一层层包装,找到对方的过程,其实是一层层解包,拿到能定位对方位置的信息,直至把原始信息传递到对方手中

二.地址

通信是通过 ip 地址查找对应的 mac 来进行通信的。 IP地址 是可变的(类似我们收 件地址)MAC地址是不可变的。

1. IP 地址

IPV4 网际协议版本4 ,地址由 32 位二进制数值组成 例如:192.168.1.1 ,大概42亿个
在这里插入图片描述

IPV6 网际协议版本6 ,地址由 8个16位块的128位组成。 例如:
2408:8207:788b:2370:9530:b5e7:9c53:ff87 大约 3.4*10^38

2. MAC 地址

设备通信都是由内部的网卡设备来进行的,每个网卡都有自己的mac地址(原则上唯一),但也可改,一般认为是唯一的

三.物理设备

1.物理层

  • 中继器:双绞线最大传输距离 100M ,中继器可以延长网络传输的距离,对衰减的信 号有放大在生的功能。
  • 集线器:多口的中继器,目的是将网络上的所有设备连接在一起 , 不会过滤数据,也不知道将收到的数据发给谁。(采用的方式就是广播给每个人)

可以实现局域网的通信,但是会有安全问题,还会造成不必要的流量浪费。 傻,你 就不能记住来过的人嘛?每次都发送?

2.数据链路层

  • 交换机:交换机可以识别已经连接设备的物理地址(MAC地址)。可以将数据传递到 相应的端口上

3.网络层

  • 路由器:检测数据的 ip 地址是否属于自己网络,如果不是会发送到另一个网络。没 有 wan 口的路由器可以看成交换机。
    路由器一般充当网关,路由器会将本地 IP 地址 进行NAT

网关:两个子网之间不可以直接通信,需要通过网关进行转发

在这里插入图片描述

四. TCP/IP 参考模型

Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议。 TCP/IP协议实际上是一系列网络通信协议的统称,最核心的两个协议是 TCP 和 IP

1.什么是协议?

协议就是约定和规范。

数据链路层、物理层 :物理设备 (在五层模型中能称之为协议的都在三层以上)

  • 网络层:

    • IP 协议:寻址通过路由器查找,将消息发送给对方路由器,通过 ARP 协议,发送
      自己的mac地址
    • ARP 协议:Address Resolution Protocol 从 ip 地址获取 mac地址 (局域网)
  • 传输层

    • TCP 、 UDP
  • 应用层:

    • HTTP 、 DNS 、 FTP 、 TFTP 、 SMTP 、 DHCP

2. ARP 协议

根据目的 IP 地址,解析目的 mac 地址

在这里插入图片描述
解释: 每台主机连接的时候都会事先把自己的名称,ip和mac告诉交换机,交换机做一个记录,等到A主机想要访问B主机的时候,能从交换机的记录中找到记录,从而精准访问到

3. DHCP 协议

通过 DHCP 自动获取网络配置信息 (动态主机配置协议Dynamic Host Configuration Protocol)我们无需自己手动配置 IP

4. DNS 协议

		 DNS 是Domain Name System的缩写, DNS 服务器进行域名和与之对应的 IP 地址转换的服务器
  • 顶级域名 .com 、
  • 二级域名 .com.cn 、 三级域名 www.xx.com.cn , 有多少个点就是几级域名

五. TCP 和 UDP

两个协议都在传输层,我们经常说 TCP 是面向连接的而 UDP 是面向无连接的。

  • UDP 发出请求后,不考虑对方是否能接收到、内容是否完整、顺序是否正确。 收到 数据后也不会进行通知。
  • 首部结构简单,在数据传输时能实现最小的开销

1. TCP

tcp 传输控制协议 Transimision Control Protocal 可靠、面向连接的协议,传输效率 低 (在不可靠的 IP层上建立可靠的传输层)。 TCP提供全双工服务,即数据可在同一时间 双向传播。

TCP数据格式

在这里插入图片描述

  • 源端口号、目标端口号,指代的是发送方随机端口,目标端对应的端口
  • 序列号:32位序列号是用于对数据包进行标记,方便重组
  • 确认序列号:期望发送方下一个发送的数据的编号
  • 4位首部长度:单位是字节,4位最大能表示15,所以头部长度最大为60
  • URG :紧急新号、 ACK :确认信号、 PSH :应该从TCP缓冲区读走数据、 RST :断开重新 连接、 SYN :建立连接、
    FIN :表示要断开
  • 窗口大小: 当网络通畅时将这个窗口值变大加快传输速度,当网络不稳定时减少这个值。在TCP中起到流量控制作用。
  • 校验和:用来做差错控制,看传输的报文段是否损坏
  • 紧急指针:用来发送紧急数据使用

TCP 对数据进行分段打包传输,对每个数据包编号控制顺序。

三次握手过程:

在这里插入图片描述
这里需要注意标志位和序列号的变化(+1),不解释,很常见

数据传输过程:

在这里插入图片描述
当三次握手建立连接后,开始数据传输详细过程和解释如下:
1.假设客户端向服务器发送长度为159的字符串,此时seq=1(告诉自己应该从序列号1开始发送),ack=1(告诉对方你下次要从序列号1给我发送)
2.服务器收到后响应回客户端长度111的数据,ack变更为160=150+1(表示我已收到159长度的数据,告诉客户端下次从序列号160开始给我发),seq=1(告诉自己应该从序列号1开始发送)
3.客户端收到数据后ack变更为112=111+1(表示我已经111长度的数据了,告诉服务器下次从序列号112开始继续传输),seq=160(表示自己下次要从序列号160开始给你发送)

四次挥手过程:

在这里插入图片描述

为了防止最后一次的ACK 丢失,发送 ACK 后需要等待一段时间,因为如果丢包服务端需 要重新发送 FIN 包,如果客户端已经 closed ,那么服务端会将结果解析成错误。 从而在高并发非长连接的场景下会有大量端口被占用

2. UDP

udp 用户数据报协议 User Datagram Protoco ,是一个无连接(没有三次握手)、不保证可靠性的传输层协议。你让我发什么就发什么!

  • 使用场景: DHCP 协议、 DNS 协议、 QUIC 协议等 (处理速度快,可以丢包的情况)

在这里插入图片描述

3.滑动窗口

  • 滑动窗口:TCP是全双工的,所以发送端有发送缓存区;接收端有接收缓存区,要发 送的数据都放到发送者的缓存区,发送窗口(要被发送的数据)就是要发送缓存中的 哪一部分
  • 核心是流量控制:在建立连接时,接收端会告诉发送端自己的窗口大小( rwnd ),每 次接收端收到数据后都会再次确认( rwnd)大小,如果值为0,停止发送数据。 (并发送窗口探测包,持续监测窗口大小)
    在这里插入图片描述
    注意:在滑动窗口中尽管后端的包发完并确认了,但如果前面的包没发完并且ack确认,窗口也不会往下滑动,这就会造成阻塞问题
    特别的:滑动窗口这种思想也常用于算法中,刷过leetcode的同学应该深有体会

4.粘包

所谓粘包就是连续给对端发送两个或者两个以上的数据包,对端在一次收取中收到的数据包数量可能大于 1 个,当大于 1个时,可能是几个(包括一个)包加上某个包的部分,或者干脆就是几个完整的包在一起。当然,也可能收到的数据只是一个包的部分,这种情况一般也叫半包
\n
发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一个TCP段。若连续几次需要send的数据都很少,通常TCP会根据negal优化算法把这些数据合成一个TCP段后一次发送出去,这样接收方就收到了粘包数据

  • Nagle 算法的基本定义是任意时刻,最多只能有一个未被确认的小段 (TCP内部控制)
  • Cork算法 当达到 MSS (Maximum Segment Size )值时统一进行发送(此值就是帧的大小 - ip 头 - tcp
    头 = 1460个字节)理论值

在这里插入图片描述
注意:只有TCP有粘包现象,UDP永远不会粘包,因为TCP是基于数据流的协议,而UDP是基于数据报的协议

详细可了解:https://www.cnblogs.com/sui776265233/p/9289858.html

5. TCP 拥塞处理 (队头阻塞,慢启动, 短连接)

举例:假设接收方窗口大小是无限的,接收到数据后就能发送 ACK 包,那么传输数据主要是依赖于网络带宽,带宽的大小是有限的。

在这里插入图片描述

  • TCP 维护一个拥塞窗口 cwnd (congestion window)变量 ,在传输过程正没有拥塞
    就将此值增大。如果出现拥塞(超时重传 RTO(Retransmission TimeOut) )就将 窗口值减少。
  • cwnd < ssthresh 使用慢开始算法
  • cwnd > ssthresh 使用拥塞避免算法
  • ROT时更新 ssthresh 值为当前窗口的一半,更新 cwnd = 1
  • 传输轮次: RTT (Round-trip time) ,从发送到确认信号的时间
  • cwnd 控制发送窗口的大小。

快重传

在这里插入图片描述

快重传,可能在发送的过程中出现丢包情况。此时不要立即回退到慢开始阶段,而是对已经收到的报文重复确认,如果确认次数达到3此,则立即进行重传 快恢复算法(减少超时重传机制的出现),降低重置 cwnd 的频率。

HTTP

一. HTTP 发展历程

  • 1990年 HTTP/0.9 为了便于服务器和客户端处理,采用了纯文本格式,只运行使用GET请 求。在响应请求之后会立即关闭连接。
  • 1996年 HTTP/1.0 增强了 0.9 版本,引入了 HTTP Header(头部)的概念,传输的数据不再仅限于文本,可以解析图片音乐等,增加了响应状态码和 POST , HEAD 等请求方法。
  • 1999年广泛使用 HTTP/1.1 ,正式标准,允许持久连接,允许响应数据分块,增加了缓存 管理和控制,增加了 PUT、DELETE等新的方法。 (问题 多个请求并发 管线化 http 队头 阻塞的问题)
  • 2015年 HTTP/2 ,使用 HPACK 算法压缩头部,减少数据传输量。允许服务器主动向客户端推送数据,二进制协议可发起多个请求,使用时需要对请求加密通信。
  • 2018年 HTTP/3 基于 UDP 的 QUIC(发音和quick同音,表示快的意思) 协议。

后面的内容可以参考我的这篇文章:HTTP详解长短连接,管道化,队头阻塞及它们之间的关系

猜你喜欢

转载自blog.csdn.net/fesfsefgs/article/details/121432682