第1章
TCP/IP(Transmission Control Protocol/Internet Protocol)传输控制协议/Internet协议
1.1 分层
1)链路层,又称作数据链路层或网络接口层常,包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节;
2)网络层,也称作互联网层,处理分组在网络中的活动,例如分组的选路。在 TCP / I P协议族中,网络层协议包括 I P协议(网际协议),ICMP协议(I n t e r n e t互联网控 制报文协议),以及I G M P协议(I n t e r n e t组管理协议)。
3)运输层主要为两台主机上的应用程序提供端到端的通信。在 T C P / I P协议族中,有两个 互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。运输层TCP提供了高可靠性的端到端的通信,应用层可以忽略传输层的传输细节。UDP则为应用层提供一种非常简单的服务。只是把称作数据报的分组 从一台主机发送到另一台主机,不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。
4)应用层负责处理特定的应用程序细节。
*网络层( I P)提供点到点的服务, 而运输层(T C P和U D P)提供端到端的服务。
1.2 互联网地址
互联网每一个接口有一个唯一的IP址。
1.3 封装:
上层到下层逐层封装;分用:下层到上层逐层去头部解封装。
1.4 客户-服务器模型:
重复型和并发型
1.5 internet和Internet
意思是用一个共同的协议族把多个网络连接在一起。而 Internet指的是世界范围内 通过T C P / I P互相通信的所有主机集合(超过 1 0 0万台)。Internet是一个internet,但internet不等于Internet。
第2章 链路层
2.1 SLIP(Serial Line IP)协议:串行线路IP
SLIP帧格式规则:
1) IP数据报以一个称作 E N D(0 x c 0)的特殊字符结束。同时,为了防止数据报到来之前 的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个 E N D字符(如果有线 路噪声,那么E N D字符将结束这份错误的报文。这样当前的报文得以正确地传输,而前一个 错误报文交给上层后,会发现其内容毫无意义而被丢弃)。
2) 如果I P报文中某个字符为 E N D,那么就要连续传输两个字节 0 x d b和0 x d c来取代它。 0 x d b这个特殊字符被称作S L I P的ESC字符,但是它的值与A S C I I码的E S C字符(0 x 1 b)不同。
3) 如果I P报文中某个字符为 S L I P的E S C字符,那么就要连续传输两个字节 0 x d b和0 x d d来取代它。
如下图例子就是含有一个 E N D字符和一个E S C字符的I P报文。在这个例子中,在串行 线路上传输的总字节数是原 I P报文长度再加4个字节。
缺陷:
1) 每一端必须知道对方的I P地址。没有办法把本端的I P地址通知给另一端。
2) 数据帧中没有类型字段(类似于以太网中的类型字段)。如果一条串行线路用于 SLIP, 那么它不能同时使用其他协议。
3 ) SLIP没有在数据帧中加上检验和(类似于以太网中的 CRC字段)。如果SLIP传输的报文被线路噪声影响而发生错误,只能通过上层协议来发现(另一种方法是,新型的调制解调 器可以检测并纠正错误报文)。
2.2 PPP协议:点对点协议
2.2.1 点对点协议修改了SLIP协议中的所有缺陷
1) 在串行链路上封装 I P数据报的方法。PPP既支持数据为 8位和无奇偶检验的异步模式 (如大多数计算机上都普遍存在的串行接口),还支持面向比特的同步链接。
2) 建立、配置及测试数据链路的链路控制协议( L C P:Link Control Protocol)。它允许通 信双方进行协商,以确定不同的选项。
3) 针对不同网络层协议的网络控制协议( NCP:Network Control Protocol)体系。当前 R F C定义的网络层有I P、O S I网络层、D E C n e t以及A p p l e Ta l k。例如,IP NCP允许双方商定是 否对报文首部进行压缩,类似于 C S L I P(缩写词NCP也可用在TCP的前面)。
2.2.2 PPP协议帧格式
每一帧都以标志字符0x7e开始和结束。紧接着是一个地址字节,值始终是 0xff,然后是一 个值为0x03的控制字节。协议字段,类似于以太网中类型字段的功能。当它的值为 0x0021时,表示信息 字段是一个I P数据报;值为0xc021时,表示信息字段是链路控制数据;值为 0x8021时,表示 信息字段是网络控制数据。 CRC字段(或FCS,帧检验序列)是一个循环冗余检验码,以检测数据帧中的错误。
信息字段中出现0x7e时,需进行转义。在同步链路中,通过比特填充的硬件技术来完成的;在异步链路中,特殊字符 0x7d用作转义字符。1) 当遇到字符0 x 7 e时,需连续传送两个字符: 0x7d和0x5e,以实现标志字符的转义。 2) 当遇到转义字符0x7d时,需连续传送两个字符: 0x7d和0x5d,以实现转义字符的转义。 3 ) 默认情况下,如果字符的值小于 0x20(比如,一个ASCII控制字符),一般都要进行转 义。例如,遇到字符0x01时需连续传送0x7d和0x21两个字符(这时,第6个比特取补码后变为 1,而前面两种情况均把它变为 0)。
与SLIP类似,由于PPP经常用于低速的串行链路,因此减少每一帧的字节数可以降低应用程序的交互时延。PPP比SLIP具有下面这些优点:(1) PPP支持在单根串行线路上运行多种协议, 不只是I P协议;(2) 每一帧都有循环冗余检验; (3) 通信双方可以进行 I P地址的动态协商(使用 I P网络控制协议); (4) 与CSLIP类似,对TCP和I P报文首部进行压缩; (5) 链路控制协议可以对多个数据链路选项进行设置。为这些优点付出的代价是在每一帧的首部增加 3个字节。
2.3 MTU
以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节。链路层的这个特性称作 MTU,最大传输单元。如果 I P层有一个数据报要传,而且数 据的长度比链路层的 M T U还大,那么 I P层 就需要进行分片( f r a g m e n t a t i o n),把数据 报分成若干片,这样每一片都小于 MTU。以太网最小帧46字节。
第3章 IP:网际协议
3.1 IP首部
普通的I P首部长为2 0个字节,除非含有选项字段。
3.1.1 网络字节序
分析图3 - 1中的首部。最高位在左边,记为 0 bit;最低位在右边,记为31 bit。
4个字节的32 bit值以下面的次序传输:首先是 0~7 bit,其次8~15 bit,然后1 6~23 bit, 最后是24~31 bit。这种传输次序称作big endian字节序。由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。以其他形式存储二进制整数 的机器,如little endian格式,则必须在传输数据之前把首部转换成网络字节序。
3.1.2 IP报文字段分析
首部长度指的是首部占 32 bit(4B)字的数目,占4位,所以首部最长为60个字节。服务类型(TOS)字段包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位但必须置0。4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4 bit中只能置其中1 bit。如果所有4 bit均为0,那么就意味着是一般服务。
总长度字段是指整个 IP数据报的长度,以字节为单位。由于该字段长16比特,所以 IP数据报最长可达 65535字节。标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。TTL(time - to - live)生存时间字段设置了数据报可以经过的最多路由器数。首部检验和字段是根据IP首部计算的检验和码。
3.2 子网寻址、子网掩码
第4章 ARP 地址解析协议
4.1 ARP高速缓存
IP地址→Mac地址 映射表
4.2 ARP分组格式
帧类型:后面数据的类型。对ARP请求或应答来说值为0x806;
硬件类型:表示硬件地址的类型,值为1表示以太网地址。
协议类型:表示要映射的协议地址类型。它的值为 0x0800即表示IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同。
硬件地址长度和协议地址长度分别指出硬件地址和协议地址 的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。
操作字段指出四种操作类型,它们是 ARP请求(值为1)、ARP应答(值为2)、RARP请求 值为3)和RARP应答(值为4)。
4.3 利用wireshark抓取并分析ARP协议
4.3.1 ARP请求包
第一帧数据报的详细信息,其中,该包的大小为60个字节。
以太网帧的头部信息。源MAC地址为8c:be:be:27:40:af,目标MAC地址为ff:ff:ff:ff:ff:ff;
地址解析协议的内容。request表示该包是一个请求包。
还不知道接收方的MAC地址,所以为全0 。
4.3.2 ARP响应包
表示该数据包的详细信息。大小为60个字节。
获取了目的MAC地址,可以正常通信了。
4.3.3 ARP代理
如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托 ARP或A R P代理(Proxy ARP)。这样可以欺骗发起 A R P请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另 一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。
第5章 RARP:逆地址解析协议
5.1 RARP分组格式
与ARP类似。差别:RARP请求或 应答的帧类型代码为0x8035,而且RARP请求的操作代码为3,应答操作代码为4。RARP请求以广播方式传送,而RARP应答一般是单播( u n i c a s t )传送的。
在who- 后面的以太网地址是目的硬件地址,跟在tell后面的以太网地址是发送端的硬件地址。
第6章 ICMP:Internet控制报文协议
6.1 ICMP报文
I C M P报文是在 I P数据报内部被传输的。
各种类型的ICMP报文如图6 - 3所示,不同类型由报文中的类型字段和代码字段来共同决定。
下面各种情况都不会导致产生 ICMP差错报文:
1) ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文)。
2) 目的地址是广播地址(见图 3 - 9)或多播地址(D类地址,见图1 - 5)的IP数据报。
3) 作为链路层广播的数据报。
4) 不是IP分片的第一片(将在11 . 5节介绍分片)。
5) 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。
这些规则是为了防止过去允许 ICMP差错报文对广播分组响应所带来的广播风暴。
6.2 ICMP地址掩码请求与应答(?)
ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。
ICMP报文中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回。 这样,发送端就可以把应答与请求进行匹配。
6.3 ICMP时间戳请求与应答
ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,协调的统一时间( Coordinated Universal Time, UTC)。
请求端填写发起时间戳,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。但是,实际上,大多数的实现把后面两个字段都设成相同的值 。(提供三个字段的原因是可以让发送方分别计算发送请求的时间和发送应答的时间)。
第7章 Ping程序
第8章 Traceroute程序
第9章 IP选路
第10章 动态选路协议
(7-10章内容待补充)
第11章 UDP:用户数据报协议
UDP:面向数据报的运输层协议:进程的每个输出操作都正好产生一个 UDP 数据报,并组装成一份待发送的iP数据报。 这与面向流字符的协议不同,如 TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系(?)。
U D P数据报封装成一份 I P数据报的格式 如图11 - 1所示。
UDP不提供可靠性:它把应用程序传给 I P层的数据发送出去,但是并不保证它们能到达 目的地。
11.1 UDP首部
端口号表示发送进程和接收进程。
UDP长度字段指的是UDP首部和UDP数据的字节长度。该字段的最小值为8字节(发送一 份0字节的 UDP数据报是OK)。
UDP检验和覆盖UDP首部和UDP数据。回想IP首部的检验和,它只覆盖 IP的首部—并不覆盖IP数据报中的任何数据。UDP和TCP在首部中都有覆盖它们首部和数据的检验和。UDP的检验和是可选的,而TCP 的检验和是必需的。
UDP数据报和T C P段都包含一个 12字节长的伪首部,它是为了计算检验和而设置 的。伪首部包含 IP首部一些字段。其目的是让 UDP两次检查数据是否已经正确到达目的地 (例如, IP没有接受地址不是本主机的数据报,以及 IP没有把应传给另一高层的数据报传给UDP)。UDP数据报中的伪首部格式如图 11 - 3所示。
如果检验和的计算结果为 0,则存入的值为全 1(65535),这在二进制反码计算中是等效 的。如果传送的检验和为0,说明发送端没有计算检验和。如果发送端没有计算检验和而接收端检测到检验和有差错,那么UDP数据报就要被悄悄地丢弃。不产生任何差错报文(当 I P层检测到I P首部检验和有差错时也这样做)。
UDP检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证。其目的是为 了发现UDP首部和数据在发送端到接收端之间发生的任何改动。
11.2 ICMP不可达差错(需要分片)
发生I C M P不可达差错的另一种情况是,当路由器收到一份需要分片的数据报,而在 I P首 部又设置了不分片(D F)的标志比特。如果某个程序需要判断到达目的端的路途中最小 M T U 是多少—称作路径M T U发现机制(2 . 9节),那么这个差错就可以被该程序使用。这种情况下的I C M P不可达差错报文格式如图 11 - 9所示。这里的格式与图 6 - 10不同,因为在第2个32 bit字中,16~31 bit可以提供下一站的M T U,而不再是0。
如果路由器没有提供这种新的 I C M P差错报文格式,那么下一站的 M T U就设为0。
11.3 用Traceroute确定路径MTU
大多数的系统不支持路径 M T U发现功能,但可以很容易地修改 traceroute程序,,用它来确定路径MTU。