为了方便交流,人类发明了语言,约定了每个汉字符号代表的意思。同理,为了机器之间的交流,我们也需要一些“约定”,我们称这些约定为“协议”。

在互联网中,所有的计算机都是由 路由器和交换机 连接到一起的。计算机之间的传输媒介是光信号和电信号。通过“频率”和“强弱”来表示 0 和 1 这样的信息。要想传递不同的信息,就需要约定好双方的数据格式。

OSI七层协议

分层名称 功能 每层功能概述
应用层 针对特定应用的协议 针对每个应用的协议:
电子邮件(电子邮件协议),
远程登陆(远程登录协议)
表示层 设备固有的数据格式和
网络标准数据格式的转化
接受不同表示形式的信息,
如文字流,图像等
会话层 通信管理。负责建立和断开通信连接
(数据流动的逻辑通路)。管理传输层以下的分层
何时建立连接,何时断开连接?保持多久的连接?
传输层 管理两个节点之间的数据传输。
负责可靠传输(确保数据被可靠地传送到目标地址)
是否有数据丢失?
网络层 地址管理与路由选择 经过哪个路由传递到目标地址?
数据链路层 互联设备之间传送和识别数据帧 数据帧与比特流之间的转换
物理层 以“0”“1”代表电压的高低,灯光的闪灭。
界定连接器和网线的规格
比特流与电子信号之间的转换

TCP/IP五层模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇,是常用的网络协议,所以要记住每一层及其含义。

TCP/IP协议通讯采用了5层的层级结构,每一层都呼叫它的下一层所提供的的网络来完成自己的需求。

分层名称 描述 设备 常用协议
物理层 负责光/电信号的传递方式,
比如现在以太网通用的网线(双绞线),
早期以太网采用的同轴电缆(现在主要用于有线电视),
光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。
物理层的能力决定了最大传输速率,传输距离,抗干扰性等。
集线器(Hub)工作在物理层 硬件
数据链路层 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动,帧同步(就是说从网线上检测到什么信号算作新帧的开始),冲突检测(如果检测到冲突就自动重发),数据差错校验等工作 交换机(Switch) 以太网,令牌环网,无线LAN等标准
网络层 负责地址管理和路由选择,例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由) 路由器(Router) ARP, IP, ICMP
传输层 负责两台主机之间的数据传输,如传输控制协议(TCP),能够确保数据可靠地从源主机发送到目标主机 TCP, UDP, UDP-Lite,
SCTP, DCCP
应用层 负责应用程序之间沟通,如简单电子邮件传输(SMTP),文件传输协议(FTP),网络远程访问协议(Telnet) DNS, URI,HTML,
HTTP,TLS/SSL,SMTP,
POP,IMAP,MIME,
TELNET,SSH,FTP,
SNMP,MIB,SIP,RIP,LDAP

数据包封装和分用

  • 在不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在数据链路层叫做帧(frame)
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)
  • 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理。
封装过程


如上图所示:应用层的一段数据,经过逻辑封装,TCP封装,IP封装,帧封装,然后从网卡出去;接收端则是逆过程。其中TCP及以下的封装,一般不需要我们自己动手,仅考虑应用层的封装即可。

对于应用层的封装来说,有两种方法:
1、设置Appl首部。“用户数据”就是你实际要发送的数据,比如我们打算发送一个字符串:”asdfgh”,Appl首部就是你自己设计的一个包结构,比如在Appl首部里面设计一个4个字节的int数据,用来表示后面内容的长度:那么当你发送”asdfgh”的时候,Appl首部里面就是这个字符串的长度6,接收端先接受4个字节,得到长度,再按照长度接受内容。
2、另一种方法是在用户数据末端加上“结束标志”,http协议就是这么干的,用**\r\n\r\n**表示一段内容结束(当然你也可以选择其他的特定字符作为结束标志)。那么当你发送”asdfgh”的时候,其实就是发送”asdfgh\r\n\r\n”,接收端接受数据,遇到\r\n\r\n结束接受一段数据。

分用过程