第一章 概述
分层
TCP/IP 通常被认为是一个四层协议系统. 每一层负责不同的功能.
链路层, 也成为数据链路层或者网络接口层. 通常包括 操作系统中的设备驱动程序和计算机中对应的网络接口卡. 主要处理与电缆(或其他传输介质)的物理接口细节.
- 网络层, 互联网层, 处理分组在网络中的活动,例如分组的选路. 主要包括协议有 : IP协议(网际协议) ICMP协议(Internet互联网控制报文协议) IGMP协议(Internet组管理协议)
-
运输层, 主要为两台主机上的应用程序提供端到端的通信. 主要包括协议有 : TCP协议(传输控制协议) UDP协议(用户数据包协议)
- TCP协议 : 把应用程序交给他的数据分成小块交给下面的网络层, 提供高可靠性的数据通信.
- UDP协议 : 只是把成为数据报的分组从一台主机发送到另一台主机, 但并不担保数据包能到达另一端.任何必须的可靠性必须有应用层来提供.
-
应用层, 负责处理特定的应用程序细节. 几乎各种不同的 TCP/IP 实现都会提供如下通用的应用程序 :
- Telnet 远程登录
- FTP 文件传输协议
- SMTP 简单邮件传输协议
- SNMP 简单网络管理协议.
应用程序通常是一个用户进程, 而下三层的则一般在(操作系统)内核中执行.尽管这不是必须的, 但通常都是这样处理,如 UNIX操作系统.
应用层关心的是应用程序的细节,而不是数据在网络中的传输活动; 下三层对应用程序一无所知, 但是他们要处理所有的通信细节.
网络接口层处理有关通信媒介的细节(以太网,令牌环网等); 应用层则处理某个特定的用户应用程序(FTP,Telnet).
构建互联网最简单的方法是把两个或者多个网络通过路由器进行连接. 路由器是一种特殊的用于网络互连的硬件盒. 路由器的好处是为不同类型的物理网络提供链接:以太网,令牌环网,点对点的链接和FDDI(光纤分布式数据接口)等.
在 TCP/IP 协议族中, 网络层IP提供的是一种不可靠的服务, 即 他只是尽可能快的把分组从源节点发送到目的节点, 但是并不提供任何可靠性保证. 而 TCP 则不可靠的IP层上提供了一个可靠谱的传输层, 为了提供这种可靠的服务, TCP 采用了超时重传,发送和接受端到端的确认分组等机制.
互联网的目的之一是在应用程序中隐藏所有的物理细节.
网桥与路由器
路由器 : 在网络层对网络进行互联. TCP/IP倾向于使用路由器而不是网桥来连接网络.
网桥 : 在链路层上对网络进行互联, 使得多个局域网组合在一起.
TCP/IP分层
TCP/IP 是两种最为著名的运输层协议, 两者都使用IP作为网络层协议.
TCP 协议 : 17~22 章 . 26 telnet, 27 ftp, 28 SMTP.
UDP 协议 : 11 UDP, 14 DNS, 15 TFTP, 16 BOOTP, 25 SNMP
IP 协议 : 3 IP, 9 10 IP 选路.
ICMP 协议 : 6, 7 ping, 8 traceroute
IGMP 协议 : 12 广播/多播, 13 IGMP
ARP 协议 : 4
RARP 协议 : 5
IP 地址分类
IP 地址长 32 bit, 一般采用点分十进制表示, 如 192.168.1.1
三类IP地址
- 单播地址 : 目的端为单个主机;
- 广播地址 : 目的端为给定网络上的所有主机;
- 多播地址 : 目的端为同一组内的所有主机.
域名系统
在 TCP/IP 领域中, 域名系统(DNS) 是一个分布的数据库, 它用来提供IP地址和主机名之间的映射关系.
任何应用程序都可以调用一个标准的库函数来查看规定名字的主机的IP地址, 类似的, 系统还提供一个逆函数, 给定主机的IP地址, 查看它所对应的主机名.
封装
当应用程序用TCP传送数据时, 数据被送入协议栈中, 然后逐个通过每一层直到被当作一串比特流送入网络.其中每一层对收到的数据都要增加一些首部信息(有是还要增阿基尾部信息).
TCP报文段或TCP段, TCP segment : TCP层 --> IP层
IP 数据包, IP datagram : IP层 --> 数据链路层
IP层和网络接口层之间传送的数据单元应该是分组(packet), 分组既可以是一个数据报,也可以是IP数据包的一个片(fragment).
帧(Frame) : 数据链路层, 以太网.
以太网数据帧的物理特性是其长度必须在 46~1500 字节之间.
UDP 数据与TCP数据基本一致, 唯一的不同时 UDP 传给 IP 的信息单元被称作 UDP 数据报, UDP 首部长为 8 字节.
TCP 和 UDP 使用一个 16bit 的端口号,来表示不同的应用程序.
IP 协议域 :TCP,UDP,ICMP,IGMP 都要想 IP 传送数据, 因此 IP 必须在生成 IP 首部加入某种标识, 以表明数据属于那一层. 为此, IP 在首部存入一个长度为 8 bit 的数值, 称为协议域
- 1 表示 ICMP 协议
- 2 表示 IGMP 协议
- 6 表示 TCP 协议
- 17 表示 UDP 协议
帧类型域 : 网络接口分别要发送和接受 IP, ARP 和 RARP 数据, 因此必须在以太网的帧首部中加入某种类型的标识, 以指明生成数据的网络层协议. 为此, 以太网的帧首部有一个 16 bit 的帧类型域.
分用(解包)
当目的主机收到一个以太网数据帧时, 数据就开始从协议栈中由底向上升, 同时去掉各层协议加上的报文首部. 每层协议盒都要去检查报文首部中的协议标识, 以确定接受数据的上层协议. 这个过程称为 分用. 如下图所示
- ICMP 和 IGMP 报文都被封装在IP数据报中.
- ARP 和 RARP 与 IP数据报一样, 有各自的以太网数据帧类型.
客户端-服务器模式
大部分网络应用程序都是客户端-服务器模式, 其目的是为了让服务器为客户提供一些特定的服务, 这种服务可以分为两种类型:
-
重复型
重复型通过如下步骤进行交互:
① 等待一个客户请求到来;
② 处理客户请求
③ 发送响应会发送请求的客户端
④ 返回 步骤①
重复型服务器在 ② 的状态时, 不能为其他客户机提供服务. -
并发型
并发型采用以下步骤:
① 等待一个客户请求的到来;
② 启动一个新的服务器来处理这个请求, 这期间可能生成一个新的进程,任务或线程, 并依赖底层操作系统的支持. 这个不收如何进行取决于操作系统, 生成新的服务器对客户的全部请求进行处理, 处理结束后,终止这个新服务器.
③ 返回 步骤①
一般来说, TCP服务器是并发的, UDP服务器是重复的, 但也有例外.
端口号
- 知名端口号
1~1023 : 一般有服务器端使用, - 临时端口号
1024~5000 : 一般由客户端使用, 客户端对齐所使用的的端口号并不关心, 只需保证在本机上是唯一且空闲的即可. - /etc/services 保存了人们熟知的端口号.
标准化过程
- Internet 协会 (ISOC, Internet Society)
一个推动、支持和促进 Internet不断增长和发展的专业组织,它把Internet作为全球研究通信的基础设施。 - Internet 体系结构委员会(IAB, Internet Architecture Board)
一个技术监督和协调的机构。它由国际上来自不同专业的 1 5个志愿者组成,其职能是负责 Internet 标准的最后编辑和技术审核。IAB隶属于ISOC。 Internet 工程专门小组(IETF, Internet Engineering Task Force)
是一个面向近期标准的组织,它分为9个领域(应用、寻径和寻址、安全等等)。IETF 开发成为 Internet 标准的规范。为帮助IETF主席,又成立了 Internet工程指导小组(IESG, Internet Engineering Steering Group)。Internet 研究专门小组(IRTF, Internet Research Task Force)
RFC (Request for Comment)
有关 Internet 的正式标准都已 RFC 文档出版, 另外, 大量的 RFC 并不是正式的标准, 出版的目的只是为了提供信息. 每一项都用一个数字来标识, 如 RFC 1122 , 数字越大说明 RFC 的内容越新.
部分重要的 RFC 文档
赋值 RFC (Assigned Numbers RFC) : 列出了所有 Internet 协议中使用的数字和常数. 所有著名的 Internet 端口号都列在这里.
-
Internet 正式协议标准, 目前是 RFC 1600 : 描述了各种 Internet 协议的标准化现状.
每种协议都处于下面几种标准化状态之一:
① 标准
② 草案标准
③ 提议标准
④ 实验标准
⑤ 信息标准
⑥ 历史标准
每种协议都有一个要求的层次:
① 必须的
② 建议的
③ 可选择的
④ 限制使用
⑤ 不推荐的 主机需求RFC, 1122,1123
RFC 1122 : 针对 链路层, 网络层,传输层
RFC 1123 : 针对 应用层.
RFC 1127 : 对工作小组开发主机需求 RFC 过程中的讨论内容和结论进行了非正式的总结.路由器需求RFC RFC 1009
RFC1009 描述 路由器 的需求.
标准的简单服务
有一些标准的简单服务几乎每种(TCP/IP)实现都要提供.
名字 | TCP 端口号 | UDP 端口号 | RFC | 描述 |
---|---|---|---|---|
echo | 7 | 7 | 862 | 服务器返回客户发送的所有内容 |
discard | 9 | 9 | 863 | 服务器丢弃客户发送的所有内容 |
daytime | 13 | 13 | 867 | 服务器以可读形式返回日期和时间 |
chargen | 19 | 19 | 864 | 当客户发送一个数据时, TCP 服务器发送一串连续的字符流,直达客户终端连接.UDP 服务器发送一个随机长度的数据报 |
time | 37 | 37 | 868 | 服务器返回一个二进制形式的 32 bit 数,表示从 UTC 时间 19900101 午夜至今的秒数 |
互联网
internet 这个词第一个字母是否大写决定了它具有不同的含义.
- internet : 用一个共同的协议族把多个网络连接在一起.
- Internet : 值世界范围内通过 TCP/IP 相互通信的所有主机的集合.
Internet 是一个 internet, 但 internet 不等于 Internet
实现
慢启动 :
拥塞控制 :
快速重传 :
快速回复 :
TCP 头部预测 :
SLIP头部压缩 :
路由表修改 :
多播 :
长肥管道修改 :
应用编程接口
使用 TCP/IP 协议的应用程序通常采用两种应用编程接口 :
- socket : 从 伯里克版本发展而来.
- TLI(Transport Layer Interface,运输层接口) : 由 AT&T 开发, 有时成做 XTI(X/Open 运输层接口), 以承认X/Open 这个自己定义标准的国际计算机生产商所做的工作. XTI 实际上是TLI的一个超集.
Q&A
什么是端到端协议?
端到端通信 是针对传输层来说的,
它是一个网络连接, 应为网络之间的通信必须要建立链接,实现应用程序之间的通信, 不需要知道底层是如何传输的. 实际上他是一条逻辑链路, 这条逻辑链路可能经过了很复杂的物理线路.
端到端通信是指在数据传输前, 经过各种各样的交换设备, 在两端设备间建立一条链路(在这连段之间不管有多少其他设备都忽略), 就像他们是直接连接的一样, 链路建立后, 发送端就可以发送数据, 直至数据发送完毕,接收端确认接收成功.
优点 :
① 链路建立后,发送端知道接收设备一定能接收到, 而且经过中间交换设备时, 不需要进行存储转发,因此, 传输延迟小.
缺点 :
① 知道接端收到数据为止, 发送端的设备一直要参数传输. 如果整个传输的延迟很长, 那么对发送段的设备将造成很大的浪费.
② 如果接受设备关机或者故障, 那么端到端传输不可能实现.
什么是逐跳协议?
点到点通信是针对数据链路层或者网络层来说的.
点对点是基于MAC地址或者IP地址, 是指一个设备发送数据到另外一个设备, 这些设备是指直连设备(即直接链接的设备), 包括网卡,路由器,交换机.
点对点通信指发送段把数据传给与他直接连接的设备,这台设备在合适的时候,又把数据传给与之直接相连的下一台设备, 通过一台一台直接连接的设备,被数据传送到接收端.
优点 :
① 发送端设备送出数据之后, 他的任务已经完成, 不需要参与整个传输过程. 这样不会浪费发送端设备的资源.
② 即使接收端设备关机或者故障, 点到点传输也可以采用存储转发技术进行缓存.
缺点 :
① 发送端发出数据后, 不知道结束段是否收到或何时能收到数据.
举例总结
例如, 将数据从 A 传输到 E ,中间经过 A -> B -> C -> D -> E,
对于传输层来说, 他并不知道 B,C,D 的存在, 它只认为报文数据是从 A 直接到 E 的, 此即为 端到端通信.
对于数据链路层或网络层来说, 数据报是要先从 A -> B, 在从 B -> C, 接着 C -> D, D -> E , 按着顺序把数据报传输到目的端 E, 这些传输过程 A->B,B->C,C->D,D->E 实现的是两点之间直接相连接设备之间的通信, 即为点到点通信. 即 端到端通信可能是多个点到点通信实现的.
在一个网络系统的不同分层中, 可能用到 端到端传输, 也可能用到点到点传输.