现在Internet
(因特网)使用的主流协议族是
TCP/IP
协议族,它是一个分层、多协议的通信体系。简单说一下
TCP/IP
协议族体系结构以及主要协议,这些你可能不知道的知识。
1.1 TCP/IP协议族体系结构以及主要协议
TCP/IP
协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层和应用层。每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务,如图
1-1
所示。
1.1.1 数据链路层
数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介(比如以太网、令牌环等)上的传输。不同的物理网络具有不同的电气特性,网络驱动程序隐藏了这些细节,为上层协议提供一个统一的接口。
数据链路层两个常用的协议是ARP
协议(
Address Resolve Protocol
,地址解析协议)和
RARP
协议(
Reverse Address Resolve Protocol
,逆地址解析协议)。它们实现了
IP
地址和机器物理地址(通常是
MAC
地址,以太网、令牌环和
802.11
无线网络都使用
MAC
地址)之间的相互转换。
网络层使用IP
地址寻址一台机器,而数据链路层使用物理地址寻址一台机器,因此网络层必须先将目标机器的
IP
地址转化成其物理地址,才能使用数据链路层提供的服务,这就是
ARP
协议的用途。
RARP
协议仅用于网络上的某些无盘工作站。因为缺乏存储设备,无盘工作站无法记住自己的
IP
地址,但它们可以利用网卡上的物理地址来向网络管理者(服务器或网络管理软件)查询自身的
IP
地址。运行
RARP
服务的网络管理者通常存有该网络上所有机器的物理地址到
IP
地址的映射。
1.1.2 网络层
网络层实现数据包的选路和转发。WAN
(
Wide Area Network
,广域网)通常使用众多分级的路由器来连接分散的主机或
LAN
(
Local Area Network
,局域网),因此,通信的两台主机一般不是直接相连的,而是通过多个中间节点(路由器)连接的。网络层的任务就是选择这些中间节点,以确定两台主机之间的通信路径。同时,网络层对上层协议隐藏了网络拓扑连接的细节,使得在传输层和网络应用程序看来,通信的双方是直接相连的。
网络层最核心的协议是IP
协议(
Internet Protocol
,因特网协议)。
IP
协议根据数据包的目的
IP
地址来决定如何投递它。如果数据包不能直接发送给目标主机,那么
IP
协议就为它寻找一个合适的下一跳(
next hop
)路由器,并将数据包交付给该路由器来转发。多次重复这一过程,数据包最终到达目标主机,或者由于发送失败而被丢弃。可见,
IP
协议使用逐跳(
hop by hop
)的方式确定通信路径。
网络层另外一个重要的协议是ICMP
协议(
Internet Control Message Protocol
,因特网控制报文协议)。它是
IP
协议的重要补充,主要用于检测网络连接。
ICMP
协议使用的报文格式如图
1-2
所示。
图1-2
中,
8
位类型字段用于区分报文类型。它将
ICMP
报文分为两大类:一类是差错报文,这类报文主要用来回应网络错误,比如目标不可到达(类型值为
3
)和重定向(类型值为
5
);另一类是查询报文,这类报文用来查询网络信息,比如
ping
程序就是使用
ICMP
报文查看目标是否可到达(类型值为
8
)的。有的
ICMP
报文还使用
8
位代码字段来进一步细分不同的条件。比如重定向报文使用代码值
0
表示对网络重定向,代码值
1
表示对主机重定向。
ICMP
报文使用
16
位校验和字段对整个报文(包括头部和内容部分)进行循环冗余校验(
Cyclic Redundancy Check,CRC
),以检验报文在传输过程中是否损坏。不同的
ICMP
报文类型具有不同的正文内容。我们将在第
2
章详细讨论主机重定向报文,其他
ICMP
报文格式请参考
ICMP
协议的标准文档
RFC 792
。
需要指出的是,ICMP
协议并非严格意义上的网络层协议,因为它使用处于同一层的
IP
协议提供的服务(一般来说,上层协议使用下层协议提供的服务)。
1.1.3 传输层
传输层为两台主机上的应用程序提供端到端(end to end
)的通信。与网络层使用的逐跳通信方式不同,传输层只关心通信的起始端和目的端,而不在乎数据包的中转过程。图
1-3
展示了传输层和网络层的这种区别。
图1-3
中,垂直的实线箭头表示
TCP/IP
协议族各层之间的实体通信(数据包确实是沿着这些线路传递的),而水平的虚线箭头表示逻辑通信线路。该图中还附带描述了不同物理网络的连接方法。可见,数据链路层(驱动程序)封装了物理网络的电气细节;网络层封装了网络连接的细节;传输层则为应用程序封装了一条端到端的逻辑通信链路,它负责数据的收发、链路的超时重连等。
传输层协议主要有三个:TCP
协议、
UDP
协议和
SCTP
协议。
TCP
协议(
Transmission Control Protocol
,传输控制协议)为应用层提供可靠的、面向连接的和基于流(
stream
)的服务。
TCP
协议使用超时重传、数据确认等方式来确保数据包被正确地发送至目的端,因此
TCP
服务是可靠的。使用
TCP
协议通信的双方必须先建立
TCP
连接,并在内核中为该连接维持一些必要的数据结构,比如连接的状态、读写缓冲区,以及诸多定时器等。当通信结束时,双方必须关闭连接以释放这些内核数据。
TCP
服务是基于流的。基于流的数据没有边界(长度)限制,它源源不断地从通信的一端流入另一端。发送端可以逐个字节地向数据流中写入数据,接收端也可以逐个字节地将它们读出。
UDP
协议(
User Datagram Protocol
,用户数据报协议)则与
TCP
协议完全相反,它为应用层提供不可靠、无连接和基于数据报的服务。
“
不可靠
”
意味着
UDP
协议无法保证数据从发送端正确地传送到目的端。如果数据在中途丢失,或者目的端通过数据校验发现数据错误而将其丢弃,则
UDP
协议只是简单地通知应用程序发送失败。因此,使用
UDP
协议的应用程序通常要自己处理数据确认、超时重传等逻辑。
UDP
协议是无连接的,即通信双方不保持一个长久的联系,因此应用程序每次发送数据都要明确指定接收端的地址(
IP
地址等信息)。基于数据报的服务,是相对基于流的服务而言的。每个
UDP
数据报都有一个长度,接收端必须以该长度为最小单位将其所有内容一次性读出,否则数据将被截断。
SCTP
协议(
Stream Control Transmission Protocol
,流控制传输协议)是一种相对较新的传输层协议,它是为了在因特网上传输电话信号而设计的。本书不讨论
SCTP
协议,感兴趣的读者可参考其标准文档
RFC 2960
。
全部回复(1 )
只看楼主 我来说两句 抢板凳