TCP/IP协议族
TCP/IP协议族:一个四层的协议系统,自底向上包括数据链路层、网络层、传输层和应用层。每一层完成不同的功能,且通过若干协议实现。上层协议使用下层协议提供的服务。
数据链路层
数据链路层:实现了网卡接口的网络驱动程序,以处理数据在物理介质(以太网、令牌环)上的传输。
不同的物理网络具有不同的电气特性,但网络驱动程序只为上层协议提供一个统一的接口。
主要协议:
- ARP(Address Resolve Protocol,地址解析协议):网络层使用IP地址寻址一台机器,数据链路层使用物理地址寻址一台机器,所以要使用数据链路层提供的服务就需要将IP地址转换为物理地址。
- RARP(Reverse Address Resolve Protocol,逆地址解析协议):有些无盘工作站没有记录自身的IP地址,但是可以利用网卡上的物理地址向网络管理者(服务器或网管软件)查询自身IP。
- 他们实现了IP地址与机器物理地址(MAC地址,以太网,令牌环和802.11无线网络都是用MAC地址)之间的互换
网络层
网络层:实现数据包的选路和转发。
WAN(Wide Area Network,广域网)同城使用众多的分级路由器来连接分散的主机或LAN(Local Area Network,局域网)。网络层的任务就是选择这些路由器,已确定两台主机之间的通信路径。同时,网络层对上层协议隐藏了网络拓扑连接的细节,使得通信双方看起来像直接连接的。
主要协议:
- IP(Internet Protocol,因特网协议)
- ICMP(Internet Control Message Protocol,因特网控制报文协议):IP协议的补充,用于检测网络连接。非严格意义上的网络层协议,他使用同一层的IP协议提供的服务(一般来说,上层协议使用下层协议提供的服务)
ICMP协议
8位类型:用于区分类型 ①差错报文:回应网络错误,比如目标不可达(类型值 3)、重定向(类型值 5) ②差错报文:查询网络信息,ping就使用ICMP报文查看是否可达。
8位代码:进一步细分不同的条件.
16位校验和:对整个报文进行循环冗余校验。
传输层
传输层:为两台主机上的应用程序提供端到端(end to end)的通信。传输层只关心通信的起始端和目的端,不在乎数据包的中转过程。
主要协议:
- TCP(Transmission Control Protocol,传输控制协议):为应用层提供,可靠,有连接,基于字节流的服务。
- UDP(User Datagram Protocol,用户数据报协议):为应用层提供,不可靠,无连接,基于数据报的服务。
- SCTP(Stream Control Transmission Protocol,流控制传输协议)
应用层
应用层:处理应用程序的逻辑。
在用户空间实现,负责处理众多逻辑,比如文件传输、名称查询和网络管理等。如果在内核中实现,内核就太庞大了(数据链路层、网络层和传输层在内核中实现,处理网络通信明细,保证稳定且高效)
主要协议:
- telnet协议:远程登录协议
- OSPF(Open Shortest Path First,开放最短路径优先)协议:动态路由更新协议,用于路由器之间的通信,以告知对方各自的路由信息
- DNS(Domain Name Service,域名服务)协议:提供机器域名到IP地址的转换
封装
通过封装,是上层协议使用下层协议提供的服务。
应用层的数据在发送到物理网络上之前,将沿着协议栈从上往下依次传递。每层协议都将在上层数据的基础上加上自己的头部信息,以实现该层功能。
经过TCP/UDP封装后的数据成为TCP/UDP数据报。
经过IP封装后的数据称为IP数据报。
数据链路层封装的数据称为帧。传输媒介不同,帧的类型也不同。以太网上传输的是以太网帧。
CRC字段:对帧的其他部分提供循环冗余校验
帧的最大传输单元(MTU,Max Transmit Unit):即帧最多能携带多少上层数据,通常受到网络类型的限制,此时MTU = 1500字节。过长的IP数据报可能需要分片传输。
帧是最终在物理网络上传送的字节序列,至此封装完成。
分用
当帧达到目标主机后,将沿着协议栈自底向上依次传递。
各层协议依次处理帧中本层负责的头部数据,最后将处理后的帧交给应用程序。
- IP、ARP、RARP协议都是用帧传输数据,所以帧的头部需要提供某个字段来区分。以太网帧使用两个字节的类型字段来区分。
- ICMP、TCP、UDP协议使用IP协议,IP数据报的头部采用16位的协议字段区分。
- TCP、UDP则通过头部的16位端口号来区分上层应用程序。DNS协议–53,HTTP协议–80。/etc/services文件可查知名端口号。
ARP协议
ARP协议能实现任意网络层地址到任意物理地址的转换。
主机向自己所在网络中广播一个ARP请求,请求中包含目标机器的网络地址(IP …)地址,网络中所有的机器也能收到这个请求,但是只有被请求的机器会回应一个ARP应答,其中包含自己的物理地址。
- 硬件类型:物理地址的类型,MAC地址类型值为 1
- 协议类型:要映射的协议地址类型,IP地址类型值为 1
- 硬件地址/协议地址长度:单位字节,MAC地址 6 ,IP地址 4
- 操作:ARP请求 1 ,ARP应答 2 ,RARP请求 1 ,RARP应答 2
- 最后四个地址,发送请求的机器将除目的端以太网地址的其它地址进行填充,目标机器接收到请求后,将自己的以太网地址添加,并将目的端发送端地址进行交换,操作字段设置为2,然后发出。
ARP请求/应答报文长度为28字节,以太网帧的头部+尾部为18字节,则携带一个ARP请求/应答的以太网数据帧至少46字节。但是有的实现要求以太帧数据部分长度至少46字节,这样ARP会增加一些填充字节,在这种情况下,一个携带ARP请求/应答的以太网数据帧长度为64字节。
DNS
我们在浏览器中进行访问是都是用的域名来访问的,将域名转换成IP地址,就需要使用域名查询服务。比如本地静态文件、DNS、NIS(Network Information Service,网络信息服务)等。
DNS是一套分布式的域名服务系统,每个DNS服务器都存放着大量机器名和IP地址的映射,并且动态更新。
使用DNS服务查询目标主机的IP地址。
16位标识字段用于标记一对DNS查询和应答,以此区分一个DNS应答是哪个DNS查询的回应。
16位标志字段用于协商具体的通信方式和反馈通信状态。DNS报文头部的16位标志字段的细节:
- QR,查询/应答标志。0表示这是一个查询报文,1表示这是一个应答报文。
opcode,定义查询和应答的类型。0表示标准查询,1标识反响查询(由IP地址获得主机域名),2表示请求服务器状态。
AA,授权应答标志,仅由应答报文使用。1表示域名服务器是授权服务器。
- TC,截断标志,仅当DNS报文使用UDP服务时使用。因为UDP数据报有长度限制,所以过长的DNS报文将被截断。1表示DNS报文超过512字节,并被截断。
- RD,递归查询标志,1表示执行递归查询,即如果目标DNS服务器无法解析某个主机名,则它将向其他DNS服务器继续查询,如此递归,直到获得结果并把该结果返回给客户端。0表示执行迭代查询,即如果目标DNS服务器无法解析某个主机名,则它将自己知道的其他DNS服务器的IP地址返回给客户端,以供客户端参考。
- RA,允许递归标志。仅由应答报文使用,1表示DNS服务器支持递归查询。
- zero,这三位未用,必须都设置为0。
- rode,4位返回码,表示应答的状态,常用值由0(无错误)和3(域名不存在)。
Linux访问DNS服务
Linux使用/etc/resolv.conf
存放DNS服务器IP地址。
查询域名为IP地址:host -t A www.baidu.com