目录
TCP/IP四层协议簇
TCP/IP四层协议簇是目前世界上最流行的网络协议分层方式,本篇文章我将带大家从上到下详解四层协议中遇到的常见协议以及协议的约定格式,带大家领略一条数据是怎样由网络从一台机器传输到另一台机器的。
发送数据报时,发送端主机都需要先根据网络分层从上到下封装:
- 应用层:应用程序基于 HTTP 协议封装
- 传输层:操作系统基于 TCP/UDP 协议封装(包含源端口和目的端口)
- 网络层:操作系统基于 IP 协议封装(包含源IP和目的IP)
- 数据链路层层:操作系统基于以太网帧封装(包含源MAC和目的MAC)
1.应用层
DNS
DNS ,即 Domain Name System ,域名系统。 DNS 是一整套从域名映射到 IP 的系统。
TCP/IP 中使用 IP 地址来确定网络上的一台主机,但是 IP 地址不方便记忆,且不能表达地址组织信息,于是人们发明了域名 ,并通过 域名系统 来映射域名和 IP 地址。如 www.baidu.com便是一个域名。
网络通信发送数据时,如果使用目的主机的域名,需要先通过 域名解析 查找到对应的 IP 地址:
- 域名解析的过程,可以简单的理解为:发送端主机作为域名系统树形结构的一个子节点,通过域名信息,从下到上查找对应IP地址的过程。如果到根节点(根域名服务器)还找不到,即找不到该主机。
- 域名解析使用DNS****协议来传输数据。DNS协议是应用层协议,基于传输层UDP或TCP协议来实现。
NAT
NAT技术源自于IPV4的地址数量不足的问题,因为IPV4设计之初没有考虑到今天的网络设备会如此丰富,IPV4只有32位,因为网络传输的规则意味着只有2的32次方台设备才能接入网络,多出来的设备无法接入互联网。
NAT 技术当前解决 IP 地址不够用的主要手段,是路由器的一个重要功能:
- NAT能够将私有IP对外通信时转为全局IP。也就是就是一种将私有IP和全局IP相互转化的技术方法:
- 很多学校,家庭,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP;
- 全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的;
NAT IP转换过程
NAPT
如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP 都是相同的。那么 NAT 路由器如何判定将这个数据包转发给哪个局域网的主机呢?
这时候 NAPT 来解决这个问题了。使用 IP+port 来建立这个关联关系
这种关联关系也是由 NAT 路由器自动维护的。例如在 TCP 的情况下,建立连接时,就会生成这个表项;在断开连接后,就会删除这个表项。
NAT技术存在的缺陷:
由于 NAT 依赖这个转换表,所以有诸多限制:
- 无法从NAT外部向内部服务器建立连接;
- 转换表的生成和销毁都需要额外开销;
- 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开;
HTTP/HTTPS
HTTP和HTTPS是WEB开发的重点协议,主要用于统一各公司服务器和浏览器信息传输的一个约定,我们通过浏览器访问的众多网站大都是满足HTTP/HTTPS协议的,HTTPS是HTTP协议的加密版本,具体的HTTP和HTTPS协议详细内容我将会在接下来的博客进行详细讲解。
2.传输层
负责数据能够从发送端传输接收端。
TCP协议
TCP ,即 Transmission Control Protocol ,传输控制协议。见名思意,要对数据的传输进行一个详细的控制。
TCP协议段格式如下:
协议格式各模块含义如下:
- 源/目的端口号:表示数据是从哪个进程来,到哪个进程去;
- 32位序号/32位确认号:下面博客讲解;
- 4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最大长度是15 * 4 = 60
- 6位标志位:
URG :紧急指针是否有效
ACK :确认号是否有效
PSH :提示接收端应用程序立刻从 TCP 缓冲区把数据读走
RST :对方要求重新建立连接;我们把携带 RST 标识的称为 复位报文段
SYN :请求建立连接;我们把携带 SYN 标识的称为 同步报文段
FIN :通知对方,本端要关闭了,我们称携带 FIN 标识的为 结束报文段
-
16位窗口大小:下篇博客讲解;
-
16位校验和:发送端填充,CRC校验。接收端校验不通过,则认为数据有问题。此处的检验和不光包含TCP首部,也包含TCP数据部分。
-
16位紧急指针:标识哪部分数据是紧急数据;
-
40字节头部选项:下篇博客讲解;
UDP协议
UDP(即User Datagram Protocol,用户数据报协议)是在一组互连的计算机网络环境中提供分组交换计算机通信的数据报模式。UDP为应用程序提供了一种以最少的协议机制向其他程序发送消息的过程。该协议是面向事务的,不保证传递和重复保护。需要有序、可靠地传输数据流的应用程序应使用传输控制协议 (TCP)。
UDP协议端格式:
- 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度;
- 如果校验和出错,就会直接丢弃;
UDP协议的特点:
- **无连接:**知道对端的IP和端口号就直接进行传输,不需要建立连接;
- **不可靠:**没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息;
- **面向数据报:**应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并;用UDP传输100个字节的数据:如果发送端一次发送100个字节,那么接收端也必须一次接收100个字节;而不能循环接收10次,每次接收10个字节。
- **缓冲区:**UDP只有接收缓冲区,没有发送缓冲区:UDP没有真正意义上的 发送缓冲区。发送的数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作;UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃;UDP的socket既能读,也能写,这个概念叫做 全双工。
- **大小受限:**UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部)。
基于UDP的应用层协议:
- NFS:网络文件系统
- TFTP:简单文件传输协议
- DHCP:动态主机配置协议
- BOOTP:启动协议(用于无盘设备启动)
- DNS:域名解析协议
TCP/UDP****对比:
- TCP用于可靠传输的情况,应用于文件传输,重要状态更新等场景;
- UDP用于对高速传输和实时性要求较高的通信领域,例如,早期的QQ,视频传输等。另外UDP可以用于广播;
3.网络层
在复杂的网络环境中确定一个合适的路径。
IP协议
协议头格式如下:
具体解释如下:
- 4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4。
- 4位头部长度(header length):IP头部的长度是多少个32bit,也就是 length * 4 的字节数。4bit表示最大的数字是15,因此IP头部最大长度是60字节。
- 8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。
- 16位总长度(total length):IP数据报整体占多少个字节。
- 16位标识(id):唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的。
- 3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为1,其他是0。类似于一个结束标记。13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。
- 8位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数。一般是64。每次经过一个路由,TTL -= 1,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环。
- 8位协议:表示上层协议的类型。
- 16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏。
- 32位源地址和32位目标地址:表示发送端和接收端。
- 选项字段(不定长,最多40字节)
4.数据链路层
以太网
"以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等。
以太网的帧格式如下所示:
- 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的;
- 帧协议类型字段有三种值,分别对应IP、ARP、RARP;
- 帧末尾是CRC校验码。
ARP协议
ARP不是一个单纯的数据链路层协议,而是一个介于数据链路层和网络层之间的协议。
ARP 协议的作用
ARP 协议建立了主机 IP 地址 和 MAC 地址 的映射关系。
- 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
- 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
- 因此在通讯前必须获得目的主机的硬件地址;
MAC 地址,即 Media Access Control Address ,用于标识网络设备的硬件物理地址。
- 主机具有一个或多个网卡,路由器具有两个或两个以上网卡;其中每个网卡都有唯一的一个MAC地址。
- 网络通信,即网络数据传输,本质上是网络硬件设备,将数据发送到网卡上,或从网卡接收数据。
- 硬件层面,只能基于MAC地址识别网络设备的网络物理地址。
- MAC地址用来识别数据链路层中相连的节点;
- 长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
- 在网卡出厂时就确定了,不能修改。虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址
总结IP地址和MAC地址:
- IP地址描述的是路途总体的起点和终点;是给人使用的网络逻辑地址。
- MAC地址描述的是路途上的每一个区间的起点和终点,即每一跳的起点和终点;是给网络硬件设备使用的网络物理地址。