网络体系结构

OSI7层模型和计算机网络5层模型

//TODO

为什么有了7层模型还需要5层模型?

//TODO

链路层

流量控制

链路层的流量控制是点对点的,传输层的流量控制是端到端的。

数据链路层流量控制手段:接收端收不下就不回复。

传输层流量控制手段:接收端给发送端发送一个窗口公告。

停等协议

每发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个帧。这是一种特殊的滑动窗口协议(窗口大小为1)。

滑动窗口协议

  • 后退N帧协议(GBN)

  • 选择重传协议(SR)

网络层

ip地址决定最终要到哪台计算机,mac地址决定下一跳给谁

ip地址分类及特殊地址

计算机A和B通信过程

IP数据报

详情见王道P144页

TTL

TTL用以确保ip数据报分组不会永远在网络中循环。路由器在转发分组之前,先把TTL减1,若TTL被减为0,则将该分组丢弃。

可以在ping一个地址的时候,通过-i参数指定TTL的大小,以此来追踪该数据报都经过了哪些网关

协议

数值1表示ICMP,6表示TCP,8表示EGP,17表示UDP,41表示IPV6

首部校验和

只校验分组的首部,不校验数据部分

路由

沿途的路由器必须知道目标网络下一跳给哪个接口,也必须知道源网络下一跳给哪个接口

静态路由

由管理员手工配置路由表。

动态路由

RIP协议

  • 每个路由器仅和相邻的路由器交换信息

  • 路由器交换的信息是自己的路由表

  • 每隔30秒交换一次信息。若超过180秒没收到邻居路由器的信息,则判断邻居宕机,更新自己的路由表。

通过广播UDP报文来交换路由信息

练习:

特点:好消息传得块,坏消息传得慢(慢收敛)

OSPF协议

开放最短路径优先OSPF协议,最主要的特征是使用了分布式的链路状态协议。不使用UDP或TCP,直接采用IP。

  • 使用洪泛法向自治系统内所有路由器发送信息,即路由器通过输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再次将此信息发送往所有的相邻路由器。

  • 发送的信息是与本路由器相邻的所有路由器的链路状态(本路由器和哪些路由器相邻,以及该链路的度量/代价–费用、距离、时延、带宽等)。

  • 只有当链路状态发生变化时,路由器才向所有路由器洪泛发送信息

最后,所有路由器都能建立一个链路状态数据库,即全网拓扑图

BGP协议

  • 与其他AS的邻站BGP发言人交换信息(BGP发言人一般都是BGP边界路由器)

  • 交换的是网络的可达性信息,即要到达某个网络所要经过的一系列AS

  • 发生变化时更新有变化的部分

BGP发言人与其他BGP发言人交换路由信息的时候,要先建立TCP连接

ICMP协议

网际报文控制协议允许主机或路由器报告差错和异常情况,报文类型有2中:ICMP差错报告报文和IMCP询问报文。ICMP报文作为IP数据报的数据部分,加上数据报的首部,组成IP数据报发送出去。

ICMP差错报告报文共有5种类型:

  • 终点不可达(某个路由器不知道该怎么走导致报文无法交付)

  • 源点抑制(拥塞丢数据)

  • 时间超过(TTL=0)

  • 参数问题(首部字段有问题)

  • 改变路由(值得更好的路由)

ICMP询问报文有4中类型:

  • 回送请求和回答报文

  • 时间戳请求和回答报文

  • 掩码地址请求和回答报文

  • 路由器询问和通告报文

命令pingpathping就是用的ICMP协议。

传输层

功能:

  1. 提供进程与进程之间的逻辑通信

  2. 复用和分用。

  3. 对收到的报文进行差错检测(首部和数据部分)

  4. 提供两种不同的传输协议,面向连接的TCP和无连接的TCP

根据IP可以找到一台主机,根据端口可以找到主机上的一个进程,因此套接字Socket = (主机IP地址,端口号)唯一标识了网络中的一台主机和它上面的一个进程。

UDP

报文格式

校验过程

TCP

协议特点

报文格式

序号(seq):所发送数据的第一个字节的序号

确认号(ack):期望收到对方下一个报文段的第一个数据字节的序号。确认号为N,则表示到序号N-1为止的所有数据都已正确收到。

数据偏移:TCP报文段的首部长度,以4B为单位。

6个控制位:

  • URG=1时,高优先级数据,应尽快发送,配合紧急指针使用
  • ACK=1时,确认号有效。连接建立后所有传送的报文段都必须把ACK置1
  • PSH=1时,接收方尽快交付待接收的应用进程,不用再等到缓存填满再向上交付。
  • RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后重新建立传输连接
  • SYN=1时,表明是一个连接请求/连接请求的确认(三次握手的前两次)
  • FIN=1时,表明此报文段发送方数据已发完,要求释放连接

窗口:允许对方发送的数据量,常配合确认号使用。

紧急指针:URG=1时有意义,指出报文段中紧急数据的字节数。

三次握手

为什么要三次?

这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的。

四次挥手

可靠传输

TCP默认使用累计确认

重传

TCP的发送方在规定的时间内没有收到确认就要重传已发送的报文段(超时重传),采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)