网络协议粗略复习记录

[TOC]


重新看了点《TCP/IP详解》,粗略的把知识归纳下.

关于分层

网络分层让我很糊涂,有四层协议,五层协议,还有七层协议的.

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

TCP/IP通常被认为是一个四层协议系统,当然也有人将其分为五层协议的,貌似这么分好像也合理,因为物理设备也确实不能少,还有理论上的OSI七层模型:

越下面的层,越靠近硬件;越上面的层,越靠近用户.

至于每一层叫什么名字,其实并不重要,每一层都是为了完成一种功能.

为了实现这些功能,就需要大家都遵守共同的规则,而大家都遵守的规则,就叫做协议(protocol).

关于协议

网络的每一层,都定义了很多协议.而TCP/IP协议是一个统称,它是一个大家族,不仅仅只有TCP协议和IP协议,它还包括其它的协议,如:

物理层

常见介质有铜绞线、光缆、无线介质(电磁波、微波、红外线)

物理层主要负责基本的信息传输以及传输控制工作。
人们可以使用电线来进行传输,也可以使用光纤来进行传输,甚至可以是无线电磁波.
对于不同的介质,产生的信号也是不同的,物理层就是要规定介质和信号的规范.

常见接口规范:
RS-232(串口)、FDDI、IEEE802.3z、IEEE802.3ae、IEEE802.11

链路层

使用物理连接后的设备,通过高低频的电子信号传输信息,然后接收端的设备通过特定的算法识别这些信号.早期的时候,每家公司都有自己的电信号分组方式,十分混乱,由此成立了 IEEE 802委员会 来制定数据由物理层到链路层相关的一系列标准.再之后,IEEE802系列标准中叫做 802.3 “以太网”(Ethernet)RFC 894的协议,逐渐地占据了主导地位.

以太网协议规定:
1. 一组电信号构成一个数据包,叫做”帧”(Frame).每一帧分成两个部分: 标头(Head),数据(Data),尾部校验(CRC).
2. “标头”包含数据包的一些说明项,包括目的地址(6字节),源地址(6字节),类型(2字节).其总长度固定为 14 字节,.
3. “数据”则是数据包的具体内容,其最短为 46 字节,而最长为 1500 字节.数据长度不足最短要求则在后面补位,超过最长则分片.
4. “尾部校验”用于帧内后续字节差错的循环冗余码检验(检验和)(它也被称为FCS或帧检验序列),长度固定为 4 字节.
5. 一个完整的”帧”最短为 64 字节,最长为 1518 字节;如果数据很多,就必须分割成多个帧进行发送.
6. 连入网络的所有设备都必须具有”网卡”接口.数据包必须是从一块网卡传送到另一块网卡,而网卡的地址就是数据包的目的地址和源地址,叫做 MAC 地址.

当然,除了以太网协议,还有其他的协议,比如帧中继,CSMA/CD,HDLC协议以及常见的PPP协议等.

MAC:

在标头中的源地址和目的地址是指网卡的硬件地址,也叫 MAC 地址,长度都是48位,在设备出厂的时候就固化的,当然也可以虚拟生产.

MTU:

以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节.链路层的这个特性称作 MTU (最大传输单元).不同类型的网络大多数都有一个上限。MTU并非指的是网络媒体的物理特性,它是一个逻辑限制,目的是为交互使用提供足够快的响应时间.

在两个主机相互通信时,该网络的 MTU 是非常重要的.如果主机间的通信需要通过多个网络,则每个网络可能会有不同的 MTU ,而这个通信网络路径中最小的一个 MTU 则称之为路径MTU,通常可以用ping命令来检测路径 MTU 值.

网络层

如果说链路层的MAC地址是在当前域里标识设备传输口的惟一身份,那网络层的主要目是使得我们能够让不同域的设备进行跨域传输,因此需要引进一套新的地址,这套地址就叫做”网络地址”.

此时每台计算机便有了两种地址:一种便是链路层 MAC 地址,另一种则是该层的网络地址. 两种地址之间可以没有任何联系,MAC 地址是绑定在传输口上的,网络地址则是当前网络的管理服务分配的,它们可以随机或根据规则组合在一起.

由网络地址帮助我们确定计算机所在的目标网络,MAC 地址则将数据包送到该子网络中的目标设备.

在基于以太网协议的网络层中的协议有:IP,ICMP,IGMP等,其中应用最广泛的则是IP协议.

网络层的 IP协议

IP(Internet Protocol)即网际协议. IP 协议提供的一种统一的 IP 地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异. IP 地址是 TCP/IP协议栈 里的网络层地址方案,IP地址是一种用来对网络设备的逻辑标识.

目前,广泛采用的是 IP 协议第四版,简称 IPv4. 这个版的TCP/IP中规定每个 IP 地址都是 32bit ,取值范围也就是 2 的 32 次方,共有 4294967296 个 IP 地址. 每个 IP 地址都分成四段,每段 8 bit.如果换算成十进制,每段的取值范围是从0~255.

IP地址的分类
IP地址大致分成了5类,范围分别如下:

  • A 类 IP:从0.0.0.0 – 127.255.255.255

  • B 类 IP:从128.0.0.0 – 191.255.255.255

  • C 类 IP:从192.0.0.0 – 223.255.255.255

  • D 类 IP:从224.0.0.0 – 239.255.255.255

  • E 类 IP:从240.0.0.0 – 255.255.255.255

其中:

  • A, B, C 这三类 IP 地址是给用户使用的

  • D 类 IP 地址是组播协议使用

  • E 类 IP 地址保留,供科研机构使用.

需要注意的是,IP地址的分类这些年一直在更新.

判断两个主机在不在同个网络中则需要用子网掩码(Subnet Mask),IP 地址和子网掩码中 1 通过与(&)运算即可得到子网 ID, IP 地址和子网掩码中 0 通过或(|)运算即可得到主机 ID .

IP数据包的格式

根据 IP 协议发送的数据,就叫做 IP 数据包.IP数据包存在于以太网数据包的数据部分,并且 IP 数据包也分为”标头”和”数据”两个部分.

IP 数据包的”标头”部分的长度为 20 到 60 字节,里面有版本/长度/IP地址等信息,整个数据包的总长度最大为 65535 字节. 理论上,一个 IP 数据包的”数据”部分,最长为 65515 字节. 而以太网数据帧的”数据”部分最长只有 1500 字节.因此,如果 IP 数据包超过了 1500 字节看,它就需要分割成多个以太网数据帧,分开发送.

传输层

如果使用网络层的IP,则设备有了 MAC 地址和 IP 地址,理论上设备之间已经可以建立跨域的网络通信了.但一台主机上有许多进程(程序)都需要连接网络进行通信,那么接收到的数据如何进行区分呢?

因此还需要有另外的协议来负责区分和管理不同进程发送与接受的数据,所以就有传输层协议。

如基于网络层协议中IP的TCP与UDP,其在IP地址上虚拟划分了端口.

端口号是 0 到 65535 之间的一个整数.大小占 16 个二进制位. 其中 0 到 1023 的端口默认保留给系统使用, 用户通常只能选用大于 1023 的端口.并且端口号 0 是一个强制预留的端口号,它在TCP或者UDP网络传输中不会被用到,因为 Unix Socket 编程中, 端口号 0 是由系统指定动态生成的端口.

一个端口仅可被一个进程绑定Linux Kernel >=3.9 可支持设定SO_REUSEPORT以供单端口复用到多个进程,一个进程可绑定数个端口,每个数据包都会发到IP地址上的特定端口,不同的程序就能取到自己所需要的数据.

打个比喻,IP地址就像是小区内的一栋楼房的标号,端口就像是一栋楼里的房间号,程序就像是房间里的住户.

传输层的协议有TCP,UDP,SPX,NetBIOS等,其中TCPUDP是两种最为常用的传输层协议,二者都使用IP协议作为网络层的协议.

传输层UDP协议

UDP(User Datagram Protocol) 数据包也是由”标头”和”数据”两部分组成.

标头部分主要定义了源端口号(2字节),目的端口号(2字节),UDP长度(2字节),UDP校验和(2字节),一共只有 8 个字节;数据部分就是具体的内容.总长度不超过 65535 字节,正好放进一个 IP 数据包.

UDP协议不面向连接,也不保证传输的可靠性,发出一个包,丢了就是丢了.

传输层TCP协议

TCP(Transmission Control Protocol) 数据包和 UDP 数据包一样都存在于 IP 数据包的数据部分.其主要区别是TCP是可靠的连接,能保证双方的数据不会丢失,但同时也消耗了较多的资源.

TCP的格式也是由”标头”和”数据”两部分组成,标头最长可以是60字节,最短20字节.数据部分没有长度限制,理论上可以无限长.但是为了保证网络的效率,通常 TCP 数据包的长度不会超过 IP 数据包的长度,以确保单个 TCP 数据包不必再分割.

应用层

这一层的协议就广泛了,每个程序传输的数据都可以有自己的数据格式.常见的由 HTTP/HTTPS协议, FTP协议, SMTP协议等等,基本上都是基于传输层的 TCP 或 UDP 协议而实现的.