1.1 计算机网络、协议和报文
计算机网络是由一组通过通信信道相互连接的机器组成。我们把这些机器成为主机和路由器。
1、主机是指运行应用程序的计算机,这些应用程序包括网络浏览器、即时通信代理或者文件共享程序。
2、路由器是指将信息从一个通信信道传递或者转发到另一个通信信道。
3、通信信道指将字节序列从一个主机传递到另一个主机的手段。
4、信息是指计算机创建和解释的字节序列。
协议是指相互通信的程序间达成的一种约定,规定了分组报文的交换方式和他们包含的意义。一组协议规定了报文的结构以及怎样对报文进行解析。
协议也称协议族。TCP/IP协议族包含IP协议(Internet Protocol,互联网协议)、TCP协议(Transmission Control Protocol,传输控制协议)和UDP协议(User Datagram Protocol,用户数据报协议)。
将各种协议分层组织是一个非常好的方式。
Application:应用程序;Socket:套接字;Host:主机;Channel:通信信道;Ethernet:以太网;Router:路由器;Network Layer:网络层;Transport Layer:传输层。 |
在TCP/IP协议族中,底层由基础的通信信道构成,如以太网或调制解调器拨号连接。这些信道由网络层(network layer)使用,而网络层则完成将分组报文传输到它们的目的地址的工作(也就是路由器的功能)。TCP/IP协议族中属于网络层的唯一协议是IP协议,它使两个主机间的一系列通信信道和路由器看起来像是一条单一的主机到主机的信道。
IP协议提供了一种数据报服务:每组分组报文都由网络独立处理和分发。为了实现这个功能,每个IP报文必须包含一个保存其目的地址(address)的字段。IP协议只是一个"尽力而为"(best-effort)的协议:它试图分发每一个分组报文,但在网络传输过程中,偶尔也会发生丢失报文,使报文顺序被打乱,或重复发送报文的情况。
IP协议层之上称为传输层(transport layer)。它提供了两种可选择的协议:TCP协议和UDP协议。这两种协议都建立在IP层所提供的服务基础上,但根据应用程序协议(application protocols)的不同需求,它们使用了不同的方法来实现不同方式的传输。TCP协议和UDP协议有一个共同的功能,即寻址。回顾一下,IP协议只是将分组报文分发到了不同的主机,很明显,还需要更细粒度的寻址将报文发送到主机中指定的应用程序,因为同一主机上可能有多个应用程序在使用网络。TCP协议和UDP协议使用的地址叫做端口号(port numbers),都是用来区分同一主机中的不同应用程序。TCP协议和UDP协议也称为端到端传输协议(end-to-end transport protocols),因为它们将数据从一个应用程序传输到另一个应用程序,而IP协议只是将数据从一个主机传输到另一主机。
TCP协议能够检测和恢复IP层提供的主机到主机的信道中可能发生的报文丢失、重复及其他错误。TCP协议提供了一个可信赖的字节流(reliable byte-stream)信道,这样应用程序就不需要再处理上述的问题。TCP协议是一种面向连接(connection-oriented)的协议:在使用它进行通信之前,两个应用程序之间首先要建立一个TCP连接,这涉及到相互通信的两台电脑的TCP部件间完成的握手消息(handshake messages)的交换。另一方面,UDP协议并不尝试对IP层产生的错误进行修复,它仅仅简单地扩展了IP协议"尽力而为"的数据报服务,使它能够在应用程序之间工作,而不是在主机之间工作。因此,使用了UDP协议的应用程序必须为处理报文丢失、顺序混乱等问题做好准备。
1.2 关于地址
1. 在TCP/IP中有两部分信息来指定一个程序:端口和互联网地址。
2. 互联网地址由二进制数字组成,由IPV4(32位)和IPV6(128位)两种形式。
3. 端口号的范围是1--65535.
4. 回环地址:是一种虚拟设备,将发送给他的报文直接返回给发送者。IPV4的回环 地址是127.0.0.1,IPV6的回环地址是0.0.0.0.0.0.0.1 .
5. IPv4地址中的另一种特殊用途的保留地址包括那些"私有用途"的地址。它们包括IPv4中所有以10或192.168开头的地址,以及第一个数是172,第二个数在16到31的地址。(在IPv6中没有相应的这类地址)这类地址最初是为了在私有网络中 使用而设计的,不属于公共互联网的一部分。现在这类地址通常被用在家庭或小 型办公室中,这些地方通过NAT(Network Address Translation,网络地址转换)设 备连接到互联网。
6. 相关的类型的地址包括本地链接(link-local),或称为"自动配置"地址。IPv4中, 这类地址由169.254开头,在IPv6中,前16位由FE8开头的地址是本地链接地 址。这类地址只能用来在连接到同一网络的主机之间进行通信,路由器不会转发这 类地址的信息。
7. 多播(multicast)地址组成。普通的IP地址(有时也称为"单播"地址)只与唯一 一个目的地址相关联,而多播地址可能与任意数量的目的地址关联。IPv4中的多 播地址在点分格式中,第一个数字在224到239之间。IPv6中,多播地址由FF开始。
1.3 关于名字
首先应该明确的是,使用主机名而不使用地址是出于方便性的考虑,这与TCP/IP提供的基本服务是相互独立的。你也可以不使用名字来编写和使用TCP/IP应用程序。当使用名字来定位一个通信终端时,系统将做一些额外的工作把名字解析成地址。有两个原因证明这额外的步骤是值得的:第一,相对于点分形式(或IPv6中的十六进制数字串),人们更容易记住名字;第二,名字提供了一个间接层,使IP地址的变化对用户不可见。
名字解析服务可以从各种各样的信息源获取信息。两个主要的信息源是域名系统(DNS,Domain Name System)和本地配置数据库。DNS是一种分布式数据库,它将域名映射到真实的互联网地址和其他信息上。DNS协议[允许连接到互联网的主机通过TCP或UDP协议从DNS数据库中获取信息。本地配置数据库通常是一种与具体操作系统相关的机制,用来实现本地名称与互联网地址的映射。
1.4 客户端和服务器
1.5套接字
Socket(套接字)是一种抽象层,应用程序通过它来发送和接收数据,就像应用程序打开一个文件句柄,将数据读写到稳定的存储器上一样。一个socket允许应用程序添加到网络中,并与处于同一个网络中的其他应用程序进行通信。一台计算机上的应用程序向socket写入的信息能够被另一台计算机上的另一个应用程序读取,反之亦然。
不同类型的socket与不同类型的底层协议族以及同一协议族中的不同协议栈相关联。现在TCP/IP协议族中的主要socket类型为流套接字(sockets sockets)和数据报套接字(datagram sockets)。流套接字将TCP作为其端对端协议(底层使用IP协议),提供了一个可信赖的字节流服务。一个TCP/IP流套接字代表了TCP连接的一端。数据报套接字使用UDP协议(底层同样使用IP协议),提供了一个"尽力而为"(best-effort)的数据报服务,应用程序可以通过它发送最长65500字节的个人信息。一个TCP/IP套接字由一个互联网地址,一个端对端协议(TCP或UDP协议)以及一个端口号唯一确定。
Applications:应用程序;TCP sockets:TCP套接字;TCP ports:TCP端口;Socket References:套接字引用;UDP sockets:UDP套接字;Sockets bound to ports:套接字绑定到端口;UDP ports:UDP端口。 |