Blog icon indicating copy to clipboard operation
Blog copied to clipboard

《计算机网络》笔记

Open qianlei90 opened this issue 7 years ago • 0 comments

一、体系结构

title

二、物理层

跳过

三、链路层

3.1 三个基本问题

封装成帧

网络层的IP数据包拆分,加上帧首部帧尾部封装成帧后,再发送出去,一般使用控制字符来表示帧定界符

title

透明传输

链路层应该对网络层透明,即网络层不管给什么数据,链路层都是可以发送过去的。但是有这样的情况:网络层给的数据中,也包含了跟帧定界符一样的字符,该怎么判定这个字符是要传输的数据,还是帧定界符呢?

下图中出现帧判定错误:

title

答案是使用转义字符,通过字节填充的方式,转义掉数据中的控制字符。如果数据中也包括转义字符,则再在前面加一个转义字符:

title

差错校验:

链路层在传输数据时,可能会出现两种错误:

  1. 传输差错:在一批数据中会传输多个帧,出现帧丢失重复顺序错误等情况
  2. 比特差错:一个帧中的某个比特数据出错,0110

传输差错

OSI要求链路层是可靠的,但实际上链路层出错的概率很低,当前实现上都已经不再使用帧确认、重传了,这部的处理交给了上层协议,所以链路层实际上是不可靠的。

比特差错

将数据分组,通过CRC校验计算帧校验序列,附加到在每组数据的后面,再封装成帧后发送出。接收端进行校验,丢弃出错的帧。可以认为“凡是接收端的链路层所接受的帧均无差错”。

3.2 交换机

交换机是多接口网桥,通过自学习完善转发表。

title title

四、网络层

title

  • ARP(Address Resolution Protocol):地址解析协议
  • RARP(Reverse Address Resolution Protocol):逆地址解析协议
  • ICMP(Internet Control Message Protocol):网际控制报文协议
  • IGMP(Internet Group Management Protocol):网际组管理协议

4.1 ARP

title title title title title

4.2 IP数据报格式

title

  • 版本:IPV4IPV6
  • 首部长度:20字节60字节,必须是4字节的整数倍,不足4字节时填充。
  • 区分服务:一般不使用。
  • 总长度:首部和数据之和的长度,最大为216-1=65535字节。当IP数据报大于链路层MTU时,需要对IP数据报进行分片,这时总长度指的是分片后每个分片的首部长度数据长度的总和。
  • 标识:分片后为了识别是否是同一个数据报。
  • 标志:后面是否还有分片能否分片
  • 片偏移:分片在原分组中的相对偏移位置。

title title

  • 生存时间:IP数据报在网络中可经过多少个路由器,每经过一个路由器就减1,为0时则丢弃数据报,最大值255。若设为1,表示只在本局域网中传送。
  • 协议:IP数据报携带的数据,是哪种协议的,以便接收端的主机知道将数据上交给哪个处理过程,常用的协议如下:

title

  • 首部校验和:只校验IP数据报的首部,不包括数据部分。采用反算术运算。

4.3 分组转发

title

title

title

4.4 子网划分

子网划分

在一个网络中,将IP地址中的主机号部分,取前几位作为子网编号,对网络进行划分。子网划分增加了网络的灵活性,却减少了网络中的主机总数。

title

子网掩码

IP地址子网掩码进行与运算,得到网络地址

title

使用子网时的分组转发

title

title

4.5 CIDR

CIDR其实就是将IP地址分成可变长度的两部分,前面是网络前缀,后面是主机号。用<IP地址>/<前缀长度>这样的记法。

title

在路由表中进行匹配时,从匹配结果中选择具有最长网络前缀的路由,使用二叉线索树来查找:

title

title

由于上面用的是“唯一前缀”,并非“网络前缀”,所以找到叶子节点后,再将目的地址和叶子节点的子网掩码进行与运算,看是否匹配。至于如何从路由表的IP地址中,计算出所有的唯一前缀,是一道算法题:trie树,关键字“字符串最短唯一前缀”。

五、传输层

5.1 UDP

无连接、不可靠,面向报文,即应用层下来的数据,直接添加头部就交给网络层,没有合并和拆分。

title

UDP校验时,把首部和数据部分一起校验,IP数据报是只校验首部的。

5.2 TCP

面向连接、可靠,点对点,全双工通信,字节流。

title

停止等待协议

  • 发送端:发送一个分组,等待确认,分组被保存而不是直接删除
  • 接收端:正确接收分组,则发送确认,错误或丢失分组则不发送
  • 发送端:收到确认就删除分组,超时未收到就重新发送

title

title

这种可靠传输协议也叫自动重传请求ARQ(Automatic Repeat-reQuest)。停止等待协议很慢,信道利用率也很低,所以使用流水线传输,即连续ARQ协议滑动窗口协议

title

title

连续ARQ协议

title

title

title

5.3 TCP报文格式

title

几个重要字段:

  • 序号:本报文的第一个数据字节的序号。TCP以字节流的方式发送数据,是字节的顺序编号,范围1~232-1,超出后继续从0开始
  • 确认号:希望收到下一个报文的序号
  • 紧急位URG(URGent):高优先级数据,无需排队尽快发送
  • 确认位ACK(ACKnowlegment)
  • 同步位SYN(SYNchronization)
  • 终止FIN
  • 窗口大小:动态调整接收方的接口窗口大小,用来进行流量控制和拥塞控制

5.4 流量控制:滑动窗口

title

title

Ref

  • https://media.pearsoncmg.com/aw/ecs_kurose_compnetwork_7/cw/content/interactiveanimations/selective-repeat-protocol/index.html
  • http://v.youku.com/v_show/id_XNDg1NDUyMDUy.html

5.5 拥塞控制

  • 拥塞窗口cwnd:发送方维持的一个窗口,大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口等于拥塞窗口。只要没有出现拥塞,发送方就让拥塞窗口增大一点,出现拥塞,就减小一点。
  • 传输轮次:把cwnd内的报文都发送出去,并被接收确认接收

慢开始

由于对网络负荷的情况不清楚,先探测一下,由小到大逐渐增大发送窗口,每经过一次传输轮训,拥塞窗口cwnd就加倍

拥塞避免

让cwnd缓慢增大,每次加1,线性增长,而不是加倍

快重传

接收方每收到一个失序的报文,就立即发出重复确认,而不用等待自己发送数据时才进行捎带确认。

发送方一连收到三个重复确认就立即重传对方尚未收到的报文。

快恢复

发送方一连收到三个重复确认时,就“乘法减小”,把ssthresh减半,然后执行拥塞避免算法,“加法增大”

5.6 三次握手与四次挥手

建立连接:

释放连接:

为什么连接的时候是三次握手,关闭的时候是四次挥手呢?因为发送FIN时,只是表示自己这一方不再有数据要发送,但是对方发送的数据,还是需要继续接收,直到对方也发送FIN后才可以断开连接。

qianlei90 avatar Nov 07 '18 08:11 qianlei90