建议参考西安交通大学计网考试后总结和复习资料汇总
本文是第一次复习的整理材料,包括缩写名词解释、重要概念、重要算法、各种表格和报纸协议
如需pdf,请在下面留言
文章目录
- 名词解释
- 填空概念
- 算法
-
- TCP可靠性控制算法
-
- 发送端
- 接收端
- TCP流量控制算法
- TCP连接管理算法
-
- TCP连接建立
- TCP连接关闭
- TCP拥塞控制算法
-
- 慢启动
- 拥塞避免
-
- Tahoe算法
- Reno算法
- 有限机描述
- 计时器间隔更新算法
- 路由算法
-
- 链路状态算法
- 距离矢量算法
- CRC算法
- CSMA/CD
-
-
- 指数型规避算法
- CSMA/CD的效率
-
- 过滤转发算法
- 常用端口号
- 各种表
-
- 虚拟电路转发表
- IP网络转发表(也叫路由表)
- NAT表
- ARP表
-
- 局域网内的通信过程
- 跨路由器的通信过程
- MAC表
-
- 自学习
- 报文格式
-
- DNS
- UDP
- TCP
-
- IPv4
- IPv6
- 帧结构
名词解释
缩写 | 英文 | 中文 |
---|---|---|
PSTN | public switch telephone network | 打电话网络 |
NAP | network access port | 网络接入点 |
ISP | Internet Service provider | 网络服务商 |
RFC | Request For Comment | 征求意见稿 |
IETF | Internet Engineering Task Force | 维护RFC工程任务组 |
ADSL | Asymmetric Digital Subscriber Line | 非对称数字用户线 |
HFC | Hybrid Fiber Coax | 混合光纤同轴电缆 |
LAN | Local Area Network | 局域网 |
FDM | Frequency Division Multiplex | 频率复用 |
TDM | Time Division Multiplex | 时分复用 |
CDMA | Code Division Multiplex Access | 码分复用 |
ATM | Asynchronous Transmit Mode | 异步传输模式 |
PDU | Protocol Data Unit | 协议数据单元 |
ISO | Internet Standard Organization | 国际标准化组织 |
OSI | Open System Interconnection | 开放系统互联 |
RTP | Realtime Transfer Protocol | 实时传输协议 |
SMTP | Simple Mail Transfer Protocol | 简单邮件传输协议 |
HTTP | Hyper Text Transfer Protocol | 超文本传输协议 |
HTTPS | Hyper Text Transfer Protocol over Secure Socket Layer | 超文本传输安全协议 |
HTML | Hyper Text Markdown Language | 超文本标记语言 |
FTP | File Transfer Protocol | 文件传输协议 |
TFTP | Trivial File Transfer Protocol | 简单文件传输协议 |
SIP | Session Initialization Protocol | 会话初始协议 |
TCP | Transmission Control Protocol | 传输控制协议 |
UDP | User Datagram Protocol | 用户数据报协议 |
URL | Uniform Resource Locator | 统一资源定位器 |
URI | Uniform Resource Identifier | 统一资源标识符 |
RTT | Round Trip Time | 服务器和客户端间的往返时间 |
ASCII | American Standard Code for Information Interchange | 美国信息交换标准代码 |
CGI | Common Gateway Interface | 公共网关接口 |
pop3 | Post Office Protocol | 邮局协议 |
IMAP | Internet Mail Access Protocol | 网络邮件访问协议 |
MIME | Multipurpose Internet Mail Extension | 多用途网络邮件扩展 |
DNS | Domain Name System | 域名服务系统 |
RR | Resource Records | DNS的资源记录 |
TTL | Time To Live | 保留时间 |
NFS | Network File System | 网络文件系统 |
SNMP | Simple Network Management Protocol | 简单网络管理协议 |
DHCP | Dynamic Host Configuration Protocol | 动态主机配置协议 |
RIP | Routing Information Protocol | 路由信息协议 |
MSS | Maximum Segment Size | 最大段大小 |
EFCI | Explicit Forward Congestion Indication | 明确转发拥塞指示 |
AIMD | Additive Increase Multiplicative Decrease | 加性增乘性减 |
BGP | Border Gateway Protocol | 边界网关协议 |
OSPF | Open Shortest Path First Protocol | 开放式最短路径优协议 |
ICMP | Internet Control Message Protocol | 控制报文协议 |
MTU | Maximum Transmission Unit | 最大传输单元 |
CIDR | Classless Inter Domain Routing | 无类的域间路由 |
NAT | Network Address Translation | 网络地址变换 |
MAC | Media Access Control Address | 硬件地址 |
NIC | Network Interface Card | 网卡 |
CRC | Cyclic Redundancy Check | 循环冗余校验 |
CSMA | Carrier Sense Multiple Access | 载波侦听多路访问 |
CSMA/CD | Carrier Sense Multiple Access With Collision Detection | 带碰撞检测的载波侦听多路访问 |
CSMA/CA | Carrier Sense Multiple Access With Collision Avoidance | 带碰撞避免的载波侦听多路访问 |
ARP | Address Resolution Protocol | 地址解析协议 |
jpeg | Joint Photographic Expert Group | 联合图像专家组 |
ISDN | Integred Services Digital Network | 综合服务数字网 |
WAN | Wide Area Network | 广域网 |
MAN | Metopolitan Area Network | 城域网 |
WLAN | Wireless Local Area Network | 无线局域网 |
MPEG | Moving Picture Experts Group | 动态图像专家组 |
FSM | Finite State Machine | 有限状态机 |
IGRP | Interior Gateway Routing Protocol | 内部网关路由协议 |
RARP | Reverse Address Resolution Protocol | 反向地址转换协议 |
填空概念
-
网络是由边缘(edge),内核(core)和链路(links)组成的
-
TCP的可靠性表示的是:数据不丢,到达顺序不乱,内容无差错
-
UDP和IP一样,都是
best effert
传输 -
常见的应用架构有:C/S,P2P,二者的混合
-
三种接入方式:驻家接入网络,单位接入网络,移动接入网络
-
驻家接入包括:拨号上网(不能同时上网和打电话),ADSL(上行带宽窄,下行带宽宽),HFC(多家公用的),FTTH
-
单位接入包括:LAN,wifi(wifi是access point,基站是base station)
-
物理媒介:双绞铜线(Twisted Pair),光纤(Fiber),同轴电缆(Coaxial cable)
-
网络的三种交换方式:
-
电路交换:先拨号预留资源后上网,拨号上网
-
包交换(组交换):存储加转发模式,无需拨号,是一个端到端的交换方式,IP网络
-
虚电路交换:结合上面两种方式,先拨号预留资源,然后使用存储加转发模式进行数据传输,ATM,帧中机,X.25网络
每一个包头里都包括一个虚电路号,不包含目的地的IP地址,每过一个交换机虚电路号可能会变,虚电路上的每个交换机都会维护这个状态,新的虚电路号存在每个交换机的转发表上。
一个虚拟电路需要包括从发送端到接收端的路径,虚拟电路号,链路上的每个交换机上都要有转发表关于这个结点的入口
转发表是由路由选择计算器处理和更新的
拨号建立链路的协议是信令协议
-
-
分组交换网络的好处
- 适合突发数据传输
- 资源利用率更大
- 能承载的用户量更大
- 更简单,无需拨号
-
分组交换网络的缺点
- 不适合实时性较高的传输
- 可能会出现丢包和延迟
-
分组交换网络的延时
- 节点处理时间
- 排队延时(最不能被忽略)
- 传送延时(Transmission delay)
- 传播延时(Propagation delay)
-
为什么会被丢包
- 路由器的发送端队列满了
- TTL减到0了(垃圾包)
- 路由器接收端的队列满了
-
TCP/IP五层模型及对应的PDU
- 应用层(message,报文)
- 传输层(segment,段)
- 网络层(datagram,数据报或包)
- 链路层(frame,帧)
- 物理层(bit,位)
-
OSI七层模型
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 链路层
- 物理层
-
进程通过一个称为**套接字(Socket)**的软件接口向网络发送报文和从网络接收报文,它是应用层与传输层的一个通信管道,二者之间的通信必须通过它,套接字需要传入四个参数:目的IP,目的端口号,源IP,源端口号
-
IPv6地址共16个字节,Ipv4地址共4个字节,MAC地址有6个字节
-
QoS参数:丢包率,实时性,吞吐率,安全性
-
如果不允许丢包并且对时间没有要求则可以使用TCP协议,如果要求可靠还要快,则可以建立多个TCP连接传输数据
-
HTTP是一个无状态协议,
- HTTP1.0是一个非持久性连接,一个TCP连接最多传输一个对象,每一个请求通过单独的TCP发送,首先先请求HTML基文件,然后请求网页上的各种资源,对于非持久性的连接来说,一次访问至少需要两个RTT的时间,第一个RTT用于初始化TCP连接,第二个RTT用于TCP请求和响应返回前面几个字节,总用时为2RTT+文件传输时间
- HTTP1.1是一个持久性连接,一个TCP连接可以传输多个对象,除了基对象经过两个RTT的延时之外,其他对象只需要一个RTT延时就够了
-
请求报文由请求行、请求头,请求数据组成,响应报文由响应行、响应头、响应数据组成
-
网页缓存有四种方式
- 代理式缓存:在客户端附近放置一个代理服务器,客户端先请求代理服务器,代理服务器上没有之后再去请求源服务器,类似于cpu中一级缓存的作用
- 客户端缓存:这种请求方式是Conditional GET,是HTTP协议的一种机制,允许缓存器证实它的对象是最新的,如果缓存具有最新的版本,则不发送对象,否则返回更新后的对象,并由客户端保存到本地
- 分布式缓存:许多代理缓存的协作,工程上难以实现,很少用
- 服务器缓存:实际上就是一个集群,做成Cluster的形式,保证每个服务器负载均衡(load balance)
-
为什么需要网页缓存
- 减少客户端请求的响应时间
- 提高用户体验
- 减少主干带宽上的流量
-
使用FTP传输文件时需要建立两个TCP连接,带内控制(持久性连接)和带外传输(非持久性连接,每传完一个文件就关掉)
-
电子邮件三个主要组件:用户代理,邮件服务器(包括邮箱,消息队列,SMTP),SMTP
-
SMTP是电子邮件的核心,用于从发送方的邮件服务器发送报文到接收方的邮件服务器,使用TCP协议进行可靠性传输,传输分为三个阶段:握手,传输,关闭;
-
SMTP与HTTP的异同
- HTTP从Web服务器向客户端传输文件,SMTP从一个邮件服务器向另一个邮件服务器传送文件
- 都支持ASCII表示的英文,SMTP只支持这种格式,HTTP不做要求
- 都支持命令行访问
- 都使用持续性连接(HTTP1.1)
- HTTP把每个对象封装成一个报文,SMTP可以把多个对象封装成一个报文
-
MIME:多用途网络邮件扩展,是扩展的SMTP,不仅支持了ASCII,同时还支持了很多种其他的编码格式(文本,图像,音频,视频等)
-
DNS
- 主要任务:进行主机名到IP地址转化的目录服务
- 传输层采用的协议是UDP,UDP访问比较快,并且都是临近的DNS,丢包的概率比较小
- DNS本质上就是一个数据库系统,是一个分层的分布式的数据库,每个里面的数据可能是不完备的,这样每个数据库都不用很大
- 分为三层:根服务器,顶级域名服务器,本地服务器和授权服务器,除了授权服务器里面的记录是永久的,其他的都会根据访问频率清掉
- 三种查询方式:迭代式查询,递归式查询,结合式查询
- DNS每个记录保存四个元素:(name, value, type, TTL)
-
搜索引擎
- 一个网站可以看做是一个节点,一个url是一个边
- 从每个网页中提取关键字与URL对应起来,然后遍历网页中的其他url,重复前面的操作,最后生成关键字与url的对应关系
- 包含三种数据结构:url表(存储指向实际url和页面的指针),堆(储存变长的标题和url,千万不能写成堆栈),哈希表(将url 哈希为较短的对象)
- 分为两步,第一步是搜索:使用广度优先搜索遍历网站,是一个递归的过程,输入一个url,哈希url,决定是否把这个url放入url表中,如果要放入的话还需要提取页面中的关键字;第二步是索引,对于url表中的每个项目,提取标题和页面中的关键字,并将关键字指向相应的url表的项目
-
传输层服务
- 为运行在不同主机上的应用进程提供逻辑通信
- 提供复用/解复用服务
- 可靠性的控制:检错、丢包重传
- TCP和UDP两个协议都不能保证实时性和可用带宽,都使用错误检查方法,但是UDP不会校正错误,
- UDP协议几乎与下层的IP协议是一样的,都是尽力而为,所以UDP的段有时候也会叫做数据报
-
UDP
- 功能
- 复用和解复用
- 差错检查,但是不会校正,均会送到应用层
- 传输:应用层几乎直接与IP层交互
- 不需要握手,不需要建立连接,不需要开辟缓存
- 特征
- 比较简单
- 段头小
- 速度相比TCP来说更快一点
- 典型应用:流媒体,Internet电话,多播通信,Network Management,NFS,RIP,DNS,RTP,TFTP,DHCP
- 功能
-
TCP
- 四个技术:三控一管,连接管理,可靠性控制,流量控制,拥塞控制,其中可靠性控制最具有代表性
- 特征
- 是一个点对点的协议,不支持一点发送,多点接收
- 可靠的,字节有序的,流水式的发送,没有报文的边界
- 通信时先建立连接,开辟缓存,设置变量,交换初始序列号
- 是全双工的通信(UDP也是)
- 最大的段大小限制为536字节,超过就会封装为两个段,使得传输效率变低
- 四个重要算法
- :发送端,接收端
- :发送端,接收端
- :三次握手,四次挥手
- :慢启动和拥塞避免,AIMD算法的四个特性(必须记住):有效性,收敛性,公平性(对所有TCP段来说得到的带宽一直),友好性(TCP对UDP友好)
-
ATM提供的四种业务(只有ABR有拥塞控制)
- ABR(avaliable bit rate 有效位率),保证最小带宽,会出现丢包,这种方式需要进行拥塞控制
- CBR(constant bit rate 恒定位率),用于实时语音通信,绝对不丢包
- VBR(variable bit rate 可变位率),用于传输视频,绝对不丢包
- UBR(unspecified 未指定的),有资源就用,没资源就丢掉了
- 传输时主要有两种信元,一种是数据信元(data cells),一种是资源管理信元(RM cells),几十个数据信元过后会有一个资源管理信元
- 使用CI和NI为表示拥塞状况,如果CI为一表示现在拥塞了,如果NI为一表示告诉发送端不要增加速率,现在速率就可以了
-
网络层的两个重要功能:转发和路由选择
-
对于IPv4的网络来说,没有呼叫建立的过程,传输的过程中可能会走不同的路径到达接收端,每次走的路径长短可能不一样,所以会出现乱序
-
路由器的每个端口既是输入端口也是输出端口,中间是一个交换结构
-
路由器的两个主要功能:
- 可以运行相应的路由协议或算法,维护路由表
- 将数据报从输入链路转发到输出链路
-
路由器的网络层是去中心化的交换,给定数据报的目的地,在转发表上寻找输出端口;目标是以line speed完成输入端口处理(也就是路由器内部的最大带宽);如果数据包到达的速度比转发到交换机结构的速度快,则会报数据存在输入端口的一个队列中
-
路由器的交换结构有三种类型
- 内存式:将数据放入内存中,然后再由内存放入输出端口中,需要两次访存,数据的转发效率不高,早期性能很差的路由器使用这种方式
- 总线式:输入端口将数据放到总线上,然后经总线到达输出端口。无需访存,直接通过总线传输数据,单款取决于总线的带宽,总线带宽越宽,竞争越小
- 交叉网络式:有开关控制的多总线方式,是一种并行的总线结构。路径可以是冬天的,但是价格比较昂贵
-
路由器的输出端口是输入端口的镜像,输入端口依次有三层:物理层,链路层,网络层,在网络层会有一个队列存储从链路层的帧中解出来的IP包,并且维护着路由表
-
输入端口的行头阻塞问题:当多个输入端口的包都要转发到同一个输出端口的时候不能同时转发,同一时间只能有一个端口转发,另一个仍然呆在队列中,导致排队队列后面的包无法移动,这种情况叫做行头阻塞
-
网络层在逻辑上可以分为两层:上层的路由协议和ICMP协议以及下层的IP协议
-
路由协议包括:路径选择算法,RIP,OSPF,BGP
-
ICMP主要用来错误报告和连通性检查
-
IP地址是主机的三十二位标识号,不是与主机对应的,而是与网络接口对应的,有几个网络接口就可以有几个IP地址,路由器往往有多个接口,所以一般有多个地址
-
32位地址分为网络部分(高若干位)和主机部分(低若干位),同一网段内的网络部分必须是相同的,主机部分不同,不同网段网络部分肯定不相同,具体多少位取决于网络的类型
-
什么是子网?有相同网络部分的IP地址,可以不经过路由器而到互相通信
-
一般计算子网的数量时可以把路由器直接拿走,有几个孤岛就有几个子网,只有线也算一个孤岛
-
IP地址总共分为4类
- A类第一位固定为0,网络段有8位,一个网段逻辑上可以容纳 2 24 − 2 2^{24}-2 224−2个主机
- B类网段前面两位固定为10,网络段有16位,其余16位为主机段
- C类网段前面三位固定为110,网络段有24位,其余八位为主机段
- D类没有主机,以1110开头,叫做,是一对多通信,只能作为目的地址使用
- 这里面有相当多的地址是保留的,不分配出去使用
-
特殊地址
- 0.0.0.0不属于任何类型的地址,只能作为原地址使用,不能作为目标地址,表示本网络的本主机
- net-id全为0:表示本网络的Host-id这个主机
- 1.1.1.1(即255.255.255.255)是一个广播地址,对所有主机广播
- host-id全为1:也是一个广播地址,对这个网络内的所有主机进行广播
- 127.0.0.1自发自收,是一个自测试地址
-
子网划分时会浪费一部分的IP地址,所以国内一般不进行子网划分,具体划分时需要减去全0和全1的地址,用于预留不能分配出去,比如三位的主机位只能分配给六个主机
-
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
-
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地址收会回来
-
NAT:将多个假的IP地址映射到一个真的IP地址上面,通过不同的端口号区分
- :网络地址变换表
-
ICMP:主机和路由器用该协议在网络层交流信息,主要用于错误报告,请求和响应(ping)
- ICMP由三部分组成:类型,编码,差错原因
- tracert命令是使用ICMP报文实现的,主机会发送一系列具有不可达UDP端口的TTL递增的报文,第一个数据报TTL=1,第二个TTL=2,依次递推,当TTL等于0的时候,路由器会返回一个ICMP报文,告诉主机数据被仍了,同时报文中有路由器的IP地址,所以按照收到的顺序就可以得到路径路由的信息
-
IPv6
- 动机:32位的地址空间即将要被分完了;原始的包处理起来太慢了;IPv4协议不支持QoS(所有人发的数据包都是平等的)
-
IPv4到IPv6的过渡
- 原因:不是所有的路由器都可以被同时更新
- 隧道技术(Tunneling):在边缘路由器把IPv6的包整个放到IPv4报文里面传输,直到再次遇到边缘路由器时候解包得到原始IPv6包
- 双栈技术(Dual - stack)(不要写成双堆栈技术):将IPv6包头部对应的地方转换到IPv4的包中,放不下的部分(如IP)放到数据域的最前面
-
链路层的服务
- 封帧,解帧:把数据打包成帧传输,确定传输目标地址需要用到MAC地址,共6个字节,例如00-16-EA-AE-3C-40
- 链路的访问控制功能
- 流量控制
- 检错功能:检查到错误之后直接把这个数据扔掉,不再往上传
- 差错的校正:发四个包到接收端,四个包异或一下得到第五个包,如果有一个数据包丢掉之后,但是接收到了第五 个包,可以把收到的包进行异或就可以恢复了 ,现在的网卡没有这个功能了
- 半双工和全双工的通信(两方可以同时发送消息)
-
链路层的实现
- 网卡没有CPU,包含硬件,软件和固件(烧在芯片中的软件)
- 使用适配器通信:发送端把数据封装在帧里面,同时添加差错检验位,接收端检查数据是否出错,如果没有出错则把数据报从帧中解帧出来,并上传到网络层,如果检查到错误直接丢掉
- 三种工作方式:正常工作模式(链路层报文的头部MAC地址是自己才解帧往上传);广播模式(如果MAC是全1表示是一个广播地址);混杂模式(收到帧就解帧往上传)
-
差错检查:要求发送端发送冗余信息
- 一位奇偶校验法:分为奇校验和偶校验,保证数据里面的1有奇数个或者偶数个,只能发现错误不能纠错
- 二维奇偶校验法:将数据组成成二维的形式,可以纠正一位的错误,可以检测出多位的错误
- :循环冗余校验,目前普遍使用的方法
-
常见链路类型
- 点对点链路(P2P链路):不会出现碰撞,不需要控制,甚至不需要mac地址,因为已经建立好了二者之间的通信链路,一个发一个收
- 广播:数据同时发的话会产生碰撞
- 交换式链路:以太网
-
多路访问控制:多个结点同时使用链路的时候需要处理冲突
- 冲突(interference):两个结点以上同时发数据就会发生碰撞(collision),同时发数据在收到之后一查就发现是错的,只能扔掉
- 分为分散式的和集中式的。分散式是目前采用比较多的方法,任意一个结点需要使用通道发数据的时候直接就发了,当产生碰撞之后停止发送,过一段时间后申请发送,直到发送成功为止,需要有能力检测是不是发生碰撞了;集中式需要一个集中控制器,在发数据之前先申请,得到许可之后才能发送数据,保证同一时间只有一个结点发送数据,但存在单点故障问题
-
理想的多路传输协议有四个要求:只有一个结点传数据的时候可以使用全部的带宽;多个结点共享带宽每个结点可以使用的带宽是相等的;需要尽可能的完全分散(不需要集中式控制器,没有同步的时钟);算法要足够简单
-
MAC协议,三种大的分类
-
信道划分:时分复用,频分复用,码分复用,波分复用,空分复用;比较适合高负载的情况
TDMA:每个用户分一个时间片,大约为发一帧数据的时间,大家轮流使用通道
FDMA:每个用户使用不同的频率发数据,例如WIFI和ADSL
-
随机访问:信道是随机划分的,允许碰撞,适合用户量比较少的情况
ALOHA:不分时间片,任意时间都可以发数据,碰撞的概率增加了。最大的利用效率为18%
Slotted ALOHA:分为大小相等的时间片,只允许在每个时间片开头发数据,如果检测到碰撞就都停止发送数据,在下一个时间片开头两个结点都有概率P重发数据,直到发送成功。最大利用效率为37%
CSMA,(用于有线网络),CSMA/CA(用于无线网络):在传输前需要感知信道是不是空闲,如果空闲了才发数据,否则就推迟传送
无法完全避免碰撞:有传播延迟;两个结点同时感知信道
-
Taking Turn:分布式轮询,集中式轮询。大家轮着使用,有一个结点(主节点)控制大家使用,当一个结点使用的时候其他结点不允许使用
集中式轮询(Polling from central site):主节点邀请其他结点传输数据,如果有数据就发,没有数据就继续问下一个结点
分布式轮询(token passing):适用于环形网络,使用Token控制传输,也称为令牌传输模式
-
-
MAC地址是48位的,烧在NIC的ROM中,不分层,不会重复,在出厂的时候就已经设置好了
-
不同主机间的通信需要维护一个***[ARP表](# ARP表)***
-
以太网(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,传输过程中刚干扰能力比较强(是物理层的方法)
-
802.3表示以太网,802.11表示wifi
-
以太网的技术类型:总线式;交换机;光纤方式;双绞线
-
互联设备
-
Hubs:
外表和宿舍的小交换机是一样的,是一个物理层的设备;
PDU是位,不需要转发,接收到的数据全部都广播出去(不能隔离碰撞域);
没有缓存,不运行CSMA/CD算法;
只要把网卡设置为混杂模式就可以收到信息,不够安全
数据采集时候比较方便
-
交换机:是一个链路层的设备,可以隔离碰撞域
处理的PDU是帧,帧全部接受完了之后才会进行处理并转发
是一个存储转发设备(优点:隔离碰撞域)
转发的时候需要维护一个***[MAC表](# MAC表)***,查询转发出口
检查传入帧的MAC地址,有选择地将帧转发到一个或多个传出链路
交换机上运行着***[过滤转发算法](# 过滤转发算法)***
-
-
交换机和路由器的比较
- 都是存储转发设备,交换机和路由器都可以隔离碰撞域
- 交换机运行在局域网,路由器运行在广域网
- 交换机维护交换表,路由器维护路由表
- 交换机运行CSMA/CD,filter & forwarding,self-learning,路由器运行路由算法
- 运行在不同的层,路由器运行在网络层,交换机运行在链路层
算法
TCP可靠性控制算法
核心:丢包(表示的是数据包)重传
TCP的可靠性是牺牲时间换来的,所以是实时性很差
发送的初始段序号是随机选的0-65535之间的整型值,后一个段的段序号等于前一个段的段序号加上数据域的长度(单位:字节)
发送端
传输层发送的TCP段在接收端确认收到之前都需要放在缓存中存起来,需要三个变量来维护:
- send_base:指向发送花村的最左侧
- Sequence number:下一个段的序列号
- window_size:发送端缓存窗口大小
如果Sequence number - send_base = n,则说明缓冲区已经满了
使用有限状态机来描述算法,这里是一个简化的控制算法,先考虑半双工,发送端只发送,接收端只确认,不考虑流量和拥塞控制
最左侧的虚线箭头表示开始,此时 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,然后重新启动计时器
接收端
为了保证传递到应用层的段与发送时的顺序一致,在接受到发送的段之后需要放入缓存中存起来,需要两个变量来维护
- rcv_base:期待的段的段序号
- window size:接收端缓存窗口大小
- 有序到达一个段,中间没有任何间隙,前面所有的东西都已经确认过了
- 动作:对ACK做了一个延时,等待下一个段(500ms),如果下一个段没来,直接返回
- 这样是为了少返回一个ACK
- 有序到达一个段,没有间隙,但是前面的段正在做500ms的delay
- 动作:立即发送一个ACK,
- 一切都很完美的情况下最多等待500ms
- 乱序到达,比期待的段序号要高
- 动作:立即发送一个ACK,序号是期待的段的段序号(rcv_base指向的段)
- 到达了一个段 部分或完全的填充了接收端中的gap
- 如果是rcv_base指向的段,就会变成红色,连着身后的红色送给应用层,rcv_base指向下一个非红色(也就是没有收到)的段,并返回rcv_base移动后指向的段序号
- 如果不是rcv_base指向的,则把这个标记为红色的,返回一个ACK,段序号为rcv_base指针指向的段
- 若收到的段序号位于rcv_base指针的左侧,则忽略(这个是额外加的,教材和ppt没有,上课讲到的)
- 直接丢掉,不用暂存,然后立马返回一个当前需要段的ACK
- 原因是ACK返回的途中被路由器丢掉了
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,分布式拒绝服务攻击)
TCP连接关闭
关闭基本上是四次挥手
客户端找服务器,然后服务器找客户端
- 发送请求,设置段头中的F位为1
- 服务器发送ACK响应
TCP拥塞控制算法
为了缓解路由器的拥塞,从拥塞回到不拥塞,防止其丢包,最好是工作在转发效率高并且队列没有满,让其传输的每个数据包都是有效的数据包,这样效率非常高
一种是拥塞信息直接反馈到发送端;另一种是消息反馈到接收端,接收端再发送给发送端,但是我们的互联网是瘦内核,胖端系统,路由器仅仅保持了最基础的转发功能,剔除了复杂的功能,因此使用的是第二种方法
如何确认当前的网络拥塞状况?
- 计时器超时 → \to → 重度拥塞
- 收到三次一样的ACK → \to → 轻度拥塞
这两种情况都会降低发送速率,其他情况都会加快发送速率
下面两个方法加起来是TCP的拥塞控制方法,称为
- 慢启动(slow start),从一个段开始,以二的倍数增加
- 拥塞避免(congestion avoidance),到达1024时,每次都加一,避免网络拥塞
两个重要变量
-
threshold:阈值,初始值可以根据经验设定,后面会根据网络的实际情况自动改变
-
拥塞窗口的大小:开始为1,然后一直乘2,到达阈值之后加1
慢启动
每接收到一个ACK之后,自+1,这样每一波发送完了之后都会翻倍
拥塞避免
Tahoe算法
每确认w个段窗口窗口大小才加一,w为上一次窗口大小
如果有丢包发生,则设置阈值为当前窗口大小的一半,并且把窗口的大小改为1,然后跳到慢启动阶段,重新开始
上面这个算法直接全部降到一有点过度了,对于轻度拥塞网络没必要
Reno算法
分为轻度拥塞和重度拥塞
如果是超时造成的丢包,此时是重度拥塞,窗口大小置为1
如果是三次收到重复的ACK,此时是轻度拥塞,窗口大小置为当前大小的一半
有限机描述
只有超时了才会回到慢启动阶段,收到三个重复的ACK时会到快速恢复阶段
还缺个东西没有处理
快速恢复阶段发了之后又收到三个重复的确认段,在图上没有体现出来,应该有一个指向自己的箭头
平均窗口大小为 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