计算机网络


一、概述

1 网络边缘

定义:接入网的终端。

互联网很多核心内容都是建立在互联网边缘的端系统的应用之上实现的。

2 网络核心

定义:主干网。

3 七层模型

七层模型

自顶到底 作用
应用层 为应用程序提供网络服务
表示层 数据格式转换、数据压缩和数据加密
会话层 建立、断开和维护通信链接
传输层 为上层协议提供端到端的可靠传输
网络层 寻址和路由
数据链路层 定义通过通信媒介互连的设备之间传输的规范
物理层 利用物理传输介质为数据链路层提供物理连接

二、物理层

1 概述

数据单元(PDU)是比特。


三、数据链路层

1 概述

数据单元(PDU)是帧。

2 ARP

地址解析协议,根据IP获得MAC。

彻底搞懂系列之:ARP协议 - 知乎 (zhihu.com)

3 CRC循环冗余校验

发送方计算余数:

  1. 根据生成多项式的最高次方数,消息后面加几个0,比如最高3次方,则添加000

  2. 根据多项式,生成除数,比如G(x) = x3 + x2 + 1,则生成1101(没有1次方,所以第三个数是0)

  3. 被除数和除数前面的位数做异或,如果位数相等表示可以异或,值为1,不能异或值为0。
  4. 最后一次计算,最高次方数为几,就取几位余数,加到发送消息后面。

接收方:

  1. 除数也是由G(x)生成,计算方法一致。
  2. 算出最后结果余数为0表示没有误码,否则则是有误码。

四、网络层

1 概述

点到点 主机到主机的通信 数据单元(PDU)是分组。

2 协议

2.1 IPv4

如何购买公网IP

IP地址划分

(20 封私信 / 80 条消息) 什么是公网IP和内网IP? - 知乎 (zhihu.com)

特殊IP地址 作用
0.0.0.0 本地网络中的所有主机,也称为“本地网络地址”或“通配符地址”
127.0.0.1 本地主机,也称为“环回地址”
169.254.0.0/16 自动配置地址,也称为”APIPA地址“,用于在没有DHCP服务器的情况下自动配置IP地址。可以在同广播域中临时通信(B类保留地址
192.0.0.0/24 IANA保留地址,用于特殊用途,如测试和实验
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 私有地址,用于在私有网络中使用,不会被路由器转发到公共互联网
224.0.0.0/4 多播地址,用于向多个主机发送消息
240.0.0.0/4 保留地址,用于特殊用途,如组播和实验
255.255.255.25 广播地址,用于向本地网络中的所有主机发送广播消息

2.2 IPv6

2.3 ICMP

2.4 IMGP

3 路由协议

3.1 RIP

3.2 OSPF

3.3 BGP

3.4 其他协议

DSDV 目的节点序列距离矢量:Destination-Sequenced Distance Vectoring

AODV 无线自组网按需平面距离矢量路由协议:Ad hoc on-demand distance vector routing


五、传输层

1 概述

端到端 进程到进程的通信 数据单元(PDU)是报文段。

2 多路复用和解复用

多路复用:multiplexing(Mux)

  • 服务器同一个IP和Port收不同的客户端的响应。(TCP会对应不同的套接字,UDP不会)
  • 将多个数据流(streams)合并为一个数据流;把传给不同人的数据压在了一起。
  • 你的的手机正在浏览网页,刷新电子邮件,同时连接到微信。所有这些连接都通过同一链路发送。

解多路复用:demultiplexing

  • 解刚刚收到的通信信息给不同的套接字(TCP)。
  • 多路复用的逆过程,数据流被分离成单独的部分,相当于解码。
  • 手机接收到的数据包流将被分割并发送到相应的网络、电子邮件、微信程序。

3 校验和

  1. 所有部分分成16bit一组,不足补0。
  2. 求和,计算溢出的1加到尾部。
  3. 取反作为校验和。(或二进制求反相加)
  4. 接收端接收后也按①②进行计算,最后直接和校验和相加,若等于FFFF表示未出错。(或直接二进制求反相加,结果一致)

4 可靠传输

传输协议 协议内容
RDT 可靠数据传输协议 Reliable Data Transfer。使用有限状态机 (FSM) 来描述发送方和接收方
流水线协议 未接收确认就发送下一个包(增大利用率)
滑动窗口协议 通过一个可移动的窗口来传递数据包。
RDT协议版本 更新内容
rdt 1.0 完全可靠传输
rdt 2.0 存在差错(通过ACK和NAK进行确认)
rdt 2.1 保证ACK/NAK不出错
rdt 2.2 取消NAK
rdt 3.0 超时重传(包重发,不是ACK重发)

滑动窗口协议

SW / RW(发送方窗口数 / 接收方窗口数)

n个分组,序号2 ** n个

GBN最大窗口数:2 ** n - 1

SR最大窗口数:2 ( n - 1 ),总和最大数:2 n

SR复杂于GBN:简单工作GBN,复杂SR。

SW和RW比例 协议
SW = 1 ; RW = 1:Stop and Wait 停止等待协议(如上的rdt3.0)
SW > 1 ; RW = 1:GBN 回退N帧协议。ACK具有累计确认性。(一个ACK序号可以确保之前的包已经收到)异常:超时后窗口中的包全部重发
SW > 1 ; RW > 1:SR 选择重传协议。ACK不具有累计确认性。异常:超时后只发送超时的窗口中的包。

5 TCP

5.1 报头

img

序号:报文段首字节的在字节流的编号。(偏移量)(编号一般不从0开始,防止残留包识别错误)

确认号: 期望从另一方收到的下一个字节的序号。累积确认。

5.2 RTT和超时设置

采样:

  • 设置为:中心值+4标准差。

设置:

  • 局域网可仅设置一次,波动大的需要动态设置(每隔一段时间测一次,然后加权。(之前测的权重低,新测的值权重高)计算平均值)

5.3 TCP设置

累计确认。

超时重传最老的一个包,定时器也是仅设置为最老的一个包的定时(滑动窗口)。

快速重传:重复的确认,例如收到了ACK50,之后又收到3个ACK50,此时不需要等待超时重传定时器溢出,直接重发该报文段即可。

5.4 流量控制

Piggybacking:捎带技术,在数据中心带上接收方的缓冲区大小防止发送方发送数据过多。

5.5 连接管理

两次握手失败:

  1. 客户端定时器超时,多次重发连接请求,服务器维护了多个无效的半连接。

三次握手:

四次挥手:

5.6 TCP传输补充

ARQ协议:

超时重传:

TCP粘包:

6 UDP

6.1 报头

img

7 拥塞控制

7.1 拥塞原因

场景一【没有重传】:

  • 输入的吞吐量达到了链路带宽的一半。(还有输出占一半)

场景二【重传】:

  • 理想化:知道路由器缓冲区大小,发送缓冲区可以接受的大小的包。

  • 现实:重复发送数据,但是缓冲区接收不了导致丢失,而此时发送端又会发更多的包,导致拥塞。

场景三【死锁】:

  • 四个发送端形成循环,形成死锁。

7.2 拥塞控制方法

端到端拥塞控制:

  • 原理:网络边界(端)自行判断网络是否拥塞。

网络辅助的拥塞控制:

  • 原理:提供网络核心是否拥塞的信息到网络边界(端),网络边界(端)自行调整。

7.3 案例

ATM ABR:

  • 原理:发生拥塞了就降低发送速度,使其达到最小保障速率。
  • 发送端发送的RM信元被接收端返回,接收端不做任何改变。

RM:资源管理信源(部署在网络交换机中)

  • NI bit(no increase in rate):(轻微拥塞)速率不要再增加了
  • CI bit(congestion indication):拥塞指示(网络明显拥塞)

7.4 TCP拥塞控制

8 拓展

QUIC链接

(作用于应用层)

QUIC(Quick UDP Internet Connection)是谷歌制定的一种基于UDP的低时延的互联网传输层协议。

SCTP链接

SCTP(Stream Control Transmission Protocol)是指流控制传输协议,是在2000年由IETF的SIGTRAN工作组定义的一个传输层协议。

SCTP是一种提供了可靠、高效、有序的数据传输协议。

主要的贡献是对多重联外线路的支持,一个端点可以由多于一个 IP地址组成,使得传输可在主机间或网卡间做到透明的网络容错备援。

TCP 和 UDP 可以使用同一个端口吗? - 知乎 (zhihu.com)

9 应用层应用

TCP对应的典型的应用层协议:

  • FTP:文件传输协议
  • SSH:远程登录协议
  • HTTP:web服务器传输超文本到本地浏览器的超文本传输协议

UDP对应的典型的应用层协议:

  • DNS:域名解析协议
  • TFTP:简单文件传输协议

六、应用层

1 概述

数据单元(PDU)是报文。

2 端口号

较全部 端口分类

端口号/实现协议 端口应用
21/tcp FTP 文件传输协议
22/tcp SSH 安全登录、文件传送(SCP)和端口重定向
23/tcp Telnet 不安全的文本传送
25/tcp SMTP Simple Mail Transfer Protocol (E-mail)
69/udp TFTP Trivial File Transfer Protocol
79/tcp finger Finger
80/tcp HTTP 超文本传送协议 (WWW)
88/tcp Kerberos Authenticating agent
110/tcp POP3 Post Office Protocol (E-mail)
113/tcp ident old identification server system
119/tcp NNTP used for usenet newsgroups
220/tcp IMAP3
443/tcp HTTPS used for securely transferring web pages

3 Web与HTTP 80 443

3.1 Web

定义:站点链表

URL:<协议> : // <主机> : <端口> / <路径> ? <信息> (get 请求)

请求类型

3.2 HTTP

超文本传输协议。

无状态协议。

http 默认端口 80。

https 默认端口 443。

3.3 HTTP 响应头部

img

img

Connect:连接状态

==头部和正文间会有用空白行隔开,代表请求头结束。==

3.4 HTTP响应码

响应码 响应内容
1XX——信息类(Information) 表示收到 http 请求,正在进行下一步处理,通常是一种瞬间的响应状态
2XX——成功类(Successful) 表示用户请求被正确接收、理解和处理
200(OK) 请求成功。一般用于 GET 与 POST 请求
201(Created) 已创建。成功请求并创建了新的资源
202(Accepted) 接受
3XX——重定向类(Redirection) 表示没有请求成功,必须采取进一步的动作
301(Moved Permanently) 资源被永久移动。请求的资源已被永久的移动到新 URI,返回信息会包括新的 URI,浏览器会自动定向到新 URI。今后任何新的请求都应使用新的 URI
302(Found) 资源临时移动。资源只是临时被移动,客户端应继续使用原有 URI
304 用其他策略获取资源
4XX——客户端错误(Client Error) 表示客户端提交的请求包含语法错误或不能正确执行
400(Bad Requests) 客户端请求的地址不存在或者包含不支持的参数
401(Unauthorized) 未授权,或认证失败。对于需要登录的网页,服务器可能返回此响应
403(Forbidden) 没权限。服务器收到请求,但拒绝提供服务
404(Not Found) 请求的资源不存在。遇到 404 首先检查请求 url 是否正确
5XX——服务端错误(Server Error) 表示服务器不能正确执行一个正确的请求(客户端请求的方法及参数是正确的,服务端不能正确执行,如网络超时、服务僵死,可以查看服务端日志再进一步解决)
500(Internal Server Error) 服务器内部错误,无法完成请求
503(Service Unavailable) 由于超载或系统维护(一般是访问人数过多),服务器无法处理客户端的请求 ,通常这只是暂时状态
600 源站没有返回响应头部,只返回实体内容

3.5 请求类型

GET请求与POST请求的区别:(post请求需要服务器的支持)

  1. get请求时参数会跟在浏览器地址栏的后面,而post请求不会。(post请求会将数据存放在请求体中)
  2. get请求相对于post而言,不那么安全。
  3. get请求传递的数据长度是有限的,而post请求基本没有限制。(长度与服务器相关)
  4. get请求有缓存(会将数据存放在浏览器中,即本地磁盘中),而post请求无缓存,因此get请求比post请求快。(2倍左右)
请求类型 作用
get 请求指定的页面信息,并返回实体主体
post 向指定资源提交数据以处理请求(提交表单或上传文件),数据被包含在请求体中。post可能会导致新资源建立或已有资源的修改
head 与get请求相似,但是只返回响应行和响应头,不返回响应正文
put 从客户端向服务器传送数据并进行存储或替换。(默认关闭)
delete 请求删除服务器指定的页面
connect HTTP1.1协议中预留给能够将连接改为管道方式的代理服务器
options 允许客户端查看服务器性能
trace 回显服务器收到的请求,主要用于测试或诊断

3.6 Cookie与Session

Cookie:

  • 客户端将用户登录后的 Cookie 存入客户端的 Cookie 文件中。

Session:

  • 追踪用户状态,Session信息存在服务器端的数据库或文件中。

3.7 资源

URI:Uniform Resource Identifier,统一资源标识符。是URL和URN的超集。

URL:Uniform Resource Locator,统一资源定位符。通过网址定位,资源位置一变网址将会失效。

URN:Uniform Resource Name,统一资源名称。通过一个字符串和解析器可以随时定位资源的最新位置,但是部署麻烦。

3.8 同源协议

同源策略需要同时满足以下三点要求:

  1. 协议相同
  2. 域名相同
  3. 端口相同

http: http://www.test.com与 https: https://www.test.com不同源——协议不同

http: http://www.test.com与 http: http://www.admin.com 不同源——域名不同

http: http://www.test.com与 http: http://www.test.com:8081不同源——端口不同

只要不满足其中任意一个要求,就不符合同源策略,就会出现“跨域”

4 FTP 20 21

20:FTP数据连接。

21:FTP控制连接。

文件传输协议。

用户名和密码都是明文传输。

有状态协议。

控制命令和数据传输分别在两个TCP连接上进行。

5 Telent 23

6 EMail

流程:

  • 用户代理<->邮件服务器—————邮件服务器<->用户代理

推邮件:

  • SMTP(25)。简单邮件传输协议(传输邮件,也可拉取邮件,SMTP常用命令

SMTP响应头部:

  • to:发给
  • from:来自
  • subject:标题
  • cc:副本(其他知道的人)
  • 编码类型,参数等(同HTTP)

拉邮件

  • IMAP(143):交互邮件访问协议(拉取邮件)

  • POP3(110):邮局协议版本3(拉取邮件)

7 DNS 53

7.1 定义

域名到IP地址的转化。

DNS的主要思路:

  • 分层的、基于域的命名机制。
  • 若干分布式的数据库完成名字到IP地址的转换。
  • 运行在UDP之上端口号为53的应用服务。
  • 核心的Internet功能,但以应用层协议实现 。
  • 在网络边缘处理复杂性。

7.2 DNS目的

DNS的主要目的:

  • 实现主机名-IP地址的转换。(name/IP translate)

DNS的其它目的

  • 主机别名到规范名字的转换:Host aliasing
  • 邮件服务器别名到邮件服务器的正规名字的转换:Mail server aliasing
  • 负载均衡:Load Distribution

7.3 常用顶级域名

顶级域名 表示
.com 商业机构
.net 网络服务机构
.org 非盈利性组织
.gov 政府机构
.edu 教育机构
.mil 军事机构
.biz 商业机构
.name 个人网站
.info 信息提供
.mobi 专用手机域名
.pro 医生,会计师
.travel 旅游网站
.museum 博物馆
.int 国际机构
.areo 航空机构
.post 邮政机构
.rec 娱乐机构
.asia 亚洲机构
.cc 商业公司或者中国公司
二级域名 表示
arts 艺术类机构
com 商业机构
edu 教育及研究机构
firm 公司企业
gov 政府机构
info 信息服务
net 网络服务机构
nom 个人
org 专业团体
rec 娱乐类机构
store 销售类公司企业
web 从事WWW活动的机构

7.4 DNS记录

资源记录(resource records)(RR)

  • 作用:维护 域名-IP地址(其它)的映射关系
  • 位置:Name Server的分布式数据库中

本地服务器

  • 缓存:提高性能。
  • 删除:保持一致性。

7.5 RR格式

(domain_name, ttl, type,class,Value)

Domain_name: 域名

Ttl: time to live : 生存时间(权威,缓冲记录)

Class 类别 :对于Internet,值为IN

Value 值:可以是数字,域名或ASCII串

Type 类别:

  • Type=A:Name为主机 。Value为IP地址。

  • Type=CNAME :Name为规范名字的别名 。例:www.ibm.com的规范名字为servereast.backup2.ibm.com。value 为规范名字。

  • Type=NS:Name域名,例:foo.com。Value为该域名的权威服务器的域名。

  • Type=MX:Value为name对应的邮件服务器的名字。

7.6 查询

步骤:

  • application ——- resolver —(解析器发送的包封装在UDP段)—- Local Name Server

方法:

  • 递归查询(服务器依次查,从顶开始):客户端先发消息给根服务器,然后根服务器帮客户端发送消息给二级服务器,依次类推,直到找到域名或结束。
  • 迭代查询(客户端依次查,从顶开始):客户端先发消息给根服务器,然后根服务器把二级服务器的信息发送回给客户端,然后客户端自己访问二级服务器,依次类推,直到找到域名或结束。

7.7 DNS协议报文

DNS协议:查询和响应报文的报文格式相同。

报文首部:

  • (2B)identification:标识符(ID),16位。
  • (2B)flags:查询/应答 ,希望递归 ,递归可用 ,应答为权威。
  • (2B)# questions
  • (2B)# answer RRs
  • (2B)# authority RRs
  • (2B)# additional RRs
  • (4B)questions (variable # of questions):一个查询的Name, type字段。
  • (4B)answers (variable # of RRs):对应查询的RR记录。
  • (4B)authority (variable # of RRs):权威服务器的记录。
  • (4B)additional info (variable # of RRs):附加的有用信息。

8 P2P

结构类型:

  • 非结构化P2P:

    • 集中化目录:存在中央服务器。

    • 完全分布式:分布式。

    • 混合体:上述两者的混合,存在组员和组长。

  • DHT(结构化)P2P:IP地址变成十六进制值,从小到大依次连接形成一个环。

  • P2P文件分发: BitTorrent(种子后缀 .torrent)

9 视频流化服务与CDN

9.1 CDN

CDN

正向代理与反向代理

定义:视频流化服务(杀手级业务:占据互联网大部分流量)

CDN是把原本需要集中获取的资源缓存到边缘节点,使用户就近访问。通过在网络中增加一层缓存层,通过全局负载技术将源站的资源分发到里用户最近的网络边缘节点上,使缓存服务器响应用户请求,从而达到快速访问的目的。

编码方式:

  • 时间冗余:同张图片图像不同位置。
  • 空间冗余:不同图片图像不同位置。

9.2 DASH

多媒体流化服务:DASH(Dynamic, Adaptive Streaming over HTTP)

服务器:

  • 将视频文件分割成多个块 。
  • 每个块独立存储,编码于不同码率。(8-10种)
  • 告示文件(manifest file): 提供不同块的URL。

客户端:

  • 先获取告示文件 。
  • 周期性地测量服务器到客户端的带宽。
  • 查询告示文件,在一个时刻请求一个块,HTTP头部指定字节范围,如果带宽足够,选择最大码率的视频块。

  • 会话中的不同时刻,可以切换请求不同的编码块。 (取决于当时的可用带宽)

”智能“客户端:

  • 客户端自适应决定什么时候去请求块 。(不至于缓存挨饿,或者溢出)

  • 请求什么编码速率的视频块。(当带宽够用时,请求高质量的视频块)

  • 哪里去请求块。(可以向离自己近的服务器发送URL,或者向高可用带宽的服务器请求)

10 DHCP

11 套接字编程

text::C语言Windows网络编程


七、补充

1 无线网络

2 网络安全

2.1 物理层攻击

网路破坏

2.2 链路层攻击

ARP欺骗

2.3 网络层攻击

ICMP攻击(欺骗)

2.4 传输层攻击

TCP SYN Flood攻击

2.5 应用层攻击

缓冲区溢出

WEB攻击

3 网络中的音频和视频