关于 IP 非常重要的一点是,按照设计,它是不可靠的。假设您以太网上有十个人开始从 GMU 的 FTP 服务器下载最新版本的 XFree86。由此产生的流量可能对于网关来说太大了,因为它速度太慢,而且内存紧张。现在,如果您碰巧向 quark 发送一个数据包,sophus 可能只是暂时没有缓冲区空间,因此无法转发它。IP 通过简单地丢弃它来解决这个问题。数据包不可挽回地丢失了。因此,通信主机的责任是检查数据的完整性和完整性,并在发生错误时重新传输它。
这是由另一种协议 TCP,或传输控制协议执行的,它在 IP 之上构建了一个可靠的服务。TCP 的本质特性是它使用 IP 为您提供主机上两个进程与远程机器之间简单连接的错觉,这样您就不必关心您的数据实际上是如何以及沿着哪条路径传输的。TCP 连接的工作方式本质上像一个双向管道,两个进程都可以写入和从中读取。把它想象成电话交谈。
TCP 通过所涉及的两台主机的 IP 地址以及每台主机上所谓的端口号来标识此类连接的端点。端口可以被视为网络连接的连接点。如果我们稍微延伸一下电话的例子,可以将 IP 地址比作区号(号码映射到城市),将端口号比作本地号码(号码映射到个人的电话)。
在 rlogin 示例中,客户端应用程序 (rlogin) 在 erdos 上打开一个端口,并连接到 quark 上的端口 513,rlogind 服务器已知在该端口上监听。 这就建立了 TCP 连接。 使用此连接,rlogind 执行授权过程,然后派生 shell。 shell 的标准输入和输出被重定向到 TCP 连接,因此您在机器上键入 rlogin 的任何内容都将通过 TCP 流传递,并作为标准输入提供给 shell。