前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >总结(四) 计算机网络

总结(四) 计算机网络

作者头像
宇宙无敌暴龙战士之心悦大王
发布2022-01-10 11:38:10
3910
发布2022-01-10 11:38:10
举报
文章被收录于专栏:kwaikwai

模块一:基础

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的传输。

代码语言:javascript
复制
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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模块一:基础
  • 模块二:HTTP
  • 模块三:TCP
    • TCP的机制
    • 模块四:IP
    • 模块五:其他协议
    • 模块六:有意思的问题
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档