【Notes1】网络


1.局域网:CSMA/CD,SW

1.早期通过双绞线(只能有一台设备进行数据发送),通过10100…高低电平就能表示数据信号。标识:1–>3,3需要表明自己身份是3。

2.通过集线器广播给所有设备,2345自己分辨是我的消费了,不是我的数据包丢弃。如果1,2同时广播,4收到2个消息混合解析不出,导致1,2这两个数据包全没法用。针对上面问题提出CSMA/CD协议:发送前进行载波侦听,检测下这链路上有没有其他人正在发送数据,没有的话再进行数据发送,防止冲突。

3.hub集线器缺点:1.进行数据的广播会导致带宽利用率较低。2.在链路上同时只能有一个设备发送数据,链路利用率低。3.没有标识,只是广播出去,让设备自己判断是不是自己的,工作效率低。
在这里插入图片描述
如下机器1想发到机器3,通过SW寻址到3号口。SW记录了地址(mac地址)和端口(此处端口不是电脑端口而是交换机端口)的映射关系不用广播(集线器),SW用的是网线,里面有8根线,正常情况至少4根线是在工作的,所以实现全双工。

买来交换机里面是张空表,怎么建立起映射关系呢?如下机器A插上来后要向B发送数据,发现是空表,此时确定A是1号口,B找不到就分别往每个端口发,4号口B做出了回应,所以表记录B对应4号口。

交换机有个特点可以桥接,利用桥接(如果没有映射关系,如C和D都对应5,量大之后不断桥接会引起消息洪泛)实现几千条存储,几千条不够至少几十亿,注意这里mac和端口映射表不是路由表,局域网(家庭网,校园网等)使用交换机效率高。
在这里插入图片描述
在这里插入图片描述

2.互联网:ARP,ith,DHCP

SW映射表只能实现几千存储,表中记录满了,新的来会把旧的替代,所以跨网用路由器(也称网关)。如下家庭网代表整个网络2,每台机器都有自己的路由表如ubuntu机器有路由表,路由器也是linux系统也有路由表。

本台电脑的路由表会写默认网关是192.168.0.1(这个点在路由器上),本台电脑就会把数据包发到路由器上,这个路由器自己也有路由表路由到1.52这个网卡,1.52和1.254和1.1在同一个网段下很容易找到。路由器的路由表SW端口映射表复杂用到了很多路由算法。
在这里插入图片描述
在这里插入图片描述
ping 192.168.1.254可通,那么网络内传输如1.52—>1.254即网络内怎么传数据的呢?同一网段一找就找到这样的说法是错的,若是这样为什么有了IP地址还要mac地址呢?ip地址(抽象地址)不能直接通信,只能用mac地址(真实地址)通信,ARP协议广播询问谁的ip是1.254,1.254收到这询问就会回复一下,说我的地址是1.254,我的mac地址是。。。1.52知道了1.254对应的mac地址就会在mac层进行传输。
在这里插入图片描述
ip的数据就是mac的数据部分,越往上层(往里)ip层包着还有tcp层,ip数据包里数据部分还会有tcp的头,再往上层(往里)还可能有http的头,最后的数据才是我们要传的数据。
在这里插入图片描述
获取mac地址都是通过ARP协议。如下过程ip的源目地址是不变的为0.102和1.254,只有mac地址一直在切换(竖着对比),有个特例NAT(网络地址转换协议):源地址ip也会进行切换。
在这里插入图片描述
如下图物理层—>mac层—>ip层,物理层和mac层统称为链路层。
在这里插入图片描述
TCP/IP架构如下:以太网协议mac:把cpu想要发送的数据封装为以太网协议(网卡完成这功能)。ip协议:实现路径的管理,传输过程中根据想要发送的目标地址,帮我们的报文在网络中选择一条传输路径(路由器完成这功能)。ip协议针对目标是机器与机器之间通信,平时利用网络过程中需要进程与进程的通信,所以传输层(tcp/udp协议)这层封装有必要,应用层可以自己去定义。

实验室内部交流终端,发信息时效性要高如语音、视频、直播等,丢个一帧两帧影响不大,数据是不停的过来,这类udp协议合适,udp协议简单一些,在ip协议基础上增加了很少一部分功能同时它不是面向连接的,不需要对方给我一个反馈,减少了传输的成本,相对来说时延也小得多。

比如想传一些重要内容,如发一个公告或给谁发一个文件,这个过程对时效性没那么强,传文件稍微等一会也没事但要求传输的准确不能出错,这类应用tcp协议更加适合一些,TCP复杂面向连接
在这里插入图片描述
下面为http数据包传输:ICMP不是CSMA/CD,先加tcp,再加ip。
在这里插入图片描述
在这里插入图片描述
交换机 ,二层交换机 ,多接口网桥是一个东西。路由器 ,三层交换机 ,网关是一个东西。
在这里插入图片描述
1.路由器有几张网卡,是一个网口对应一张网卡吗就一个网卡
2.路由器有多少个ip,几个网口几个ip有一个wan固定IP,有一个 LAN网段,网口可以分配不同的IP
3.手机电脑连接路由器,并没有给电脑指定ip,那这个ip是怎么获得的通过DHCP协议自动分配IP
在这里插入图片描述

3.linux的route指令:route add

如下Gateway指定网关,比如要访问172.17.0.3这个ip,就会根据Destination和Genmask计算出来满足docker0这个条件,走这条路由信息。Flags是标识,其中G表示Gateway不是为*(空或0.0.0.0)。

default是指访问一个ip都不满足下面两个路由信息条件,走default这条。Genmask为0.0.0.0即不指定掩码,255.255.0.0掩了16位,255.255.255.0掩了24位。
在这里插入图片描述
PandoraBox.lan其实是个ip,因为在局域网下,默认配置成了域名。172.17.0.7只1跳,因为Gateway为*空且都在docker0交换机下。
在这里插入图片描述
下面使用route add指令添加自己的路由表:-host指定具体ip,Flags会出现H(具体的ip,而不是网段,32位掩码,4个255,全掩了)。
两种类型:-net x.x.x.x/xx指定网络/网段,-host x.x.x.x指定特定ip。
两种指向:-dev网卡名(指定通过哪个网卡),-gw网关ip(指定通过哪个网关)。
在这里插入图片描述
给win机器添加ip:填199.199.199.199,255.0.0.0,最后全确定。
在这里插入图片描述
未添加路由表时199.199.199.199不属于172.和192.两个网络,所以走了default,到了路由器网关,继续往上找,光猫也没发现继续往上找,传到了联通,199.199.199.199还没被用或不能被ping。
在这里插入图片描述
在这里插入图片描述

4.从一个HTTP请求来看网络分层原理:本地的host文件

百度查看IP查本机电脑公网出口地址是115.25.33.28(如下图所示)这个路由器地址,crt登录云服务器时最上面也会显示从115.25.33.28这个地址登陆进来。
在这里插入图片描述
在这里插入图片描述
两台主机间会通过非常多网络设备,不管哪个网络设备都会发生数据丢失,如果发生数据丢失的话会发生数据重传会出现数据重复(之前丢失的包并不是丢失而是产生了延时)。

数据传输的介质也可能多样,如内网里通过网线进行传输,连接到公网的话会通过光纤进行连接,所以要实现不同介质间信号的转换,还有从光纤到路由器无线脉冲转换,距离远的话还有信号衰减问题。

所以在网络传输过程中有非常多的问题需要解决,把问题分组分层,不同层次间解决不同问题,不同层次间定义标准化接口让它们间可以进行数据的通信。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如下右边一个服务器部署了一个静态页面,通过nginx部署在公网上,浏览器通过域名对它进行访问,浏览器输入域名点回车后是怎么工作的呢?

服务端只认ip地址,浏览器将域名解析出来,看下浏览器里有没有域名对应DNS的缓存,有的话直接拿到服务端的ip地址,没有的话去本地的host文件看有没有配置,没有配置的话才会发起一个DNS请求用来获取服务器ip地址。

DNS也是台服务器也有自己的ip地址通常配在自己的操作系统上的,这时候应用层会构造一个DNS请求报文,应用层会去调用传输层的接口一个socket的API,DNS默认使用UDP实现数据传输,即应用层调用传输层的API,传输层会在DNS请求报文基础上加一个UDP的请求头

传输层将数据交给网络层,网络层同样在UDP请求报文基础上加IP的请求头,网络层会将IP请求报文交给数据链路层,数据链路层会将自己的mac头加上去并把对应的请求报文交给下一个机器的mac地址也会加上去。下一个机器的mac地址通过网络层ARP协议找到,ARP会发送一些请求看下你对应的ip地址的mac地址是多少,最后通过物理层物理介质传出去,通常传到路由器上。
在这里插入图片描述
如上路由器是三层设备(从下向上)从物理层开始连接,物理层交给数据链路层,数据链路层看下地址是不是给我的,是给我的进行解析,不是给我的就丢弃,报文再传给上面一层网络层,网络层把数据传到下一个路由器的地址是多少,会通过运营商的网络接口传到运营商的路由器上

运营商有自己的DNS服务器,如果配置的是运营商自己的DNS服务器的话会直接在这个DNS服务器里找自己对应的域名拿到对应的ip地址,也就是刚请求DNS报文地址,然后原路返回解析直到应用层拿到刚域名对应得ip地址,这样就可以进行HTTP请求报文的发送,再调用传输层协议是TCP参数,同样每到一层加头。

5.HTTP请求的完整过程:无扩自

如下名字里有传输,事实上并没有做传输的事情,HTTP协议数据传输交由TCP协议进行的。无状态:本身不会存储用户信息。可扩展:头部字段可扩展给业务带来灵活性。自描述消息格式:消息类型可以是文本也可以是图片音视频类型,根据消息类型知道对应数据是什么类型。
在这里插入图片描述
在这里插入图片描述
发起HTTP请求是想从服务器上拿到资源对服务器资源修改。如果返回是HTML,浏览器会构造一个DOM数据结构,会解析HTML里有没有其他网络请求,有其它网络请求会继续向服务端发送网络请求,拿到报文后会渲染页面。HTTPS会有一个TLS握手。
在这里插入图片描述

6.TCP协议:TCP报文,tcpdump,syn/accept队列

在这里插入图片描述
文件大会进行切分成segment片段,将分片排序0,1,2…。传输中间线路路由器多且复杂,012…会乱,所以到达接收端要重排序再传给上层应用层。

流量缓冲:三次握手时客户端和服务器双方都会创建一个缓冲区。可靠性传输服务:数据发过去了,客户端一定要收到服务端响应,才认为包到达了服务端,没收到响应,客户端需要超时机制完成数据重发。拥塞控制:当网络差时,tcp协议栈还要考虑发送数据报文大小和发送频率。
在这里插入图片描述
如下是TCP报文,Source port源端口如果是发送端的话是随机生成的,tcp三次握手之前要知道对方端口目的Dest port,和服务器建立连接web服务一般80端口如nginx。unused保留字段,CWR到FIN是报文标识flag,标识报文什么类型的,如果把syn的bit位设为1的话,当前报文是同步序列号即建立连接的报文,ack的bit为1代表响应报文。Receive window是当前服务器可接受数据大小窗口的值。
在这里插入图片描述
如下加上TCP协议头就是五元组,基于TCP的基础上就是四元组。如下三次握手主要做了a和b两件事。
在这里插入图片描述
通常服务端首先进入listen状态,如nginx的话会监听某个端口(如web服务就是80端口),客户端发送请求前会创建一个数据结构(下面黄色)用来存储要发送的端口号等,客户端报文一发出去,客户端立马进入syn-sent状态,服务端收到syn(Synchronous number,同步序列号)报文时也会在本地创建一个对应的数据结构

客户端可以发送很多TCP报文,每个报文都有自己的随机生成算法生成自己的序列号,所以x+1是对x这个报文的响应。建立连接会消耗非常多系统资源(create tcb…),所以不用时要关闭(四次挥手)。中间SYN和ACK可以合在一起节省流量,也可以拆分开。
在这里插入图片描述
下面通过实验看三次握手怎么进行的:
在这里插入图片描述
如下nc命令会发一个TCP三次握手请求,输入服务器地址和端口。
在这里插入图片描述
在这里插入图片描述
内核会对某个端口进行监听,应用程序拿到accept连接后就可进行双向数据通信了。
在这里插入图片描述
如下查看tcp连接状态,-t参数查看当前tcp连接状态,-p显示进程,-n数字型显示ip和端口。如下就是win系统和linux系统建立的连接。
在这里插入图片描述
如下在win下用telnet命令对linux服务器发起tcp连接:telnet安装:控制面板-程序-启用或关闭Windows功能-Telnet Client勾选。
在这里插入图片描述
如下Local是服务端,Foreign是客户端。一个是上面win下cmd去telnet的80端口,另一个是win下crt客户端连接的22端口。
在这里插入图片描述
在这里插入图片描述
如下是tcp四次挥手,关闭连接(客户端或服务端都可以直接关,因为全双工),主动方会进入time_wait状态,MSL是最大的报文生成时间,2MSL就是报文一个来回时间。没有2MSL立马关闭会造成第(服)个问题:ACK j+1这个报文丢失,服务端没收到ACK会不断重发FIN报文,服务端资源没法释放。第(客)个问题:关闭连接意味着资源被释放了,那么端口号被其他进程使用,报文到来时根据tcp的四元组恰好碰到刚释放掉那个连接,造成混乱。
在这里插入图片描述
tcp的数据可靠性传输怎么做的?停止等待重传机制。停止等待协议效率低,所以tcp出了新的协议-滑动窗口协议与累计确认(延时ack)。不是挨个进行报文确认,滑动窗口大小通过tcp三次握手和对端协商,且受网络状况计算出。上面是一个一个报文,如下可发一批报文,服务器不是挨个去确认,上面回一个ack浪费资源,单独响应一个报文时,tcp本身一个报文至少20个字节再加上ip头报文20字节,所以一个ack至少40字节。

所以可以延时ack的发送,确认最后一个报文如5就可以,但这样也有一个问题如3的报文丢了,这时只能确认1和2连续报文,从3以后的报文全要重传,已确认的报文在缓冲区丢弃掉。
在这里插入图片描述

7.HTTPS协议:摘要sha和md5,浏公钥

在这里插入图片描述
HTTPS利用摘要加密(对称和非对称)算法完成加密通道。
在这里插入图片描述
HTTPS是怎么利用上面三个算法实现安全传输通道建立呢?浏览器拿到公钥数字证书中的公钥对随机生成的密钥进行加密,服务端只有私钥才能解密,这样其他人劫到报文没私钥也无法看懂。非对称加密算法效率低。
在这里插入图片描述
B站/知乎/微信公众号:码农编程录
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43435675/article/details/109984227
今日推荐