一、TCP/IP协议族结构与主要协议
分层:数据链路层、网络层、传输层、应用层
1. 数据链路层
功能:实现网卡驱动程序,处理数据在不同物理介质的传输
协议:
- ARP:将目标机器的IP地址转成MAC地址
- RARP:将MAC地址转成目标的IP
2. 网络层
2.1 概述
功能:数据包的选路与转发。网络层对上层协议屏蔽了网络拓扑连接细节,确定两个主机之间的通讯
协议:
- IP协议,根据数据包的目的IP地址决定如何转发数据;若数据包不能直接转发到目的主机,则选择合适的下一跳
- ICMP协议:用于检测网络连接
2.2 ICMP协议
分类:
- 差错报文:回应网络错误(网络不可达或重定向)
- 查询报文:查询网络信息(ping)
报文格式:
3. 传输层
作用:为两台主机上的应用程序提供端到端的通讯
网络层和传输层的区别:传输层只关心通讯的起始和目的端,不在于中转过程
传输层协议:
- TCP协议:为应用层提供可靠、面向连接和基于流的服务。TCP协议使用超时重传、数据ACK等方式确保数据正确发送到目的端;通信双发需先建立连接,并在内核维护连接的状态、读写缓冲区、定时器等数据结构。TCP协议基于流,发送端可以逐个字节向数据流写入数据;接收端逐个字节解析
- UDP协议:不可靠、无连接、给予数据报的传输协议。使用UDP协议的应用程序需要自己做数据确认、超时重传等逻辑。
- SCTP协议:流控制传输协议
4. 应用层
作用:在用户空间实现,负责众多逻辑(文件传输、名称查询、网络管理)
协议:telnet、DNS、OSPF
二、封装
封装的目的:上层协议使用下层协议服务的方式,发送数据时,应用程序按协议栈从上到下传递数据
名词定义:
- TCP报文段:经过TCP封装后的数据,包含TCP头部信息与TCP内核缓冲区(接收/发送缓冲区)
- UDP数据报:经过UDP封装后的数据。UDP无需为应用层数据保存副本。若应用程序需要实现丢失重传,需要将丢失的数据从用户空间拷贝到UDP内核发送缓冲区
- IP数据报:经过IP层封装后的数据。包含头部信息和数据部分;数据部分为TCP报文段/UDP数据报/ICMP报文
- 帧:经过数据链路层封装后的数据。传输介质不同,帧的类型也不同。
- MTU:帧最大传输单元,帧最多能携带多少上层协议数据。MTU受网络类型的限制,当IP数据报过大时,需要分片传输
过程:
- 发送端调用send/write函数,向TCP链接写入数据
- 内核TCP模块将数据复制到连接对应的TCP内核发送缓冲区
- TCP模块将TCP报文段作为参数,调用IP模块提供的函数,产出IP数据报
- IP数据报继续经过数据链路层封装,形成帧
- 帧为在网络中传输的字节序列,至此封装完成