现在 Internet 使用的主流协议族是 TCP/IP 协议族,它是一个分层、多协议的通信体系。

TCP/IP 协议族体系结构以及主要协议

TCP/IP
协议族是一个四层协议系统,自底面上分别是数据链路层、网络层、传输层和应用层。每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。

数据链路层

数据链路层实现了网卡接口的网络驱动程序,处理数据在物理媒介上的传输。常用的两个协议是 ARP (Address Resoleve Protocol
地址解析协议) 和 RARP (Reverse Address Resoleve Protocol 逆地址解析协议),它们实现了 IP
地址和机器物理地址之间的相互转换。

网络层


网络层实现数据包的选路和转发。由于通信的主机一般不是直接相连的,而是通过多个中间节点(路由器)连接的,网络层的任务就是选择这些节点,以确定通信路径。网络层的核心协议是
IP (Internet Protocol 因特网协议)。另一个重要的协议是 ICMP (Internet Control Message Protocol
因特网控制报文协议),是 IP 协议的重要补充,主要用于检测网络连接,ping 程序就是使用的 ICMP 协议。

传输层

传输层为两台主机上的应用程序提供端对端的通信,主要有三个协议:TCP、UDP、SCTP。

TCP (Transmission Control Protocol 传输控制协议)
为应用层提供可靠的、面向连接的和基于流的服务。使用超时重传、数据确认等方式来确保数据包被正确地发送到目的端,使用前必须先建立连接,内核维持一些连接信息,发送端逐个字节地向数据流(没有边界即长度限制)中写入,接收端逐个字节接收,通信结束时双方必须关闭连接以释放这些内核数据。

三次握手建立连接与四次挥手断开连接



UDP (User Datagram Protocol 用户数据报协议),与 TCP 相反,提供不可靠、无连接和基于数据报的服务,每个数据报都有一个长度。

SCTP (Stream Control Transmission Protocol 流控制传输协议) 是为传输电话号码而设计的,

应用层

应用层负责处理应用程序的逻辑,在用户空间来实现。数据链路层、网络层、传输层负责处理网络通信,这部分在内核空间中实现,必须稳定又高效。

封装


应用程序数据在发送到物理网络上之前,沿着协议栈从上往下依次传递,每层协议都将在上层数据的基础之上加上自己的头部信息,有时包括尾部数据,以实现该层的功能,这个过程就叫做封装。



分用


当帧到达目的主机时,将沿着协议栈自底向上依次传递,各层依次处理帧中本层负责的头部数据以获取所需的信息,并最终将处理后的帧交给目标程序,这个过程称为分用,是依靠头部信息中的类型字段实现的。



arp 协议工作原理

ARP 协议能实现任意网络层地址到任意物理地址的转换,主机向自己所在的网络广播一个 ARP
请求包含目标机器的网络地址,此网络上的其他机器都将收到这个请求,但只有被请求的目标机器会回应一个 ARP 应答,其中包含自己的物理地址。

dns 工作原理

DNS 是一套分布式的域名服务系统,每个 DNS 服务器上存放着大量的机器名和 IP 地址的映射,并且是动态更新的,众多网络客户端程序都是用 DNS
协议来向 DNS 服务器查询目标主机的 IP 地址。

Socket 和 TCP/IP 协议族的关系

Socket 是一套通用网络编程接口,不但可以访问内核中 TCP/IP 协议栈,而且可以访问其他网络协议栈。