一文带你复习计网中的重点知识(一万五千字长文)

建议参考西安交通大学计网考后总结及复习资料汇总进行复习

本文是第一次复习时的整理资料,包括缩写名词解释,重要概念,重要算法,各种表以及报文协议

如需pdf,请在下方留言

名词解释

缩写英文中文
PSTNpublic switch telephone network打电话网络
NAPnetwork access port网络接入点
ISPInternet Service provider网络服务商
RFCRequest For Comment征求意见稿
IETFInternet Engineering Task Force维护RFC的工程任务组
ADSLAsymmetric Digital Subscriber Line非对称数字用户线
HFCHybrid Fiber Coax混合光纤同轴电缆
LANLocal Area Network局域网
FDMFrequency Division Multiplex频率复用
TDMTime Division Multiplex时分复用
CDMACode Division Multiplex Access码分复用
ATMAsynchronous Transmit Mode异步传输模式
PDUProtocol Data Unit协议数据单元
ISOInternet Standard Organization国际标准化组织
OSIOpen System Interconnection开放系统互联
RTPRealtime Transfer Protocol实时传输协议
SMTPSimple Mail Transfer Protocol简单邮件传输协议
HTTPHyper Text Transfer Protocol超文本传输协议
HTTPSHyper Text Transfer Protocol over Secure Socket Layer超文本传输安全协议
HTMLHyper Text Markdown Language超文本标记语言
FTPFile Transfer Protocol文件传输协议
TFTPTrivial File Transfer Protocol简单文件传输协议
SIPSession Initialization Protocol会话初始协议
TCPTransmission Control Protocol传输控制协议
UDPUser Datagram Protocol用户数据报协议
URLUniform Resource Locator统一资源定位器
URIUniform Resource Identifier统一资源标识符
RTTRound Trip Time服务器和客户端间的往返时间
ASCIIAmerican Standard Code for Information Interchange美国信息交换标准代码
CGICommon Gateway Interface公共网关接口
pop3Post Office Protocol邮局协议
IMAPInternet Mail Access Protocol网络邮件访问协议
MIMEMultipurpose Internet Mail Extension多用途网络邮件扩展
DNSDomain Name System域名服务系统
RRResource RecordsDNS的资源记录
TTLTime To Live保留时间
NFSNetwork File System网络文件系统
SNMPSimple Network Management Protocol简单网络管理协议
DHCPDynamic Host Configuration Protocol动态主机配置协议
RIPRouting Information Protocol路由信息协议
MSSMaximum Segment Size最大段大小
EFCIExplicit Forward Congestion Indication明确转发拥塞指示
AIMDAdditive Increase Multiplicative Decrease加性增乘性减
BGPBorder Gateway Protocol边界网关协议
OSPFOpen Shortest Path First Protocol开放式最短路径优协议
ICMPInternet Control Message Protocol控制报文协议
MTUMaximum Transmission Unit最大传输单元
CIDRClassless Inter Domain Routing无类的域间路由
NATNetwork Address Translation网络地址变换
MACMedia Access Control Address硬件地址
NICNetwork Interface Card网卡
CRCCyclic Redundancy Check循环冗余校验
CSMACarrier Sense Multiple Access载波侦听多路访问
CSMA/CDCarrier Sense Multiple Access With Collision Detection带碰撞检测的载波侦听多路访问
CSMA/CACarrier Sense Multiple Access With Collision Avoidance带碰撞避免的载波侦听多路访问
ARPAddress Resolution Protocol地址解析协议
jpegJoint Photographic Expert Group联合图像专家组
ISDNIntegred Services Digital Network综合服务数字网
WANWide Area Network广域网
MANMetopolitan Area Network城域网
WLANWireless Local Area Network无线局域网
MPEGMoving Picture Experts Group动态图像专家组
FSMFinite State Machine有限状态机
IGRPInterior Gateway Routing Protocol内部网关路由协议
RARPReverse Address Resolution Protocol反向地址转换协议

填空概念

  1. 网络是由边缘(edge),内核(core)和链路(links)组成的

  2. TCP的可靠性表示的是:数据不丢,到达顺序不乱,内容无差错

  3. UDP和IP一样,都是best effert传输

  4. 常见的应用架构有:C/S,P2P,二者的混合

  5. 三种接入方式:驻家接入网络,单位接入网络,移动接入网络

  6. 驻家接入包括:拨号上网(不能同时上网和打电话),ADSL(上行带宽窄,下行带宽宽),HFC(多家公用的),FTTH

  7. 单位接入包括:LAN,wifi(wifi是access point,基站是base station)

  8. 物理媒介:双绞铜线(Twisted Pair),光纤(Fiber),同轴电缆(Coaxial cable)

  9. 网络的三种交换方式:

    • 电路交换:先拨号预留资源后上网,拨号上网

    • 包交换(组交换):存储加转发模式,无需拨号,是一个端到端的交换方式,IP网络

    • 虚电路交换:结合上面两种方式,先拨号预留资源,然后使用存储加转发模式进行数据传输,ATM,帧中机,X.25网络

      每一个包头里都包括一个虚电路号,不包含目的地的IP地址,每过一个交换机虚电路号可能会变,虚电路上的每个交换机都会维护这个状态,新的虚电路号存在每个交换机的转发表上。

      一个虚拟电路需要包括从发送端到接收端的路径,虚拟电路号,链路上的每个交换机上都要有转发表关于这个结点的入口

      转发表是由路由选择计算器处理和更新的

      拨号建立链路的协议是信令协议

  10. 分组交换网络的好处

    • 适合突发数据传输
    • 资源利用率更大
    • 能承载的用户量更大
    • 更简单,无需拨号
  11. 分组交换网络的缺点

    • 不适合实时性较高的传输
    • 可能会出现丢包和延迟
  12. 分组交换网络的延时

    • 节点处理时间
    • 排队延时(最不能被忽略)
    • 传送延时(Transmission delay)
    • 传播延时(Propagation delay)
  13. 为什么会被丢包

    • 路由器的发送端队列满了
    • TTL减到0了(垃圾包)
    • 路由器接收端的队列满了
  14. TCP/IP五层模型及对应的PDU

    • 应用层(message,报文)
    • 传输层(segment,段)
    • 网络层(datagram,数据报或包)
    • 链路层(frame,帧)
    • 物理层(bit,位)
  15. OSI七层模型

    • 应用层
    • 表示层
    • 会话层
    • 传输层
    • 网络层
    • 链路层
    • 物理层
  16. 进程通过一个称为**套接字(Socket)**的软件接口向网络发送报文和从网络接收报文,它是应用层与传输层的一个通信管道,二者之间的通信必须通过它,套接字需要传入四个参数:目的IP,目的端口号,源IP,源端口号

  17. IPv6地址共16个字节,Ipv4地址共4个字节,MAC地址有6个字节

  18. QoS参数:丢包率,实时性,吞吐率,安全性

  19. 如果不允许丢包并且对时间没有要求则可以使用TCP协议,如果要求可靠还要快,则可以建立多个TCP连接传输数据

  20. HTTP是一个无状态协议,

    • HTTP1.0是一个非持久性连接,一个TCP连接最多传输一个对象,每一个请求通过单独的TCP发送,首先先请求HTML基文件,然后请求网页上的各种资源,对于非持久性的连接来说,一次访问至少需要两个RTT的时间,第一个RTT用于初始化TCP连接,第二个RTT用于TCP请求和响应返回前面几个字节,总用时为2RTT+文件传输时间
    • HTTP1.1是一个持久性连接,一个TCP连接可以传输多个对象,除了基对象经过两个RTT的延时之外,其他对象只需要一个RTT延时就够了
  21. 请求报文由请求行、请求头,请求数据组成,响应报文由响应行、响应头、响应数据组成

  22. 网页缓存有四种方式

    • 代理式缓存:在客户端附近放置一个代理服务器,客户端先请求代理服务器,代理服务器上没有之后再去请求源服务器,类似于cpu中一级缓存的作用
    • 客户端缓存:这种请求方式是Conditional GET,是HTTP协议的一种机制,允许缓存器证实它的对象是最新的,如果缓存具有最新的版本,则不发送对象,否则返回更新后的对象,并由客户端保存到本地
    • 分布式缓存:许多代理缓存的协作,工程上难以实现,很少用
    • 服务器缓存:实际上就是一个集群,做成Cluster的形式,保证每个服务器负载均衡(load balance)
  23. 为什么需要网页缓存

    • 减少客户端请求的响应时间
    • 提高用户体验
    • 减少主干带宽上的流量
  24. 使用FTP传输文件时需要建立两个TCP连接,带内控制(持久性连接)和带外传输(非持久性连接,每传完一个文件就关掉)

  25. 电子邮件三个主要组件:用户代理,邮件服务器(包括邮箱,消息队列,SMTP),SMTP

  26. SMTP是电子邮件的核心,用于从发送方的邮件服务器发送报文到接收方的邮件服务器,使用TCP协议进行可靠性传输,传输分为三个阶段:握手,传输,关闭;

  27. SMTP与HTTP的异同

    • HTTP从Web服务器向客户端传输文件,SMTP从一个邮件服务器向另一个邮件服务器传送文件
    • 都支持ASCII表示的英文,SMTP只支持这种格式,HTTP不做要求
    • 都支持命令行访问
    • 都使用持续性连接(HTTP1.1)
    • HTTP把每个对象封装成一个报文,SMTP可以把多个对象封装成一个报文
  28. MIME:多用途网络邮件扩展,是扩展的SMTP,不仅支持了ASCII,同时还支持了很多种其他的编码格式(文本,图像,音频,视频等)

  29. DNS

    • 主要任务:进行主机名到IP地址转化的目录服务
    • 传输层采用的协议是UDP,UDP访问比较快,并且都是临近的DNS,丢包的概率比较小
    • DNS本质上就是一个数据库系统,是一个分层的分布式的数据库,每个里面的数据可能是不完备的,这样每个数据库都不用很大
    • 分为三层:根服务器,顶级域名服务器,本地服务器和授权服务器,除了授权服务器里面的记录是永久的,其他的都会根据访问频率清掉
    • 三种查询方式:迭代式查询,递归式查询,结合式查询
    • DNS每个记录保存四个元素:(name, value, type, TTL)
  30. 搜索引擎

    • 一个网站可以看做是一个节点,一个url是一个边
    • 从每个网页中提取关键字与URL对应起来,然后遍历网页中的其他url,重复前面的操作,最后生成关键字与url的对应关系
    • 包含三种数据结构:url表(存储指向实际url和页面的指针),堆(储存变长的标题和url,千万不能写成堆栈),哈希表(将url 哈希为较短的对象)
    • 分为两步,第一步是搜索:使用广度优先搜索遍历网站,是一个递归的过程,输入一个url,哈希url,决定是否把这个url放入url表中,如果要放入的话还需要提取页面中的关键字;第二步是索引,对于url表中的每个项目,提取标题和页面中的关键字,并将关键字指向相应的url表的项目
  31. 传输层服务

    • 为运行在不同主机上的应用进程提供逻辑通信
    • 提供复用/解复用服务
    • 可靠性的控制:检错、丢包重传
    • TCP和UDP两个协议都不能保证实时性和可用带宽,都使用错误检查方法,但是UDP不会校正错误,
    • UDP协议几乎与下层的IP协议是一样的,都是尽力而为,所以UDP的段有时候也会叫做数据报
  32. UDP

    • 功能
      • 复用和解复用
      • 差错检查,但是不会校正,均会送到应用层
      • 传输:应用层几乎直接与IP层交互
    • 不需要握手,不需要建立连接,不需要开辟缓存
    • 特征
      • 比较简单
      • 段头小
      • 速度相比TCP来说更快一点
    • 典型应用:流媒体,Internet电话,多播通信,Network Management,NFS,RIP,DNS,RTP,TFTP,DHCP
  33. TCP

    • 四个技术:三控一管,连接管理,可靠性控制,流量控制,拥塞控制,其中可靠性控制最具有代表性
    • 特征
      • 是一个点对点的协议,不支持一点发送,多点接收
      • 可靠的,字节有序的,流水式的发送,没有报文的边界
      • 通信时先建立连接,开辟缓存,设置变量,交换初始序列号
      • 是全双工的通信(UDP也是)
      • 最大的段大小限制为536字节,超过就会封装为两个段,使得传输效率变低
    • 四个重要算法
      • [可靠性控制算法](# TCP可靠性控制算法):发送端,接收端
      • [流量控制算法](# TCP流量控制算法):发送端,接收端
      • [TCP连接管理](# TCP连接管理算法):三次握手,四次挥手
      • [拥塞控制](# TCP拥塞控制算法):慢启动和拥塞避免,AIMD算法的四个特性(必须记住):有效性,收敛性,公平性(对所有TCP段来说得到的带宽一直),友好性(TCP对UDP友好)
      • [计时器间隔更新算法](# 计时器间隔更新算法)
  34. ATM提供的四种业务(只有ABR有拥塞控制)

    • ABR(avaliable bit rate 有效位率),保证最小带宽,会出现丢包,这种方式需要进行拥塞控制
    • CBR(constant bit rate 恒定位率),用于实时语音通信,绝对不丢包
    • VBR(variable bit rate 可变位率),用于传输视频,绝对不丢包
    • UBR(unspecified 未指定的),有资源就用,没资源就丢掉了
    • 传输时主要有两种信元,一种是数据信元(data cells),一种是资源管理信元(RM cells),几十个数据信元过后会有一个资源管理信元
    • 使用CI和NI为表示拥塞状况,如果CI为一表示现在拥塞了,如果NI为一表示告诉发送端不要增加速率,现在速率就可以了
  35. 网络层的两个重要功能:转发和路由选择

  36. 对于IPv4的网络来说,没有呼叫建立的过程,传输的过程中可能会走不同的路径到达接收端,每次走的路径长短可能不一样,所以会出现乱序

  37. 路由器的每个端口既是输入端口也是输出端口,中间是一个交换结构

  38. 路由器的两个主要功能:

    • 可以运行相应的路由协议或算法,维护路由表
    • 将数据报从输入链路转发到输出链路
  39. 路由器的网络层是去中心化的交换,给定数据报的目的地,在转发表上寻找输出端口;目标是以line speed完成输入端口处理(也就是路由器内部的最大带宽);如果数据包到达的速度比转发到交换机结构的速度快,则会报数据存在输入端口的一个队列中

  40. 路由器的交换结构有三种类型

    • 内存式:将数据放入内存中,然后再由内存放入输出端口中,需要两次访存,数据的转发效率不高,早期性能很差的路由器使用这种方式
    • 总线式:输入端口将数据放到总线上,然后经总线到达输出端口。无需访存,直接通过总线传输数据,单款取决于总线的带宽,总线带宽越宽,竞争越小
    • 交叉网络式:有开关控制的多总线方式,是一种并行的总线结构。路径可以是冬天的,但是价格比较昂贵
  41. 路由器的输出端口是输入端口的镜像,输入端口依次有三层:物理层,链路层,网络层,在网络层会有一个队列存储从链路层的帧中解出来的IP包,并且维护着路由表

  42. 输入端口的行头阻塞问题:当多个输入端口的包都要转发到同一个输出端口的时候不能同时转发,同一时间只能有一个端口转发,另一个仍然呆在队列中,导致排队队列后面的包无法移动,这种情况叫做行头阻塞

  43. 网络层在逻辑上可以分为两层:上层的路由协议和ICMP协议以及下层的IP协议

  44. 路由协议包括:路径选择算法,RIP,OSPF,BGP

  45. ICMP主要用来错误报告和连通性检查

  46. IP地址是主机的三十二位标识号,不是与主机对应的,而是与网络接口对应的,有几个网络接口就可以有几个IP地址,路由器往往有多个接口,所以一般有多个地址

  47. 32位地址分为网络部分(高若干位)和主机部分(低若干位),同一网段内的网络部分必须是相同的,主机部分不同,不同网段网络部分肯定不相同,具体多少位取决于网络的类型

  48. 什么是子网?有相同网络部分的IP地址,可以不经过路由器而到互相通信

  49. 一般计算子网的数量时可以把路由器直接拿走,有几个孤岛就有几个子网,只有线也算一个孤岛

  50. IP地址总共分为4类

    • A类第一位固定为0,网络段有8位,一个网段逻辑上可以容纳 2 24 − 2 2^{24}-2 2242个主机
    • B类网段前面两位固定为10,网络段有16位,其余16位为主机段
    • C类网段前面三位固定为110,网络段有24位,其余八位为主机段
    • D类没有主机,以1110开头,叫做多播地址,是一对多通信,只能作为目的地址使用
    • 这里面有相当多的地址是保留的,不分配出去使用
  51. 特殊地址

    • 0.0.0.0不属于任何类型的地址,只能作为原地址使用,不能作为目标地址,表示本网络的本主机
    • net-id全为0:表示本网络的Host-id这个主机
    • 1.1.1.1(即255.255.255.255)是一个广播地址,对所有主机广播
    • host-id全为1:也是一个广播地址,对这个网络内的所有主机进行广播
    • 127.0.0.1自发自收,是一个自测试地址
  52. 子网划分时会浪费一部分的IP地址,所以国内一般不进行子网划分,具体划分时需要减去全0和全1的地址,用于预留不能分配出去,比如三位的主机位只能分配给六个主机

  53. IP地址被划分为三个部分:网络部分,子网部分,主机部分

    • 不论是IP地址还是网络地址还是子网地址都是32位,不要和网络id,子网id搞混了,网络id和子网id就固定的几位
    • 网络地址是ABCD四类地址的网络段保持不动,其余位全为0,子网地址是IP地址与子网掩码取与的到的32位数据
    • 缺省子网地址:A: 255.0.0.0,B: 255.255.0.0,C: 255.255.255.0
  54. DHCP

    • 动态主机配置协议,是应用层的协议,下层是UDP协议
    • 会给接入当前网络的主机自动分配一个IP地址,除此之外DHCP服务器还会返回直接相连的路由器的MAC地址,DNS服务器的名称和IP地址以及当前网络下的子网掩码
    • 工作过程涉及到四路广播:DHCP discover,DHCP offer, DHCP request, DHCP ACK
    • 主机首先要广播一个DHCP discover报文,用于找DHCP服务器(如果网络比较大的话可能有多个DHCP服务器);DHCP服务器回应一个DHCP offer报文,提供IP地址;主机从接受到IP地址中选择一个并发出请求,发送DHCP request报文;被选中的DHCP服务器会发送一个DHCP ack报文,同意之后才能把IP地址分配给这个主机,同时其他的DHCP服务器把自己刚刚发出去的IP地址收会回来
  55. NAT:将多个假的IP地址映射到一个真的IP地址上面,通过不同的端口号区分

    • [NAT 表](# NAT表):网络地址变换表
  56. ICMP:主机和路由器用该协议在网络层交流信息,主要用于错误报告,请求和响应(ping)

    • ICMP由三部分组成:类型,编码,差错原因
    • [ICMP报文格式](# ICMP)
    • tracert命令是使用ICMP报文实现的,主机会发送一系列具有不可达UDP端口的TTL递增的报文,第一个数据报TTL=1,第二个TTL=2,依次递推,当TTL等于0的时候,路由器会返回一个ICMP报文,告诉主机数据被仍了,同时报文中有路由器的IP地址,所以按照收到的顺序就可以得到路径路由的信息
  57. IPv6

    • 动机:32位的地址空间即将要被分完了;原始的包处理起来太慢了;IPv4协议不支持QoS(所有人发的数据包都是平等的)
    • [IPv6数据报格式](# IPv6)
  58. IPv4到IPv6的过渡

    • 原因:不是所有的路由器都可以被同时更新
    • 隧道技术(Tunneling):在边缘路由器把IPv6的包整个放到IPv4报文里面传输,直到再次遇到边缘路由器时候解包得到原始IPv6包
    • 双栈技术(Dual - stack)(不要写成双堆栈技术):将IPv6包头部对应的地方转换到IPv4的包中,放不下的部分(如IP)放到数据域的最前面
  59. 链路层的服务

    • 封帧,解帧:把数据打包成帧传输,确定传输目标地址需要用到MAC地址,共6个字节,例如00-16-EA-AE-3C-40
    • 链路的访问控制功能
    • 流量控制
    • 检错功能:检查到错误之后直接把这个数据扔掉,不再往上传
    • 差错的校正:发四个包到接收端,四个包异或一下得到第五个包,如果有一个数据包丢掉之后,但是接收到了第五 个包,可以把收到的包进行异或就可以恢复了 ,现在的网卡没有这个功能了
    • 半双工和全双工的通信(两方可以同时发送消息)
  60. 链路层的实现

    • 网卡没有CPU,包含硬件,软件和固件(烧在芯片中的软件)
    • 使用适配器通信:发送端把数据封装在帧里面,同时添加差错检验位,接收端检查数据是否出错,如果没有出错则把数据报从帧中解帧出来,并上传到网络层,如果检查到错误直接丢掉
    • 三种工作方式:正常工作模式(链路层报文的头部MAC地址是自己才解帧往上传);广播模式(如果MAC是全1表示是一个广播地址);混杂模式(收到帧就解帧往上传)
  61. 差错检查:要求发送端发送冗余信息

    • 一位奇偶校验法:分为奇校验和偶校验,保证数据里面的1有奇数个或者偶数个,只能发现错误不能纠错
    • 二维奇偶校验法:将数据组成成二维的形式,可以纠正一位的错误,可以检测出多位的错误
    • [CRC](# CRC算法):循环冗余校验,目前普遍使用的方法
  62. 常见链路类型

    • 点对点链路(P2P链路):不会出现碰撞,不需要控制,甚至不需要mac地址,因为已经建立好了二者之间的通信链路,一个发一个收
    • 广播:数据同时发的话会产生碰撞
    • 交换式链路:以太网
  63. 多路访问控制:多个结点同时使用链路的时候需要处理冲突

    • 冲突(interference):两个结点以上同时发数据就会发生碰撞(collision),同时发数据在收到之后一查就发现是错的,只能扔掉
    • 分为分散式的和集中式的。分散式是目前采用比较多的方法,任意一个结点需要使用通道发数据的时候直接就发了,当产生碰撞之后停止发送,过一段时间后申请发送,直到发送成功为止,需要有能力检测是不是发生碰撞了;集中式需要一个集中控制器,在发数据之前先申请,得到许可之后才能发送数据,保证同一时间只有一个结点发送数据,但存在单点故障问题
  64. 理想的多路传输协议有四个要求:只有一个结点传数据的时候可以使用全部的带宽;多个结点共享带宽每个结点可以使用的带宽是相等的;需要尽可能的完全分散(不需要集中式控制器,没有同步的时钟);算法要足够简单

  65. MAC协议,三种大的分类

    • 信道划分:时分复用,频分复用,码分复用,波分复用,空分复用;比较适合高负载的情况

      TDMA:每个用户分一个时间片,大约为发一帧数据的时间,大家轮流使用通道

      FDMA:每个用户使用不同的频率发数据,例如WIFI和ADSL

    • 随机访问:信道是随机划分的,允许碰撞,适合用户量比较少的情况

      ALOHA:不分时间片,任意时间都可以发数据,碰撞的概率增加了。最大的利用效率为18%

      Slotted ALOHA:分为大小相等的时间片,只允许在每个时间片开头发数据,如果检测到碰撞就都停止发送数据,在下一个时间片开头两个结点都有概率P重发数据,直到发送成功。最大利用效率为37%

      CSMA,[CSMA/CD](# CSMA/CD)(用于有线网络),CSMA/CA(用于无线网络):在传输前需要感知信道是不是空闲,如果空闲了才发数据,否则就推迟传送

      无法完全避免碰撞:有传播延迟;两个结点同时感知信道

    • Taking Turn:分布式轮询,集中式轮询。大家轮着使用,有一个结点(主节点)控制大家使用,当一个结点使用的时候其他结点不允许使用

      集中式轮询(Polling from central site):主节点邀请其他结点传输数据,如果有数据就发,没有数据就继续问下一个结点

      分布式轮询(token passing):适用于环形网络,使用Token控制传输,也称为令牌传输模式

  66. MAC地址是48位的,烧在NIC的ROM中,不分层,不会重复,在出厂的时候就已经设置好了

  67. 不同主机间的通信需要维护一个***[ARP表](# ARP表)***

  68. 以太网(Ethernet)

    • 目前最流行的有线网络,因为技术简单,成本低,带宽也很宽(10Mbps-10Gbps)
    • 所有的网卡通过总线连接到网络上
    • 曾经的结构是10base2,10表示10Mbps带宽的网络,base表示不需要调试,有数据直接传,2表示有效距离200M(实际是185m)
    • 现在的结构是star topology prevails:是树状或者层状结构,每一个枝叫做一个spoke,使用的是交换机来进行数据转发(交换机也是一个存储转发设备)
    • 以太网的服务模型是无连接的不可靠的服务(CRC+CSMA/CD),发送前先感知链路是否空闲,接受到数据后进行差错检查
    • 发送完数据后不需要等待接收端的确认,不需要建立连接和确认,只有一个CRC检查;
    • 传输采用的是基带(base)传输,直接把数据发到相应的链路上,与ADSL不一样,ADSL需要调制解调器;
    • 采用的是Manchester encoding,从上变到下表示的是1,从下变到上表示0,传输过程中刚干扰能力比较强(是物理层的方法)
  69. 802.3表示以太网,802.11表示wifi

  70. 以太网的技术类型:总线式;交换机;光纤方式;双绞线

  71. 互联设备

    • Hubs:

      外表和宿舍的小交换机是一样的,是一个物理层的设备;

      PDU是位,不需要转发,接收到的数据全部都广播出去(不能隔离碰撞域);

      没有缓存,不运行CSMA/CD算法;

      只要把网卡设置为混杂模式就可以收到信息,不够安全

      数据采集时候比较方便

    • 交换机:是一个链路层的设备,可以隔离碰撞域

      处理的PDU是帧,帧全部接受完了之后才会进行处理并转发

      是一个存储转发设备(优点:隔离碰撞域)

      转发的时候需要维护一个***[MAC表](# MAC表)***,查询转发出口

      检查传入帧的MAC地址,有选择地将帧转发到一个或多个传出链路

      交换机上运行着***[过滤转发算法](# 过滤转发算法)***

  72. 交换机和路由器的比较

    • 都是存储转发设备,交换机和路由器都可以隔离碰撞域
    • 交换机运行在局域网,路由器运行在广域网
    • 交换机维护交换表,路由器维护路由表
    • 交换机运行CSMA/CD,filter & forwarding,self-learning,路由器运行路由算法
    • 运行在不同的层,路由器运行在网络层,交换机运行在链路层

算法

TCP可靠性控制算法

核心:丢包(表示的是数据包)重传

TCP的可靠性是牺牲时间换来的,所以是实时性很差

发送的初始段序号是随机选的0-65535之间的整型值,后一个段的段序号等于前一个段的段序号加上数据域的长度(单位:字节)

发送端

传输层发送的TCP段在接收端确认收到之前都需要放在缓存中存起来,需要三个变量来维护:

  • send_base:指向发送花村的最左侧
  • Sequence number:下一个段的序列号
  • window_size:发送端缓存窗口大小

如果Sequence number - send_base = n,则说明缓冲区已经满了

image-20220315114625600

使用有限状态机来描述算法,这里是一个简化的控制算法,先考虑半双工,发送端只发送,接收端只确认,不考虑流量和拥塞控制

image-20220317161551518

最左侧的虚线箭头表示开始,此时 send_base = nextseqnum = initial_sequence number

顺时针方向依次介绍各事件:

  • 条件:从应用层接收到了数据;动作:①检查发送窗口满不满(这个不能忘掉) ②创建、发送段 ③启动计时器
  • 条件:计时器超时;动作:①哪个段超时,重传哪个段 ②重新计算超时间隔 ③重启计时器
  • 条件:收到了3个相同的ACK确认段(大概率丢了);动作:快速重传(超时之前重传)②重启计时器
  • 条件:y之前所有的段都收到了;动作:整个窗口右移,send_base指向y

快速重传:发送端在收到三次一样的ACK之后,无论计时器是否结束,立即重传对应的段

对应的伪代码:

  • sendbase和nextseqnum开始时候是重合的,表示缓冲区是空的

  • 第一个event,这里少了一句,检查窗口满不满,不满才发,满了就拒绝发送,一定要加!,如果没满,就创建一个段,每发一个段就要启动一个计时器,计时器的值可以是一个RTT,启动之后把这个段传送到IP层,然后修改nextseqnum的指向

  • 第二个event,计时器超时

  • 发出去了但是确认信息没回来,这时候超时了,此时要重传,这里需要重新计算计时器的超时间隔(是一个新的小[算法](# 计时器间隔更新算法)),重新计时

  • 第三个event,收到了ACK

  • 如果y>sendbase(y是ACK),说明发送窗口内y之前的所有段都已经收到了,此时可以取消段y之前的所有计时器,然后将sendbase指向y

  • else表示y=sendbase,记接收到y的段序号的计数器+1,如果加到3了,此时直接重传段y,然后重新启动计时器

  • 计时器的初始值为RTT

image-20220317162517278

接收端

为了保证传递到应用层的段与发送时的顺序一致,在接受到发送的段之后需要放入缓存中存起来,需要两个变量来维护

  • rcv_base:期待的段的段序号
  • window size:接收端缓存窗口大小

image-20220315115041080

ACK中的号是期待的段的段序号

  • 有序到达一个段,中间没有任何间隙,前面所有的东西都已经确认过了
    • 动作:对ACK做了一个延时,等待下一个段(500ms),如果下一个段没来,直接返回
    • 这样是为了少返回一个ACK
  • 有序到达一个段,没有间隙,但是前面的段正在做500ms的delay
    • 动作:立即发送一个ACK,ACK为当前收到的段的下一个段的段序号
    • 一切都很完美的情况下最多等待500ms
  • 乱序到达,比期待的段序号要高
    • 动作:立即发送一个ACK,序号是期待的段的段序号(rcv_base指向的段)
  • 到达了一个段 部分或完全的填充了接收端中的gap
    • 如果是rcv_base指向的段,就会变成红色,连着身后的红色送给应用层,rcv_base指向下一个非红色(也就是没有收到)的段,并返回rcv_base移动后指向的段序号
    • 如果不是rcv_base指向的,则把这个标记为红色的,返回一个ACK,段序号为rcv_base指针指向的段
  • 若收到的段序号位于rcv_base指针的左侧,则忽略(这个是额外加的,教材和ppt没有,上课讲到的)
    • 直接丢掉,不用暂存,然后立马返回一个当前需要段的ACK
    • 原因是ACK返回的途中被路由器丢掉了

image-20220317163757818

TCP流量控制算法

避免发送速度过快导致超出了接收端的缓存区大小导致丢包,所以需要控制发送端的发送速度与接收端的接受速度尽量一致

接收端需要维护两个变量

  • RcvWindow:接受窗口当前的空闲空间(与可靠性控制算法中的接受窗口不同)
  • RcvBuffer:TCP接收缓存的总大小

TCP段头中有个字段表示接收端缓存的空间大小,接收端把当前的RcvWindow发给发送端。发送端需要保证发送的数据量一定小于等于这个空闲的空间

  • 主机B必须保证:

    • **接收窗口大小 = 接受缓存大小 -(缓存中最后一个字节的编号 - 被读走的最后一个字节的编号):**RcvWindow=RcvBuffer-[LastByteRcvd-LastByteRead]

      • RcvWindow:接收窗口,即该接收方还有多少可用的缓存空间
      • RcvBuffer:接收缓存的大小
      • LastByteRcvd:已放入接收缓存中的数据流的最后一个字节的编号
      • LastByteRead:被读走的,应用进程从缓存读出的数据流的最后一个字节的编号
      • [LastByteRcvd-LastByteRead]:待在缓存里未送到应用层的数据大小

      接收端:显式地通知发送者(动态改变)可用缓冲区空间的数量

  • 主机A必须保证:

    • LastByteSent-LastByteAcked<=RcvWindow

      发送端:主机A已经发送但未被确认的数据量少于最近一次收到的RcvWindow

当最近一次收到的RcvWindow=0时,发送端仍然要发送小的段,数据域只有1个字节,(总共21个字节,头是20字节),如果接收端有空间,就会有ACK传回来,就知道目前有多大的剩余空间,哪怕接收端无剩余空间,把这个段丢掉,也会返回一个ACK回来,这样就可以得知目前有多大的空间

有点问题是, t 1 t_1 t1是发送的数据的数据量是根据 t 0 t_0 t0时刻的容量决定的,但是到达接受端的时候是 t 2 t_2 t2时刻,此时(至少经过了一个RTT)已经处理了很多数据,所以发的容量比较实际应发的数据量会少,可以采用预测的方法解决这个小问题

TCP连接管理算法

主要是三次握手,四次挥手

另外可以看看这篇***博客***中的内容

TCP连接建立

3次握手

  • 客户端发连接请求(TCP的段头),S位为1表示这是一个同步段,把自己选的随机序列号也放进去
  • 由于S位为一,接收端就知道这是连接请求,会返回一个ACK,确认号是接收到的序列号+1,段头中的S位也为1
    • 返回之后服务器端就会开辟缓存,初始化一些变量
  • 客户端对服务器端的ACK进行确认,此时S位为0,序列号为自己的序列号+1,确认号是服务器端返回的序列号+1
    • 放回之后客户端也会开辟缓存,初始化一些变量
    • 这里数据域可以不为空,向服务器端发出资源请求

本质就是交换初始序列号

有些攻击在发完请求之后就不再回复,服务器一直开辟空间,占用CPU时间,这种叫做半连接攻击(是一种DoS攻击, deny of service,拒绝服务攻击)(DDos,分布式拒绝服务攻击)

image-20220317174214160

TCP连接关闭

关闭基本上是四次挥手

客户端找服务器,然后服务器找客户端

  • 发送请求,设置段头中的F位为1
  • 服务器发送ACK响应

image-20220317175250191

TCP拥塞控制算法

为了缓解路由器的拥塞,从拥塞回到不拥塞,防止其丢包,最好是工作在转发效率高并且队列没有满,让其传输的每个数据包都是有效的数据包,这样效率非常高

一种是拥塞信息直接反馈到发送端;另一种是消息反馈到接收端,接收端再发送给发送端,但是我们的互联网是瘦内核,胖端系统,路由器仅仅保持了最基础的转发功能,剔除了复杂的功能,因此使用的是第二种方法

如何确认当前的网络拥塞状况?

  • 计时器超时 → \to 重度拥塞
  • 收到三次一样的ACK → \to 轻度拥塞

这两种情况都会降低发送速率,其他情况都会加快发送速率

下面两个方法加起来是TCP的拥塞控制方法,称为两阶段法

  • 慢启动(slow start),从一个段开始,以二的倍数增加
  • 拥塞避免(congestion avoidance),到达1024时,每次都加一,避免网络拥塞

两个重要变量

  • threshold:阈值,初始值可以根据经验设定,后面会根据网络的实际情况自动改变

  • 拥塞窗口的大小:开始为1,然后一直乘2,到达阈值之后加1

慢启动

每接收到一个ACK之后,自+1,这样每一波发送完了之后都会翻倍

image-20220322105805322

拥塞避免

Tahoe算法

每确认w个段窗口窗口大小才加一,w为上一次窗口大小

如果有丢包发生,则设置阈值为当前窗口大小的一半,并且把窗口的大小改为1,然后跳到慢启动阶段,重新开始

image-20220322111350169

上面这个算法直接全部降到一有点过度了,对于轻度拥塞网络没必要

Reno算法

分为轻度拥塞和重度拥塞

如果是超时造成的丢包,此时是重度拥塞,窗口大小置为1

如果是三次收到重复的ACK,此时是轻度拥塞,窗口大小置为当前大小的一半

image-20220322111658257

有限机描述

只有超时了才会回到慢启动阶段,收到三个重复的ACK时会到快速恢复阶段

还缺个东西没有处理

快速恢复阶段发了之后又收到三个重复的确认段,在图上没有体现出来,应该有一个指向自己的箭头

image-20220322112031305

平均窗口大小为 0.75 W R T T \frac{0.75 W}{RTT} RTT0.75W,W是丢包时的窗口大小

吞吐量: 1.22 M S S R T T L \frac{1.22 MSS}{RTT\sqrt{L}} RTTL 1.22MSS,L是loss rate, L = 8 3 w 2 L = \frac {8}{3w^2} L=3w28

计时器间隔更新算法

计时器的间隔反映的是未来的网络状况,需要能够与未来网络的繁忙情况匹配,最好比一个RTT大一点

注意:RTT会变化

主要使用下面三个公式计算:
T i m e o u t = E s t i m a t i e d R T T + 4 ∗ D e v i a t i o n E s t i m a t e d R T T n = ( 1 − α ) ∗ E s t i m a t e d R T T n − 1 + α ∗ S a m p l e R T T D e v i a t i o n n = ( 1 − β ) ∗ D e v i a t i o n n − 1 + β ∗ ∣ S a m p l e R T T − E s t i m a t e d R T T ∣ Timeout = EstimatiedRTT + 4*Deviation\\ EstimatedRTT_n = (1-\alpha)*EstimatedRTT_{n-1}+\alpha * SampleRTT\\ Deviation_n = (1-\beta) * Deviation_{n-1} + \beta * |SampleRTT - EstimatedRTT| Timeout=EstimatiedRTT+4DeviationEstimatedRTTn=(1α)EstimatedRTTn1+αSampleRTTDeviationn=(1β)Deviationn1+βSampleRTTEstimatedRTT

下面两个式子名字叫做指数型的加权平均运动,是一个预测公式,比实际采样值平稳很多

一般 α \alpha α取值为0.125, β \beta β的取值为0.25

偏差值反映了网络的忙闲状况,波动大的时候变差大,波动小的时候偏差小

image-20220317173508161

路由算法

链路状态算法

LS算法

Intialization:
    N' = {u}
    for all nodes v:
        if v adjacent to u:
            D(v) = c(u,v)
        else:
            D(v) = inf
Loop
	find w not in N' and D(w) is minium
    add w to N'
    update D(v) for all v adjacent to w and v not in N':
    	D(v) = min(D(v), D(w) + c(w,v))
until all nodes in N'

距离矢量算法

DV算法

# for each node X
Initialization:
    for all destination nodes y:
        if y is a neighbor:
            Dx(y) = c(x,y)
        else:
            Dx(y) = inf
for each neighbor w:
    Send distance vector Dx = [Dx(y): y in Neighbor] to w

loop 
	wait (until I see a link cost change to neighbor w or until I receive update from neighbor w)
    for each destinations y:
        Dx(y) = min {c(x,v) + Dv(y)}
	if Dx(y) changed for any destination y:
        send new value of min Dx(y) to all neighbors
forever

CRC算法

首先发送端与接收端会约定一个generator,假设有r+1位(一般都是32位)

将要发的数据左移r位之后除以generator,得到的余数称为CRC

注意,这里的除法使用的是模二除法,没有借位,10-01=11

将得到的CRC拼接在原始数据的后面发送到接收端,接收端收到之后连通余数一起除以generator,如果没有差错的话,最后得到的余数就是0

generator是多少位就可以检测出来多少位的错误,检测到错误之后直接取反就是正确诗句

image-20220412104744918

例子:

generator:1001

Data:101110

Data左移三位为:101110,000,除以generator得到余数011,拼接到Data后面发送到接收端

发送到接收端的数据是101110,011

CSMA/CD

Carrier Sense Multiple Access Collision Detection,带碰撞检测的载波监听的多路访问

A: sense channel
if idle 
    then {
        transmit and monitor the channel; 
        If detect another transmission // 检测到碰撞,检测到碰撞电平就会升高
            then { 
                abort and send jam signal;// 停止发送数据并且发送一个堵塞信号
                update collisions; // 更新碰撞次数,刚开始发的时候一定是0
                delay as required by exponential backoff algorithm; //  延迟做规避,延迟时间是指数型的backoff算法,依据是碰撞次数
                goto A//  重新侦听信道
            }
        else {
            done with the frame; // 数据传输完成 
            set collisions to zero // 清空碰撞计数器
        }
    }
else {wait until ongoing transmission is over and goto A}
指数型规避算法
  • 第一次碰撞,从0和1中选一个数字,然后做的延时是 K ∗ 512 b i t K * 512 bit K512bit的传输时间
  • 第二次之后k的范围是 { 0 , 1 , 2 , 3 } \{0,1,2,3\} {0,1,2,3}
  • 大于10之后K的范围都是 { 0 , 1 , 2 , 3 , 4 , ⋯   , 1023 } \{0,1,2,3,4,\cdots,1023\} {0,1,2,3,4,,1023}

对于10Mbps的以太网来说,传输一位的时间是1微秒,如果K=1023,传输时间是50ms

Jam Signal:确保所有的传输都可以收到碰撞信号,有48bit

CSMA/CD的效率
  • 传播延时(prop)是指最远的两个点之间的时间
  • 传送延时(trans)是指最大的帧传输时用的时间

理想情况下效率接近于1,

链路的控制方式是分散式的

image-20220414164858263

过滤转发算法

  • 交换机收到一帧数据的时候,把源MAC地址和接口号记录下来(自学习,如果表里面有了的话就更新一下TTL)
  • 在交换表里面查找目的MAC地址
if entry found for destination
then {
    if dest on segment from which frame arrived// 如果目的MAC地址和源MAC地址在一个interface就直接扔掉   
    then drop the frame
    else {
        CSMA/CD // 运行CSMA/CD算法检查是否有碰撞
        forward the frame on interface indicated// 转发帧到目的端口
    }
}   
else {
    CSMA/CD // 运行CSMA/CD算法检查是否有碰撞
    flood // 广播
}

常用端口号

  • HTTP:80
  • Mail服务器:25
  • FTP控制端口:21
  • FTP数据传输端口:20
  • SMTP:25
  • pop3:110
  • IMAP:143

各种表

虚电路的转发表

根据虚电路号和到来的端口确定出去的端口和虚电路号

image-20220324162952536

IP网络的转发表(也叫路由表)

根据IP地址确定输出端口,匹配使用的是最长前缀匹配原则,简称最长匹配原则

image-20220324163429511

NAT表

网络地址转换表

用于真假地址变换,使用端口号区分不同主机的不同端口的消息

每一行的内容是假的IP地址和端口号,真IP地址和端口号,发出去的时候把假的IP地址和端口号转换为真IP地址和端口号,回来的时候需要再换回来,进出时候IP包的内容都发生了变换,通信效率下降(需要上到第四层传输层才可以更换端口号,上到第三层更换IP地址)

内网可以使用的假IP端口号有16位,所有NAT表的容量可以有6万多条记录

image-20220329115130369

ARP表

所有结点在网络层和链路层之间维护了一个表,叫做ARP表,记录了IP地址和MAC地址的对应关系

ARP是动态的,有一个TTL,如果在TTL时间中没有被访问过,就会删掉这个记录,通常为20min;初始时这个表是空的

记录格式: < IP address; MAC address; TTL>

ARP是工作在局域网中的,不能跨路由器,也就是说ARP表中只会记录当前网段中的个主机的MAC地址,如果需要发送到其他网段则需要使用路由器上的ARP表进行查询

路由器上每个端口都有一个ARP表

局域网内的通信过程

当ARP表中没有一个IP的MAC地址的时候,会在局域网中进行广播,询问MAC地址,这时候目的主机会返回自己的MAC地址

然后发送到目的主机之后先CRC检查差错,没有问题就解帧变成IP段,然后继续向上传输

跨路由器的通信过程

目的:主机A要发数据到主机B

  • 网络层,目的IP地址是B的IP地址
  • 然后下到链路层进行封帧,源MAC地址是A的,目的MAC地址是路由器的左侧MAC地址(DHCP技术获得)
    • 如果没有路由器左边接口的地址,可以广播一个ARP报文,要路由器的MAC地址
    • 路由器接收到报文之后就会发送回自己的MAC地址
  • 路由器收到帧之后进行CRC检查,没有差错之后就解包,送到第三层
  • 然后根据目的地址查路由表,路由包就转发到右边的地址
  • 然后下到二层,进行封帧,源MAC地址是路由器右边的地址,目的MAC地址是B的MAC地址
    • 如果没有就广播ARP要B的MAC地址
  • 送到B之后再次进行CRC检查,没有问题就往第三层送,然后逐步解包送到应用层中

MAC表

也叫交换表

每个交换机都维护一个交换表

  • 交换表的每一行是(MAC地址, 端口号, TTL)
  • TTL一般是60分钟,超时会直接扔掉
  • 可以通过自学习获得
  • 没有数据的时候Flooding(广播)一下,然后接收到了信息之后存起来方便后面使用

自学习

当Flooding之后,会把端口号和传出端口记下来,这个过程就是一个自学习过程

传入和传出的时候都会记录在表里面

报文格式

DNS

image-20220506235932371

UDP

image-20220507001657785

TCP

image-20220507002046142

image-20220507002054258

IPv4

image-20220507102241637

image-20220324172659359

IPv6

有定长的40字节的header

不允许碎片(也就是IPv4中的包切片),如果帧太小了放不下了就会扔掉,然后返回一个ICMP报文,通知发送端把包弄小一点重新发送,因为包切片会导致速度变慢

image-20220507114935162

image-20220408165645901

帧结构

image-20220507125624365

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hydrion-Qlz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值