还有就是今天要聊的是,总结(四) 计算机网络

模块一:基础

OSI七层架构

应用层

表示层

会话层

传输层

网络层

数据链路层

物理层

TCP/IP架构

应用层:HTTP,HTTPS,FTP,SMTP

传输层:TCP,UDP

网络层:IP,ARP

数据链路层:MAC地址在这里。

模块二:HTTP

  • 基础:

超文本传输协议

可以理解为

两点之间传输超文本的协议

不是服务端到浏览器,是一个双向协议,也可以浏览器到服务端。

HTTP是无状态的,所以经常用cookie来保存。

  • HTTP状态码:

1开头,中间状态。

2开头,成功状态。

3开头,重定向状态。

4开头,客户端发送的报文错误,无法访问。

5开头,服务端处理时,内部发生错误。

  • HTTP常用字段:

Host字段:指定目的服务器地址,如Host:www.syjjj.com

Content-Length:数据/报文长度

Conection:Keep-Alive 连接方式:长连接

HTTP1.1之后都是默认长连接了,这个字段是为了兼容过去的Http版本。

Content-Type:text/html 本次回应数据的格式

Accept:* / * 客户端告诉服务端,可以接受所有类型数据。

Content-Encoding:数据压缩方法

  • HTTP报文:

报文分成三部分:首部,空行,主体。

HTTP报文分为两种:请求报文和响应报文

请求报文的结构:

请求行 – 请求首部 – 空行 – 报文主体

响应报文:

状态行 – 响应首部 – 空行 – 报文主体

请求行:请求方法(get/post) + HTTP版本,URI

状态行:响应结果的状态码,原因,HTTP版本。

  • 请求方法get和post

get的含义是请求服务器资源。

post的含义是向uri指定的资源提交数据。

所以get是安全且幂等的,post不安全也不幂等。

  • HTTP的特性:简单,灵活和易于扩展,应用广泛和跨平台。

简单:HTTP报文的基本格式就是:header + body。

  • HTTP协议特性的双刃剑:无状态和明文传输。

无状态:

优点:服务器不需要记忆HTTP的状态,省资源。

缺点:完成关联性操作比较麻烦,需要用到cookie(客户端)和session(服务端)。

Cookie技术:客户端第一次请求的时候,服务端的响应报文带上Cookie。以后每次交流报文加上Cookie来识别身份。

明文传输:

优点:方便阅读,比如我们F12就能看见内容。

缺点:不安全

  • HTTP的最大缺点就是不安全

明文可能被窃听。

不验证双方的身份,可能遭遇伪装。

无法证明是否被篡改。

所以出现了HTTPS。

  • HTTP/1.1和HTTP/1.0

HTTP是基于TCP/IP的“请求-应答模式”。

HTTP/1.1增加了长连接

因为长连接,所以出现了管道网络传输

但是由于“请求-应答模式”,所以会出现队头阻塞

队头阻塞:阻塞队列的请求被阻塞了,则后面请求全在等着。

HTTP/1.1的性能就一般般,所以HTTP/2和HTTP/3都在优化性能。

  • HTTP和HTTPS

区别

1,HTTPS是HTTP加上SSH/TLS安全协议,可以加密传输

2,HTTP的传输很容易,TCP三次握手后就可以开始HTTP的传输。

HTTPS的传输要在TCP的三次握手后再加入SSH/TLS的握手过程,才能传输。

3,HTTP的端口是80,HTTPS是443。

4,HTTPS引入CA的数字证书。

HTTPS解决HTTPS哪些问题?

HTTP的三大问题:窃听风险,篡改风险,冒充风险。

HTTPS的SSH/TLS很好的解决了三个问题。

信息加密:交互信息无法被窃听。

校验机制:修改了就不能正常接收。

身份证书:证明你妈是你妈。

HTTPS是怎么解决的

信息加密用混合加密的方式来实现。

校验机制:用摘要算法为数据生成独一无二的标志,用来校验数据完整性。

身份证书:公钥放在数字证书中。

1,混合加密

通信建立前通过非对称加密交换秘钥,后续不再使用。

通信过程通过对象加密加密明文数据

2,摘要算法

将摘要算法算出来的标志和明文一起给服务器,服务器用相同的摘要算法算出的标志和客户端传来的标志对比,来保证完整性。

3,身份证书:CA发布。

  • HTTPS怎么建立连接的

1,先建立TCP三次握手。

2,客户端向服务器索要验证服务器的公钥。

3,双方协商生产会话秘钥

4,双方采用秘钥通信。

2和3就是SSH/TLS的握手过程。

SSL/TLS的四次握手流程:

1,客户端向服务端发起Client hello请求。

内容:

客户端支持的SSH/TLS版本。

随机生成数,用于生成秘钥。

客户端支持的加密算法。

2,服务器向客户端发起Server hello请求。

内容:

确定SSH/TLS版本。

随机生成数。

确认的加密算法。

服务器的数字证书(公钥在这里)。

3,客户端回应

客户端先查看数字证书是否靠谱。

没问题的话客户端从数字证书取出公钥。

随机生成数,这时候要用公钥加密。

通知后续通信用秘钥加密的方式。

客户端握手结束通知。

4,服务端回应

通过三个随机数,算出会话秘钥。

通知后续通信用秘钥加密的方式。

握手结束通知。

总结:可以得出会话秘钥是用三个随机生成数算出的,2个来自客户端。

  • HTTP的提升过程

1,HTTP1.1比HTTP1.0提升了什么?

长连接,管道网络传输。

2,HTTP2比HTTP1.1提升了什么?

头部压缩

数据二进制

数据流:不是按顺序发送,连续数据包可能来自不同的请求。所以,必须对每个数据包做标志,是来自哪里的。

多路复用:可以一个连接中并发多个请求或响应,移除了串行请求问题,解决了队头阻塞问题。

举例:在⼀个 TCP 连接⾥,服务器收到了客户端 A 和 B 的两个请求,如果发现 A 处理过程⾮常耗时,于是就

回应 A 请求已经处理好的部分,接着回应 B 请求,完成后,再回应 A 请求剩下的部分。

服务器推送:服务器可以主动给客户端发消息了。

HTTP2的问题:基于TCP实现的,所以如果发送丢包,后面都要等他重传回来。

HTTP3的改进:TCP改成UDP,通过QUIC技术实现了TCP的可靠传输。

模块三:TCP

  • TCP的头部格式

序列号:用于保证数据包的有序。随机数为初始值,发送一个+1。

确认应答号:期望下一个接到的包的序列号,用来解决不丢包问题。

控制位:

ACK:为1时,确认应答号有效。

FIN:终止连接为1

RST:为1时,出现异常必须中断。

SYN:建立连接为1,同时要初始化序列号。

  • 什么是TCP

面向连接的,可靠的,面向字节流的传输层通信协议。

面向连接:一对一通信。

可靠的:需要三次握手才能通信。保证一个报文能到达通信端。

面向字节流的:消息是「没有边界」的,所以⽆论我们消息有多⼤都可以进⾏传输。并且消息是「有序的」,当「前⼀个」消息没有收到的时候,即使它先收到了后⾯的字节,那么也不能扔给应⽤层去处理,同时对「᯿复」的报⽂会⾃动丢弃。

  • 什么是TCP连接

(来自百度,不咋理解)⽤于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗⼝⼤⼩称为连接。

所以说TCP连接需要保证这些因素:

Socket:由IP地址和端口组成。

序列号:解决乱序问题。

窗口大小:用于流量控制。

  • 如何确定一个TCP连接

需要一个四元组:源地址,源端口,目的地址,目的端口。

源地址和目的地址存在IP协议,源端口和目的端口存在TCP协议

  • UDP和TCP的区别

UDP是广播方式,TCP是点对点。

UDP不保证交付,近最大可能交付。TCP可靠传输。

UDP协议非常简单,只有四个部分:源端口,目的端口,包长度,校验和。

TCP有流量控制,拥塞控制,UDP啥也没有。

TCP是流式传输,没有边界(基于字节流)。UDP是包传递,有边界的,可能会乱序和丢包。

TCP用于FTP,HTTP。UDP用于DNS,视频,广播。

  • TCP三次握手过程

1,⼀开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端⼝,处于 LISTEN 状态。

2,第一次握手:客户端将SYN为1,初始化序列号,然后发给服务端,客户端变为SYN-SENT状态。

3,第二个握手:服务端收到后,把SYN和ACK为1,初始化序列号,将客户端传来的序列号+1放到确认应答号上。服务端变为SYN-RCVD。

4,第三次握手:客户端收到后,把ACK为1,确认应答号为服务端传来的序列号+1,客户端变为ESTABLISHED。

5,服务端收到后,也变成ESTABLISHED。

  • 为什么要三次握手

保证双方都有接受和发送的能力。

避免重复的历史链接。

同步双方初始序列号。

三次握手避免资源浪费。

  • TCP四次挥手过程

客户端打算关闭连接,此时会发送⼀个 TCP ⾸部 FIN 标志位被置为 1 的报⽂,也即 FIN 报⽂,之后客户

端进⼊ FIN_WAIT_1 状态。

服务端收到该报⽂后,就向客户端发送 ACK 应答报⽂,接着服务端进⼊ CLOSED_WAIT 状态。

客户端收到服务端的 ACK 应答报⽂后,之后进⼊ FIN_WAIT_2 状态。

等待服务端处理完数据后,也向客户端发送 FIN 报⽂,之后服务端进⼊ LAST_ACK 状态。

客户端收到服务端的 FIN 报⽂后,回⼀个 ACK 应答报⽂,之后进⼊ TIME_WAIT 状态

服务器收到了 ACK 应答报⽂后,就进⼊了 CLOSED 状态,⾄此服务端已经完成连接的关闭。

客户端在经过 2MSL ⼀段时间后,⾃动进⼊ CLOSED 状态,⾄此客户端也完成连接的关闭。

  • 为什么挥手要四次

关闭连接时,客户端给服务端穿FIN,这时候是只能接受,不发送数据。

客户端拿到后传个ACK回去,不发送数据但是可能要处理数据。

处理完数据再回FIN。

所以说中间两次挥手时间,是为了个服务器处理数据的时间。

  • TIME_WAIT状态(有机会要好好补充)

TIME_WAIT的等待时间是2MSL,报文最大生存时间的两倍。

主动发起关闭连接的一方,才有TIME_WAIT。

它存在的理由:

1,防⽌具有相同「四元组」的「旧」数据包被收到;

2,保证「被动关闭连接」的⼀⽅能被正确的关闭,即保证最后的 ACK 能让被动关闭⽅接收,从⽽帮助其正常关闭;

TCP 就设计出了这么⼀个机制,经过 2MSL 这个时间,⾜以让两个⽅向上的数据包都被丢弃,使得原来连

接的数据包在⽹络中都⾃然消失,再出现的数据包⼀定都是新建⽴连接所产⽣的。

TCP的机制

重传机制,滑动窗口,流量控制,拥塞控制,

1,重传机制

TCP保证可靠传输的方式之一,采用序列号和确认应答号实现,针对数据包丢失问题。

常见的重传机制:

超时重传(ARQ协议),快速重传,SACK,D-SACK。

TCP会在两个情况下发送重传:数据包丢失,确认应答号丢失。

超时重传

发送一个数据的时候,设置一个定时器,如果超过时间,另外一端没传回来ACK,就会触发超时重传。

RTT:包在两端往返的时间。RT0:超时时间。

RTO稍微比RTT大点就可以了。

快速重传

它不以时间为驱动,以数据为驱动。

它一次传递多个数据包

快速重传的⼯作⽅式是当收到三个相同的 ACK 报⽂时,重传丢失的报⽂段。以ACK为主。

但是也有问题,他解决了超时问题,但是有一个问题,重传是重传这个报文,还是全部报文。

SOCK

这个是为了解决快速重传问题。

D-SOCK

阿这

2,滑动窗口

窗口大小就是不需要等待确认应答,可以继续发送数据的最大值。

窗口大小由接收方决定,发送方窗口约等于接收方窗口。

应用的是滑动窗口算法,一直右移(发送),直到窗口满了,等待左边接受到确定,再继续右移。

3,流量控制

发送方不能一直发数据给接收方,也需要考虑接收方的能处理数据能力。

如果接收方处理不过来,就会出现TCP的重传机制。

为了解决这个问题,TCP就提供一种机制,让发送方根据接收方的处理能力控制数据发送量

避免发送方的数据堆满接受方的缓存

4,拥塞控制

网络堵塞的时候,如果TCP一直发,会导致网络更加拥堵。

所以这玩意的用处就是避免发送方的数据包占满整个网络,emmmmm…

定义了一个拥塞窗口的设定,根据网络拥塞程度动态变化。

  • 如何判断是否拥塞

没接收到接收方的ACK就是拥塞

  • 拥塞控制的算法

慢启动

拥塞避免

拥塞发生

快速恢复

模块四:IP

IPV4地址是32位。255.255.255.255

  • IP地址分类

A类:0开头,主机号24位,第一段是网络号。

B类:10开头,主机号16位,前二段是网络号。

C类:110开头,主机号8位,前三段是网络号。

D类:1110开头

E类:1111开头

  • 怎么计算机哪类网络的主机数呢?

比如C类网的主机号是8位,那么就是2的8次方-2。

全为1的是广播,全为0是网络。

  • 广播地址分类

直接地址:不同网络之间的通信

本地地址:本网络之间的通信

  • 什么是D,E地址

D类地址用于多播,E类还没用上。

  • 多播:

给特定组全部主机广播。

通常不可以穿透路由:要是不同网络,需要使用能穿透路由的多播。

  • IP分类的两个缺点

同一网络下没有地址层次。

不符合现实需求,比如A类网只有254个地址。

  • 无分类地址CIDR

解决IP分类的问题,推出CICR。

A.B.C.D/x

表示前x位是网络号。

  • 子网掩码

另外一种表示网络号和主机号的方式。

掩码1的地方表示网络号,0表示主机号。

  • 子网划分

子网除了划分网络号主机号,还划分子网。

子网将主机号划分为子网网络地址和子网主机地址。

  • 公有IP地址和私有IP地址

A,B,C类地址里面有公有地址和私有地址。

  • IP地址和路由控制

IP地址的网络部分用于路由控制。

就是路由表。

在发送 IP 包时,⾸先要确定 IP 包⾸部中的⽬标地址,再从路由控制表中找到与该地址具有相同⽹络地址的记录,根据该记录将 IP 包转发给相应的下⼀个路由器。如果路由控制表中存在多条相同⽹络地址的记录,就选择相同位数最多的⽹络地址,也就是最⻓匹配。

环回地址:同一个计算机上程序之间通信用的默认地址,localhost和127.0.0.1。

  • IPV6

有128位,是IPV4位数的4倍。

IPV4和IPV6不能互相兼容。

模块五:其他协议

1,DNS:

应用层协议。

解析方式有:递归和迭代。

DNS域名服务器结构:

根DNS服务器

顶级域DNS服务器(com)

权威DNS服务器(syj.com)

客户端只要能够找到任意⼀台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再⼀路顺藤摸⽠找到位于下层的某台⽬标 DNS 服务器。

2,ARP:

IP层协议。

主机的下一跳可以找到IP地址,通过ARP协议,找到下一跳的MAC地址。

ARP请求和ARP响应包来确定MAC地址的。

实现:主机通过ARP协议,广播到每个主机。每个主机拆开协议查看是不是自己的IP地址,是的话把自己的MAC地址插进去,传回主机。

3,RARP:

已知MAC地址求IP地址。

4,DHCP

通过DHCP动态获取IP地址。

5,NAT

网络地址转换NAT,缓解IP地址紧缺问题。

同一公司可能同一个公有IP地址。

6,ICMP

数据包在网络层出现错误时,返回出错原因。

确定IP包是否成功送达目的地。

7,PPP

数据链路层。

点对点连接计算机的协议。

同等单元直接传输的协议,单元指物理设备,缆线啊啥的。

模块六:有意思的问题

  • ping
正文完