计算机网络-基础

Posted by 小拳头 on Monday, October 19, 2020

所有手机, 电脑, 平板都可以成为主机(host)或者端系统(end system), 他们通过通信链路和分组交换机连接在一起. 对于通信链路, 传输速率可以用bit/s或bps来衡量. 端系统互相通讯时会把数据分段, 为每段加上首部字节, 生成的包叫分组(packet). 分组交换机可以接受并转发分组, 包括路由器(router)和链路层交换机(link-layer switch).

端系统有ISP(Internet Service Provider)介入互联网, 因特网部件由不同的协议(protocol)控制信息的接受和发送, 协议包括TCP/IP, SMTP等. 而因特网标准是由IETF研发, IETF的标准文档就是请求评论RFC. 当然也有其他组织指定网络部件标准, 比如以太网和无线WiFi就是IEEE制定的.

接入网

传统的一般是以数字用户线DSL或电缆接入的. DSL需要DSL调制解调器连接电话线与电话公司通讯. 电缆介入也需要电缆解调器(cable modem). 现在国内光纤到户(FTTH)已经习以为常了, 直接从本地中心局通过光纤每一户, 当然用户是可以共享光纤的. 在这个时间点, 以太网/wifi这种形式可以说是最流行了, 如下图.

网络核心

前面的都是一些边缘部分的总结, 现在我们来研究核心, 也就是交换机和链路构成的网络.

分组交换

端系统彼此交换报文(message), 原系统向端系统发送时, 将其切分成小的数据块分组(packet), 每个分组通过链路和分组交换机(packect switch), 包括路由器和链路交换机. 一条链路发送L bit分组, 链路传输书读为R bit/s, 则传输时间为L/R.

  1. 存储转发传输: 交换机收到(缓存)整个分组才能转发, N条速率为R的路径(N-1个路由器), 一个分组端到端时延是$d=N\frac{L}{R}$.

  2. 排队时延和分组丢失: 分组交换机具有输出缓存/输出队列(output buffer/output queue), 所以分组要承受排队时延(queue delay), 这个时延取决于网络的阻塞程度. 如果分组道法交换机后缓存已满,则会丢包(packet lost), 到达的分组或已排队的分组之一将被丢弃.

  3. 转发表与路由选择协议: 因特网靠端系统的IO地址作为目的地, 每台路由器有转发表(forwarding table), 将目的地址(或部分)映射为输出链路. **路由转发协议(routing protocol)**便可用来自动设置转发表, 并使用最短路径.

电路交换

**电路交换(circuit switching)**比较经典的场景是打电话, 端系统间通信的资源是预留的.两台主机通讯时会建立端到端链接(end-to-end connection).

  1. 复用. 有频分复用(Frequency-Division Multiplexing)时分复用(Time-Division Multiplexing)两种, 对FDM, 链路的频谱被创建的所有连接共享, 频段的宽度叫带宽(bandwidth). 对TDM, 时间被划分为固定区间的帧, 帧也的被固定的时隙划分. 每个电路在周期性的时隙中可以得到所有带宽, 所以电路的传输速率等于帧速率乘以时隙中的比特数量.

  2. 两种交换对比. 分组交换更有效, 因为可以动态地分配资源.

分组交换的时延, 丢包, 吞吐量

时延

包括结点处理时延(nodal processing delay), 排队时延(queuing delay), 传输时延(transmission delay)传播时延(propagation delay), 共同组成了节点总时延(total nodal delay).

  • 处理时延: 根据packet首部决定导向何处
  • 排队时延: packet在链路等待传输
  • 传输时延: 分组长度 / 路由器A到B链路的传输速率
  • 传播时延: 比特从链路起点到B的时间

丢包

排队时延带来丢包. a(pkt/s)代表packet到达队列的平均速率, R(bps)为队列推出的比特率. packet的都是L(bit)组成, $|a/R$就是流量强度(traffic intensity), 若大于1, 则排队时延趋向无穷大, 所以它必须<=1. 实际上队列是有大小限制的, 流量强度接近于1就会丢包.

端到端时延

若有N-1个路由器在源和目的之间, 则$d_{end2end} = N(d_{proc}+d_{trans}+d_{prop})$

吞吐量

从端到端的角度来,看 主机接受F bit用了T秒, **平均吞吐量(average throughput)**就是F/T bps. 实际上取决于瓶颈链路的传输速度, 通常接入网链路速度远小于互联网核心链路速度, 所以接入网往往限制了吞吐量. 如果接入网速度大于公共链路, 但是多个接入网共享一条链路, 那么公共链路叶柯能成为瓶颈.

协议层次

分层

每一层为上一层提供服务.

  • 应用层: 任务是通过应用进程间的交互来完成特定网络应用; HTTP, SMTP, FTP; 报文(message)
  • 表示层/会话层: 负责向主机之间的不同进程的通信提供通用的数据传输服务; 加密解密/不同用户间的会话管理和建立
  • 运输层: ;TCP/UDP; 报文段(segment)
  • 网络层: ;IP协议; 数据报(datagram)
  • 链路层: ;帧(frame)
  • 物理层: 把帧中的比特从一个节点移动到下一个节点.

osi的表示层和会话层留给开发者处理. 其中表示层使app能够解释交换数据的含义, 会话层提供数据交换定界和同步. 会话层和表示层在用户空间. 链路层/网络层IP/传输层TCP(UDP)在内核空间.

封装

这张图展示了每个设备所运行的层级, 每一层在报文头部加上首部字段, 上一层的分组则在有效载荷字段(payload field), 这就是封装.

题外话, 其实这本书前面的章节主要就是按照分层, 自顶向下, 围绕着各个协议来介绍的, 从官方实验就可以看出来. 从HTTP->DNS->TCP->UDP->IP->NAT->ICMP->Ethernet and ARP->DHCP->802.11 WiFi->SSL/TLS.

链路传输的速度kbps, bps指的是bit, 而文件大小KB, MB指的是byte, 算吞吐量的时候记得乘8.

实验

后面一系列的实验都会用wireshark抓包分析, 非常有趣. 我都基于第七版来做, 写这篇笔记的时候已经有第八版了. wireshark这种观察交换报文的工具也叫packet sniffer, 结构如下图. packet sniffer包含packet capture library去获取链路层的帧, packet analyzer根据不同的协议可以去解析帧, 把帧解析为ip数据报, 报文段等等.

双击Wi-Fi en0就可以抓当前连接wifi的包了. 注意packet-listing window中的No.只是Wireshark标的号而已, 和头部字段没有关系.

向http://gaia.cs.umass.edu/wireshark-labs/INTRO-wireshark-file1.html发送HTTP请求. 这里如果没有得到结果可能是浏览器已经缓存了, 清除缓存再试一次就好. 可以根据time计算从GET到OK的时间. 在菜单的View中可以修改时间的格式.

参考

  1. 计算机网络-自顶向下方法(第6版)
  2. Computer Networking A Top-Down Approach(7th edition)
  3. 作业
  4. 习题答案
  5. wireshark实验

comments powered by Disqus