《计算机网络》总结

前言

即将参加今年的秋招,校招比较考核学生的底层知识,开始撸操作系统、计算机组成原理、计算机网络以及Java的知识了。希望能在2020年本就不怎么友好的一年收获理想的Offer。

计算机网络

计算机网络根据OSI模型可以分为7层,依次为:

  • 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

根据TCP/IP模型分为四层,依次为:

  • 网络接口层、网际层、传输层和应用层

一般我们学习的是五层结构,依次为:

  • 物理层、数据链路层、网络层、传输层以及应用层。

在这里插入图片描述
分层后有两个特点:

  1. 同一层使用相同的协议。
  2. 下层对上层是透明的(透明意思是不可见)。即上层协议不需要理会下层协议是如果完成的,只需把数据传递到下层,从下层接收数据。

下文以五层模型讲解

物理层

又名实体层,就是用有线线路或无线线路建立、维护、断开物理连接,传递0、1数据。

通信方式

单工通信:只能单向传输。
半双工:双向交替传输,即同一时刻只有一方可以传输。
全双工:双向同时传输。

数据链路层

作用就是将网络层交下来的数据封装成帧交给物理层,以及将从物理层接收的帧解析出数据交给网络层。

基本问题

数据链路层解决三个基本问题:
封装成帧:

  • 将网络层传下来的分组添加首部和尾部,用于标记开始和结束。
    在这里插入图片描述

透明传输:

  • 首部和尾部容易和IP数据报内数据冲突,解决方法就是在首部和尾部前面加一个转义字符。在传输数据给网络层前将转义字符删掉。
    在这里插入图片描述

差错校验:

  • 目前数据链路层广泛使用循环冗余校验(CRC)来检查比特差错,由硬件完成。

基本服务

数据链路层提供三种服务:

  • 无确认的无连接服务:
    主机间双方通信前不建立连接,也不对数据帧进行确认,适用于局域网。
  • 有确认的无连接服务:
    主机间双方通信前不建立连接,但会对每一数据帧中进行确认,并具有超时重传功能。
  • 有确认的面向连接服务:
    是最复杂的服务,源主机和目的主机在通信前须建立连接以保证数据可靠传输,传输过程分为建立连接、数据传输、断开连接三个阶段。

信道分类

信道分为广播信道和点对点信道

广播信道

进行一对多通信

冲突解决
信道复用技术
  • 频分复用
    所有主机在相同的时间占用不同的频率带宽资源
    在这里插入图片描述

  • 时分复用
    所有主机在不同的时间占用相同的频率带宽资源
    在这里插入图片描述

  • 统计时分复用
    对时分复用的改进,不固定每个用户在时分复用中帧的位置,只要有数据就集中组成统计时分复用帧然后发送
    在这里插入图片描述

  • 波分复用
    光的频分复用。由于习惯用波长而不是频率来表示光载波。本质上是频分复用。

  • 码分复用
    为每个用户分配m bit的码片,并且所有的码片正交
    在这里插入图片描述

在这里插入图片描述
深度好文

CSMA/CD协议 (京东)

CSMA/CD(Carrier Sense Multiple Access/collision detection,带有冲突检测的载波侦听多路存取)

  • 多路存取
    说明这是总线型网络,许多主机以多点的方式连接到总线上。

  • 载波侦听
    每个主机都必须不停地监听信道。在发送前,如果监听到信道正在使用,就必须等待。

  • 冲突检测
    在发送中,如果监听到信道已有其它主机正在发送数据,就表示发生了碰撞。虽然每个主机在发送数据之前都已经监听到信道为空闲,但是由于电磁波的传播时延的存在,还是有可能会发生碰撞。

点对点通信

PPP协议,不会发生冲突。
PPP的帧格式:
在这里插入图片描述
F 字段为帧的定界符
A 和 C 字段暂时没有意义
FCS 字段是使用 CRC 的检验序列
信息部分的长度不超过 1500,最小 64(MTU)(欢聚时代)

网络层

将数据报从一台主机移动到另一台主机,从而提供了主机到主机的通信服务和各种形式的进程到进程的通信。

IP数据报格式

在这里插入图片描述

  • IP 头部
    由于可选字段的存在,最小20字节,最大60字节
    在这里插入图片描述

IP分类

  • A B C D E类地址(腾讯)
    在这里插入图片描述

  • 地址范围
    A类 1.0.0.1~126.255.255.254. 共 16777214 台主机
    B 类 128.0.0.1~191.255.255.254 共 65534 台主机
    C 类 192.0.1.1~223.255.255.254. 共 254 台主机
    在这里插入图片描述

  • 广播地址
    主机位全为1

  • 网络地址
    主机位全为0

  • 私有地址
    所谓私有地址即不能应用在互联网上,而被用在局域网络中的地址。在访问外网时需要进行NAT转换。
    A类私有地址:10.0.0.0~10.255.255.255
    B类私有地址:172.16.0.0~172.31.255.255
    C类私有地址:192.168.0.0~192.168.255.255

子网掩码(腾讯)

将某个IP地址划分成网络地址和主机地址两部分。
由于分ABCDE类地址往往达不到最优的主机数,因此我们可以用子网掩码将地址进行精细分割。
用IP和子网掩码想与得到网络号和主机号

NAT地址转换(欢聚时代)

NAT网络地址转换,主机都要在NAT路由器将私网IP地址转化为全球IP地址,才能访问外网
主要分为静态NAT和动态NAT以及PNAT(端口网络地址转换)
在这里插入图片描述

  • 静态NAT
    将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。

  • 动态NAT
    将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。实际上仍然时一对一的关系,只不过可以动态绑定。

  • PNAT 端口网络地址转换
    以上两种都没有实现多对一的映射关系。而端口网络地址转换加入了端口的概念,用端口来区分用户,从而实现了多对一的关系。端口地址转换由路由器统一分配。

端口映射

注意与端口转换不同,端口转换是用来区分用户。而端口映射解决外网端口与内网端口映射关系的,如果你用过docker就会对这个概念有所了解。
如我们经常使用8080端口。但同一个内网上有着两台主机同时运行着8080端口的web站点,因此我们需要在端口转换的基础上映射端口。如用48080映射主机1的8080端口,用58080映射主机2的8080端口。从而外网可以通过公网IP:48080访问到主机1的web站点

路由选择(百度)

  • RIP协议,选择标准:跳数
    在这里插入图片描述
  • OSPF协议,选择标准:选择标准:带宽、延迟
    -

其他协议

  • ARP (美图)
    地址解析协议,根据主机IP得到MAC地址。
    步骤:查询本地路由表->如果没查询到则发送广播帧询问该IP对应的MAC地址->对应主机IP则响应返回MAC地址->本地路由表记录。
  • RARP (字节跳动)
    逆地址解析协议,根据MAC地址得到IP地址
    步骤:向本地网段上的RARP服务器发送请求->RARP服务器查询->查询到则返回,否则不予理睬->请求端得到响应则用IP进行通信,否则初始化失败。
  • DHCP (奇安信)
    动态主机配置协议,自动分配IP地址
    有三种分配方式:自动分配、动态分配、手动分配。
  • ICMP (腾讯)
    主要应用:ping。是IP协议的子协议。

传输层

传输层是整个网络体系结构中的关键层次之一,主要负责向两个主机中进程之间的通信提供服务。
重点主要是著名的 TCP 和 UDP

TCP

  • 特点
    -
  • 首部格式(欢聚时代)
    在这里插入图片描述
  • 三次握手(腾讯)
    注意 seq、ack 的关系
    在这里插入图片描述
  • 为什么需要三次握手:
  1. 为了防止服务器端开启一些无用的连接增加服务器开销以及防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
  2. 分清连接请求包、实际数据包
  • 四次分手(欢聚时代)
    在这里插入图片描述
  • 四次分手的原因:
  1. 确保数据能够完成传输。
  2. 当收到对方的 FIN 报文通知时,它仅仅表示对方没有数据发送给你了,但未必你所有的数据都全部发送给对方了
  • 被关闭方一直CLOSE-WAIT的原因:(欢聚时代)
    被关闭方没有发送FIN关闭报文

  • TIME_WAIT=2MSL的原因:
    防止已失效的报文段出现在本连接中
    为了可以重传ACK,让被动关闭方收到

  • 大量 TIME_WAIT:
    原因:主动方请求断开连接,但是最终状态没有改变。
    危害:占用系统资源,降低系统的吞吐量。
    确认情况:
    统计机器中网络连接各个状态个数

     netstat -an | awk '/^tcp/ {++S[$NF]}  END {for (a in S) print a,S[a]} '
    

    排查:根据实际情况

  • 可靠传输
    可靠传输主要依赖以下几点:

  1. 序号:数据被分割成TCP认为最适合发送的大小,并且可以依据序号进行重排序再提交给应用层
  2. 确认机制:发送报文后等待确认报文
  3. 重传机制:没有收到确认报文,重发数据
  4. 流量控制(端到端):利用滑动窗口控制发送速率
  5. 拥塞控制(全局):当网络拥塞时,减少数据的传输量
  6. 校验和:确认数据准确性,错误丢弃且不确认。
  • 流量控制(欢聚时代)
    为了避免发送方速度太快,接收方处理不过来导致丢包现象严重的情况,我们对发送方发送速率的控制,称之为流量控制。
    滑动窗口:
    滑动窗口类似缓存的概念,是接收方最大缓存的大小,用来告知发送端,接收端最大缓存大小,从而控制发送端的发送速率,达到流量控制的目的

  • 拥塞控制
    与流量控制不同,流量控制的约束是因为接收端的性能,而拥塞控制的约束是传输时的网络性能。
    当达到网络阻塞后,会修改拥塞窗口,控制发送端的发送速率。

在这里插入图片描述

  1. 慢开始
    指 TCP 开始发送设置 cwnd=1,指数级,由小到大逐渐增加拥塞窗口的大小。由图0-4轮次可以看到
    慢开始门限(ssthresh 状态变量):
    当 cnwd<ssthresh,使用慢开始算法
    当 cnwd=ssthresh,既可使用慢开始算法,也可以使用拥塞避免算法
    当 cnwd>ssthresh,使用拥塞避免算法

  2. 拥塞避免
    当拥塞窗口cnwd达到慢开始门限时,代表即将出现网络阻塞。例如一次性放20台车后就容易造成堵车了。我们就改成21台、22台这样放行,不再指数增长。

  3. 快重传、快恢复
    达到拥塞时(收到三个重复的确认),不从慢开始开始,而是修改ssthresh为拥塞时拥塞窗口的一半,同时从新ssthresh开始进行拥塞避免。
    在这里插入图片描述
    流量控制和拥塞避免:
    这就相当于高速公路(假设只有一个入口,一个出口),流量控制是出站口提前告知进站口,我一次就只能出50个人,你最多就放50个人进来。而拥塞控制是,高速人越来越多,在某一段路还发生了交通事故,4车道变1车道。这时候交警反馈给进站口,你少放点人进来,你可以选择慢开始策略,也可以用快重传策略。

UDP

  • 首部格式(欢聚时代)
    在这里插入图片描述
  • 特点
    在这里插入图片描述
  • UDP如何实现可靠传输(七牛云)
    回答这道题的关键在于,理解TCP如何进行可靠传输
  1. 在应用层实现类似TCP的确认、重传、窗口机制。
  2. 可以根据业务,设计自己的算法,废弃tcp的拥塞算法,速度更快(游戏领域)

TCP 和 UDP 的区别(京东)

在这里插入图片描述

应用层

应用层应用层,即面向应用专用协议,如POP3 SMTP IMAP邮件协议,DNS 域名系统,HTTP 超文本传输协议、FTP 文件传输协议。但是网络应用是计算机网络存在的理由,如果我们不能构想出任何有用的应用,也就没有任何必要去设计支持它们的网络协议了。

DNS

域名系统,是我们日常最容易使用到的协议。无论是有意识的输入www.xxx.com还是无意识的打开某个APP,都和DNS打着交道。我们从上文知道,网络传输依据的是IP地址,但是为什么我们日常却用着www.xxx.com?因为记住网站的 IP,比较繁琐困难,所以我们将域名转化为IP,再访问服务器。

  • 过程 (欢聚时代)
  1. 浏览器缓存
  2. 查找本机的hosts文件
  3. 路由缓存
  4. 向DNS服务器(本地域名服务器、顶级域名服务器、根域名服务器)递归查询
    在这里插入图片描述
  • DNS 负载均衡
    最早的负载均衡是用DNS实现的,通过一个域名映射多个IP地址,实现访问不同的服务,达到负载均衡的目的。但不能区分服务器的差异,也不能反映服务器的当前运行状态。

FTP

FTP 文件传输协议。有两条连接:控制连接端口21,数据连接端口20。

  • 断点续传
    由于FTP是顺序接收文件的,所以只要计算已接收的数据大小,就可以知道断点在文版件的偏移量,续传时权,客户端将已接收的数据量传递给服务器,服务器使用这个做为偏移量继续读取文件,将剩余的数据发送至客户端,客户端仅需将接收到的数据追加至原文件尾部即可。

  • 匿名FTP (欢聚时代)
    匿名FTP解决了不用注册、登录、授权,可以访问远程主机文件。

HTTP

超文本传输协议

  • 方法
    GET、POST、PUT、DELETE、HEAD、CONNEXT、OPTIONS、TRACE、PATCH

  • GET和POST区别 (欢聚时代)
    在这里插入图片描述

  • 状态码
    200 OK
    204 服务器处理完成,但无数据返回
    301 永久重定向
    302 临时重定向
    303 其他,如负载均衡
    403 没有权限,请求被拒绝
    404 页面没有找到
    500 服务器执行请求时发生错误
    502 网关或代理执行操作时发生上游服务器错误响应
    503 服务器停机维护或超负载中,无法响应请求
    504 网关或代理没有在时间范围内收到上游服务器响应

  • HTTP报文格式
    请求报文
    在这里插入图片描述
    响应报文
    在这里插入图片描述

  • 短连接与长连接(货拉拉)
    如果每进行一次 HTTP 通信就要新建一个 TCP 连接,那么开销会很大。在 HTTP/1.1 之前默认是短连接的,如果需要使用长连接,则使用 Connection :Keep-Alive。从 HTTP/1.1 开始默认是长连接的,如果要断开连接,需要由客户端或者服务器端提出
    断开,使用 Connection : close

其他

  • HTTP 1.1和1.0 区别(欢聚时代)
    HTTP1.1相比1.0有以下变化:
    在这里插入图片描述
  • HTTP 2.0和1.1 区别(欢聚时代)
    HTTP2.0相比1.1有以下变化:
    在这里插入图片描述
  • HTTP的 keep-alive 和 TCP 的 keepalive 区别
    HTTP是为了减少建立连接的次数,提高效率
    TCP的keepalive是TCP的一种检测TCP连接状况(仍然正常运行、已经崩溃、已经崩溃并重启了、由于中间链路问题不可达)的保鲜机制。

综合

浏览器输入URL执行全部过程(百度)

  1. 检查是否输入的为域名,是则需要解析域名为IP
  2. TCP 三次握手连接
  3. 发送HTTP GET请求报文
  4. 服务器处理请求并返回HTTP响应报文
  5. 浏览器解析报文渲染页面
  6. 连接结束

协议的三元素(快手)

语法、语义、同步

———————————————————————————————————————
有什么问题可以评论或者私信我,每日在线解(LIAO)疑(SAO)。

我是大誌,一位准备996的卑微码农?,觉得好用记得点赞收藏!!!
在这里插入图片描述