Windows Sockets 网络编程——第三章 TCP/IP协议服务

来源:互联网 发布:织梦dedecms 编辑:程序博客网 时间:2024/05/12 17:26

第三章 TCP/IP协议服务

3.1 什么是TCP/IP

TCP/IP是“传输控制协议/因特网协议”的缩略语,指的是一些主要协议中的两个协议,这些协议也被称为因特网协议簇。TCP/IP协议可为任意的计算机系统提供网络连接,其连接可以跨越不同的网络介质、应对可能的不利条件。

TCP/IP的强大之处在于其兼容性,它能够兼容几乎所有的低层网络架构。并且它是基于开放标准的。下图展示了TCP/IP协议簇与OSI网络参考模型之间的相对关系,以及与Windows Sockets模型的对比。


下面是上图中提到的每个协议所提供的服务:

会话层和表示层:

文件传输协议(File Transfer Protocol, FTP):文件传输。

简单邮件传输协议(Simple Mail Transfer Protocol,SMTP):电子邮件服务。

远程登录(Telnet):用于远程登录的终端协议。

域名服务(Domain Name Services,DNS):主机名到IP地址的映射

传输层:

用户数据报协议(User Datagram Protocol,UDP):无连接数据传输。

传输控制协议(Transmission Control Protocol,TCP):可靠的数据传输。

网络层:

因特网协议(Internet Protocol,IP):独立于硬件的寻址、路由、分片和数据报重组。

地址解析协议(Address Resolution Protocol,ARP):IP地知道硬件地址的映射。

因特网控制消息协议(Internet Control Message Protocol,ICMP):错误和控制消息。

 

3.2 传输服务

3.3.1 无连接的服务:UDP

无连接的传输,也被称为数据包服务,是不可靠的服务。这里所说的不可靠,指的是它既不提供有保证的教父,也不维持数据包的顺序。也就是说,如果一个非数据报没有达到目的地,或者在传输过程中被顺坏了,那么该服务不会向你通报错误。数据报A先于数据报B发送,但B有可能先于数据报A到达。

无连接传输服务简单,它靠小小,所以效率高,也很容易使用。数据报服务是不可靠的,但使用数据报服务的应用程序却不一定不可靠,任何数据报应用程序都能够实现可靠的服务。接收数据报的应用程序可以针对每个收到的数据报发送确认信息,发送数据的应用程序如果在给定的时间内没收到确认信息,可以重发这个数据报。每个数据报可以携带一个顺序号或者时间戳,这样接收端可以以此重新建立起数据报的顺序,并且能够检测出接收的重复数据,然后丢弃它。

3.3.2 面向连接的服务:TCP

面向连接的服务是可靠的,它也被称为流服务。连接是一个虚电路,所谓“虚拟的”电路是指:它表现得好像硬件连线的连接,但实际上却不是。虚电路能够提供可靠的数据传。其通过对接收数据进行自动地确认(对应用程序是透明的)、没有收到确认是重传数据、维持数据的顺序、避免数据的重复这些手段实现。

3.3.3 传输协议的选择:UDP与TCP的对比

对于传输协议的选择,首先要决定应用程序为用户提供哪些服务,其次再决定使用哪一种传输协议最适合这个任务。

通常情况下,如果没有非UDP不用的理由,尽量选择TCP更好。TCP的计算与网络开销对于网络吞吐量的影响可以忽略不急。并且,采用TCP使得程序编写更容易了。

3.3 网络服务

3.3.1 IP服务

IP协议提供数据包的寻址、路由、分片和重组。

3.3.2 ICMP服务

ICMP协议是一个“支持协议”,它在因特网之间传递控制、报错、通告一类的消息。

3.4 支持协议和服务

3.4.1 域名服务

域名服务使得一台TCP/IP主机能够仅仅根据主机的名称信息就从服务器上插叙到另一台主机的IP地址,此外,还提到哦你相反的服务(一直IP地址,查询主机名)。虽然协议本身是透明的,但是应用程序可以通过调用主机名解析函数来直接访问其服务。

3.4.2 地址解析协议

大多数网络接口拥有一个由制造商烧写在只读存储器(ROM)中的独有的地址。在网络接口发送的每个数据包中。这个地址出现在媒体访问控制(MAC)链路层首部的原地址字段。这个地址也必须出现在接口要接收的每个MAC数据包的“目的”字段中(广播和多播数据包除外)。地址解析就是把接口的IP地址映射为其硬件地址的过程。

在发送一个IP数据报之前,TCP/IP栈必须查找目的IP主机(或者到达目的主机路径上的第一台路由器)的硬件地址。所以,在应用程序发起与另一台TCP/IP主机的通信时,都会发送一个ARP请求,并等待一个返回的ARP应答。在ARP解析成功完成时,这个过程对Windows Sockets应用程序是完全透明的。硬件地址对Windows Sockets 应用程序来说是不可访问的。这些底层的具体工作由TCP/IP协议栈完成。

然而,如果地址解析失败,WindowsSockets应用程序的函数调用也将失败。这时,TCP/IP应用程序将得到一个错误信息,而UDP应用程序则不会。

另外,串行线中不会有地址解析过程发生,采用串行线因特网协议(Serial Line Internet Protocol,SLIP)和点对点协议(Pointto Point Protocol)时,不需要ARP。应为在点对点的串行线的另一端只有一个接口,所以,尽管串行接口有IP地址,但它既没有,也不需要硬件地址。

3.4.3 其他支持协议

例如,反向地址解析协议(RARP),它提供与ARP相反的功能:已知硬件地址,给出相应的IP地址。路由信息协议(RIP)、网关到网关协议(GGP)和外部网关协议(EGP),因特网组播协议(IGMP)

0 0
原创粉丝点击