TCP/IP 介绍及名词解释
最近在看 TCP/IP 详解,简单做下笔记,对其中出现的名词做下备注。
TCP/IP 协议族是一组协议,大名鼎鼎的 TCP、UDP、IP 都属于这个协议族, 这个协议族还被称为 Internet 协议族(Internet Protocol Suite)。
Internet 和 internet 大家经常会看到,那么两者有什么区别呢?internet 是指用一个共同的协议族把多个网络连接在一起,Internet 则是特指通过 TCP/IP 协议族连接的所有主机的集合。即可以这样说,Internet 是一个 internet,但 internet 不限于 Internet。
与 OSI 的七层模型不同,TCP/IP 协议族将网络分为四层,对应关系如下:
其中应用层主要实现 Telnet 远程登录、FTP 文件传输协议和 e-mail 等功能;传输层主要实现端到端的通信,包含 TCP、UDP 协议;网络层主要实现点到点的通信,包含网际协议 IP(Internet Protocol)、Internet 互联网控制报文协议 ICMP(Internet Control Message Protocol)、Internet 组管理协议 IGMP(Internet Group Management Protocol);链路层则负责设备驱动程序及接口卡。
TCP、UDP 功能是传输数据,区别主要在于可靠性和一个面向连接,一个无连接。IP 是网络层乃至整个协议族最重要的协议,TCP、UDP、ICMP 和 IGMP 数据都是以 IP 数据报格式传输。ICMP 它提供查询和差错报告,对于维护整个协议族正常工作只管重要。IGMP 主要在广播和多播中起作用。
对于四层模型我一直有个疑问,应用层负责处理某个特定的用户应用程序,链路层负责处理有关通信媒介的细节,二者分工是十分明确的。但网络层和传输层分工就不是很明显,二者分开的原因我认为主要有以下几点:对于一组网络而言,整体上需要端到端的抽象来连接不同网络,在细节上还需要点到点的实现;两者执行功能也不同,网络层提供不可靠服务,仅试图尽快传递分组,传输层则通过某些机制提供较为可靠的服务,因此需要将传输层和网络层进行剥离。
如上面的介绍,互联网即网络的网络。互联网中,每个接口都用 IP 地址来标识,域名系统为主机名和 IP 地址提供了动态的映射。那么网络之间物理连接是怎么实现的呢?主要是利用网桥和路由器。网桥是在链路层对网络进行互连,路由器是在网络层对网络进行互连。
网桥工作在数据链路层,将两个局域网(Local Area Network,LAN)连起来,根据 MAC (Media Access Control)地址来转发帧,可以看作一个“低层的路由器”。网桥以接收、存储、地址过滤与转发的方式实现互连的网络之间的通信。
网桥优点:
1. 过滤通信量,网桥可以使 LAN 中一个网段的各个计算机之间的信息量局限在自身网段内(检测到自身网段的信息不储存,直接丢弃),隔离冲突域;
2. 扩大物理范围,增加 LAN 中的计算机的最大数目;
3. 可以互连物理层不同的网络。
网桥缺点:
1. 增加时延;
2. 没有流量控制功能,在网络负荷较大时可能由于储存空间不够,造成帧丢失;
3. 网桥只适合用户数不太多和信息量不太大的局域网,否则可能产生较大的广播风暴。
在互联网中,设备需要唯一的 ID 来进行区分,这个 ID 就是 IP 地址。IP 地址分为5类,可以用点分十进制方式进行表示,常见的192.168.0.1就是点分十进制的表示方式。
A 类地址:0+网络号(7位)+主机号(24位) 0.0.0.0~127.255.255.255
B 类地址:10+网络号(14位)+主机号(16位) 128.0.0.0~191.255.255.255
C 类地址:110+网络号(21位)+主机号(8位) 192.0.0.0~223.255.255.255
D 类地址:1110+多播组号(28位) 224.0.0.0~239.255.255.255
E 类地址:11110+留待后用(27位) 240.255.255.255~255.255.255.255
对于网络模型和连接方式已经有所了解,那么数据是怎么传输的呢,《TCP/IP 详解》中有这样的一张图,直观的展示了数据的封装过程。
所谓封装就是,协议栈从上到下,每一层对于收到的数据都要增加一些首部信息(有时还要增加一些尾部信息)。eg:TCP 段(TCP segment)——以太网首部+IP 首部+TCP 首部+应用数据+以太网尾部。其逆过程为分用,协议栈从下到上去掉各层协议所加首部,确定接收数据的上层协议的过程。
网络的基础是链路层,链路层主要为 IP、ARP(Address Resolution Protocol)和 RARP(Reverse Address Resolution Protocol)服务。主要有三种:以太网、SLIP 和 PPP。
以太网是当今 TCP/IP 采用的主要局域网技术,采用 CSMA/CD(带冲突检测的载波侦听多路接入,Carrier Sense,Multiple Access with Collision Detection)。硬件地址(MAC 地址)为48 bit 即6字节,IP 地址是32 bit 即4字节。
以太网封装如下:
目的地址、源地址(48 bit 硬件地址)+类型+数据+CRC 校验码
SLIP(Serial Line Internet Protocol,串行线路网际协议)是一种在串行线路上对 IP 数据报进行封装的简单形式。
SLIP 封装如下:
帧封装方法:
1. IP 数据报以 END(0xc0)字符结束,开始处一般也添加一个 END 字符;
2. IP 报文中的 END 字符,连续传输两个字节 0xdb 和 0xdc 来代替,0xdb 为 SLIP 的 ESC 字符;
3. IP 报文中的 SLIP 的 ESC 字符,连续传输两个字节 0xdb 和 0xdd 来代替。
缺陷:
1. 每一段必须知道对方的 IP 地址(没有地址字段);
2. 数据帧中没有类型字段,若一条串行线路用于 SLIP,则不能同时使用其他协议(没有协议字段);
3. 没有校验和,错误只能由上层协议来发现(没有 CRC)。
PPP(Point to Point Protocol,点对点协议)修改了 SLIP 的缺点。
PPP 封装如下:
帧封装方法:
1. 标志+地址+控制+协议+信息+CRC+标志;
2. 标志为 0x7e,信息中所有 0x7e 都要进行转义,0x7d
是转义符,其后紧接着的字符的第6个比特要取补码,实现方式位比特填充(硬件技术);
3. 0x7e 转义为 0x7d 和 0x5e,0x7d 转义为 0x7d 和0x5d,小于 0x20 的32个字符均默认转义。
优势:
1. 支持在单根串行线路上运行多种协议(协议字段)
2. 每一帧都有循环冗余检验(CRC)
3. 可以进行 IP 地址的动态协商 (地址字段)
4. 可以对 TCP 和 IP 的首部进行压缩
5. 链路控制协议可以对多个数据链路进行设置
最后再说下环回接口(Loopback Interface),A 类网络的127.0.0.1一般被设为环回接口,命名为 localhost。一个传给环回接口的 IP 数据报不能在任何网络上出现,输出给自身 IP 地址的数据报都会送到环回接口。
还有一个最大传输单元 MTU,顾名思义是指可容纳数据最大长度。其中重要的是路径 MTU,指两台通信主机路径中的最小 MTU,即其他配置再好也会被差的一个将整体水平拉下来。