跳转至

计算机网络

OSI模型

三个重要概念:服务,接口,协议

模型概述:

模型层名 功能 协议 设备实现
物理层 物理连接的建立、维护和断开 介质规范 光缆
数据链路层 数据拆帧与传输顺序,提供MAC地址,检错纠错 Wi-Fi、MAC 交换机
/桥接器
*网络层 数据包的路由选择和传输,提供逻辑地址和路径选择 IP 路由器
*传输层 端到端的链接管理,提供数据传输,流量控制 TCP、UDP 网关
会话层 建立,管理程序间的会话,提供会话恢复和控制 \ OS
表示层 负责数据的格式化,编解码 XML OS/应用
*应用层 为应用服务提供网络服务接口 HTTP、FTP 应用程序

最初的TCP/IP模型只有四层,其中物理层和数据链路层视为一层,同时没有会话层和表达层

协议与传输

层间术语

传输过程中上层协议会调用下层协议的接口

在发送端中,数据自顶向下传输,每一层会给上一层传输的数据包添加一个header(一般为传统四层各自添加header)

如果传输的数据包过大则会把数据包进行拆分,但是header不会进行拆分(每部分都会有同的拆分层Header)

服务术语

对等层之间的连接为服务

  • LISTEN :等待一个还没来的连接

  • CONNECT :和一个等待的对等层进行连接

  • RECEIVE:等待一个还没来的message
  • SEND:向对等层发送一个message
  • DISCONNECT:结束一个连接

网络层

目标:如何将源端的数据包发送到接收方

网络层提供给传输层的服务

  • 应该独立于路由器技术,向传输层屏蔽网络拓扑结构的具体内容(路由寻址)
  • 传输层可用的网络地址应该有一个统一的编地址方案(IP地址)

路由寻址

无连接服务

每个数据包独立路由,不需要任何预先的设置

此时的数据包通常也称为数据报datagram,对应的网络称为数据报网络

每个路由器中都有一个内部表,指明了针对每一个可能的目标地址应该将数据包送到哪里去。

表中的每一项由两个部分组成:目标地址和通往目标地址所使用的出境线路

路由算法

管理路由表更新的算法称为路由算法,负责确定一个入境数据包应该被发送到哪条线路上

常用的一些路由算法:

  • 链路状态路由算法:每一个路由器需要完成5个步骤,算法才能正常工作

  • 发现邻居节点,并了解网络地址

  • 设置每个邻居节点的距离或者成本度量值
  • 构造一个包含刚才所得的信息的链路信息包

  • 将包发送给所有的路由器,并接受所有来自其他路由器的信息包

  • 计算出到每个路由器的最短路径

  • 层次路由:

  • 路由器被划分成了不同的区域,每个路由器知道如何将数据包路由到自己所在的区域内的布标地址,但是对于其他区域的内部结构不知情。

  • 代价是增加了路径长度

  • 广播路由:

  • 浪费带宽,并且需要源头拥有所有目标机器的完整地址列表,不够理想但是广泛使用

ARP 地址解析协议

ARP协议的作用就是将IP地址映射到以太网的地址(硬件地址),优点是简单,比配置文件更加简单,属于网络层的协议。

ARP协议解决转换问题的方法是在每台主机ARP_cache中存放一个从IP地址到硬件地址的映射表,并进行动态更新

当一台主机A要向本局域网上的主机B发送IP数据报的时候,就会尝试在ARP_cache中查找对应硬件地址并写入MAC帧

DHCP 动态主机配置协议

网络中的DHCP服务器负责IP地址的配置,为发送请求的主机动态分配IP地址及其他网络配置参数

每个动态分配的IP地址只能使用固定一段时间,到期需要续订否则失效

DHCP中采用ARP协定进行地址检查,服务器和客户端会进行ARP广播确保IP地址不冲突

IP协议

协议概述

互联以后的计算机网络都是由网际协议IP确定地址,其可以看做一个虚拟互联网络

IP地址是一种逻辑地址,是软件实现的,而物理层和数据链路层的协议用的是物理地址

IP地址并不真正指向一台主机,而是一个网络接口。如路由器有多个网络接口,所以一个路由器有多个IP地址。

在IP协议下网络层的通信过程如下:

  • 从传输层获取数据流,并将数据流拆分成段,每段加入ip协议头,以便作为IP数据包发送
  • 每个数据包理论上最大容量是64KB,但一般不超过1500bytes
  • IP路由器转发每个数据包穿过Internet,沿着一条路径把数据包从一个路由器转发到下一个路由器,直到数据包到达目的地。
  • 在接受方,网络层将数据交给传输层,再由传输层交给接收进程

数据报组成

image-20201103100249466

每个IP数据报包含两个部分:头和正文,正文部分也叫做有效净荷

协议头(以IPv4为例子)组成部分:

  • 版本字段:记录了协议属于哪个版本,目前用的比较多的依然是IPv4
  • IHL:指明了头到底有多长(以32位字长度为单位)
  • 总长度:包含了数据报中所有的内容即头和数据的总长度
  • 标识:用来让目标主机确定一个新到的分段属于哪一个数据报,同一个数据报的所有段包含相同的表示值
  • 分段偏移量:表示当前段在数据报中的位置,该字段有13位,所有段的长度必须是8的倍数,因此最多可以有8192个段
  • 生存期:计数器,每一跳后计数器都会减小,减小到0的时候数据包就会被丢弃
  • 协议:表明了传输进程,可能是TCP,UDP等等
  • 头校验和:用来校验和保护地址
  • 源地址和目标地址:是源网络接口和目标网络接口的IP地址

IPv4标准

IPv4协议中的IP地址是一个32位的地址,网络中的每一台主机和路由器都有一个IP地址

IP一般由网络号和主机号构成,分为ABCDE五类(由不同的前缀决定)

同一个网络上所有主机其地址的网络值都是相同的,这一段就是前缀

IPv6标准

  • IPv6的地址变成了128位,足够为人类的每台设备分配地址,实现无连接网络
  • IPv6采用冒号十六进制记法,每个16位的值用十六进制来表示,并用冒号来分隔
  • 零压缩:连续的一串0可以用两个冒号代替,一个IP地址只能使用一次

子网

在内部将一个网络块分成几个部分供多个内部网络使用,但是对外部世界仍然像单个网络一样

子网中的主机的前缀(如24位)一般相同,而用后缀区分主机设备

可以采用子网掩码对来获取主机的网络号和主机号(如255.255.255.0的与运算/或运算)

NAT

因为IP地址非常有限,因此可以动态分配IP,让多个设备共享一个公共IP,也就是网络地址转换(Network Address Translation, NAT)

NAT的基本思想是给每个家庭或者公司分配一个IP地址用来传输流量,但是在客户网络的内部,每台计算机有唯一的IP地址,该地址主要用来路由内部流量。

当一个数据包离开客户网络发送到外部网络时,必须进行一个地址转换,把内部IP转换成公共IP地址,同时NAT 设备记录这个转换关系,以便后续数据返还。

对于外部访问,可以通过在NAT设备端口转发机制,或者VPN,实现外部网络到内部设备的访问

传输层

目的:实现端到端式的信息传输,完成应用进程之间的通信

功能:

  • 发送方不同的进程都可以用同一个传输层协议传输数据(复用)
  • 接收方的传输层在处理报文之后可以把数据交付给正确的进程(分用)

与网络层对比:

  • 传输层提供了进程之间的逻辑通信,而网络层是为主机提供了逻辑通信

  • 传输层向上面的应用层提供通信服务,是用户功能中的最底层,也属于面向通信部分的最高层

传输层协议

端口交互

传输层建立通信是用端口映射的方式来处理端口和服务的映射关系

传输层的端口指的是软件端口,指的是应用层的各种协议进程和运输实体层之间进行交互的一种地址

TCP/IP的运输层用16位的端口号,最多支持65535个不同的端口,这里的端口号是一种虚拟端口

UDP 用户数据报协议

  • 连接方式: 无连接,即发送数据不需要建立连接,减小了开销和延迟
  • 可靠性:不保证可靠交付
  • 面向报文:一次交付一个报文,对应用层的报文既不合并也不拆分,而是保留这些报文的边界
  • 通讯结构:支持一对一、一对多、多对多的交互通信
  • 数据开销:header开销小,只有8个字节

TCP 传输控制协议

  • 连接方式:使用之前必须建立连接,使用完之后必须释放
  • 可靠性:保证传输的数据无差错、不丢失、不重复并且按顺序到达

  • 面向字节流:将应用层传下来的数据看成无结构的数据流,会进行拆分和序号分配

  • 通讯结构:每一条TCP连接都是点对点的

  • 数据开销:拥有20字节的header,会有序号、目标端口等信息

  • Socket:IP地址+端口号就可以构成一个socket,每条TCF连接都有两个socket确定

  • 三次握手:

  • 客户端发送带有 SYN(同步序列编号)标志的 TCP 报文段给服务器。

    这个报文段包含一个初始序列号(ISN),标识数据流的开始。

  • 服务器收到 SYN 报文段后,回复一个带有 SYN 和 ACK(确认)标志的报文段。

    这个报文段的 ACK 序号是客户端的 ISN 加 1,同时服务器也生成一个自己的 ISN。

  • 客户端收到 SYN-ACK 报文段后,回复一个带有 ACK 标志的报文段,确认服务器的 ISN。

    这样,连接建立完成,双方可以开始传输数据。

  • 四次挥手:

  • 客户端发送一个带有 FIN(结束)标志的 TCP 报文段,表示它不再发送数据,但仍然可以接收数据。

  • 服务器收到 FIN 报文段后,回复一个带有 ACK 标志的报文段,确认客户端的 FIN 标志。

    服务器准备好结束连接时,发送一个带有 FIN 标志的报文段,表示它也不再发送数据。

  • 客户端收到 FIN 报文段后,回复一个带有 ACK 标志的报文段,确认服务器的 FIN 标志。

    此时,客户端进入 TIME-WAIT 状态,等待一段时间以确保服务器收到 ACK 报文段,然后连接正式关闭。

应用层

域名系统DNS

域名系统(Domain Name System)用于将主机名字转换成IP地址

DNS是是一个联机的分布式数据库系统,并采用C/S模式,大多数域名在本地解析而少量解析需要互联网上的通信

域名服务器,具有层状结构,由顶级域名服务器、权限域名服务器、本地域名服务器组成

解析的时候需要把需要解析的域名放在DNS请求报文中,以UDP用户数据报的方式发送给本地域名服务器

本地域名服务器把对应的IP地址放在回答报文中返回,如果没找到就需要向别的域名服务器发出请求

域名对应地从左到右级别逐渐提高,并且用小数点隔开

域名都由英文字母和数字组成,除了-以外不能使用其他标点符号

一个完整的域名(如 doc.example.com)由多个部分组成:

  • 顶级域名(TLD):如 .com
  • 二级域名:如 example(由用户向代理商申请)
  • 子域名:如 doc(用户自己控制)

电子邮件相关协议

两个标准:简单邮件传送协议(SMTP)、互联网文本报文格式

三个构建:

  • 用户代理:一般是邮件客户端软件,至少需要有撰写、显示、处理、通信等功能
  • 邮件服务器:必须要同时可以充当客户机和服务器
  • 发送读写协议:如发送协议SMTP和读取协议POP3,都是使用TCP连接来传送邮件

邮件发送的过程:

  • 用户代理用SMTP向发送方邮件服务器的SMTP服务器建立TCP连接发送
  • 发送方邮件服务器的SMTP客户向接受方的邮件服务器建立TCP连接,并发送给SMTP服务器
  • 接收方的POP3服务器读取邮件向收件人的用户代理POP3客户发送邮件的内容

万维网

万维网是一个分布式的超媒体系统,是超文本系统的扩充

运用统一资源定位符URL和超文本传输协议HTTP来标志、发送各类文档

统一资源定位符URL

表示从互联网中得到的资源位置和访问这些资源的方法

基本的格式是:协议://主机:端口/路径

不区分大小写

超文本传输协议HTTP

定义浏览器怎么想万维网服务器请求万维网文档,以及服务器如何把文档传送给服务器

可以传输文本、超文本、声音、图像等格式的信息

使用TCP作为运输层的协议

HTTP协议本身是无状态的,即多次访问同一个服务器上的同一个页面,服务器的响应是相同的

HTTP连接往往是流水线式的,客户收到HTTP响应报文之前就能接着发送新的请求

HTTP是面向文本的,因此在报文中的每个字段都是ASCII码串,各个字段的长度是不确定的

HTTP的状态码:image-20201215110240401

HTTP报文:

每个报文有三个部分组成:

  • 开始行:

  • 用于区分是请求报文还是响应报文,以换行符结束

  • 请求报文中叫做请求行,如GET /index.html HTTP/1.1,包含:

    • HTTP 方法:如 GET、POST、PUT、DELETE 等。
    • 请求目标:请求的资源路径(如 /index.html)。
    • HTTP 版本:如 HTTP/1.1 或 HTTP/2。
  • 响应报文中叫做状态行,如HTTP/1.1 200 OK,包含:

    • HTTP 版本:如 HTTP/1.1 或 HTTP/2。
    • 状态码:如 200、404、500 等。
    • 状态描述:状态码的简短描述,如 OK、Not Found等。
  • 头部字段:

  • 包含多个键值对,每个键值对占一行,用于传递元数据和控制信息。

  • 键值对用字段名+空格+value+回车换行的形式存储
  • 常见头部字段有:

    • 通用头部字段:适用于请求和响应报文,如 Date、Connection。
    • 请求头部字段:特定于请求报文,如 Host、User-Agent、Accept。
    • 响应头部字段:特定于响应报文,如 Server、Set-Cookie、Content-Type。
    • 实体头部字段:描述请求或响应的主体,如 Content-Length、Content-Encoding。
  • 实体主体:

  • HTTP 报文的可选部分,包含实际要传输的数据

  • 对于请求报文,主体通常用于传递表单数据、文件上传(如POST方法)等内容

  • 对于响应报文,主体则包含请求资源的内容,如 HTML 页面等