TCP/IP详解 卷一 概述
发表于:2025-10-01 | 分类: 学习
概述

TCP/IP起源于60年代末美国政府资助的一个分组交换网络研究项目,到90年代已发展成为计算机之间最长应用的组网形式。它是一个真正开放的系统,因为协议族的定义以及其多种实现可以不用花钱或花很少的钱就可以公开地得到。

分层

网络协议通常分不同层次进行开发,每一层分别负责不同的功能。一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。

每一层负责不同的功能

  1. 链路层:也被称为数据链路层和网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们用于处理物理接口细节。
    2 ) 网络层:也称作互联网层,处理分组在网络中的活动,例如分组的选路。网络层包括IP协议,ICMP协议,以及IGMP协议
  2. 运输层:主要为两台主机提供可靠的数据通信。工作主要是把应用程序交给它的数据分成合适的小块然后交给下面的网络层,确认收到的分组,设置发送最后确认分则的超时时钟等。
  3. 应用层:负责处理特定的应用程序细节。几乎不同的TCP/IP实现都会提供下面的这些通用应用程序:
1
2
3
4
- Telnet 远程登录
- FTP 文件传输协议
- SMTP 简单邮件传送协议
- SNMP 简单网络管理协议

下图是局域网上运行FTP的两台主机

网络接口层和应用层的目的是很显然的-前者处理有关通信媒介的细节(以太网、令牌环网等),后者处理某个特定的应用程序(FTP、Telnet等)。表面上看网络层和运输层的区别并不明显,但是当我们把视野从单个网络转向到一组网络就能看到它们的区别。
多个网络通过路由器连接,这是一种特殊的硬件盒子。用于为不同类型的物理网络提供连接:以太网、令牌环网、点对点的连接和FDDI等等。
下图是一个包含两个网络的互联网:一个以太网和一个令牌环网

图中划分出端系统( End system )(两边的两台主机)和中间系统(Intermediate system)(中间的路由器)。应用层和运输层使用端到端( End-to-end)协议。
在TCP/IP协议中,网络层IP提供的是一种不可靠的服务。但是TCP在IP层上提供了一个可靠的运输层。为了提供这种可靠的服务,TCP采用了超时重传、发送和接收端到端的确认分组等机制。由此可见,运输层和网络层分别负责不同的功能。

TCP/IP的分层

在TCP/IP协议族中,有很多种协议

TCP和UDP是两种最为著名的运输层协议,二者都使用 IP作为网络层协议。虽然TCP使用不可靠的IP服务,但是它提供了一种可靠的运输层服务。
UDP为应用程序发送和接收数据报,一个数据报是指从发送方传输到接收方的一个信息单元,但是UDP是不可靠的,他不能保证数据报能安全无误地到达目的地。

IP是网络层上的主要协议,同时被 TCP和UDP使用。TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。
ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。
IGMP是Internet组管理协议。它用来把一个 UDP数据报多播到多个主机。ARP(地址解析协议)和 RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换 IP层和网络接口层使用的地址。

互联网的地址

互联网上的每个接口必须有一个唯一的 Internet地址(也称作 IP地址)。IP地址长 32 bit。Internet地址并不采用平面形式的地址空间,如 1、2、3等。IP地址具有一定的结构,下图展示了五类不同的互联网地址的格式:
这些3 2位的地址通常写成四个十进制的数,其中每个整数对应一个字节。这种表示方法称作“点分十进制表示法(Dotted decimal notation)”。
下图为各类地址的范围:

域名系统

在 TCP/IP领域中,域名系统( DNS)是一个分布的数据库,由它来提供 IP地址和主机名之间的映射信息。

封装

当应用程序用 TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息)
如下图所示:

以太网数据帧的物理特性是其长度必须在 46~1500字节之间。UDP数据与 TCP数据基本一致。唯一的不同是UDP传给 IP的信息单元称作 UDP数据报(UDP datagram),而且UDP的首部长为8字节。
IP在首部中存入一个长度为8bit的数值,称作协议域。 1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议。

分用

当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。
下图展示了这个过程:

客户-服务器模型

大部分网络应用程序在编写时都假设一端是客户,另一端是服务器,其目的是为了让服务器为客户提供一些特定的服务。

端口号

TCP和UDP采用16bit的端口号来识别应用程序。服务器一般都是通过知名端口号来识别的,客户端通常对它所使用的端口号并不关心,只需保证该端口号在本机上是唯一的就可以了。

应用编程接口

使用TCP/IP协议的应用程序通常采用两种应用编程接口( API):socket和TLI(运输层接口:Transport Layer Interface)。前者有时称作“Berkeley socket”,表明它是从伯克利版发展而来的。后者起初是由 AT & T开发的,有时称作 XTI(X/Open运输层接口),以承认 X/Open这个自己定义标准的国际计算机生产商所做的工作。 XTI实际上是TLI的一个超集。

上一篇:
TCP/IP详解 卷一 链路层
下一篇:
linux docker安装jaeger