器不限于WWW,还可以是其他服务,因此HTTP允许用户子啊统一的界面下,采用不同的协
网络层协议
- IP协议
-
什么是IP协议
IP协议位于网络层,它提供了不可靠的、无连接的数据报传输机制。TCP/IP是为了适应物理网络的多样性而设计的,而这种适应性主要是通过IP层来体现的。由于物理网络的多样性,各种物理网络的数据帧格式、地址格式之间的差异很大。为了将这些底层的细节屏蔽起来,使得采用不同物理网络的网络之间进行通讯, TCP/IP分别采用了IP数据报和IP地址作为物理数据帧与物理地址的统一描述形式。这样IP向上层提供统一的IP数据报和统一的IP地址,使得各种物理帧及物理地址的差异性对上层协议不复存在。
IP数据报头格式如下:
0 7 8 15 16 23 24 31
┣┳┳┳┳┳┳┳╋┳┳┳┳┳┳┳╋┳┳┳┳┳┳╋┳┳┳┳┳┳┳┫
┃ VERS │HLEN │ 服务类型 ┃ 总长度 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫
┃ 标 识 ┃ 标记 │ 分段偏移 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫
┃ 生 存 期 ┃ 协 议 ┃ 头校验和 ┃┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫
┃ 源 IP 地 址 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫┃ 目 的 IP 地 址 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫┃ IP选项(可选) ┃ 填充 ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫┃ IP报文数据(最大65535字节) ┃
┣┼┼┼┼┼┼┼╋┼┼┼┼┼┼┼╋┼┼┼┼┼┼╋┼┼┼┼┼┼┼┫
(2) 首部长度(HLEN):指明报头的长度。
(3) 服务类型:一共8个比特,前3个比特表示优先级,第4个比特表示要求有更低的时延,第5个比特表示要求有更高的吞吐量,第6个比特表示要求更高的可靠性,第7个比特表示选择价格更低廉的路由,最后一个比特未用。
(4) 总长度包括报头长度和数据长度,最大长度 = 65536字节。
(5) 标识符:用于数据分段,一个数据报在传输过程中可能分成若干段,标识符可以区分某分段属于某报文,一个数据报的所有分段具有相同的标识符。
(6) DF:该位置1时表示不分段,置0时允许分段。
(7) MF:表示后面还有一分段,除了最后一个分段,所有分段的MF置为1。
(8) 段偏移:指明此分段在当前数据报中的位置。
(9) 生存周期:限定分段生存期的计数器,当它为0时该分段被抛弃,时间单位为秒。
(10) 协议:指明此数据报属于哪一种传送过程,如TCP、UDP等。
(11) 报头校验和:只校验报头。
(12) 源端地址和目的端地址:指明源和目的方的网络编号与主机号,即IP地址。
- 网际控制报文协议(ICMP)
-
IMCP协议介绍
前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。
当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。
尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP错误报文的。如下
- ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送)
- 目的地址是广播地址或多播地址的IP数据报。
- 作为链路层广播的数据报。
- 不是IP分片的第一片。
- 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。
虽然里面的一些规定现在还不是很明白,但是所有的这一切规定,都是为了防止产生ICMP报文的无限传播而定义的。
ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:
- ping查询
- 子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)
- 时间戳查询(可以用来同步时间)
而差错报文则产生在数据传送发生错误的时候。就不赘述了。
PING
ping可以说是ICMP的最著名的应用,当我们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。一般的信息如下:
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Ping statistics for 10.4.24.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0msping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到, ping给出来了传送的时间和TTL的数据。我给的例子不太好,因为走的路由少,有兴趣地可以ping一下国外的网站比如sf.NET,就可以观察到一些 丢包的现象,而程序运行的时间也会更加的长。
ping还给我们一个看主机到目的主机的路由的机会。这是因为,ICMP的ping请求数据报在每经过一个路由器的时候,路由器都会把自己的ip放到该数 据报中。而目的主机则会把这个ip列表复制到回应icmp数据包中发回给主机。但是,无论如何,ip头所能纪录的路由列表是非常的有限。如果要观察路由, 我们还是需要使用更好的工具,就是要讲到的Traceroute(windows下面的名字叫做tracert)。ICMP的应用--Traceroute
Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。
- 地址解析协议(ARP)
- 地址解析协议ARP----------------------Address Resolution Protocol
- 逆地址解析协议RARP-----------------Reverse Address Resolution Protocol
-
ARP 和 RARP 协议:
- ARP协议-------根据物理地址求得物理地址,在局域网中有效;RARP协议-------根据物理地址求得IP地址
- ARP实现的原理:在主机ARP高速缓存中应存放一个IP地址到物理地址的映射表,并且这个映射表还需要经常动态更新
2:划分子网
由于IP地址空间的利用率有时很低;给每个物理网络分配一个网络号会使得路由表变得太他因而是网络性能变坏;两级IP地址不够灵活。---------------------->划分子网。IP地址::={<网络号>,<子网号>,<主机号>}。但是划分子网使得路由器的负担加重。使用子网划分后,路由表必须包含以下三项内容:目的网络地址、子网掩码、下一跳地址。
3:网际控制报文协议:为了更有:效的转发IP数据包和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP,ICMP 允许主机或路由器报告产错情况和提供异常情况的报告.ICMP 报文分为:ICMP 差错控制和ICMP询问报文。 对于Ping、traceroute使用ICMP报文
ICMP 差错报告分为五种:终点不可达、源点抑制、时间通过、参数问题、改变路由
- 传输控制协议(TCP)
- (1)源端口和目的端口字段——各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
(2)序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
(3)确认号字段——占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
(4)数据偏移——占 4 bit,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位不是字节而是 32 bit 字(4 字节为计算单位)。
(5)保留字段——占 6 bit,保留为今后使用,但目前应置为 0。
(6)紧急比特 URG —— 当 URG = 1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
(7)紧急指针字段 —— 占 16 bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。(实际上就是当URG=1时候,这个指针会指向紧急数据的最后一个字节的序号,而不要把紧急指针和紧急比特当作一个概念)
(8)确认比特 ACK —— 只有当 ACK = 1 时确认号字段才有效。当 ACK = 0 时,确认号无效。
(9)推送比特 PSH (PuSH) —— 接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付.
(10)复位比特 RST (ReSeT) —— 当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
(11)终止比特 FIN (FINal) —— 用来释放一个连接。当FIN = 1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
(12)窗口字段 —— 占 2 字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限.
(13)检验和 —— 占 2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部.
(14)MSS是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。
(15)选项字段 —— 长度可变。TCP 只规定了一种选项,即最大报文段长度 MSS (Maximum Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”
(16)填充字段 —— 这是为了使整个首部长度是 4 字节的整数倍。
- 用户数据报文协议(UDP)
- UDP用户数据报的首部数据格式。
(1)用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。
首部格式如下:
伪首部|源端口|目的端口|长度|检验和
字节数: 12| 2 | 2 | 2 | 2
(2)数据字段的格式如下:
源IP地址|目的IP地址| 0 | 17 |UDP长度
对应字节数: 4 | 4 | 1 | 1 | 2
说明:在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。
-
UDP协议在IP协议上增加了复用、分用和差错检测功能。UDP的特点:
A)是无连接的。相比于TCP协议,UDP协议在传送数据前不需要建立连接,当然也就没有释放连接。
B)是尽最大努力交付的。也就是说UDP协议无法保证数据能够准确的交付到目的主机。也不需要对接收到的UDP报文进行确认。
C)是面向报文的。也就是说UDP协议将应用层传输下来的数据封装在一个UDP包中,不进行拆分或合并。因此,运输层在收到对方的UDP包后,会去掉首部后,将数据原封不动的交给应用进程。
D)没有拥塞控制。因此UDP协议的发送速率不送网络的拥塞度影响。
E)UDP支持一对一、一对多、多对一和多对多的交互通信。
F)UDP的头部占用较小,只占用8个字节。
UDP报文格式
UDP协议分为首部字段和数据字段,其中首部字段只占用8个字节,分别是个占用两个字节的源端口、目的端口、长度和检验和。
长度:UDP报文的整个大小,最小为8个字节(仅为首
检验和:在进行检验和计算时,会添加一个伪首部一起进行运算。伪首部(占用12个字节)为:4个字节的源IP地址、4个字节的目的IP地址、1个字节的0、一个字节的数字17、以及占用2个字节UDP长度。这个伪首部不是报文的真正首部,只是引入为了计算校验和。相对于IP协议的只计算首部,UDP检验和会把首部和数据一起进行校验。接收端进行的校验和与UDP报文中的校验和相与,如果无差错应该全为1。如果有误,则将报文丢弃或者发给应用层、并附上差错警告。
-
网络接口层
网络接口层在发送端将上层的IP数据报封装成帧后发送到网络上;数据帧通过网络到达接收端时,该结点的网络接口层对数据帧拆封,并检查帧中包含的MAC地址。如果该地址就是本机的MAC地址或者是广播地址,则上传到网络层,否则丢弃该帧。
当使用串行线路连接主机与网络,或连接网络与网络时,例如,主机通过Modem和电话线接入Internet,则需要在网络接口层运行SLIP或PPP协议。
☆ SLIP(Serial Line Internet Protocol)协议提供了一种在串行通信线路上封装IP数据报的简单方法,使用户通过电话线和Modem能方便地接入TCP/IP网络。
☆ PPP(Point to Point Protocol)协议是一种有效的点到点通信协议,解决了SLIP存在的上述问题,即可以支持多种网络层协议(如IP、IPX等),支持动态分配的IP地址;并且PPP帧中设置了校验字段,因而PPP在网络接口层上具有差错检验能力。