网络结构
ISP Internet service provider 网络服务提供商
网络组成部分
- 主机 ( 客户端 服务端 ) : 接收或提供信息
- 路由器 : 转发主机之间的信息
- 网络协议 : 定义统一格式,方便路由器和主机编码和解码
计算机网络分类
计算机网络可以按照分布范围划分为局域网(LAN)、城域网(MAN)和广域网(WAN)。
局域网(LAN): 就是老师课程中说的区域网,是指在较小的地理区域内,如办公室、实验室或家庭内建立的计算机网络。局域网通常使用广播技术来传输数据。
城域网(MAN)是指若干个局域网互相连接而成,适合于大都市的较大规模的计算机网络。
广域网(WAN)是指涉及几个城市、一个国家、各个国家之间的计算机网络。互联网就是一个广域网的例子。
信息交换方式
-
电路交换:在通信双方之间建立一条专用的物理链路,并在整个通信过程中一直占用这条链路。这种方式的优点是通信质量稳定,缺点是建立连接需要一定时间,且线路利用率低
-
分组交换::将数据分成若干个数据包,每个数据包独立传输。这种方式的优点是线路利用率高,缺点是通信质量不稳定,可能会出现延迟、丢包等问题。(报文)
网络分层(分清职责)
-
物理层:负责定义物理设备标准,如电缆的接口类型、光纤的接口类型、各种传输介质的传输速率等。
-
数据链路层:负责在两个相邻节点之间传输数据帧,以及检测并纠正数据传输过程中的错误。
-
网络层:负责为数据包选择路由,以及处理拥塞控制。
-
传输层:负责提供端到端的可靠传输,以及流量控制。
-
会话层:负责建立、管理和终止会话。
-
表示层:负责数据格式转换、数据加密和解密等。
-
应用层:负责为应用程序提供网络服务。
TCP/IP四层模型是互联网使用最广泛的一种网络模型,它将计算机网络分为网络接口层、网际层、传输层和应用层四个层次。
- 网络接口层:相当于OSI模型中的物理层和数据链路层,负责定义物理设备标准和在两个相邻节点之间传输数据帧。
- 网际层:相当于OSI模型中的网络层,负责为数据包选择路由和处理拥塞控制。
- 传输层:与OSI模型中的传输层相同,负责提供端到端的可靠传输和流量控制。
- 应用层:相当于OSI模型中的会话层、表示层和应用层,负责建立会话、数据格式转换和为应用程序提供网络服务。
网络协议 - 标头和载荷
在计算机网络中,数据包通常由标头和载荷两部分组成。标头包含了用于传输数据包的控制信息,如源地址、目的地址、序号、校验和等。而载荷则是数据包中实际传输的数据部分。类比于快递单号信息
协议的存在依赖于连接。
网络协议定义了标头和载荷的格式和顺序,以便在计算机网络中正确地传输和接收数据包。例如,在 TCP 协议中,标头包含了源端口、目的端口、序号、确认号等信息,而载荷则是 TCP 数据段中实际传输的数据。
1、下面是http协议报文的例子,帮助大家理解。
HTTP 协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,它定义了客户端和服务器之间的通信格式。HTTP 协议分为请求和响应两个部分,每个部分都包含标头和正文两个部分。
使用 GET 方法来传递数据的 HTTP 请求示例:
makefile
复制代码
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
在这个示例中,第一行是请求行,它包含了请求方法(GET)、请求资源的路径(/hello.txt)和 HTTP 协议版本(HTTP/1.1)。接下来的几行是请求头部,它包含了一些用于控制请求的信息,如 User-Agent、Host 和 Accept-Language 等。最后,请求正文为空。
2、再补充一下TCP报文的格式和一些关键字段的解释
- 源端口和目的端口 各占两个字节,TCP的分用功能也是通过端口实现的。
- 序号 占4个字节,范围是[0,232],TCP是面向字节流的,每个字节都是按顺序编号。例如一个报文段,序号字段是201,携带数据长度是100,那么第一个数据的序号就是201,最后一个就是300。当达到最大范围,又从0开始。
- 确认号 占4个字节,是期望收到对方下一个报文段的第一个字节的序号。若确认号=N,则表示序号N前所有的数据已经正确收到了。
- 数据偏移 占4位,表示报文段的数据部分的起始位置,距离整个报文段的起始位置的距离。间接的指出首部的长度。
- 保留 占6位,保留使用,目前为0.
- URG(紧急) 当URG=1,表明紧急指针字段有效,该报文段有紧急数据,应尽快发送。
- ACK(确认) 仅当ACK=1时,确认号才有效,连接建立后,所有的报文段ACK都为1。
- PSH(推送) 接收方接收到PSH=1的报文段,会尽快交付接收应用经常,不再等待整个缓存填满再交付。实际较少使用。
- RST(复位) RST=1时,表明TCP连接中出现严重差错,必须是否连接,再重连。
- SYN(同步) 在建立连接时用来同步序号。当SYN=1,ACK=0,则表明是一个连接请求报文段。SYN=1,ACK=1则表示对方同意连接。TCP建立连接用到。
- FIN(终止) 用来释放一个连接窗口。当FIN=1时,表明此报文段的发送方不再发送数据,请求释放单向连接。TCP断开连接用到。
- 窗口 占2个字节,表示发送方自己的接收窗口,窗口值用来告诉对方允许发送的数据量。
- 校验和 占2字节,检验和字段查验范围包括首部和数据部分。
- 紧急指针 占2字节,URG=1时,紧急指针指出本报文段中的紧急数据的字节数(紧急字节数结束后为普通字节)。
- 选项 长度可变,最长可达40字节。例如最大报文段长度MSS。MSS指的是数据部分的长度而不是整个TCP报文段长度,MSS默认为536字节长。窗口扩大,时间戳选项等
3、UDP的报文以及UDP与TCP的区别
UDP的报文:
二者的区别
1. 连接
- TCP 是面向连接的传输层协议,传输数据前先要建立连接。TCP 面向字节流
- UDP 是不需要连接,即刻传输数据。面向报文。
2. 服务对象
- TCP 是一对一的两点服务,即一条连接只有两个端点。
- UDP 支持一对一、一对多、多对多的交互通信
3. 可靠性
- TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。
- UDP 是尽最大努力交付,不保证可靠交付数据。
4. 拥塞控制、流量控制
- TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
- UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
5. 首部开销
- TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是
20个字节,如果使用了「选项」字段则会变长的。 - UDP 首部只有 8 个字节,并且是固定不变的,开销较小。
6. 传输方式
- TCP 是流式传输,没有边界,但保证顺序和可靠。
- UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。
7. 分片不同
- TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
- UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。
TCP / UDP
HTTP1 / HTTP2 / HTTP3(QUIC)
请求头: 请求方法 路径 协议版本
响应头: 协议版本 状态码
HTTP1 HTTP1.1
HTTP1.1 缺点:无法多路复用。
HTTP2
使用帧传输。 好处:多路复用、解决队头堵塞、调整相应传输的优先级、头部压缩、Server Push。
帧的格式:
HTTP3 QUIC
Quick UDP internet connection。(丢包重传、顺序发送)
出现的原因:因为HTTP2不够快。
现存网络设备对TCP和UDP支持已经僵化,UDP不靠谱但是QUIC靠谱,QUIC可以为除HTTP协议以外的应用层协议提供支持。
同一个客户端再次请求时:
WebSocket
有状态的持久连接,服务端可以主动推送消息,用WebSocket发送消息延迟比HTTP低。
由HTTP协议升级而来,在建立HTTP连接之后,再协商使用Websocket进行通信。
CDN
CDN解决HTTP协议之外的问题。
HTTP3再快,也有无法突破的物理极限、重复发送同一数据、只有一台服务器流量如何承载。
DNS劫持:域名解析一般由网站自己处理,要加速的域名则重定向到CDN厂商的域名解析服务处理 ,CDN厂商根据来源确定最近的CDN服务器的IP,用户直接访问最近的CDN服务器。
每隔一段时间,会清除一部分数据。
拉策略:现场去获取数据。 推策略:先存着,用的时候直接发。
安全(SSL / TLS / 基础密码学)
网络安全三要素:
- 机密性:攻击者无法获知通信内容
- 完整性:攻击者对内容进行篡改时能被发现
- 身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信
加密方式:
- 对称加密:加密、解密用同样的密钥
- 非对称加密:加密、解密使用不同的密钥(公钥和私钥) ,而且公钥加密只能用私钥解密、私钥加密只能用公钥解密
密码散列函数(哈希函数):
- 输入:任意长度的内容
- 输出:固定长度的哈希值
- 性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
完整性和身份验证(数字签名)。
数字签名:对明文内容的哈希值使用私钥加密,验证者使用公钥验证。
根证书是证书链的尽头,验证的一连串证书称为证书链,分发证书、验证证书的基础设施称为PKI,Public Key Infrastructure,所以想要实现身份验证、通信双方需要先有秘密信息,即根证书中的公钥。
查看路径:【🔒】→【连接是安全的】→【证书有效】
HTTPS
HTTPS = HTTP + TLS
TLS = 身份验证 + 加解密
服务端身份验证靠 PKI,客户端身份验证靠HTTP协议。
起初HTTP在传输数据时使用的是明文,是不安全的。为了解决这个隐患,网景(Netscap)公司推出了SSL。而越来越多的人也开始使用HTTPS(HTTP+SSL)。
SSL(Secure Socket Layer)安全套接层是Netscape公司率先采用的网络安全协议。它是在传输通信协议(TCP/IP)上实现的一种安全协议,采用公开密钥技术。SSL广泛支持各种类型的网络,同时提供三种基本的安全服务,它们都使用公开密钥技术。 SSL(Secure Socket Layer 安全套接层)是TCP/IP协议中基于HTTP之下,TCP之上的一个可选协议层。
HTTPS的推出受到了很多人的欢迎,在SSL更新到3.0时, 互联网工程任务组(IETF)对SSL3.0进行了标准化,并添加了少数机制,并将其更名为TLS1.0(Transport Layer Security 安全传输层协议。