TCP/IP协议族,作为最早的协议模型(后来OSI七层也是在该基础上细分而来),每层都有一些重点的协议,面试时也会被询问,快要找工作,得做一些总结了
【1】TCP4层协议模型概述
【2】各层重点协议介绍
1、TCP4层协议模型概述
TCP与OSI对比图
其中Tcp各层重点协议如下图所示
网络层协议包括:
【1】IP(Internet Protocol)协议
IP是网络层的核心,通过路由选择将下一条IP封装后交给接口层。IP数据报是无连接服务。
【2】ICMP(Internet Control Message Protocol)控制报文协议
ICMP是网络层的补充,可以回送报文。用来检测网络是否通畅。其中Ping命令就是发送ICMP的echo包,通过回送的echo relay进行网络测试。
【3】ARP(Address Resolution Protocol)地址转换协议
ARP是正向地址解析协议,通过已知的IP,寻找对应主机的MAC地址。
【4】RARP(Reverse ARP)反向地址转换协议。
RARP是反向地址解析协议,通过MAC地址确定IP地址。比如无盘工作站还有DHCP服务。
【5】IGMP协议(Internet Group Management Protocol)
是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间
传输层协议:
【1】TCP(Transmission Control Protocol)传输控制协议
TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于点对点的通讯。TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。面向流的通信是无消息保护边界的(会出现粘包)
【2】UDP(User Datagram protocol)用户数据报协议
UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出丢包现象,实际应用中要求程序员编程验证。UDP与TCP位于同一层,但它不管数据包的顺序、 错误或重发。是无连接,面向消息的,面向消息的通信是有消息保护边界的(不会出现粘包)
应用层协议。
【1】FTP(File Transfer Protocol)文件传输协议
一般上传下载用FTP服务,数据端口是20H,控制端口是21H。
【2】Telnet服务是用户远程登录服务,使用23H端口,使用明码传送,保密性差、简单方便。
【3】DNS(Domain Name Service)是域名解析服务,提供域名到IP地址之间的转换,使用端口53。
【4】SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,用来控制信件的发送、中转,使用端口25。
【5】NFS(Network File System)是网络文件系统,用于网络中不同主机间的文件共享。
【5】HTTP(Hypertext Transfer Protocol)是超文本传输协议,用于实现互联网中的WWW服务,使用端口80。
2、重点协议的使用
2.1、ICMP协议
著名应用:
【1】ping
【2】traceroute
ICMP是网络层的协议,通常ICMP报文被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。
ICMP报文主要分为俩大类:【查询报文】、【差错报文】
差错报文:
当IP数据发生错误时(主机不可达或者网络故障)ICMP将会发送一个ICMP差错报文给源主机,也是得益于此IP层以上的协议可以做到可靠传输
差错报文主要分为以下5种:
1> 终点不可达:终点不可达分为:网络不可达,主机不可达,协议不可达,端口不可达,需要分片但DF比特已置为1,以及源路由失败等六种情况,其代码字段分别置为0至5。当出现以上六种情况时就向源站发送终点不可达报文。
Note:端口不可达:UDP的规则之一是:如果收到UDP数据报而且目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文。其中Treaceroute就是利用端口不可达来产生ICMP差错报文的
2> 源站抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源站发送源站抑制报文,使源站知道应当将数据报的发送速率放慢。
3> 时间超过:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源站发送时间超过报文。当目的站在预先规定的时间内不能收到一个数据报的全部数据报片时,就将已收到的数据报片都丢弃,并向源站发送时间超过报文。
4> 参数问题:当路由器或目的主机收到的数据报的首部中的字段的值不正确时,就丢弃该数据报,并向源站发送参数问题报文。
5> 改变路由(重定向)路由器将改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器。
Note:
【Traceroute程序】
Traceroute是ICMP协议的另一个重要应用,主要用来侦测源主机到目的主机之间所经过的路由的情况。Traceroute使用ICMP报文和 IP首部中的TTL字段,其原理很简单,开始时发送一个TTL字段为1的UDP数据报,而后每次收到ICMP超时报文后,再发送一个TTL字段加1的 UDP数据报,以确定路径中的每个路由器,而每个路由器在丢弃UDP数据报时都会返回一个ICMP超时报文,最终到达目的主机后,由于ICMP选择了一个 不可能的值作为UDP端口(大于30000)。这样目的主机就会发送一个端口不可达的ICMP差错报文。
查询报文
查询报文主要用途有4种:
回送请求和回答,时间戳请求和回答,掩码地址请求和回答,以及路由器询问和通过。
Ping就是利用查询报文的回送请求和应答来实现的具体见下。
【Ping程序】
ping是ICMP的一个很著名的应用。ping程序时对两个TCP/IP系统连通性进行测试的基本工具,它只利用ICMP回显请求和回显应答报文,而不 用经过传输层,ping服务器一般在内核中试下ICMP的功能。当某一个网站访问不了时,我们就可以ping一下这个网站,看下连通情况。
2.2 ARP协议过程
首先ARP协议只用于局域网(外网则需要DNS解析),它用来将IP地址解析为MAC地址
局域网中的每个主机都有一个ARP缓存,它保存了最近发起的IP地址到 MAC地址的映射记录,当该主机要向局域网中的某一主机发送数据时,它会先从自己的缓存中查找,看是否存在目标IP地址,如果找到,就通过映射找到它的 MAC地址,从而发送过去,如果没有找到该目的IP地址,它就向该局域网内发送一个广播,广播中包含自己的IP地址、MAC地址和目的主机的IP地址,局 域网内的所有主机都会收到该广播,但只有目的IP地址的主机会做出回应,并把自己的MAC地址发送给源主机,源主机收到后,在自己的ARP缓存中增加上该 映射,并根据发来的MAC地址将数据发送给目的主机。 ARP高速缓存中的表项一般都要设置超时值,如果一段时间内没有与某主机通信,就将该主机对应的IP与MAC之间的映射关系去掉,下次在需要通信时,依然发送广播。
在网上找了一个例子
在上图中,当主机A要和主机B通信(如主机A Ping主机B)时。主机A会先检查其ARP缓存内是否有主机B的MAC地址。如果没有,主机A会发送一个ARP请求广播包,此包内包含着其欲与之通信的主机的IP地址,也就是主机B的IP地址。
当主机B收到此广播后,会将自己的MAC地址利用ARP协议响应包传给主机A,并更新自己的ARP缓存,也就是同时将主机A的IP地址/MAC地址对保存起来,以供后面使用。主机A在得到主机B的MAC地址后,就可以与主机B通信了。同时,主机A也将主机B的IP地址/MAC地址对保存在自己的ARP协议缓存内。
其中HTTP协议见我以前的一篇总结HTTP协议小结