TCP/IP illustrated Volume 1:Protocols
TCP/IP详解学习笔记: #TCP/IP illustrated Volume 1:Protocols
(一)TCP/IP协议
TCP/IP不是一个协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等。电脑有了这些,就好像学会了外语一样,就可以和其他的计算机终端做自由的交流了。
网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能,一个协议族比如TCP/IP是一组不同层次上的多个协议的组合。通常被认为是一个四层次协议系统。这种结构非常有栈的味道,所以某些文章也把tcp/ip协议族称为tcp/ip协议栈。
TCP/IP协议族的四个层次:
应用层:处理特定的应用程序细节;telnet远程登录、FTP文件传输协议、e-mail、SMTP简单邮件传送协议、SNMP简单网络管理协议等;
运输层:主要为两台主机提供端到端的服务;TCP、UDP
网络层:处理分组在网络中的活动,提供点到点的服务;IP、ICMP和IGMP
链路层:处理与电缆(或其他传媒媒介)的物理接口细节;设备驱动程序及接口卡;以太网协议
把多个网络连在一起形成一个网络的网络,称为互联网;一个互联网就是一组通过相同协议族互联在一起的网络。
路由器的好处是为不同类型的物理网络提供连接:以太网、令牌环网、点对点的链接和FDDI等。
在TCP/IP协议中,网络层IP提供的是一种不可靠的服务。即只是尽可能快的把分组从源结点送到目的结点,但是并不提供任何可靠性保证;另外TCP在不可靠的IP层提供了一个可靠地运输层,为此TCP采用了超时重传、发送和接收端到端的确认分组等机制。
TCP/IP的分层:

图10181--------------
TCP和UDP属运输层协议,使用IP作为网络层协议。TCP使用不可靠的IP服务,但却提供了一种可靠地运输层服务;UDP为应用程序发送和接受数据报,是不可靠的,不能保证数据报安全无误的到达最终目的。
IP是网络层上的主要协议,同时被TCP/UDP使用。TCP/UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。
ICMP是IP协议的附属协议,IP层用它来与其他主机或者路由器交换错误报文和其他重要信息。
IGMP是Internet组管理协议,它用来把一个UDP数据报多播到多个主机。
域名系统DNS:在TCP/IP领域中是一个分布式的数据库,由它来提供IP地址和主机名之间的映射信息
封装和分用:


图10182 10183--------------
(二)数据链路层
数据链路层功能:
(1)为IP模块 发送和接受IP数据报;
(2)为ARP模块 发送ARP请求和接受ARP应答;
(3)为RARP 发送RARP请求和接受RARP应答。
eth0属于以太网接口,而lo则是loopback接口,该主机在网络链路层上至少支持以太网协议和 loopback协议。
[root@localhost ~]# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:0C:29:32:FC:51
inet addr:172.16.135.130 Bcast:172.16.135.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe32:fc51/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:59495 errors:0 dropped:0 overruns:0 frame:0
TX packets:26864 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:55451083 (52.8 MiB) TX bytes:1715164 (1.6 MiB)
Interrupt:19 Base address:0x2000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:856 errors:0 dropped:0 overruns:0 frame:0
TX packets:856 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:62504 (61.0 KiB) TX bytes:62504 (61.0 KiB)
pan0 Link encap:Ethernet HWaddr 2E:63:D5:26:58:E6
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
ppp点对点协议是计算机与ISP进行通信时所使用的数据链路层协议,是SLIP的替代品。提供一种低速接入的解决方案。而每一种数据链路层协议都有一个MTU定义,定义了如果IP数据报过大则要进行分片使得每片都小于MTU(指一个逻辑定义,用于程序控制)
环回接口可以使我们用来127.0.0.1来尝试自己的机器服务器好坏!
(1)传给环回地址的任何数据均作为IP输入;
(2)传给广播地址或者多播地址的数据报复制一份传给环回接口,然后送到以太网上,因为广播传送和多播传送的定义包含主机本身;
(3)任何传给该主机IP地址的数据均送到环回接口。
[root@localhost ~]# netstat -in
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 59581 0 0 0 26962 0 0 0 BMRU
lo 65536 0 856 0 0 0 856 0 0 0 LRU

图10184--------------
(三)网际协议IP、ARP协议
IP协议是TCP/IP协议的核心,所有TCP,UDP,ICMP,IGMP的数据都是以IP数据报格式传输。注意:IP是不可靠的协议,也就是说IP协议没有提供一种数据未传达以后的处理机制而认为是上层协议TCP,UDP要做的事(即出现了TCP是一个可靠地协议而UDP没有那么可靠的区别)。

图10185--------------
TTL字段规定该数据包在穿过多少个路由之后才会被抛弃(这里就体现出来IP协议包的不可靠性,它不保证数据被送达),某个ip数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同,这个数字也不一样,一般是32或者是64,Tracerouter这个工具就是用这个原理工作的,tranceroute的-m选项要求最大值是255,也就是因为这个TTL在IP协议里面只有8bit。
IP路由选择:
数据报准备好时是如何被送到目的地?怎么选择一个合适的路径?
(1)主机和目的主机直连,直接将数据报传递即可;
(2)主机通过若干个路由器和目的主机连接,那么路由器需要通过IP数据报信息来为IP报寻找一个合适的目标来进行传递:比如合适的主机、合适的路由,路由器或者主机将会用如下方式来处理某个IP数据报:
a.如果IP数据报的TTL(生命周期)到了则该IP数据报就被抛弃;
b.搜索路由表,优先匹配主机,若能找到和IP地址完全一致的目标主机则将该报发向目标主机;
c.搜索路由表,若匹配主机失败,则匹配同一子网的路由器,通过子网掩码的来找到路由器,则将该报发向路由器;
d.搜索路由表,若匹配同子网路由器失败,则匹配同网号的路由器,如果找到路由器则将该报发向路由器;
e.搜索路由器,若以上都失败了就搜索默认路由,如果默认路由存在则发报;如果都失败了就丢弃这个报。
IP数据报是不可靠的,因为它不保证送达。
子网寻址:
IP地址定义为:网络号+主机号;现在所有主机都要求子网编址,即把主机号细分成子网号+主机号。
最终IP地址为:网络号+子网号+主机号;例如一个B类地址:210.30.109.134,子网掩码为255.155.255.0(二进制为11111111.11111111.11111111.00000000),对于B类地址因为210.30是网络号,那么后面的109.134就是子网号和主机号的组合,结合子网掩码其后8位为0则主机号就是IP地址的后8位就是134,剩下的就是子网号码109
ARP地址解析协议:
ARP是地址解析协议,是某些网络接口使用的特殊协议,用来将IP地址转换成MAC地址的一种解析协议。主机一开始不知道这个IP对应是哪个主机的哪个接口,当主机要发送一个IP报时会首先查看一下自己的ARP高速缓存(一个IP-MAC地址对应表缓存),若查询的IP-MAC值对不存在则主机就会向网络发送一个ARP协议广播报(内含待查的IP地址),而直接收到这份广播的报的所有主机都会查询自己的IP地址,若某主机发现自己符合条件则准备好一个包含自己的MAC地址的ARP报传送给发送ARP广播的主机,广播主机拿到ARP报后会更新自己的ARP缓存(存放IP-MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的数据报发送工作。
一个典型的ARP缓存信息如下:(这样的高速缓存是有时限的一般20分钟)
[root@localhost ~]# arp
Address HWtype HWaddress Flags Mask Iface
172.16.135.2 ether 00:50:56:e7:9e:32 C eth0
172.16.135.254 ether 00:50:56:e8:be:a1 C eth0
You have new mail in /var/spool/mail/root
[root@localhost ~]# arp -a
? (172.16.135.2) at 00:50:56:e7:9e:32 [ether] on eth0
? (172.16.135.254) at 00:50:56:e8:be:a1 [ether] on eth0
(四)ICMP协议、ping和traceroute

ICMP协议:
IP协议并不是个可靠地协议,不保证数据被送达,那么保证数据送达的工作应该有其他模块来完成,其中一个重要的模块的就是ICMP(网络控制报文)协议。当传送IP数据报发生错误,比如:主机不可达、路由不可达等,ICMP协议将会把错误信息封包然后传送给主机,给主机一个处理错误的机会。这也就是为何建立在IP层以上的协议是可能做到安全的原因。ICMP数据报由8bits的错误类型、8bits的代码、16bits的校验和组成,而前16bits就组成了ICMP所要传递的信息。
大多情况下错误的包传送应该给出ICMP报文,但是特殊的情况下是不产生ICMP错误报文的:
(1)ICMP差错报文不会产生ICMP差错报文(防止ICMP的无限产生和传送)
(2)目的地址是广播地址或者多播地址的IP数据报
(3)作为链路层广播的数据报
(4)不是IP分片的第一片
(5)源地址不是单个主机的数据报(即源地址不能为零地址、环回地址、广播地址或者多播地址)
ICMP协议分为两类:
(1)差错报文;产生在数据传送发生错误的时候。
(2)查询报文;
a.ping查询;
b.子网掩码查询(用于无盘工作站在初始化自身时候初始化子网掩码)
c.时间戳查询(可以用来同步时间)
ICMP应用---ping
ping程序利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请求,收到请求的主机则用类型、码为8的ICMP回应。ping程序来计算间隔时间并计算有多少个包被传送,得出传送的时间和TTL的数据等,用户就可以判断网络大致的情况。
ICMP应用---traceroute
traceroute是用来侦测主机到目的主机之间所经过路由情况的重要工具,也是最便利的工具。尽管ping工具也可以进行侦测但是由于IP头的限制而不能完全记录下所经过的路由器。traceroute可以!
traceroute原理是:接收到目的主机的IP后,首先给目的主机发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包后自动将TTL减1,而TTL变为0后路由器就把这个包给抛弃了,并同时产生一个主机不可达的ICMP数据报给主机。主机收到这个数据报后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据报。如此往返直到到达目的主机。这样traceroute就拿到了所有的路由器IP从而避开了IP头只能记录有限路由IP的问题。
//traceroute发送的是端口号>30000的UDP报,所以到达目的主机的时候目的主机只能发送一个端口不可达的ICMP数据报给主机,主机接收到该报告后知道主机到了!
浙公网安备 33010602011771号