第一章 概述
1.分层
TCP/IP协议族分为4层:应用层,运输层,网络层,链路层。
应用层和运输层使用End-to-end协议,提供端到端服务;
网络层提供Hop-by-hop协议,提供点到点服务。

××尽管TCP提供了可靠的服务,但是优秀的程序员在编写程序的时候,应该把TCP的思想运用到应用程序中,考虑超时重传和确认分组等问题,而不完全依赖于TCP的可靠性!
本书将要讨论的TCP/IP族协议:

TCP,UDP都使用IP作为网络层协议。
ICMP是IP协议的附属协议,IP层用它来与其他主机或路由器交换错误报文和其他重要信息,流行的诊断工具ping 和 traceroute 都使用了ICMP。
IGMP是Internet组管理协议,用来把一个UDP数据报【多播】到多个主机。
ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换IP层和网络接口层使用的地址。
2.互联网的地址
5类地址格式:

××多接口主机具有多个IP地址,每个接口都对应一个IP地址。
地址的分配是由 互联网络信息中心(InterNIC) 管理的,InterNIC只分配网络号,主机号的分配由系统管理员来负责。
3.域名系统
IP与域名之间的映射:DNS
4.封装
TCP传给IP的数据单元:TCP报文段(TCP segment);
UDP传给IP的数据单元:UDP数据报(UDP datagram);
IP传给网络接口层的数据单元:IP数据报(IP datagram);
以太网传输的比特流:帧(Frame),以太网帧的长度必须在46到1500字节之间。
数据进入协议栈时的封装过程:

由于TCP,UDP,ICMP,IGMP都要向IP传送数据,所以IP在首部加入一个长度为8bit的数值,称做协议域,1表示ICMP,2表示IGMP,6表示TCP,17表示UDP。
同样的,TCP和UDP用一个16bit的端口号来表示不同的应用程序。
网络接口分别要发送和接收IP,ARP,RARP数据,因此也必须在以太网的帧首部加入16bit的帧类型域。
5.分用
目的主机收到一个以太网数据帧时,数据开始在协议栈中由底往上升,并逐层检查报文首部的协议标识,以确定接收数据的上层协议,同时逐层去掉各协议的首部。
Demultiplexing:

××ICMP和IGMP与IP放在同一层是因为它们是IP协议的附属协议,但是ICMP和IGMP报文都被封装在IP数据报中。
6.Client-Server模型
重复型:一次只能为一台客户机提供服务;
并发型:启动新的服务器来处理请求,允许并发。
一般来说,TCP服务器是并发的,UDP服务器是重复的,但也有例外。
7.端口号
服务器一般使用知名端口号来识别,比如 telnet使用的是23, ftp使用的是21。
客户端通常对它使用的端口号不关心,只需要保证短时间内在本机上是唯一的就好。
大多数UNIX系统的文件/etc/services都包含了人们熟知的端口号,例子:
$ grep telnet /etc/services
$ grep domain /etc/services
1
2
3
1
2
3
保留端口号:介于1~1023之间,只有具有超级用户特权的进程蔡允许给它自己分配一个保留端口号。
8.标准化
有4个小组在负责Internet技术:
1.Internet协会 ISOC;
2.Internet体系结构委员会 IAB;
3.Internet工程专门小组 IETF;
4.Internet研究专门小组 IRIF。
9.RFC
所有关于Internet的正式标准都以RFC(Request for Comment)文档出版。
一些重要的RFC文档:
1.赋值RFC,列出了所有Internet协议中使用的数字和常数;
2.Internet正式协议标准,描述了各种Internet协议的标准化现状;
3.主机需求RFC;
4.路由器需求RFC。
10.标准的简单服务

当使用TCP和UDP提供相同的服务时,一般选择相同的端口号。
××为何它们都是奇数:因为这些端口号是从NCP(网络控制协议,TCP的前身)端口号派生出来的,而NCP是单工的,所以每个应用程序需要两个连接,需预留一对奇数和偶数端口号,而对于TCP和UDP,每个应用程序只需要一个端口号,所以就使用了NCP中的奇数。
11.互联网
internet: 用一个共同的协议族把多个网络连接在一起;
Internet:世界范围内通过TCP/IP互相通信的所有主机集合。
Internet是一个internet,但是internet不等于Internet。
12.应用编程接口
使用TCP/IP协议的应用程序通常采用两种应用程序接口:socket 和 TLI(Transport Layer Interface)。
13.总结
TCP/IP协议族分为4层:应用层,运输层,网络层,链路层。
运输层提供端到端服务,网络层提供点到点服务。
一个互联网是网络的网络,其基石是路由器,它们在IP层把网络连在一起。
在互联网上,每个接口都用IP地址来标识,域名系统DNS为主机名和IP地址之间提供动态的映射。
端口号被用来标识互相通信的应用程序,服务器使用知名端口号,客户使用临时设定的端口号。