Notes1网络(HTTPS)

Posted 码农编程录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Notes1网络(HTTPS)相关的知识,希望对你有一定的参考价值。


1.局域网:CSMA/CD,SW

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

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

hub集线器缺点:1.进行数据的广播会导致带宽利用率较低。2.在链路上同时只能有一个设备发送数据,链路利用率低。3.没有标识,只是广播出去,让设备自己判断是不是自己的,工作效率低。

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,mith,DHCP,NAT

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

tcp:传一些重要内容,如发一个公告或给谁发一个文件,这个过程对时效性没那么强,传文件稍微等一会也没事但要求传输的准确不能出错,TCP复杂面向连接

下面为http数据包传输:ICMP不是CSMA/CD。


交换机 ,二层交换机 ,多接口网桥是一个东西。路由器 ,三层交换机 ,网关是一个东西。

3.从一个HTTP请求来看网络分层原理:/etc/hosts

百度查看IP查本机电脑公网出口地址是115.25.33.28这个路由器地址,crt登录云服务器时最上面也会显示从115.25.33.28这个地址登陆进来。互联网通过电信专线+路由器或移动基站(蜂窝网络)。两台主机间会通过非常多网络设备,不管哪个网络设备都会发生数据丢失,并不是丢失而是产生了延时,数据会重传,这样会出现数据重复。数据传输的介质也可能多样,如内网里通过网线进行传输,连接到公网的话会通过光纤进行连接。

所以要实现不同介质间信号的转换,还有从光纤到路由器无线脉冲转换,距离远的话还有信号衰减问题。所以在网络传输过程中有很多问题要解决,把问题分层,不同层间解决不同问题,不同层间定义标准化接口让它们间可进行数据通信。



1.如下右边一个服务器部署了一个静态页面,通过nginx部署在公网上,看下浏览器里有没有域名对应DNS的缓存,有的话直接拿到服务端的ip地址,没有的话去浏览器本地的host文件看有没有配置,没有配置的话才会发起一个DNS请求用来获取服务器ip地址。

2.DNS也是台服务器也有自己的ip地址通常配在自己的操作系统上,这时应用层会构造一个DNS请求报文,应用层会去调用传输层的接口一个socket的API,DNS默认使用UDP实现数据传输,传输层会在DNS请求报文基础上加一个UDP的请求头。传输层将数据交给网络层,网络层同样在UDP请求报文基础上加IP的请求头,网络层会将IP请求报文交给数据链路层,数据链路层会将自己的mac头加上去并把对应的请求报文交给下一个机器的mac地址也会加上去。下一个机器的mac地址通过网络层ARP协议找到,ARP会发送一些请求看下你对应的ip地址的mac地址是多少,最后通过物理层物理介质传出去,通常传到路由器上。

3.路由器是三层设备(从下向上,三层交换机)从物理层开始连接,物理层交给数据链路层,数据链路层看下地址是不是给我的,是给我的进行解析,不是给我的就丢弃,报文再传给上面一层网络层,网络层把数据传到下一个路由器的地址是多少,会通过运营商的网络接口传到运营商的路由器上

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

如下名字里有传输但并没有做传输的事情,HTTP协议数据传输交由TCP协议进行的。无状态:本身不会存储用户信息。可扩展:头部字段可扩展给业务带来灵活性。自描述消息格式:消息类型可以是文本也可以是图片音视频类型,根据消息类型知道对应数据是什么类型。


发起HTTP请求是想从服务器上拿到资源或对资源修改。如果返回是html,浏览器会构造一个DOM数据结构,会解析HTML里有没有其他网络请求,有其它网络请求会继续向服务端发送网络请求,拿到报文后会渲染页面。HTTPS会有一个TLS握手。

Linux下/etc/hosts文件如下行:

4.TCP协议:telnet,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三次握手请求,输入服务器地址和端口。



如下查看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以后的报文全要重传,已确认的报文在缓冲区丢弃掉。

5.HTTPS协议:摘要sha和md5,3个加密套件


HTTPS利用摘要加密(对称和非对称)算法完成加密通道。


win下对文件进行MD5校验用自带的certutil工具:md5sum openbmc.tar.gz。linux下:certutil -hashfile openbmc.tar.gz MD5。02569d063ea8d…

以上是关于Notes1网络(HTTPS)的主要内容,如果未能解决你的问题,请参考以下文章

《我的第一本编程书》 作者:平山尚 译者:张沈宇 Notes1

《盲眼钟表匠》《The Blined Watchmaker》 作者:理查德.道金斯 译者:王道还 Notes1

[Android P][Network data][Notes1]DcTracker setDataProfile 判断APN modemCognitive and requestNetwork se

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装