IP数据报
(每个byte的含义,记下来!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
4bit | 4bit | 8bit | 16bit | 16bit | 3bit | 13bit | 8bit | 8bit | 16bit | 32bit | 32bit |
版本 | 首部长 | 区分服务 | 总长 | 标识 | flag | 片偏移 | TTL | 协议 | 首部校验和 | 源地址 | 目的地址 |
之后是可变部分,并填充0直到长度为4的整数倍
版本:IPv4/IPv6
首部长:一个单位4byte。IP数据报首部最大为15*4=60byte
区分服务:可以认为没用
总长度:首部+数据总长,单位byte,不超过MTU(1500)
标识:数据报id
flag:MF=1表示后续有分片,MF=0表示后续无分片。
DF=0表示允许分片
片偏移:以8byte为单位,表示某片在原分组相对位置
TTL:可通过路由器数最大值
协议:数据部分使用协议号
ICMP | IP | TCP | UDP | OSPF |
1 | 4 | 6 | 17 | 89 |
首部校验和:不校验数据部分,16位二进制,反码相加,结果取反。高位进位加到低位。发送端将该16bit置为0,反码相加后结果取反码填入该16bit。接收端将所有位相加取反码,结果为0则保留。
IP层转发分组流程:从一个路由转发到另一个路由,最后一个路由向主机交付。
路由表项:目的网络地址、下一跳地址(路由器IP/直接交付给的端口号)
最长前缀匹配:若目的IP与多个路由表项匹配,选网络号更长的
二叉线索树(trie):将无分类编址的路由表存放,自上而下按层次查找
ICMP
工作在网络层,用于ping(测试两个主机之间连通性)
8bit | 8bit | 16bit | 32bit |
类型 | 代码 | 检验和 | (取决于类型) |
差错报告报文类型:3终点不可达、11超时、12参数、5改变路由
询问报文:8/0(ping回送请求或回答)
自治系统AS
一个单一的一致的路由选择策略
内部网关协议IGP:RIP/OSPF
外部网关协议:EGP
RIP协议
要求网络中每一个路由器维护从自己到其他目的网络距离记录。
距离:跳数,为16表示不可达,使用跳数最少路由
更新:分布式,和其他路由不断交换信息
要点:和相邻路由交换自己路由表,按固定时间间隔交换
路由表建立过程:刚开始时只有直连网络距离1,路由表空。此后和相邻路由器交换信息。若干次交换后,所有路由器都知道任意网络最短距离和下一跳。
路由表项内容:目的网络、距离、下一跳路由器
距离向量算法:
路由器收到相邻路由器X的RIP报文,将“下一跳”改为X,“距离”加一。
对每个项目:若不在本路由表,则把表项加入路由表。若下一跳路由器和目的网络原表项相同,更新距离。若下一跳不同、目的相同,则比较距离,若距离更小,则更新距离。
若3分钟没有收到相邻路由器路由表,距离更新为16(不可达)
例如:从相邻路由器C发来RIP报文如下:
Net2 | 4 |
Net3 | 8 |
Net6 | 4 |
Net8 | 3 |
Net9 | 5 |
修改:
Net2 | 5 | C |
Net3 | 9 | C |
Net6 | 5 | C |
Net8 | 4 | C |
Net9 | 6 | C |
若原路由表如下:
Net1 | 7 | A |
Net2 | 2 | C |
Net6 | 8 | F |
Net8 | 4 | E |
Net9 | 4 | F |
则新路由表被更新为
Net1 | 7 | A |
Net2 | 5 | C |
Net3 | 9 | C |
Net6 | 5 | C |
Net8 | 4 | E |
Net9 | 4 | F |
RIP是应用层协议,在运输层用UDP协议。
IP首部 | UDP首部 | RIP首部(4byte) | 路由表部分 |
路由表部分展开如下:
地址族 | 路由标记 | 网络地址 | 子网掩码 | 下一跳路由地址 | 距离(1-16) |
优点:实现简单、开销小
缺点:限制网络规模、网络故障消息传播慢
OSPF协议
开放、最短路径优先、分布式链路状态协议
和谁交换:本自治系统所有路由器,洪泛
信息内容:本路由器相邻所有路由器链路状态(度量)
交换时间:链路状态变化或每30min
区域:将一个自治系统再划分为若干个更小范围,每个区域有32bit区域标识符。一个区域内路由器只知道本区域完整网络拓扑层次结构,上层为主干区域,标识符0.0.0.0
层次:网络层协议
分组:问候、描述、请求、更新、确认
BGP协议
外部网关协议
不同自治路由交换信息
每个自治系统选一个路由器为“BGP发言人”,两个“BGP发言人”通过一个共享网络连接在一起
交换信息通过TCP连接,建立BGP会话(session)
两个“BGP发言人”彼此成为对方邻站
交换路由向量:自治系统BGP发言人通知主干网BGP发言人:要到达网络XX可经过本自治系统
通用首部:
16 | 2 | 1 | |
标记 | 长度 | 类型 | 主体 |
路由器
是网络层设备,连通不同网络、选择信息、传送线路
结构:多个输入端口、多个输出端口
任务:转发分组、路由选择(控制、更新维护路由表)
转发:路由器根据转发表将IP数据报从合适端口转发
路由选择:按照分布式算法得到网络拓扑变化情况,动态改变路由
转发表从路由表中得出,路由表根据路由选择算法得出
输入端口:解封帧首部尾部,将分组送到网络层队列,查找、转发
交换结构:通过存储器、总线、互连网络
IPv6:首部40byte基本首部,每个地址128bit,冒号十六进制记法,一次零压缩。
多播:
一对多通信,使用D类IP(多播地址)
224.0.0.0-239.255.255.255
只能为目的地址
将IP地址末尾23bit映射为mac地址末尾23bit
即:mac地址为:
01:00:5E|IP地址末尾23位
多播IP与MAC地址映射不唯一,在IP层要把不是本机的数据丢弃
NAT
网络地址转换
NAT路由器将本地地址转换为全球IP地址
专用网内主机不能当服务器用
VPN
机构内部计算机自行分配IP地址,用专用IP地址互连为专用互联网
利用公用互联网作为本机构各专用网之间通信载体,为虚拟专用网络
运输层
只有主机协议栈才有运输层,是通信部分最高层、用户功能最低层
通信:两台主机的应用进程相互通信,端点不是主机是进程
TCP | UDP |
全双工可靠 | 不可靠 |
面向连接 | 无连接 |
点对点 | 支持单播、多播、广播 |
应用层 | DNS DHCP RIP | HTTP SMTP FTP |
运输层 | UDP | TCP |
网络层 | IP | IP |
端口:
在协议栈层间抽象的协议端口是软件端口
应用层各协议进程与运输实体层间交互的一种地址
熟知端口:0~1023
登记端口:1024~49151
短暂端口:49152~65535
RPC | DNS | TFTP | SNMP | SMTP | FTP | TELNET | HTTP | HTTPS |
111 | 53 | 69 | 161/162 | 25 | 20/21 | 23 | 80 | 443 |
UDP | UDP | UDP | UDP | TCP | TCP | TCP | TCP | TCP |
UDP功能
复用/分用、差错检测
无连接、不可靠、面向报文,不拥塞控制
UDP首部
源端口 | 目的端口 | 长度 | 检验和 |
2byte | 2byte | 2byte | 2byte |
UDP伪首部
不向下传送,不向上交付
源IP | 目的IP | 0 | 17 | UDP长度 |
4byte | 4byte | 1byte | 1byte | 2byte |
校验同IP数据报
TCP
面向字节流,不关心应用进程,一次把报文发到TCP缓存,对连续字节流分成TCP报文段。
虚连接,不关心应用进程一次报文长度,根据窗口值、拥塞控制决定报文长度
socket
socket=(IP地址:端口号)
停止等待协议
连续ARQ、滑动窗口
发送方一次发多个分组,每收到一个确认,滑动窗口向前。
累计确认:对按序到达的最后一个分组确认
后退N方法(N-step-back)
实现:发送窗口、接收窗口。用字节序号控制,所有确认基于序号。两端四个窗口动态变化。RTT会变化
对比:
连续ARQ | 停止等待 |
一次发多个分组 | 一次发一个分组 |
滑动窗口 | 停止等待 |
累计确认、单独确认 | 单独确认 |
重传N NN个分组 | 重传1个分组 |
发送窗口意义:发送窗口内分组都能发,不需等对方确认。每收到一个确认,发送窗口向前滑动一个分组
发送窗口大小:允许发送的分组数量
窗口内容:允许发送或接受的分组编号
TCP报文段首部
源端口 | 目的端口 | 序号 | 确认号 | 偏移 | 保留 | 控制 | 窗口 | 检验和 | 紧急指针 | 可变 | 填充 |
16bit | 16bit | 32bit | 32bit | 4bit | 6bit | 6bit | 16bit | 16bit | 16bit |
序号:本报文段第一个字节序号
确认好:期望收到的下一报文段第一字节序号
偏移:数据离报文段首部,指首部长度,单位4byte
控制:URG紧急,ACK确认,PSH(push),RST(reset),SYN(建立连接时用),FIN(释放连接时用)
伪首部
源IP | 目的IP | 0 | 6 | TCP总长度 |
4byte | 4byte | 1byte | 1byte | 2byte |
MSS:TCP报文数据字段最大长度,与接收窗口无关
窗口:对方设置发送窗口的依据
发送窗口:
已发送,未收到确认 | 允许发但没发 | 不允许发 |
P1 | P2 | P3 |
选择确认SACK:只传缺少数据,不传正确到达但未被确认的数据
Nagle算法:
解决糊涂窗口综合征
发送方:收到前一报文段确认后才发下一报文段
接收方:等待一段时间/接收缓存已有一半空间,发确认
拥塞控制
整体流程:慢开始、拥塞避免、快重传、快恢复
连接建立
释放连接
应用层
略