计算机网络学习笔记

通信协议概述

网络分层的意义:分层是解决复杂问题的有效办法。利用分层的思想,可以对复杂问题进行合理的抽象,然后更好的解决问题。

IP地址和MAC地址

  • 查看ip地址的命令:ifconfig 或者 ip addr。
  • ip地址具有定位功能,mac地址无定位功能,像身份证一样,唯一标识一张网卡。
  • ip地址分共有ip和私有ip。
  • 使用ARP协议请求查询MAC地址.

DHCP协议:一个机器加入网络之后,可以通过DHCP协议请求DHCP Server分配一个IP地址。DHCP 服务器出了可以给机器分配IP地址之外还可以配置PXE服务器的地址,如果请求分配IP的机器上没有安装操作系统,可以通过PXE服务器地址去下载操作系统,然后自行安装。

网络协议五层模型
综合OSI标准七层模型和TCP/IP四层网络模型的五层网络模型

数据链路层和网络层

数据链路层有很多具体的协议,比如ARP、IEEE802.3等等。数据链路层,也可称为介质访问控制层(Media Access Control Layer,简称MAC层)。

MAC层要解决三个问题:

  1. 数据发往哪台机器:使用MAC地址。
  2. 物理通信链路资源有限,如何合理发送数据:信道划分、轮流发送、随机接入。
  3. 数据错误怎么解决:CRC循环冗余校验算法。

多个局域网主机共用一个公网的问题

一个局域网中可以有很多台主机,当这些主机要访问一台公网服务器的时候,请求数据包中的源IP地址会被NAT网关转化为公网IP,因为局域网的IP地址是无法与公网服务器直接通信的。这种情况有一个问题:多台局域网的主机使用同一个公网IP,那响应数据包回到NAT网关的时候,应该转发给哪个局域网主机呢?

为了解决这个问题,NAPT技术被提出。不同于NAT技术,NAPT在进行地址转换(地址映射)的时候,带了端口信息。比如,局域网主机访问一台公网主机时ip+port=192.168.0.3:6021,当这个数据包到达NAPT网关的时候,把地址+端口的组合改变成43.100.87.1:8989,这样192.168.0.3:6021 -> 43.100.87.1:8989的映射关系就建立起来了,当响应数据包到达NAPT网关的时候,再把43.100.87.1:8989映射为192.168.0.3:6021,就知道这个数据包是发给局域网中哪台主机的。局域网中别的主机访问公网服务器的时候,NAPT网关再将其ip+port映射为另一个ip+port,比如43.100.87.1:8990,这样就达到了复用公网IP的目的。

传输层协议

UDP:无连接的协议。发送之前不建立连接。适合对数据传输实时性要求高的场景,比如流媒体、实时游戏、物联网传输协议。协议格式如下图

TCP:面向连接的协议。所谓面向连接,是指通信双方在内核中使用复杂的数据结构和算法来维护一组状态,通过网络包的交互来改变状态。

TCP的特性

  • 能解决数据包的顺序问题:对收到的包进行排序。
  • 能解决丢包问题:包丢了就要求重传
  • 能做到流量控制:控制发送的速率以防止接收端处理不过来
  • 能做到拥塞控制:控制发送的速度以减小网络传输的压力

TCP三次握手:

为什么是三次而不是两次或者四次?

如果只是两次,无法证明A-B之间是互通的。四次、五次也可以,但是没有必要,因为网络环境是不确定的,n次握手也无法百分之百确定对方的状态。因此,三次握手是相对合理的,对于客户端来说,它发出的消息一去一回,对于服务器来说,它发出去的消息也是一去一回,这就可以说明两台机器之间网络是互通的,可以进行数据传输了。

TCP四次挥手

流量控制机制:接收方在ACK包中发送自己的接收窗口(rwnd)大小,发送端根据这个窗口大小降低发送速率。

拥塞控制机制:使用拥塞窗口(cwnd)控制自己发送的速率,防止造成网络拥挤。cwnd有一个增长曲线。总结为:慢启动阶段(cwnd指数级增长)、线性增长阶段、快重传(接收端收到了后发的包,先发的包没收到,此时就会发三个上一个已经确认过的包的ACK消息,发送端收到这三个包之后快速进行重传,不会把cwnd直接降为1)。

发送端实际的发送窗口=min{rwnd,cwnd}

IO多路复用机制:使用一个进程或者一个线程,处理多个IO描述符。这个机制本身不会直接解决并发问题,但是能够更有效的利用CPU。

应用层协议

HTTP

HTTP request协议的组成分为三个部分:请求行、首部、请求体

HTTP response协议的组成也分为三个部分:状态行、首部、响应体

协议中,首部字段均是Key-Value的键值对,sp代表空格。

HTTP 2.0 通过头压缩、分帧、二进制编码、多路复用等技术提升性能,除了HTTP之外,谷歌的QUIC协议也可以用来执行web请求,其底层是基于UDP的。

HTTPS

HTTPS 使用了非对称加密和堆成加密结合的方式保证了通信的私密性。非对称加密用于双方沟通随机数,并用随机数产生对称秘钥。在随后的数据传输中均使用堆成加密的方式保证消息的私密性。实际上,HTTPS的主要思想就是使用非对称加密算法传输公钥。

DNS

域名系统,是一个将域名和IP地址做映射的分布式数据库。DNS除了可以将域名解析为IP地址之外,还可以做全局负载均衡,原理是可以通过一个域名得到多个IP地址,这些IP地址的主机提供同样的服务。

DNS解析域名的流程:(假设要访问的域名没有在本地DNS缓存中)本地DNS服务器会向根DNS服务器发起查询请求,根DNS服务器会返回顶级域DNS服务器的地址,然后本地DNS服务器向顶级域DNS服务器发起查询请求,顶级域DNS服务器返回权威DNS服务器的地址,最后本地DNS服务器再向权威DNS服务器发起请求,得到域名对应的IP地址。发起查询的主机会把查询结果缓存下来,下次访问这个域名的时候先查询本地缓存,若有则直接返回对应的IP地址。

HTTPDNS

HTTPDNS也是一种DNS服务,提供域名和IP地址的转换服务,主要应用于移动端。HTTPDSN相比于传统的DNS,具有解析速度快、可控的缓存更新等优点。

CDN

CDN(内容分发网络):由全局负载均衡器和多级边缘节点组成的网络。机制是,全局负载均衡器对发起请求的机器IP进行分析计算,返回距离请求机器距离更近的服务器。CDN主要用于静态资源的缓存,同时也支持流媒体协议。对于动态数据,也可以使用边缘计算或者优化的CDN链路访问源主机。

云中的网络

虚拟机的网络

虚拟机的网络要与宿主机所在的网络互通,有两种方式。

  1. 桥接网络:这种模式下,虚拟机和宿主机直接就是在一个子网。
  2. NAT模式:这种模式下,虚拟机和宿主机各自在各自的局域网中,它们之间通过虚拟交换机连通。

不管哪种方式,都是共用宿主机的物理网卡传输消息。

posted @ 2021-01-02 11:13  陈玉林  阅读(136)  评论(0编辑  收藏  举报