用来记录一些网络相关
网络模型
- 应用层负责和用户交互部分
- 表示层用于加解密、解压缩
- 会话层用于管理不同的网络连接和会话,来应对上层的不同需求,校验、同步等。
- 传输层负责可靠不可靠传输、流量控制、差错控制(乱序)、复用分用(不同进程复用同一个底层)
- 网络层负责路由选择(最佳路径)、流量控制、差错控制(内容)、拥塞控制
- 数据链路层负责报文转层帧、差错控制(帧错、差错)、流量控制、访问控制(广播时对信道访问控制)
- 物理层负责比特流转换电信号传输,比如网线接头的设计标准、传输模式(单工、半双工、双工)、传输速率、比特同步、比特编码
物理层
- 奈氏准则,无噪 极限传输速率 = 2W * log2(V)
- 香农定理,有噪 极限传输速率 = w*log2(1+s/n), 信噪比(分贝数) = 10 * log10(s/n)
- 曼切斯特编码:将一个码元分成两个相等的间隔,前一个间隔为低电平后一个间隔为高电平表示码元(1、0)
- 数字信号转模拟信号,是将(0、1)转成不同的振幅、波形、频率的模拟信号来表示信息
- 模拟数据编码为数字信号,PCM编码:抽样(f采样频率>=2f信号最高频率(所有波形可以通过傅立叶变化得到基础波形,基础波形需要两个点确定坐标)),量化,编码
- 数据交换分为 电路交互、报文交换、分组交换
数据链路层
- 帧编码分为 字符计数法、字符填充法、零比特填充法、违规编码法,用于区分出两个帧
- 差错控制(检错编码:奇偶校验码、CRC循环冗余码)纠错编码 海明码
- 海明码 检查d位,需要码距d+1,纠错d位需要码距2d+1
- 可靠传输与流量控制:停止-等待协议(窗口为1的滑动窗口)、回退N步协议(GBN)、滑动窗口协议。
- 信道静态划分:频分多路复用(FDM)、(统计)时分多路复用(TDM、STDM)、波分多路复用(WDM)、码分多路复用(CDM)
- 信道动态划分(随机访问):ALOHA协议(随便发,出错等待随机时间后重试)、CSMA、CSMA-CD、CSMA-CAs
- 信道动态划分(动态访问):令牌传递协议
- 局域网使用的广播信道,拓扑结构:星型拓扑、总线型拓扑,环形拓扑、树型拓扑
- 局域网介质访问控制,CSDM/CD和令牌总线(总线型局域网、树型网络),令牌环(环形局域网)
- 局域网分类:以太网(IEEE802.3)局域网(IEEE802.11)令牌环网(IEEE802.5)FDDI光纤相关(IEEE802.8)
- 数据链路层分为逻辑链路控制子层(LLC)介质访问控制子层(MAC子层)
- 以太网使用CSMA/CD技术、符合DIX Ethernet V2、IEEE802.3标准
补充
透明传输
- 字符计数法
- 字符填充法
- 零比特填充法(逢五个bit 1 填0)
- 违规编码法
海明码
- 只能校验出来一位错误
- 数据有 k, 则需要的校验位 r, 为了满足能校验出来的具体的哪一位的错误,需要保证 2^r> m+k+1(1表示正确位)
- 检错位放置在 2^k 位置,并负责校验所有的位数中包含对应k位为1的数据,比如总共7位(3位校验码)第一位 **1,表示校验所有的奇数。
- 从上可知,任何一个数据位,都会被对应位置的二进制码位1的数据位所校验,如果第五位数据,位置的编码为101,则他被2^0(第一个校验位)和2^2(第三个校验位)所共同校验。
- 在只有一个数据出错的前提下,由于采用的奇偶校验码,所以检测这个数据位的所有校验位计算都会出错。此时只需要计算出错的校验位并求和,就能得到出错的位置。此时 2^0 + 2^2 = 5。
停止-等待协议
- 两端之间,帧先发先到。
- 发送端通过增加定时器,到时重新发送,解决了发送过程中出现的丢包、包错误导致的异常,也顺带解决了回报丢失或错误导致的异常
- 接收端通过回复 ack 包,保证了帧的可靠到达。
- 虽然保证了可靠传输,但是整个信道的利用率很低。
回退N步协议 GBN
- 通过并行发送消息,提高信道的利用率,但是为了保证接收端能区分不同的新旧分组,发送窗口N需要满足:当使用r个bit作为分组序号时 1 < N < 2^r-1
- 可以通过累积确认发送ack, 减少回包个数
- 接收窗口只有一个,每一次只接收期待接收的帧,其余丢弃,收到非期待帧,返回最近一条确认的ack。
选择重传协议
- 每一个发送帧都有一个确认帧
- 发送窗口大小等于接受窗口,发送窗口N需要满足:当使用r个bit作为分组序号时 1 < N < 2^(r-1)
- 只重传没有被ack确认的帧
- 发送和接收窗口都只有下界被确认之后,才能移动
码分多路复用
- 不同的信道信道使用不同的芯片序列表示(1、0)
- 多个站点同时发送数据时,需要满足各个站点的芯片序列相互正交,满足 ST = 求和(SiTi)/m = 0
- 发送时发送(S+T)
- 接收时,各个站点使用自己的芯片序列与到来的数据相乘,只有 S(S+T) 或者 T(S+T) 返回非零,以及区分不同的站点来源。且获得对应的(0,1)数据
CSMA 协议
- CSMA 发送数据前,会监听信道,如果忙碌则不发送,空闲才发送
- 1-坚持CSMA,只要监听到信道空闲就立马发送,容易造成等待空闲的多个站点冲突
- 非坚持CSMA,监听到信道忙碌时,过一段随机时间再监听,虽然避免了冲突,但也容易造成信道利用率不高
- p坚持CSMA,监控到忙碌后,继续一直监听,发现空闲,则有P概率发送,(1-p)概率继续等待,重新监控
- CSMA-CD 边发送变监听,发现冲突即停止,工作于半双工管道,发现时间(RTT)
- CSMA-CD帧的传输时延至少要两倍于信号在总线中的传播时延,这个决定了帧的最小长度(64)
二进制回退算法
- 基本退避时间为 2T
- k为重传参数,k<10,k = min【重传次数,10】。
- 从离散的整数集和中【0,1,2^k - 1】随机取出一个数r,则重传时间为2Tr
- 设置最大重传次数不超过16
以太网
- 无连接:发送方和接收方之间无”握手过程”
- 不可靠:不对发送方的数据帧编号,接收方不向发送方进行确认,差错帧直接丢弃,差错纠正由高层负责
- 逻辑上总线型、物理上星型
- 10BASE-T传送基带信号的以太网,T指双绞线,使用曼彻斯特编码、CSMA-CD介质访问控制
- 计算机通过适配器与局域网连接,由唯一的MAC地址,总48位,前24位(IEEE规定,表示厂家)后24位自己指定,全球唯一
- MAC帧 目的地址(6,单播、多播、广播)源地址(6)类型(2指明上层协议)数据(46(CSMA-CD需要满足最小帧64)-1500(MTU)) FCS (CRC检验)
- 帧与帧之间有一个间隔
- 物理层的帧在MAC层基础上加了8Byte,7B前同步码,用于时钟同步,1B帧开始界定符
- 通过多个集线器拓展(物理层)
- 通过网桥根据mac帧的目的地址对帧进行转发和过滤(链路层),也可以通过交换机使用(直通式:只检查目的地址。和存储转发式:高速缓存、检错)
无线局域网
- MAC 帧头:帧控制(2)生存周期ID(2) RA(6)(接收端地址:接收端基站mac)TA(6)(发送端:发送端基站)DA(6)(目的地址:最终接收mac) SA (6)(源地址:原始发送mac)地址排布顺序是先目的地址->源地址->目的地址
广域网
- PPP协议(Ponit-to-Point Protocol)链路层协议,只支持全双工链路
- PPP协议组成部分:将IP数据报封装到串行链路的方法
- PPP协议组成部分:链路控制协议LCP(建立并维护数据链路连接)身份验证
- PPP协议组成部分:网络控制协议NCP(PPP可支持多种网络层协议,不同的NCP对应不同的网络层协议)
- PPP协议帧格式以字节为单位 F(帧定界符 1) A(地址,暂不使用 1) C (控制 暂不使用 1)协议(指明信息内容 2)信息部分 (不超过1500) FCS(差错校验 2) F(帧界定符1)
- HDLC的帧格式中控制信息包含信息帧、监督帧、无变好帧(无奸细)
网络层
- 把分组从源端传到目的端,传输单位是数据报
- 选择最佳路由并进行分组转发
- 异构网络互联
- 拥塞控制
IP 数据报格式
- 分为首部+数据部分
- 首部分为固定部分+可变部分
- 固定部分(20Byte)前4Byte:版本(4bit IPv4、IPv6),首部长度:(4bit 单位是4Byte, 因为固定部分是20Byte, 所以最小值为 20/4 = 5,即范围是 0101-1111), 区分服务(8bit 设置优先级等会使用),总长度(16bit 单位是1Byte, 首部+数据) ,
- 固定部分(20Byte)4Byte:标识(16bit 同一数据报的分片使用同一个标识),标志(3bit 最高位不用,中间位DF don’t fragement 1禁止分片,0允许分片, 最低位 MF more fragement 1 还有分片, 0 没分片),片位移(13bit 分片后的相对位置,以8Byte 为单位)
- 固定部分(20Byte)4Byte:生存时间(8bit, IP 分组的保质期,每经过一个路由器-1,变成0则丢弃)协议(8bit, ICMP1,IGMP2, TCP 6, UDP 17, IPv6 41),首部校验和(16)
- 固定部分(20Byte)4Byte源IP地址,4Byte 目的地址
- 可变部分(长度可变)+ 填充,以保证长度是 4Byte 的整数倍
IP 地址
- 网络号:主机号
- 路由器不同的端口连接不同的网络(不同的网络号)所以可以隔断广播域
- A类地址:网络号占8bit,且首位为0
- B类地址:网络号占16bit,且首两位为10
- C类地址:网络号占24bit,且首三位为110
- D类地址:多播地址,首三位为1110
- E类地址:保留,首四位为1111
- 网络号和主机号全为0,本网范围内表示主机(可以作为IP分组源地址)路由表中表示整个internet网络(不可用作目的地址)
- 网络号全0,主机号特定值,表示本网内特定主机(作为IP分组源地址, 不可用做目的地址)
- 网络号和主机号全1,本网广播地址(路由不转发)不可作为源地址,可用做目的地址
- 网络号特定值,主机号全0,表示一个网络(不可作为源地址和目的地址)
- 网络号特定值,主机号全1,表示直接广播地址,对特定网络上的所有主机进行广播(不可作为源地址,可作为目的地址)
- 网络号127,主机号除(全0,1) 外,用于本地软件环回测试(可作为目的地址和源地址)
- 私有IP A类(1个) 10.0.0.0~10.255.255.255
- 私有IP B类(16个)172.16.0.0~172.31.255.255
- 私有IP C类(256个) 192.168.0.0~192.168.255.255
- 专用网连接到因特网时,需要经过 NAT 路由器,会把专用网IP和端口转换为公网IP和端口,接收回包时,再做对应的转换
- 为了提高IP地址的利用率,使用子网掩码,将主机号分为(子网+主机号)子网对外部不可见,主机号至少需要两位,只有一位的情况下,出现全0全1,所有至少为2。
- 子网掩码,根据IP地址的确定,主机号全0,网络号+子网号全1,IP地址和子网掩码做与操作,得到子网网络地址。
- 无分类编址 CIDR, 网络前缀+主机号,IP地址后加/:(128.14.32.0/20),在路由转发表中可以用于将多个子网合并成超网(将处于同一个路由端口的多个ip,从前缀起取最大的交集,得到新的网络地址)
- 使用CIDR时,查找路由遵从最长前缀匹配的原则
ARP协议
- ARP 高速缓存(IP地址与MAC地址的映射)
- 如果缓存中没有包含目的IP地址的MAC地址,则发送一个广播ARP请求分组,等待单波ARP响应
- 路由器有多个端口,每个端口有不同的IP地址和MAC地址,交换机、集线器、网桥没有MAC地址
DHCP
- 应用层协议、使用广播方式交互,基于UDP
- 使用客户端/服务器的方式
- 客户端广播发送询问有没有DHCP服务器,DHCP广播一个包含IP地址的应答,客户端广播回复确认,DHCP广播应答OKa
ICMP
- 实现主机或路由器差错报告、网络探询,发送特定ICMP报文
- 差错报文格式:类型(1字节)代码(1字节)检验和(2字节)报文类型(4字节)ICMP数据部分(长度取决于类型)
- 差错报告报文:终点不可达、时间超过(TTL=0)、源点抑制、参数问题(首部字段出错)、路由重定向(选择更好的路由发送)
- ICMP数据部分内容由(出错的IP数据报的首部+数据部分8字节)
- 不返回ICMP差错报文场景:ICMP 报文出错、非第一个分组的报文、组播地址的数据报、特殊地址(127.0.0.1、0.0.0.0等)
- ICMP 询问报文:会送请求和回答报文 ping …
- ICMP 询问报文:时间戳请求和回答报文
- traceroute:跟踪一个分组从源点到终点的路径(使用ICMP时间超过差错报告报文)
IPv6
- 基本首部:版本(4B)优先级(8B)流标签(20B 从特定源点到特定终点的数据报)有效载荷长度(16B)下一个首部(8B)跳数限制(8B)源地址(16B)目的地址(16B)
- 将IPV4里的可选字段和协议字段移到了拓展首部
- IPv6即插即用
- 首部长度需要是8B整数倍
- 只能在主机处分片,分组过大报文会报错
- IPv4-IPv6 过渡时,可以使用双栈协议(主机和路由器两种都支持)、隧道技术(将原协议的包作为需要传递包的数据部分,做完封装后发送)
- IPv6支持任播,像某个网络中的一台主机发送信息
RIP 协议(内部网关协议IGP)
- 适用于比较小的网络
- 基于距离向量的路由选择协议,是因特网的协议标准,最大优点是简单
- 每一个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离记录。
- 距离(跳数)从源端口到目的端口所经过的路由器个数,路由器直连的网络距离为1,RIP允许一条路由最多只能包含15个路由器,因此距离16表示网络不可达(适合于比较小的互联网)
- 仅和相邻的路由器交互自己的路由表
- 每隔30s交换一次路由信息,若超过180s没收到邻居路由器的通告,则判定邻居没有了
- 适用UDP传送数据,单个报文最大携带25个路由信息
- 好消息传的快,坏信息传的慢
距离向量算法
- 将收到X发送过来的路由表的所有下一跳地址改为X,然后将跳数+1
- 若当前路由器没有路由表中的记录,则直接添加
- 若当前路由表有到目的地址的记录,且下一跳的地址为X,则替换表的信息
- 若当前路由表有到目的地址的记录,但是下一跳的地址不为X,则保留两条记录中跳数更少的一条
- 若180s没有收到临近路由的信息,则将距离改为16
OSPF 协议
- 公开发表的,使用了最短路径算法
- 使用洪泛法向自治系统内所有路由器发送信息,类似广播
- 发送的信息就是与本路由器相邻的所有路由器的链路状态(与谁相邻、链路的费用、距离、时延、带宽)
- 只有在链路状态发生变化时,才向所有路由器洪泛发送此信息
- 所有路由器都能建立一个全网拓扑图
- 每隔30min,要刷新一次链路状态
- 收敛速度较快
链路状态路由算法
- 通过 HELLO 问候分组发现邻居节点
- 设置到它的每个邻居的成本度量metric
- 构造 DD数据库描述分组,向邻战给出自己库中所有链路状态项目摘要信息
- 邻站收到信息后,对自己已有的信息不管,有新的变更则发送 LSR链路状态请求分组
- 收到邻站的请求LSR请求分组后,发送 LSU 链路状态更新分组进行更新
- 邻站更新完后,发送 LASack 链路状态确认分组进行确认
BGP 协议
IP 组播
- 组播发送者只发送一次,由组播路由协议,在离用户较近的节点再复制和分发,是一点对多点的传输方式。
- 需要目的地址是组播地址(D类IP),源地址只能是单播地址,不是所有的D类IP都可以用做组播
- 不产生ICMP差错报文
- 组播MAC地址以16进制值01-00-5E开头,剩余的6个十六进制是根据IP组播地址的最后23位转换得到
- IGMP 协议(网际组管理协议)让路由器知道本组内是否有进程参加或者退出了某个组播组
- 组播路由协议目的是找出以源主机为根节点的组播转发树
- 组播路由选择协议算法(基于链路状态的路由选择、基于距离-向量的路由选择、协议无关的组播(稀疏、密集))
路由器
- 路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因
传输层
- 提供进程和进程之间的逻辑通信
- 复用和分用
- 传输层对收到的报文做差错检测
- 面向连接的传输控制协议TCP
- 无连接的用户数据协议UDP
- 服务端使用端口号:熟知端口号:给TCP/IP最重要的一些应用程序,让所有用户都知道(0~1023),登记端口号(1024~49151)其他应用程序
- 客户端使用端口号:仅在客户端进程运行时才动态选择(49151-65535)。
UDP
- UDP校验需要添加一个伪首部
TCP
- TCP 首部 :20Byte的固定首部+选项(长度可变)+填充(保证4字节整数倍)
- 源端口+目的端口总共4Byte
- 序号(4B)在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,本字段表示本报文所发送数据的第一个字节的序号
- 确认号(4B)期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则证明到序号N-1为止的所有数据都已经正确收到
- 数据偏移(4bite):报文数据段起始处距离TCP报文段的起始处有多远,以4B为单位。(包含选项字段所有首部长度不固定)
- 保留(6bite)
- URG/ACK/PSH/RST/SYN/FIN
- URG 标明此报文段有紧急数据,优先传送,配合紧急指针使用
- ACK ACK=1 时确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1
- PSH = 1 时,接受方尽快交付接收应用进程,不再等缓存填满再向上交付
- RST = 1 时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接
- SYN = 1 时,表明时一个连接请求/连接接受报文
- FIN = 1 时,表明此报文段发送方数据已发完,要求释放连接
- 窗口(2Byte) 发送本报文段的一方接收窗口,即现在允许对方发送的数据量
- 检验和(2B) 检验首部+数据,检验时要加上12B伪首部
- 紧急指针(2B) URG 为1时才有意义,指出本报文段中紧急数据的字节数
TCP 可靠传输
- 校验、序号、确认、重传
- 超时重传,采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)
- 冗余ACK(冗余确认) 发送方收到3个对于报文段的冗余ACK,则立马重传待确认报文段(快速重传)
TCP 流量控制
- 使用滑动窗口机制实现流量控制
- 接收方根据自己的缓存大小,通过头部的窗口字段告知对方。
- TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。计时器到期发送零窗口探测报文。
TCP 拥塞控制
- 慢启动,从1开始指数增加
- 拥赛避免,到设定值后逐1增加
- 快重传,收到三次 ack 后重传
- 乘法减,发现丢包,发送速率降为1半
应用层
DNS 协议
- 本地域名服务器、根域名服务器、顶级域名服务器、权限域名服务器