TCP/IP体系依赖关系
- IP层依赖datalink层。
- ARP协议依赖datalink层。
- TCP/UDP协议依赖IP层。
- ICMP协议依赖IP层。
- 应用层的http/https协议依赖TCP。
- 应用层的ping程序依赖ICMP层。
- 应用层的telnet协议依赖TCP。
- 应用层的OSPF协议依赖IP层。
- 应用层的DNS协议依赖UDP层。
封装和分用
封装
下层协议模块通过将上层数据加上头部信息来为上层协议提供服务,对于上层协议来说是透明的,相当于上层协议模块使用了下层协议模块的接口。
例如:TCP数据报 + IP头部表示IP层完成了对TCP层的封装。
分用
依赖头部的类型字段来实现。
例如IP数据包头部的类型字段值为6/17,则说明需要将IP数据包的数据部分提交给上层的TCP模块/UDP模块.
例如TCP/UDP数据包头部的类型字段值为53/80,则说明需要将TCP数据包的数据部分提交给上层的DNS服务/http服务.
报文校验字段
- ICMP的CRC字段用于检验头部信息和数据。
- TCP的CRC字段用于检验头部信息和数据。
- 其他的协议均只检验头部信息。
ICMP协议
头部
8位类型 + 8位代码 + 16为校验和 = 共32位。
报文类型
共分为两大类报文
ICMP差错报文
在IP通信出错时,通过由远端路由器或目标主机发给源主机的错误信息,分为下面两种:
- 类型为3的目标不可达报文。
- 类型为5的重定向报文,更进一步,代码为0表示网络重定向,代码为1表示对主机重定向。
ICMP查询报文
类型为8,目的是查询目标主机/路由的可达性,ping程序就是使用了ICMP查询报文。
ARP协议
作用
当一台主机连上LAN时,会通过DHCP分配一个ip地址,同时,此主机上的网卡自带MAC地址,若此主机想和LAN上的其他结点通信,则必须获取目标结点的MAC才行。ARP协议的作用就是根据目标主机IP地址来获取对应此IP的主机的MAC地址。使用前提:需要知道目标主机的IP地址。
头部与四种报文类型
主要为ARP请求报文和ARP应答报文
其中ARP请求报文需要在LAN里广播
而ARP应答报文是一对一的
ARP缓存表
用来保存经常访问或最近访问的主机的IP地址到物理地址的映射,可直接查表,提高效率。
TCP协议
头部信息
TCP特性
- 面向字节流:给缓冲区内的每个字节进行编号,用以保持数据的顺序。
- 可靠性:通过ACK + 定时器来实现延时ACK,保证数据包不会丢失,用于取代一对一的ACK机制,提高效率。
- 面向连接:数据的传输必须建立在连接之上。
网络编程API相关原理
- 五元组(srcIp,srcPort,desIp,desPort,proto)。
- sockfd和五元组一对一。
- SYN队列(半连接队列):服务端第一次接受到SYN报文后会创建一个TCB,并加入到SYN队列中。 <