计算机网络
1、基础概念
1.1 传输方式的分类
(1)面向有连接型和面向无连接型
面向有连接型:在发生数据之前,需要收发主机之间建立连接。因此在此种通信方式下,必须在通信传输前后,专门进行建立和断开连接的处理,如果与对端无法通信,就能避免发送无谓的数据。
面向无连接型:此方式下通信无需建立和断开连接。发送端可在任何时候自由发送数据,反之,接收端也永远不知道自己会在何时从何处收到数据。因此,在面向无连接的情况下,接收端需要确认是否收到了数据。
(2)电路交换和分组交换
电路交换:每一对收发主机之间的通信是通过专用的、连接各自电路交换机间的一条专用通信线路来完成的,当多个主机都连在此线路上时,某一对主机在收发数据时,此线路会别独占,别的主机就只能等待此对主机通信完后才有机会使用这条电路收发数据。
分组交换:多对收发主机间共享同一条通信线路,收发数据时,将数据分组成多个已标识收发双端地址的数据包,之后再由**分组交换机(路由器)**对相应分组数据重组,发送给对应主机。优点是一条通信线路可以同时支持多对主机通信,缺点是路由器发生缓存饱和或溢出时,可能出现分组数据丢失、无法送达对端的情况。
(3)根据接收端的数量分类
单播:主机一对一通信,如早期的固定电话。
广播:对特定范围内(此范围称为广播域,限同一条数据链路内)的所有主机同时发信,只有此范围内的主机才能收到信息。
多播:对特定范围内的某一组主机进行通信,如电视会议。
任播:对特定范围内的某一组主机中的任意一台主机进行通信,如DNS根域名解析服务器。
1.2 IP地址
地址用于表示通信中的主机,一个主机必须明确地只表示一个主体对象,同一通信网络中不允许出现有相同地址地主机,这就是是地址的唯一性,MAC地址和IP地址均有此特点。当通信主机较多时,高效地找到目标主机是一个问题,因此地址还具备层次性,仅IP地址有此特点。
(1)IP地址的定义
IP地址(IPv4)由32位正整数表示,分配给每一个参与通信的主机。其内部以二进制方式处理,为方便记忆,将32为IP地址转换为每8位一组,共4组,每组以"."隔开,再将每组转换为十进制数,如:
(2)IP地址的组成及分类
IP子地址由 网络标识(网络地址)和 主机标识(主机地址)两部分组成。网络标识在每段数据链路段都必须不同,相同数据链路端内的主机的网络标识必须相同(保证地址的层次性),同一网络标识的 主机标识 则不允许重复(保证地址的唯一性)。
注意:主机标识全部为1表示广播地址,为0表示对应的IP地址不可获知。
(3)子网掩码
为避免上述分类造成的IP地址资源浪费,用子网掩码通过子网网络细分出比上述分类更小粒度的网络;即将原A、B、C类地址中的主机地址部分用作子网地址。子网掩码必须是首位开始连续的“全1”。
1.3 OSI参考模型
(1)OSI模型各个分层作用、网络要素及对应层常见协议
序号 | 分层名称 | 功能/作用 | 网络要素 | 常见协议 |
---|---|---|---|---|
7 | 应用层 | 针对特定应用协议转换成对应数据格式 | HTTP、SSL | |
6 | 表示层 | 设备固有数据格式和网络标准数据格式的转换 | ||
5 | 会话层 | 通信管理。负责建立和断开通信链接。管理传输层以下的分层。 | ||
4 | 传输层 | 管理两个节点间的数据传输。负责可靠传输。 | TCP、UDP | |
3 | 网络层 | 地址管理与路由选择。 | 路由器(3层交换机),网络层面连接两个网络,根据IP地址寻址。 | ARP、ICMP、IPv4 |
2 | 数据链路层 | 互连设备间传送和识别数据帧。 | 连接不同网络段的网桥(亦称2层交换机)、交换集线器(多口网桥),在物理层面根据MAC地址寻址。 | |
1 | 物理层 | 以“0”、“1”代表电压高低、灯光的闪灭。界定连接器和网线的规格。 | 网卡、LAN口。 延长物理连接的中继器(距离较远主机间通信线路的信号放大器)、集线器(多口中继器) |
(2)OSI七层、四层、五层概览
计算机网络分层模型 | ||
---|---|---|
OSI七层模型 | TCP/IP四层模型 | TCP/IP五层模型 |
应用层 | 应用层 | 应用层 |
表示层 | ||
会话层 | ||
传输层 | 传输层 | 传输层 |
网络层 | 网络层 | 网络层 |
数据链路层 | 网络接口层 | 数据链路层 |
物理层 | 物理层 |
2、常见网络协议
2.1 网络层(ARP、ICMP、IPv4)
ARP(地址解析协议)
ARP(Address Resolution Protocol,地址解析协议),根据IP地址找到对应的MAC地址(因为实际的通信是由物理上的MAC来确定目标主机的)。
总之,从一个IP地址发送ARP请求包以了解其MAC地址,目标地址将自己的MAC地址填入其中的ARP响应包返回到IP地址。由此,可以通过ARP从IP地址获得MAC地址,实现链路内的IP通信。ARP请求包是包含请求端自己的IP地址和MAC地址的,因此接收端也可从此包上得知其IP和MAC地址。此外,为了防止ARP包过于泛滥,一般都有缓存机制。
ICMP(网际控制报文协议)
ICMP(Internet Control Message Protocol)用于辅助IP,其主要功能包括确认IP包是否成功到达目标,通知在发送过程中当IP包被废弃的具体原因、改善网络设置等,便于网络问题诊断,以更有效地转发IP数据包和提高交付成功的机会。常用小结为如下:
- 主机或路由器使用ICMP来发送差错报告报文和询问报文。
- ICMP报文被封装在IP数据报中发送。
- ICMP差错报文共五种:终点不可达(目的主机关机等)、原点抑制(传输中因某路由器的策略而主动丢包时,该路由器会返回此报文类型给源主机)、时间超过(TTL=0时还未到达目的主机时回送此报文类型)、参数问题(传输中因干扰导致校验和出错时,返回此报文)、改变路由/重定向(有更短的路径时,给源主机发送最佳路由路径)
- 常见的ICMP询问报文有两种:回送请求和应答(测试目的站是否可达及了解其有关状态)、时间戳请求和应答(进行时钟同步和测量时间)
- ICMP应用:tracert(跟踪路由)、ping(分组网间探测)
2.2 传输层(TCP、UDP)
传输层的知识及截图来自湖南科技大学b站博主湖科大教书匠的计算机网络微课堂的第五章,截图仅用学习。
(1)TCP与UDP的对比
(2)TCP流量控制
(3)TCP的拥塞控制
A、慢开始和拥塞避免
B、快重传和快恢复
C、小结汇总
(4)TCP超时重传时间的选择
(5)TCP可靠传输的实现
(6)TCP的运输连接管理
A、建立连接
不能两握手的原因分析:根因是通信双方未处于同步状态
B、连接断开
进行时间等待的原因:
另外,经过2MSL后,就可以使本次连接持续时间内的产生的所有报文段都从网络中消失,这样就可以使下一个新的TCP连接中不会出现旧连接中的报文段。
C、保活计数器
2.3 应用层(HTTP)
(1)HTTP协议常用方法
GET(查)
从指定的资源请求数据,用于获取数据,一般用于搜索排序和筛选之类的操作。
POST(增、改)
向指定的资源提交要被处理的数据,用于将数据发送给服务器,一般用于修改和写入数据。
GET与POST的区别
- post请求更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中,get请求的是静态资源,则会缓存,如果是数据,则不会缓存)
- post请求发送的数据更大(get请求有url长度限制,http协议本身不限制,请求长度限制是由浏览器和web服务器决定和设置)
- post请求能发送更多的数据类型(get请求只能发送ASCII字符)
- 传参方式不同(get请求参数通过url传递,post请求放在request body中传递)
- get请求产生一个TCP数据包;post请求产生两个TCP数据包(get请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据;post请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 返回数据)
PUT(上传文件)
DELETE(删除文件)
(2)HTTP报文结构
请求报文如下:
响应报文如下:
(3)常见状态码
状态码的类别:
类别 | 原因短语 | |
---|---|---|
1xx | 信息性状态码 | 接收的请求正在处理 |
2xx | 成功状态码 | 请求正常处理完毕 |
3xx | 重定向状态码 | 需进行附加操作以完成请求 |
4xx | 客户端错误状态码 | 客户端发起的请求有误 |
5xx | 服务器端错误状态码 | 服务端处理请求出错 |
常见状态码
状态码 | 原因短语 |
---|---|
200 | OK(正常处理完毕) |
204 | No Content(请求处理完成,但无新内容返回。客户端请求的资源无需更新时使用) |
206 | Partial Contents(已成功返回客户端请求的那部分范围的资源) |
301 | Moved Permanently(永久重定向,请求的资源已永久地移动到新的地址) |
302 | Found(临时重定向,请求的资源已暂时地移动到新的地址,此次请求用此新地址访问,之后地访问仍用旧地址) |
303 | See Other(请求的资源在另一个URI中也有,请访问另一个URI) |
304 | Not Modified(客户端发送附带条件的请求时,请求不满足条件则返回此状态码) |
400 | Bad Request(客户端请求存在语法错误) |
401 | Unauthorized(访问的资源需要对客户端进行认证) |
403 | Forbidden(禁止客户端访问此资源) |
404 | Not Fond(请求的资源不存在) |
501 | Internal Server Error(服务器内部错误) |
503 | Service Unavailable(服务器正在维护中) |
(4)常见的HTTP首部
通用首部字段
首部字段名 | 说明 |
---|---|
Cache-Control | 控制缓存的行为 |
Date | 报文的创建时间 |
Transfer-Encoding | 指定报文主体的传输编码格式(chunk分块) |
Via | 代理服务器的相关信息 |
请求首部字段
首部字段名 | 说明 |
---|---|
Accept | 用户代理可处理的媒体类型(文本、图片、视频等) |
Accept-Charset | 优先的字符集(utf-8等) |
Accept-Encoding | 优先的内容编码(压缩格式如gzip、compress等) |
Accept-Language | 优先的语言(自然语言,如中文) |
Authorization | Web认证信息(收到服务器的401响应后通过此字段把客户端认证信息发给服务器) |
Host | 请求资源所在的服务器 |
User-Agent | HTTP客户端信息 |
响应首部字段
首部字段名 | 说明 |
---|---|
Location | 令而客户端重定向到指定URL |
Server | HTTP服务器的安装信息 |
WWW-Authenticate | 服务器对客户端的认证信息(返回401时会携带此字段) |
实体首部字段
首部字段名 | 说明 |
---|---|
Content-Encoding | 实体适用的编码方式(压缩格式如gzip、compress等) |
Content-Language | 实体主体的自然语言,如中文 |
Content-Length | 主体的大小(单位:字节) |
Content-Type | 实体主体的媒体类型(文本、图片、视频等) |
为Cookie服务的首部字段
首部字段名 | 说明 | 首部类型 |
---|---|---|
Set-Cookie | 开始状态管理所使用的Cookie信息 | 响应首部字段 |
Cookie | 从服务器接收到的Cookie信息 | 请求首部字段 |
(5)Cookie、session、Token的区别
相同点:三者都用于鉴权,都是由服务器生成。
不同点:
cookie保存在浏览器上面,不安全。
session保存在服务器的内存,并且它一般时通过cookie传输session id,它比cookie安全,但当访问量大时会影响服务器的性能。
token存储在服务器的数据库,通常通过登陆后一个特定的接口传入appid和appsect来获取,后续所有的请求都必须带上token才能请求成功。有些项目token也是通过cookie来传输。