网络体系结构
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中类型:
-
回送请求和回答报文
-
时间戳请求和回答报文
-
掩码地址请求和回答报文
-
路由器询问和通告报文
命令ping
和pathping
就是用的ICMP协议。
传输层
功能:
-
提供进程与进程之间的逻辑通信
-
复用和分用。
-
对收到的报文进行差错检测(首部和数据部分)
-
提供两种不同的传输协议,面向连接的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(加权平均往返时间)