积累沉淀

待山花烂漫,化茧成蝶

计算机网络

前言:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。计算机网络的基础知识,包括TCP / UDP协议、Http协议、Socket等方面。

课程主要内容

  • 计算机网络和互联网
  • 应用层
  • 传输层
  • 网络层:数据平面
  • 网络层:控制平面
  • 数据链路和局域网
  • 网络安全
  • 无线和移动网络
  • 多媒体网络
  • 网络管理

Chapter 1:概论

  1. 什么是Internet?
节点:
    主机以及其上运行的应用程序
    路由器、交换机等网络交换设备

边:通信链路
    接入网络链路:主机连接到互联网的链路
    主干链路:路由器间的链路

协议:
    协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及在报文传输和/或接受或其他事件方面所采用的动作
  1. 网络结构
网络边缘:
    主机
    应用程序(客户端和服务器)

网络核心:
    互联者的路由器
    网络的网络

    数据怎样通过网络进行传输?
    通信网络分为:
        电路交换:通常被传统电话网络采用
            FDM ---> 频分
            TMD ---> 时分


        分组交换:以分组为单位存储-转发方式
            网络带宽资源不再分分为一个个片,传输时使用全部带宽。
            主机之间传输的数据分为一个个分组
            资源共享,按需使用:
                存储-转发:分组每次移动一跳
                在转发之前,节点必须存储整个分组
                延迟比线路交换要大
                排队时间
            适合对于突发式数据传输
            过度使用会造成网络拥塞:分组丢失和延时

            分组交换网络:
                虚电路网络
                数据报网络


接入网、物理媒体:
    有线或者无线通信链路
  1. Internet 结构和ISP
第一层 ISP (如 UUNet, BBN/Genuity, Sprint,AT&T )国家 / 国际覆盖,速率极高
第二层 ISP: 更小些的 ( 通常是区域性的 ) ISP
第三层 ISP 与其他本地 ISP
  1. 分组延迟、丢失和吞吐量
    分组丢失和延时是怎样发生的?
四种分组延时:
1)节点处理延时
2)排队延时
3)传输延时
4)传播延时

分组丢失:
链路的队列缓冲区容量有限
当分组到达一个满的队列时,该分组将会丢失
丢失的分组可能会被前一个节点或源端系统重传,或根本不重传

吞吐量:
在源端和目标端之间传输的速率(数据量/单位时间)

瓶颈链路:
端到端路径上,限制端到端吞吐的链路
  1. 协议层次和服务模型
层次化方式实现复杂网络功能 :
    将网络复杂的功能分层功能明确的层次,每一层实现了其中一个或一
    组功能,功能中有其上层可以使用的功能:服务

    本层协议实体相互交互执行本层的协议动作,目的是实现本层功能,
    通过接口为上层提供更好的服务

    在实现本层协议的时候,直接利用了下层所提供的服务

    本层的服务:借助下层服务实现的本层协议实体之间交互带来的新功
    能(上层可以利用的) + 更下层所提供的服务

面向连接的服务 ( Connection-oriented Service)
    连接 (Connection) :两个通信实体为进行通信而建立的一种结合
    面向连接的服务通信的过程:建立连接,通信,拆除连接
    面向连接的服务的例子:网络层的连接被成为虚电路
    适用范围:对于大的数据块要传输 ; 不适合小的零星报文
    特点:保序
服务类型 :
    可靠的信息流 传送页面 ( 可靠的获得 , 通过接收方的确认 )
    可靠的字节流 远程登录
    不可靠的连接 数字化声音

服务与协议的区别
    服务 (Service) :低层实体向上层实体提供它们之间的通信的能力,是通过原语 (primitive) 来操作的,垂直
    协议 (protocol) :对等层实体 (peer entity) 之间在相互通信的过程中,需要遵循的规则的集合,水平
服务与协议的联系
    本层协议的实现要靠下层提供的服务来实现
    本层实体通过协议为上层提供更高级的服务


Internet 协议栈
分层处理和实现复杂系统的好处?
应用层 : 网络应用
    为人类用户或者其他应用进程提供网络应用服务
    FTP, SMTP, HTTP,DNS

传输层 : 主机之间的数据传输
    在网络层提供的端到端通信基础上,细分为进程到进程,将不可靠的通信变成可靠地通信
    TCP, UDP

网络层 : 为数据报从源到目的选择路由
    主机主机之间的通信,端到端通信,不可靠
    IP, 路由协议对于其他层次而言是透明的

链路层 : 相邻网络节点间的数据传输
    2 个相邻 2 点的通信,点到点通信,可靠或不可靠
    点对对协议 PPP, 802.11(wifi), Ethernet
物理层 : 在线路上传送 bit

各层次的的协议数据单元
    应用层:报文(message)
    传输层:报文段(segment):TCP段,UDP数据报
    网络层:分组packet(如果无连接方式:数据报datagram)
    链路层:帧(frame)
    物理层:位(bit)
  1. 历史
1961---1972:早期的分组交换概念
1972---1980:专用网络和网络互联
    Cerf and Kahn 网络互联原则:
        极简、自治
        尽力而为(best effort)服务模型
        无状态的路由器
        分布控制
1980---1990: 体系结构变化,网络数量激增,应用丰富
1990---2000: 商业化,web,新的应用
2005---2022: 移动互联网

Chapter 2: 应用层

  1. 网络应用的体系结构

    • C/S
    • P2P
    • 混合体:客户-服务器和对等体系结构
  2. TCP之上的socket
    对于使用面向连接服务TCP的应用而言,套接字是4元组的一个具有本地意义的标识

    • 4元组(源IP,源port,目标IP,目标port)
    • 唯一的指定了一个会话(2个进程之间的会话关系)
    • 应用使用这个标识,与远程的应用进程通信
    • 不必在每一个报文的发送都要指定这4元组
    • 简单、便于管理
  3. UDP之上的socket
    对于使用无连接服务UDP的应用而言,套接字是2元组的一个具体本地意义的标识

    • 2元组:IP, port (源端指定)
    • UDP套接字指定了应用所在的一个端节点(end point)
    • 在发送数据报时,采用创建好的本地套接字(标识ID),就不必在发送每个报文中指明自己所采用的IP和port
    • 但是在发送报文时,必须指定对方的ip和port
  4. Http:超文本传输协议
    http request
    http response

  5. cookies 维护状态

  6. web 缓存

  7. FTP: 文件传输协议

  8. Email

    • 用户代理
    • 邮件服务器
    • 简单邮件传输协议:SMTP
  9. DNS(Domain Name System)

    • DNS的主要思路:
      • 分层的、基于域的命名机制
      • 若干分布式的数据库完成名字到IP地址的转换
      • 运行在UDP之上端口号为53的应用服务
      • 核心的Internet功能,但以应用层协议实现(在网络边缘处理复杂性)
    • DNS主要目的:
      • 实现主机名-IP地址的转换
      • 主机别名到规范名字的转换
      • 负载均衡
  10. p2p
    纯P2P架构

    • 没有(或极少)一直运行的服务器
    • 任意端系统都可以直接通信
    • 利用peer 的服务能力
    • Peer 节点间歇上网,每次IP地址都有可能变化
    • 例子:
      • 文件分发(BitTorrent)
      • 流媒体
      • VoIP(Skype)
  11. CDN(Content Distribution Networks)

    • 在CDN节点中存储内容的多个拷贝
      • e.g. Netflix stores copies of MandMen
    • 用户从CDN中请求内容
      • 重定向到最近拷贝,请求内容
      • 如果网络路径拥塞,可能选择不同的拷贝
  12. Socket
    分布式应用进程之间的门,传输层协议提供的端到端服务接口, 2种传输层服务的Socket 类型

  • TCP:可靠的,字节流的服务
    • 从一个进程向另一个进程可靠地传输字节流
    • TCP 在客户端和服务器进程之间提供了可靠的、字节流(管道)服务
    • TCP套接字:四元组本地标识:
      • 源IP地址
      • 源端口号
      • 目的IP地址
      • 目的端口号
    • 解复用:接收主机用这四个值来将数据报定位到合适的套接字
    • 服务器能够在一个TCP端口上同时支持多个TCP套接字:
      • 每个套接字由其四元组标识(有不同的源IP和源Port)
    • Web服务对每个连接客户端有不同的套接字
  • UDP:不可靠(数据UDP数据报)服务
    • 没有握手
    • 发送端在每个报文中明确指定目标的IP地址和端口
    • 服务器必须从受到的分组中提取出发送端IP地址和端口号
    • 传诵的数据可能乱序,也可能丢失

Chapter 3: 传输层

  1. 多路复用/解复用
    • 在发送端主机多路复用
      • 从多个套接字接收来自多个进程的报文,根据套接字对应的IP地址和端口号等信息对报文段用头部加以封装(该头部信息用于以后的解复用)
    • 在接受方主机多路解复用
      • 根据报文段的头部信息中的IP地址和端口号将接收到的报文段发给正确的套接字(和对应的应用进程)
  2. UDP:用户数据报协议
header 16位源端口号 16位目的端口号
16位UDP长度 16位UDP校验和
body xxx xxx
为什么要有UDP?
  • 不建立连接(会增加延时)
  • 简单:在发送端和接受端没有连接状态
  • 报文段的头部很小(开销小)
  • 无拥塞控制和流量控制,UDP可以尽可能快的发送报文段
    • 应用 -> 传输的速率 = 主机 -> 网络的速率
  1. 可靠数据传输(rdt协议)的原理

    • rdt在应用层、传输层和数据链路层都很重要
    • 是网络Top10问题之一
    • 信道的不可靠性决定了可靠数据传输协议(rdt)的复杂性
  2. 流水线协议

    • 流水线:允许发送方在未得到对方确认的情况下一次发送多个分组
      • 必须增加序号的范围:用多个bit 表示分组的序号
      • 在发送方/接收方要有缓冲区
      • 两种通用的流水线协议:回退N步(GBN)和选择重传(SR)
  3. 通用:滑动窗口(slide window)协议

    • 发送缓冲区
      • 形式:内存中的一个区域,落入缓冲区的分组可以发送
      • 功能:用于存放已发送,但是没有得到确认的分组
      • 必要性:需要重发时可用
    • 发送缓冲区的大小:一次最多可以发送多少个未经确认的分组
      • 停止等待协议 =1
      • 流水线协议 >1 ,合理的值,不能很大,链路利用率不能够超 100%
    • 发送缓冲区中的分组
      • 未发送的:落入发送缓冲区的分组,可以连续发送出去;
      • 已经发送出去的、等待对方确认的分组:发送缓冲区的分组只有得到确认才能删除
    • 接收窗口 (receiving window)= 接收缓冲区
      • 接收窗口用于控制哪些分组可以接收;
        • 只有收到的分组序号落入接收窗口内才允许接收
        • 若序号在接收窗口之外,则丢弃;
      • 接收窗口尺寸 Wr=1 ,则只能顺序接收;
      • 接收窗口尺寸 Wr>1,则可以乱序接收
  4. GBN 协议和 SR 协议的异同

    • 相同之处
      • 发送窗口>1
      • 一次能够可发送多个未经确认的分组
    • 不同之处
      • GBN:接收窗口尺寸=1
        • 接收端:接收窗口尺寸=1
        • 发送端:从表现来看,一旦一个分组没有发成功,如: 0,1,2,3,4; 假如 1 未成功, 234 都发送出去了,要返回 1 再发送; GB1
      • SR:接收窗口尺寸>1
        • 接收端:可以乱序接收
        • 发送端:发送发送 0,1,2,3,4 ,一旦 1未成功, 2,3,4, 已发送,无需重发,选择性发送 1
  5. TCP连接的建立
    连接的建立经历以下3个步骤,通常称为三次握手,如下图:
    tcp three-way handshake

  • 第一步:客户机的TCP首先向服务器的TCP发送一个连接请求报文段。这个特殊的报文段中不含应用层数据,其首部中的SYN标志位被置为1.另外,客户机会随机选择一个起始号seq=x(连接请求报文不携带数据,但要消耗一个序号)。
  • 第二步:服务器的TCP收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并为该TCP连接分配TCP缓存和变量。在确认报文段中,SYN和ACK位都被置为1,确认号字段的值为x+1,并且服务器随机产生起始序号seq=y(确认报文段不携带数据,但也要消耗一个序号)。
  • 第三步:当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。这个报文段的ACK标志位被直为1,序号字段为x+1,确认号字段ack=y+1。该报文段可以携带数据,若不携带数据则不消耗序号。
  • 总结:成功进行以上三步后,就建立了TCP连接,接下来就可以传送应用层数据。TCP提供的是全双工通信,因此通信双方的应用进程在任何时候都能发送数据。另外,值的值的注意的是,服务器端的资源是在完成第二次握手时分配的,而客户端资源是在完成第三次握手时分配的,这就使得服务器易于受到SYN洪范攻击。
  1. TCP连接的释放
    参与TCP连接的两个进程中的任何一个都能终止该连接。TCP连接释放的过程通常称为四次挥手,如下图:
    tcp four-way handwake
  • 第一步:客户机打算关闭连接时,向其TCP发送一个连接释放报文段,并停止发送数据,主动关闭TCP连接,该报文段的FIN标志位被置为1,seq=u,它等于前面已传送过的数据的最后一个字节的序号加1(FIN报文段即使不携带数据,也要消耗一个序号)。TCP是全双工的,即可以想象为一条TCP连接上有两个数据通路。发送FIN报文时,发送FIN的一端不能再发送数据,即关闭了其中一条数据通路,但双方还可以发送数据。
  • 第二步:服务器收到连接释放报文段后即发出确认,确认号是ack=u+1,而这个报文段自己的序号是v,等于它前面已传送过的数据的最后一个字节的序号加1.此时,从客户机到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。
  • 第三步:若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时其发出FIN=1的连接释放报文段。
  • 第四步:客户机收到连接释放报文段后,必须发出确认。在确认报文段中,ACK字段被置为1,确认号ack=w+1,序号seq=u+1.此时TCP连接还未释放,必须经过时间等待计时器设置的时间2MSL后,客户机才进入连接关闭的状态。

9.对上述TCP连接建立和释放的总结如下:

  • 1)连接建立。分为3步:
    • SYN=1,seq=x.
    • SYN=1, ACK=1,seq=y, ack=x+1.
    • ACK=1, seq=x+1, ack=y+1.
  • 2)释放连接。分为4步:
    • FIN=1, seq=u.
    • ACK=1, seq=v, ack=u+1.
    • FIN=1, ACK=1, seq=w, ack=u+1.
    • ACK=1, seq=u+1, ack=w+1.

Chapter 4:网络层

  1. 路由与转发
  • 路由选择.按照复杂的分布式算法,根据从相邻路由器所得到的关于整个网络拓扑的变化情况,动态的改变所选择的路由。
  • 分组转发。路由器根据转发表将用户的IP数据报从合适的端口转发出去。
  1. IP(Internet Protocol)
  • 一个IP分组由首部和数据两个部分组成。首部前一部分的长度固定,共20B,是所有IP分组必须具有的。在首部固定部分的后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制。IP数据报的格式如下图:
    ip datagram
  • 连接到因特网上的每台主机(或路由器)都分配一个32比特的全球唯一标识符,即IP地址。传统的IP地址是分类地址,分为ABCDE五类。无论哪种IP地址,都由网络号和主机号组成。其中网络号标志主机(或路由器)所连接到的网络。一个网络号在整个因特网范围内必须是唯一的。主机号标志该主机(或路由器)。一台主机号在它前面的网络号所指明的网络范围内必须是唯一的。由此可见,一个IP地址在整个因特网范围内是唯一的。
    ip addr classified
  • 在各类IP地址中,有些IP地址具有特殊用途,不用做主机的IP地址:
    • 主机号全为0表示本网络本身,如C类->202.98.174.0
    • 主机号全为1表示本网络的广播地址,又称直接广播地址,如:202.98.174.255
    • 127.0.0.1保留为环路自检(Loopback Test)地址,此地址表示任意主机本身,目的地址为环回地址的IP数据报永远不会出现在任何网络上
    • 32位全为0,即0.0.0.0表示本网络上的本主机
    • 32位全为1,即255.255.255.255表示整个TCP/IP网络的广播地址,又称受限广播地址。
网络类别 最大可用网络数 第一个可用的网络号 最后一个可用的网络号 每个网络中的最大主机数
A 27 -2 1 126 224 - 2
B 214 -1 128.1 191.255 216 - 2
C 221 - 1 192.0.1 223.255.255 28 - 2
  • A类地址可用的网络数为27 - 2,减2的原因是:
    • 第一,网络号字段全为0的IP地址是保留地址,意思是本网络
    • 第二,网络号为127的IP地址是换回测试地址
  • B类地址的可用网络号数为214 - 1,减1的原因是128.0这个网络号不可指派的。
  • C类地址的可用网络号数为221 - 1,减1的原因是192.0.0这个网络号不可指派的。
Buy me a coffee please.