最主要的三种网络
(1)电信网络(电话网:负责话音通信,也就是打电话、接听电话。
(2)有线电视网络:主要提供视频服务。
(3)计算机网络:主要是数据传输服务,也就是说是资源共享,其主要的服务就是因特网。
三种网络在各自的通信协议下传输信息,为用户提供通信服务。
ISP
互联网服务提供商 ISP 可以从互联网管理机构获得许多 IP 地址,同时拥有通信线路以及路由器等联网设备,个人或机构向 ISP 缴纳一定的费用就可以接入互联网。
目前的互联网是一种多层次 ISP 结构,ISP 根据覆盖面积的大小分为主干 ISP、地区 ISP 和本地 ISP。
互联网交换点 IXP 允许两个 ISP 直接相连而不用经过第三个 ISP。
互联网的组成
边缘部分:所有连接在互联网上的主机,用户可以直接使用;
核心部分:由大量的网络和连接这些网络的路由器组成,为边缘部分的主机提供服务。
主机之间的通信方式
1. 客户 - 服务器(C/S):客户即是服务请求方,服务器是服务提供方。
2. 对等(P2P):不区分客户和服务器。
电路交换:电路交换用于电话通信系统,两个用户要通信之前需要建立一条专用的物理链路,并且在整个通信过程中始终占用该链路。由于通信的过程中不可能一直在使用传输线路,因此电路交换对线路的利用率很低,往往不到 10%。
报文交换:报文交换用于邮局通信系统,邮局接收到一份报文之后,先存储下来,然后把相同目的地的报文一起转发到下一个目的地,这个过程就是存储转发过程。
分组交换:分组交换也使用了存储转发,但是转发的是分组而不是报文。把整块数据称为一个报文,由于一个报文可能很长,需要先进行切分,来满足分组能处理的大小。在每个切分的数据前面加上首部之后就成为了分组,首部包含了目的地址和源地址等控制信息。
存储转发允许在一条传输线路上传送多个主机的分组,因此不需要占用端到端的线路资源。
相比于报文交换,由于分组比报文更小,存储转发的速度也就更快。
时延
总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延
发送时延
主机或路由器发送数据帧所需要的时间。
其中 l 表示数据帧的长度,v 表示发送速率。
传播时延
电磁波在信道中传播一定的距离需要花费的时间,电磁波传播速度接近光速。
其中 l 表示信道长度,v 表示电磁波在信道上的传播速率。
处理时延
主机或路由器收到分组时进行处理所需要的时间,例如分析首部,从分组中提取数据部分等。
排队时延
分组在路由器的输入队列和输出队列中排队等待的时间,取决于网络当前的通信量。
运输层
网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。
运输层提供了应用进程间的逻辑通信。运输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看见的好像在两个运输层实体之间有一条端到端的逻辑通信信道。
UDP 和 TCP
用户数据包协议 UDP(User Datagram Protocol)传输控制协议 TCP(Transmission Control Protocol)
UDP 是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部)。
TCP 是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块)
UDP 首部格式:首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和而临时添加的。
TCP 首部格式:
序号 :用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。
确认号 :期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701。
数据偏移 :指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。
确认 ACK :当 ACK=1 时确认号字段有效,否则无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置 1。
同步 SYN :在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。
终止 FIN :用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放运输连接。
窗口 :窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。
TCP 的三次握手
假设 A 为客户端,B 为服务器端。
- 首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。
- A 向 B 发送连接请求报文段,SYN=1,ACK=0,选择一个初始的序号 x。
- B 收到连接请求报文段,如果同意建立连接,则向 A 发送连接确认报文段,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
- A 收到 B 的连接确认报文段后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。
- B 收到 A 的确认后,连接建立。
TCP 的四次挥手
以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。
- A 发送连接释放报文段,FIN=1;
- B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据;
- 当 B 要不再需要连接时,发送连接释放请求报文段,FIN=1;
- A 收到后发出确认,此时连接释放。
应用层
域名系统 DNS:把主机名解析为 IP 地址。
被设计成分布式系统。
层次结构
一个域名由多个层次构成,从上层到下层分别为顶级域名、二级域名、三级域名以及四级域名。所有域名可以画成一颗域名树。
域名服务器可以分为以下四类:
(1) 根域名服务器:解析顶级域名;
(2) 顶级域名服务器:解析二级域名;
(3) 权限域名服务器:解析区内的域名;
区和域的概念不同,可以在一个域中划分多个区。图 b 在域 abc.com 中划分了两个区:abc.com 和 y.abc.com
因此就需要两个权限域名服务器:
(4) 本地域名服务器:也称为默认域名服务器。可以在其中配置高速缓存。
解析过程
主机向本地域名服务器解析的过程采用递归,而本地域名服务器向其它域名服务器解析可以使用递归和迭代两种方式。
迭代的方式下,本地域名服务器向一个域名服务器解析请求解析之后,结果返回到本地域名服务器,然后本地域名服务器继续向其它域名服务器请求解析;而递归地方式下,结果不是直接返回的,而是继续向前请求解析,最后的结果才会返回。
文件传输协议 FTP:FTP 在运输层使用 TCP,并且需要建立两个并行的 TCP 连接:控制连接和数据连接。控制连接在整个会话期间一直保持打开,而数据连接在数据传送完毕之后就关闭。控制连接使用端口号 21,数据连接使用端口号 20。
Web 页面请求过程
- 向 DNS 服务器发送 DNS 查询报文来解析域名。
- 开始进行 HTTP 会话,需要先建立 TCP 连接。
- 在运输层的传输过程中,HTTP 报文被封装进 TCP 中。HTTP 请求报文使用端口号 80,因为服务器监听的是 80 端口。连接建立之后,服务器会随机分配一个端口号给特定的客户端,之后的 TCP 传输都是用这个分配的端口号。
- 在网络层的传输过程中,TCP 报文段会被封装进 IP 分组中,IP 分组经过路由选择,最后到达目的地。
- 在链路层,IP 分组会被封装进 MAC 帧中,IP 地址解析成 MAC 地址需要使用 ARP。
- 客户端发送 HTTP 请求报文,请求获取页面。
- 服务器发送 HTTP 相应报文,客户端从而获取该页面。
- 浏览器得到页面内容之后,解析并渲染,向用户展示页面。
常用端口
应用层协议 | 端口号 | 运输层协议 |
DNS | 53 | UDP |
FTP | 控制连接 21,数据连接 20 | TCP |
TELNET | 23 | TCP |
DHCP | 67 68 | UDP |
HTTP | 80 | TCP |
SMTP | 25 | TCP |
POP3 | 110 | TCP |
IMAP | 143 | TCP |