电子邮件的五层协议

 
电子邮件的工作过程遵循客户-服务器模式。每份电子邮件的发送都要涉及到发送方与接收方,发送方式构成客户端,而接收方构成服务器,服务器含有众多用户的电子信箱。发送方通过邮件客户程序,将编辑好的电子邮件向邮局服务器(SMTP服务器)发送。邮局服务器识别接收者的地址,并向管理该地址的邮件服务器(POP3服务器)发送消息。邮件服务器识将消息存放在接收者的电子信箱内,并告知接收者有新邮件到来。接收者通过邮件客户程序连接到服务器后,就会看到服务器的通知,进而打开自己的电子信箱来查收邮件。

通常Internet上的个人用户不能直接接收电子邮件,而是通过申请ISP主机的一个电子信箱,由ISP主机负责电子邮件的接收。一旦有用户的电子邮件到来,ISP主机就将邮件移到用户的电子信箱内,并通知用户有新邮件。因此,当发送一条电子邮件给一另一个客户时,电子邮件首先从用户计算机发送到ISP主机,再到Internet,再到收件人的ISP主机,最后到收件人的个人计算机。

ISP主机起着“邮局”的作用,管理着众多用户的电子信箱。每个用户的电子信箱实际上就是用户所申请的帐号名。每个用户的电子邮件信箱都要占用ISP主机一定容量的硬盘空间,由于这一空间是有限的,因此用户要定期查收和阅读电子信箱中的邮件,以便腾出空间来接收新的邮件。



准确的说是七层,而不是五层,他们分别是
7.应用层
TELNET FTP TFTP SMTP SNMP HTTP BOOTP DHCP
6:表示层
文本:ASCII,EBCDIC
图形:TIFF,JPEG,GIF,PICT
声音:MIDI,MPEG,QUICKTIME
5:会话层
NFS SQL RPC X-WINDOWS ASP(APPTALK会话协议)SCP
4:传输层
TCP/IP----TCP和UDP NOVELL---IPX SPX
3:网络层
IP IPX
2:数据链路层
以太网 IEEE802.3 令牌环 IEEE802.5 HDLC PPP
1:物理层
10BASE T 10BASE TX V.35 RS-232 100BASE T 100BASE TX 1000BASE T 1000BASE TX 100BASE F 100BASE FX

你说的应该是因特网协议堆,如果说因特网协议堆按5层来划分,第4层就是传输层(transport layer),它是应用层(第5层)和网络层(第3层)之间的接口。传输层为应用层上的应用提供两类截然不同的服务:第一类服务叫做可靠的面向连接服务(connection-oriented service),确保正确无误地把消息从源端传送到目的地,使用的协议是TCP协议。第二类服务是不可靠的无连接服务(unreliable, connectionless service),使用的协议是用户数据包协议UDP(User Datagram Protocol)。一般来说,应用层协议运行在操作系统之上,而传输层协议集成在操作系统之中。因此,当设计网络应用时,设计人员必需要指定其中的一种网络传输协议,网络多媒体应用通常使用UDP协议。
一个网络单元层n(layer n)与另一个网络单元层n(layer n)交换的消息是层n(layer n)上的消息,这些消息称为层n协议数据单元(layer-n protocol data unit,n-PDU)。如图15-18所示,主机A的传输层与主机B的传输层交换的消息就是传输层上的消息,这叫做逻辑上的端-端传输,当信息包通过中间设备(例如路由器、网桥和中继器等设备)时,这些网络设备对使用UDP协议的信息包和使用TCP协议的信息包将一视同仁。在一些网络文献中,通常把使用UDP的协议数据单元(protocol data unit,PDU)称为数据包(datagram),但网络文献也使用数据包(datagram)这个术语表示网络层的PDU,名词术语不统一就会使人很混乱。为了简化术语,本书把传输层上的协议数据单元PDU称为消息段(segment),或者就叫做传输层协议数据单元。
15.4.2 端口号和套接号的概念
在客户机/服务机(client/server)运行模式中,一端的主机叫做客户机,另一端的主机叫做服务机。一台服务机可以同时运行同一应用程序的几个进程,例如服务机上的FTP服务软件可以同时给几个客户传送文件,对每个客户至少要调用一个FTP服务软件的进程。同样,一个客户可以同时与几台不同的主机进行远程对话,对每个不同的主机,客户软件至少要调用一个远程客户软件的进程。因此,对连网计算机上的进程就需要相互联系的端口号来递送IP信息包。
在因特网上,所有使用TCP或者UDP协议的应用程序都有一个标识协议本身的永久性端口号(port number)。例如,我们在设置Web浏览器或者FTP文件传输程序时会经常遇到的端口号:HTTP的端口号=80,FTP的端口号=21,电子邮件协议SMTP的端口号=25,Telnet的端口号=23,这些端口号叫做众所周知的端口号(well-known port number)。端口号的分配定义在RFC 1700中,并在1994年成为一个标准,标准号是STD0002。可供TCP使用的端口号共计65,535,一般来说,大于255的端口号由本地的机器使用,小于255的端口号用于频繁使用的进程,0和255是保留端口号。
收发两端的传输层TCP之间的通信由两个号码的组合来鉴别,一个是机器的IP地址,另一个是TCP软件使用的端口号,这两个号码组合在一起就叫做套接标识符(socket)或者叫做套接号,而且收发双方都需要有套接标识符。因为在互联网上机器的IP地址是唯一的,而对单台机器的端口号也是唯一的,因此套接标识符在互联网上也是唯一的,这就可通过套接标识符使互联网络上的进程之间相互通信。互联网上收发两端的进程之间的通信建立过程.
15.4.3 用户数据包传输协议(UDP)
1. UDP协议简介
因特网为网络应用提供有两种不同的传输协议:用户数据包传输协议(User Datagram Protocol,UDP)和传输控制协议TCP(Transfer Control Protocol)。不同的网络应用使用不同的协议,如图15-20所示。例如,HTTP使用TCP协议,而普通文件传输协议(Trivial File Transfer Protocol,TFTP)则使用UDP。
UDP协议不提供端-端的确认和重传功能,它不保证信息包一定能到达目的地,因此称为不可靠协议。应用开发人员选择UDP时,应用层协议软件几乎是直接与IP通信。
应用层协议
HTTP,FTP,Telnet,SMTP,NNTP,……
TFTP,RTP,Real Audio,……
传输层协议
TCP
UDP
网络层
IP,ICMP,IGMP
HTTP(Hypertext Transfer Protocol) 超文本传送协议
FTP(File Transfer Protocol) 文件传输协议
Telnet 远程联接服务标准协议
SMTP(Simple Mail Transfer Protocol) 简单邮件传输协议
RTP(Real-time Transport Protocol) 实时传输协议
UDP有下述几个特性:
(1) UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
虽然UDP是一个不可靠的协议,但它是分发信息的一个理想协议。例如,在屏幕上报告股票市场、在屏幕上显示航空信息等等。UDP也用在路由信息协议RIP(Routing Information Protocol)中修改路由表。在这些应用场合下,如果有一个消息丢失,在几秒之后另一个新的消息就会替换它。UDP广泛用在多媒体应用中,例如,Progressive Networks公司开发的RealAudio软件,它是在因特网上把预先录制的或者现场音乐实时传送给客户机的一种软件,该软件使用的RealAudio audio-on-demand protocol协议就是运行在UDP之上的协议,大多数因特网电话软件产品也都运行在UDP之上。
2. UDP协议的标题结构
UDP信息包由UDP标题和数据组成。UDP的标题结构如图15-21所示,它由5个域组成:源端端口(Source Port)、目的地端口(Destination Port)、用户数据包的长度(Length)和检查和(Checksum)。其中,前4个域组成UDP标题(UDP header),每个域由4个字节组成;检查和域占据2个字节,它用来检测传输过程中是否出现了错误;用户数据包的长度包括所有5个域的字节数。检查和的详细计算可在RFC 1071中找到,现举一例说明使用检查和检测错误的道理。例如,假设从源端A要发送下列3个16位的二进制数:word1,word2和word3到终端B,检查和计算如下:word1
0110011001100110
word2
0101010101010101
word3
0000111100001111
sum=word1+ word2+ word3
1100101011001010
检查和(sum的反码)
0011010100110101
从发送端发出的4个(word1,2,3以及检查和)16位二进制数之和为1111111111111111,如果接收端收到的这4个16位二进制数之和也是全“1”,就认为传输过程中没有出差错。
许多链路层协议都提供错误检查,包括流行的以太网协议,读者也许想知道为什么UDP也要提供检查和。其原因是链路层以下的协议在源端和终端之间的某些通道可能不提供错误检测。虽然UDP提供有错误检测,但检测到错误时,UDP不做错误校正,只是简单地把损坏的消息段扔掉,或者给应用程序提供警告信息。
读者也可能会问,收发两端的两个进程是否有可能通过UDP提供可靠的数据传输?答案是可以的。但必需要把确认和重传措施加到应用程序中,应用程序不能指望UDP来提供可靠的数据传输。
15.4.4 传输控制协议(TCP)
1. TCP协议简介
传输控制协议TCP(Transmission Control Protocol)是TCP/IP协议堆中的一部分。消息在网络内部或者网络之间传递时要打包,TCP负责把来自高层协议的数据装配成标准的数据包,相当于在数据包上贴包装清单,而IP则相当于在数据包上贴收、发人的姓名和地址,TCP和IP之间要进行相互通信才能完成数据的传输。TCP/IP协议中的IP主要负责在计算机之间搬运数据包,而TCP主要负责传输数据的正确性。TCP/IP有3个主要的特性:功能丰富,开放性和普遍型。随着新的网络服务的不断出现,TCP/IP协议也在不断修改和扩充。
TCP是传输层上的协议,该协议定义在RFC 793,RFC 1122,RFC 1323和RFC 2001文件中。目前,TCP协议比UDP协议用得更广泛,也更复杂。
TCP是面向连接的协议。面向连接的意思是在一个应用程序开始传送数据到另一个应用程序之前,它们之间必须相互沟通,也就是它们之间需要相互传送一些必要的参数,以确保数据的正确传送。
TCP是全双工的协议。全双工(full duplex)的意思是,如果在主机A和主机B之间有连接,A可向B传送数据,而B也可向A传送数据。TCP也是点对点的传输协议,但不支持多目标广播。TCP连接一旦建立,应用程序就不断地把数据送到TCP发送缓存(TCP send buffer),如图15-22 所示TCP就把数据流分成一块一块(chunk),再装上TCP协议标题(TCP header)以形成TCP消息段(TCP segment)。这些消息段封装成IP数据包(IP datagram)之后发送到网络上。当对方接收到消息段之后就把它存放到TCP接收缓存(TCP receive buffer)中,应用程序就不断地从这个缓存中读取数据。
TCP为应用层和网络层上的IP提供许多服务,其中3个最重要的服务是:(1) 可靠地传输消息:为应用层提供可靠的面向连接服务,确保发送端发出的消息能够被接收端正确无误地接收到。接收端的应用程序确信从TCP接收缓存中读出的数据是否正确是通过检查传送的序列号(sequence number)、确认(acknowledgement)和出错重传(retransmission)等措施给予保证的。
(2) 流程控制:连接双方的主机都给TCP连接分配了一定数量的缓存。每当进行一次TCP连接时,接收方主机只允许发送端主机发送的数据不大于缓存空间的大小。如果没有流程控制,发送端主机就可能以比接收端主机快得多的速度发送数据,使得接收端的缓存出现溢出。
(3) 拥挤控制:TCP保证每次TCP连接不过分加重路由器的负担。当网络上的链路出现拥挤时,经过这个链路的TCP连接将自身调节以减缓拥挤。
2 TCP协议标题的结构
如前所述,TCP递给IP的数据块叫做消息段(segment)。这个消息段由TCP协议标题域(TCP header field)和存放应用程序的数据域(header fields)组成,如TCP协议标题有很多域组成,现将几个比较重要的域作一个简单介绍。
(1) 源端端口号(Source Port Number)域和目的地端口号(Destination port Number)域:前者的16位域用来识别本机TCP;后者的16域用来识别远程机器的TCP。
(2) 顺序号(sequence number)域和确认号(acknowledgment number)域:这两个域是TCP标题中两个最重要的域。32位的顺序号域用来指示当前数据块在整个消息中的位置,而32位的确认号域用来指示下一个数据块顺序号,也可间接表示最后接收到的数据块顺序号。顺序号域和确认号域由TCP收发两端主机在执行可靠数据传输时使用。
在介绍顺序号(sequence number)和确认号(acknowledgement number)之前,首先要介绍TCP最大消息段大小(maximum segment size,MSS)的概念。在建立TCP连接期间,源端主机和终端主机都可能宣告最大消息段大小MSS和一个用于连接的最小消息段大小。如果有一端没有宣告MSS,就使用预先约定的字节数(如1500,536或者512字节)。当TCP发送长文件时,就把这个文件分割成许多按照特定结构组织的数据块(chunk),除了最后一个数据块小于MSS外,其余的数据块大小都等于MSS。在交互应用的情况下,消息段通常小于MSS,像Telnet那样的远程登录应用中,TCP消息段中的数据域通常仅有一个字节。
在TCP数据流中的每个字节都编有号码。例如,一个106字节长的文件,假设MSS为103字节,第一个字节的顺序号定义为
    
 

你可能感兴趣的:(网络编程(apue))