《TCP/IP详解卷1:协议》 Richard Stevens
链路层
==========
在T C P / I P协议族中,链路层主要有三个目的:(1)为IP模块发送和接收IP数据报;( 2)为A R P模块发送A R P请求和接收A R P应答;(3)为RARP发送RARP请求和接收R A R P应答。T C P / I P支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网、令牌环网、F D D I(光纤分布式数据接口)及R S-2 3 2串行线路等。
以太网链路层帧格式(由低到高)(首部14字节)
--------------------------------------------
6 字节目的地址--6字节源地址--2字节类型(0800: IP, 0806: ARP, 8035: RARP)--46~1500字节数据--4字节CRC
No. Time Source Destination Protocol Info
2 0.183048 10.0.0.3 10.0.0.1 DNS Standard query A www.google.cn
Frame 2 (73 bytes on wire, 73 bytes captured)
Ethernet II, Src: Dell_61:85:24 (00:4f:56:61:43:24), Dst: Netgear_89:d5:1e (00:18:2d:39:d8:1e)
Destination: Netgear_89:d5:1e (00:18:2d:39:d8:1e)
Source: Dell_61:85:24 (00:4f:56:61:43:24)
Type: IP (0x0800)
大多数的产品都支持环回接口( Loopback Interface),以允许运行在同一台主机上的客户程序和服务器程序通过T C P / I P进行通信。A类网络号1 2 7就是为环回接口预留的。根据惯例,大多数系统把I P地址1 2 7 . 0 . 0 . 1分配给这个接口,并命名为l o c a l h o s t。一个传给环回接口的I P数据报不能在任何网络上出现。
IP层
=======
IP首部格式(由低到高)20字节
-----------------------------
4位版本--4位首部长度--8位服务类型(TOS)--16位总长度(字节数)--16位标识--3位标志--13位片偏移--8位生存时间(TTL)--8位协议类型--16位首部检验和--32位源IP地址--32位目的IP地址
8位协议类型(1: ICMP,2: IGMP,6: TCP,17: UDP)。
Internet Protocol, Src: 10.0.0.3 (10.0.0.3), Dst: 10.0.0.1 (10.0.0.1)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 59
Identification: 0x2a81 (10881)
Flags: 0x00
0... = Reserved bit: Not set
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: UDP (0x11)
Header checksum: 0x0000 [incorrect, should be 0xfc2d]
[Good: False]
[Bad : True]
Source: 10.0.0.3 (10.0.0.3)
Destination: 10.0.0.1 (10.0.0.1)
ARP:地址解析协议
===================
分组格式
-------------
6字节以太网目的地址--6字节以太网源地址--2字节帧类型(为0806)--2字节硬件类型(1为以太网地址)--2字节协议类型(0800表示IP地址)--1字节硬件地址长度(6)--1字节协议地址长度(4)--6字节发送端以太网地址--4字节发送端IP地址--6字节目的以太网地址--4字节目的IP地址
14字节以太网首部 + 28字节ARP请求/应答
最开始目的端主机硬件地址为ff:ff:ff:ff:ff:ff广播地址。
ICMP:Internet控制报文协议
=============================
20字节IP首部--8位类型--8位代码--16位检验和--(其他不同类型和代码对应的内容)
不同类型的ICMP报文由类型字段和代码字段共同决定,分为查询报文和差错报文。可用于ICMP地址掩码请求与应答,时间戳请求与应答,端口不可达差错。
Ping程序
--------------
发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。
Traceroute程序
------------------------
使用ICMP报文和IP首部中的TTL字段。
UDP:用户数据报协议
=====================
20字节IP首部--8字节UDP首部--UPD数据
UDP首部格式
--------------------
16位源端口号--16位目的端口号--16位UDP长度--16位UDP检验和
User Datagram Protocol, Src Port: 49326 (49326), Dst Port: domain (53)
Source port: 49326 (49326)
Destination port: domain (53)
Length: 39
Checksum: 0x143c [incorrect, should be 0x3ba3 (maybe caused by "UDP checksum offload"?)]
[Good Checksum: False]
[Bad Checksum: True]
端口号表示发送进程和接受进程,TCP端口号与UDP端口号是互相独立的。
广播和多播
============
广播和多播仅应用于UDP。
对于以太网,当地址中最高字节的最低位设置为1时,表示该地址是一个多播地址。
受限的广播地址是255.255.255.255,该地址用于主机配置过程中IP数据报的目的地址,任何情况下路由器都不转发目的地址为受限的广播地址的数据包,这样的数据仅出现在本地网络中。
多播地址范围为:224.0.0.0 到 239.255.255.255。
IGMP:Internet组管理协议
===============================
用于支持主机和路由器进行多播的协议。IP层的一部分:
20字节IP首部--4位IGMP版本--4位IGMP类型--8位未用--16位检验和--32位组地址
多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况,使用规则有:
1. 当第一个进程加入一个组时,主机发送一个IGMP报告。
2. 进程离开一个组时,主机不发送IGMP报告。
3. 多播路由器定时发送IGMP查询了解是否还有任何主机包含有属于多播组的进程。
4. 主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含有一个进程的组局要发回IGMP报告。
使用这些查询和报告报文,多播路由器对每个接口保持一个表,表中记录接口上至少还包含一个主机的多播组。
DNS:域名系统
=================
域名系统( D N S)是一种用于T C P / I P应用程序的分布式数据库,它提供主机名字和I P地址之间的转换及有关电子邮件的选路信息.
从应用的角度上看,对D N S的访问是通过一个地址解析器( r e s o l v e r)来完成的。在U n i x主机中,该解析器主要是通过两个库函数g e t h o s t b y n a m e(3) 和g e t h o s t b y a d d r( 3 )来访问的,它们在编译应用程序时与应用程序连接在一起。前者接收主机名字返回I P地址,而后者接收I P地址来寻找主机名字。解析器通过一个或多个名字服务器来完成这种相互转换。
解析器通常是应用程序的一部分。解析器并不像T C P / I P协议那样是操作系统的内核。
DNS的报文格式
----------------------
2字节标识--2字节标志--2字节问题数--2字节资源记录数--2字节授权资源记录数--2字节额外资源记录数
后面还包括记录数可变得:查询问题,回答,授权,额外信息。
Domain Name System (query)
[Response In: 3]
Transaction ID: 0xcb72
Flags: 0x0100 (Standard query)
0... .... .... .... = Response: Message is a query
.000 0... .... .... = Opcode: Standard query (0)
.... ..0. .... .... = Truncated: Message is not truncated
.... ...1 .... .... = Recursion desired: Do query recursively
.... .... .0.. .... = Z: reserved (0)
.... .... ...0 .... = Non-authenticated data OK: Non-authenticated data is unacceptable
Questions: 1
Answer RRs: 0
Authority RRs: 0
Additional RRs: 0
Queries
www.google.cn: type A, class IN
Name: www.google.cn
Type: A (Host address)
Class: IN (0x0001)
名字解析器是客户程序的一部分,并且在Te l n e t客户程序与d a y t i m e服务器建立T C P连接之前,名字解析器就能通过名字服务器获取I P地址。最多可说明3个名字服务器行来提供足够的后备以防名字服务器故障或不可达。
注意到D N S名字服务器使用的熟知端口号无论对U D P还是T C P都是5 3。这意味着D N S均支持U D P和T C P访问。既然D N S主要使用U D P,无论是名字解析器还是名字服务器都必须自己处理超时和重传。此外,不像其他的使用U D P的I n t e r n e t应用(T F T P、B O O T P和S N M P),大部分操作集中在局域网上,D N S查询和响应通常经过广域网。分组丢失率和往返时间的不确定性在广域网上比局域网上更大。这样对于D N S客户程序,一个好的重传和超时程序就显得更重要了。
TFTP:简单文件传送协议
========================
Trivial Fiel Transfer Protocol,最初用于引导无盘系统,为了保持简单和短小,TFTP使用UDP。
BOOTP:引导程序协议
======================
BOOTP请求和应答均被封装在UDP数据报中。
20字节IP首部--8字节UDP首部--300字节BOOTP请求/应答