TCP/IP协议族体系结构以及主要协议
TCP/IP协议族是一个四层协议系统,每一层完成不同的功能,通过若干协议来实现,上层协议使用下层协议提供的服务
1.1数据链路层
【1】数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输。
【2】常用的两个协议:ARP(Address Resolve Protocol, 地址解析协议)RARP(Reverse Address Resolve Protocol, 逆地址解析协议);它们实现了IP地址和机器物理地址之间的相互转换。
为什么要进行地址转换?
网络层使用IP地址寻找一台机器,而数据链路层使用物理地址寻找一台机器,因此网络层只有现将目标机器的IP地址转化成物理地址,才能使用数据链路层提供的服务。
1.2网络层
【1】网络层实现数据包的选路和转发。WAN(广域网)通常使用众多分级的路由器来连接分散的主机或LAN(局域网),因此,通信的两台主机一般不是直接相连的,而是通过多个中间节点连接的。网络层的任务就是选择这些中间节点,确定两台主机之间的通信路径。
【2】最核心的协议:IP协议(Internet Protocol, 因特网协议):根据数据包的目的IP地址来决定如何投递它。 ICMP协议(Internet Control Message Protocol, 因特网控制报文协议):它是IP协议的重要补充,主要用于检测网络连接。
ICMP报文格式:
8位类型用于区分报文类型,分为两大类:一类是差错报文,另一类是查询报文。
16位校验对整个报文进行循环冗余校验(Cyclic Redundancy Check, CRC),以检验报文在传输过程中是否损坏。
ps: ICMP协议并非严格意义上的网络层协议,因为它使用处于同一层的IP协议提供的服务(一般来说,上层协议使用下层协议提供的服务)
1.3传输层
【1】传输层为两台主机上的应用程序提供端到端的通信。
【2】主要协议:TCP协议、UDP协议、SCTP协议
TCP:为应用层提供可靠的,面向连接的和基于流的服务。
UDP:为应用层提供不可靠的,无连接的和基于数据报的服务。
SCTP:为了在因特网上传输电话信号而设计的。
1.4应用层
【1】应用层负责处理应用程序的逻辑。
【2】协议:telnet协议:远程登录协议、OSPF协议:动态路由更新协议、DNS协议:机器域名到IP地址的转换。
2.封装
应用程序数据在发送到物理网络上之前,将沿着协议栈从上往下依次传递。每层协议都将在上层数据的基础上加上自己的头部信息(有时还包括尾部信息),这个过程称为封装。
经过TCP封装后的数据称为TCP报文段
经过UDP封装后的数据称为UDP数据报
经过IP封装后的数据称为IP数据报
经过数据链路层封装的数据称为帧:帧的最大传输单元(Max Transmit Unit, MTU).即帧最多能携带多少上层协议数据,通常受到网络类型的限制。例如下图以太网帧的MTU是1500字节,因此过长的数据报可能需要被分片传输。
3.分用
当帧到达目的主机时,沿着协议栈自底向上依次传递。各层协议依次处理帧中本层负责的头部数据,以获取信息,并最终将处理后的帧交给目标应用程序,这个过程称为分用。
4.ARP协议工作原理
ARP协议能实现任意网络层地址到任意物理地址的转换,我们仅讨论从IP地址到以太网地址(MAC地址)的转换。其工作原理是:
主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址。此网络上的其他机器都将收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址。
4.1以太网ARP请求/应答报文详解
- 硬件类型字段定义物理地址的类型。
- 协议类型字段表示要映射的协议地址类型。
- 硬件地址长度字段和协议地址长度字段,单位为字节。
- 操作字段指出4种操作类型:ARP请求(值为1),ARP应答(值为2),RARP请求(值为3)和RARP应答(值为4)。
- 最后4个字段指定通信双方的以太网地址和IP地址。
发送端填充除目的端以太网地址外的其他3个字段,以构建ARP请求并发送。接收端发现该请求的目的端IP地址是自己,就把自己的以太网地址填进去,然后交换两个目的端地址和两个发送端地址,以构建ARP应答并返回。
4.2ARP高速缓存的查看和修改
【1】通常,ARP维护一个高速缓存,其中包含经常访问或最近访问的机器的IP地址到物理地址的映射,这样就避免了重复的ARP请求,提高了发送数据包的速度。
【2】Linux下可以使用arp命令来查看和修改ARP高速缓存
arp -d //删除ARP缓存
arp -s //添加ARP缓存
5.DNS工作原理
5.1DNS查询和应答报文详解
【1】DNS是一套分布式的域名服务系统。每个DNS服务器上都存放着大量的机器名和IP地址的映射,并且是动态更新的。
【2】DNS查询和应答报文的格式
- 16位标识字段用于标记一对DNS查询和应答
- 16位标志字段用于协商具体的通信方式和反馈通信状态
- 接下来的4个字段则分别指出DNS报文的最后4个字段的资源记录数目
5.2Linux下访问DNS服务
【1】要访问DNS服务,首先要知道DNS服务器的IP地址。Linux使用/etc/resolv.conf文件来存放DNS服务器的IP地址。
【2】Linux下一个常用的访问DNS服务器的客户端程序host,比如,向DNS服务器查询机器www.baidu.com的IP地址:
host命令的输出:机器名www.baidu.com是www.a.shifen.com的别名,并且该机器名对应两个IP地址。