引言
TCP/IP起源于60年代美国政府资助的一个分组交换网络研究项目。
下面的说明来自 维基百科:
- 分组交换:在计算机网络和通讯中是一种相对于电路交换的通信范例,分组(又称消息、或消息碎片)在节点间单独路由,不需要在传输前先建立通信路径。
-
电路交换:要求必须首先在通信双方之间建立连接通道。在连接建立成功之后,双方的通信活动才能开始。通信双方需要传递的信息都是通过已经建立好的连接来进行传递的,而且这个连接也将一直被维持到双方的通信结束。在某次通信活动的整个过程中,这个连接将始终占用着连接建立开始时,通信系统分配给它的资源(通道、带宽、时隙、码字等等),这也体现了电路交换区别于分组交换的本质特征。
分层
网络协议通常分为不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如TCP/IP,是一组不同层次上的多个系统的组合。
TCP/IP协议族的四个层次:
- 链路层,有时也称为数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。
- 网络层,也称作互联网层,处理分组在网络中的活动,例如分组的选路。
- 运输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中有:TCP(传输控制协议)提供可靠的通信服务;UDP(用户数据报协议)提供尽力交互的服务,
- 应用层负责处理特定的应用程序细节。
分层的好处是:通过分层提供了不同的抽象,每一层都只需用在自己所在层级上的协议与对端通信,而不需要关注底层的细节。
不同的计算机、网络通过路由器连接起来:
在上图中,应用层和运输层使用端到端(End-to-End)协议,网络层使用逐跳(Hop-by-Hop)协议。
互联网的目的之一是在应用程序中隐藏所有的物理细节。
网桥
网桥是在链路层上对网络进行互联,而路由器是在网络层上对网络进行互联。网桥使得多个局域网(LAN)组合在一起,这样对上层来说就好像是一个局域网。
TCP/IP的分层
互联网的地址
互联网上的每个接口必须有一个唯一的Internet地址(也称作IP地址),长32bit。
按结构有五类IP地址(以不同的前缀划分):
按用途有三类IP地址:单播地址(目的为单个主机)、广播地址(目的端为给定网络上的所有主机)以及多播地址(目的端为同一组内的所有主机)。
域名系统
域名系统(DNS)是一个分布式的数据库,由它来提供IP地址和主机名之间的映射信息。
对于我的博客就在DNS系统里存在一条这样的映射(coderbee.net — 198.56.238.193)。
封装
当应用程序使用TCP传送数据时,数据被送入协议栈中,然后诸葛通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(也可能有尾部信息)。
分用
当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用(Demultiplexing)。
客户-服务器模型
大部分网络应用程序在编写时都假设一端是客户,另一端是服务器,其目的是为了让服务器为客户提供一些特定的服务。
端口号
TCP和UDP采用16bit端口号来识别应用程序。服务器一般都通过知名(惯例的)端口号来识别。任何TCP/IP实现锁提供的服务都用知名的 1 – 1023 之间的端口号。
客户端通常对它所用的端口号并不关心,只需保证端口号在本机上是唯一的就可以了。客户端口号又称作临时端口号。
保留端口号
只有具有超级用户特权的进程才允许给它自己分配一个保留端口号。这些端口号介于 1 – 1023 之间。
欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。