TCP/IP四层模型介绍
TCP/IP协议模型是一个四层体系结构
它包含应用层、传输层、网络层和网络接口层
我们将TCP/IP模型与OSI模型对比(OSI开放式系统互连)
应用层
应用层包含了各种不同的协议,这些协议定义了应用程序如何通过网络通信
应用层的功能
网络通信
- 应用层是网络通信的最终目的,它负责接收来自其他主机的数据,并将其传递给用户进程
- 同时,应用层也负责将用户进程产生的数据封装为应用层协议格式,然后通过网络发送给目标主机
数据封装与解封装
- 在发送数据时,应用会将数据数据封装成特定的应用层协议格式,包括 添加必要的头部信息(协议标识符、源地址、目标地址等)
- 在接收数据时应用层会解析收到的数据包、提取用户数据,并将其传递给相应的用户进程
协议转换
- 应用层包含多种协议,如HTTP、FTP、SMTP等,这些协议主要定义了不同应用程序之间的通信方式
- 应用层负责在不同的协议之间进行转换,以确保数据能够在不同的应用程序之间正确传输
流量控制
- 应用层还负责实现流量控制机制,限制数据传输的速率,防止网络拥塞
- 这通常通过应用层协议中的窗口大小、重传机制等参数来实现
应用层的常用协议
HTTP
HTTP协议即超文本传输协议,(超文本是用超链接的方法,将不同空间的文字信息组值在一起的网状文本),是一种使用万维网(WWW)服务器传输超文本到本地浏览器的传输协议
主要用于分布式超媒体信息系统,通过请求相应的方式实现客户端与服务器之间的通信和数据传输
FTP
FTP协议基于客户端-服务器模型工作,客户端向服务器请求,服务器响应这些请求,并在必要时向客户端发送数据。FTP使用两个TCP连接,一个用于控制命令的传输(控制连接),一个用于实际文本的传输(数据连接)
- 控制连接:在FTP绘画开始时建立,用于传输FTP命令和响应。客户端通过控制连接向服务器发送命令,服务器通过控制连接向客户端发送响应
- 数据连接:在需要传输文件时建立,用于传输文件数据;
SFTP
是基于SSH(远程连接工具)协议的文件传输协议,它用在在不安全的网络中安全的传输文件。SFTP结合SSH的安全加密和认证机制,使得文件传输过程能够抵御各种网络攻击
DNS
DNS协议是互联网的核心技术之一,它作为一个分布式数据库系统,负责将人类刻度的域名转换为计算机课识别的IP地址,从而使用户能够方便的访问互联网资源,而无需记住复杂的IP地址。DNS协议的主要功能是域名解析,将域名映射为对应的IP地址,这个过程也被称为主机名解析
传输层
向上层应用层提供服务,提供处于网络连接中的两台计算机之间的数据传输,属于面向通信的最高层,同时也是用户功能钟得最底层
传输层为相互通信的应用进程提供了逻辑通信(两台主机之间的通信其实是两台主机中的应用进程之间的通信)
在传输层有两个性质不同的协议:TCP(传输控制协议)、UDP(用户数据协议)
TCP/UDP
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议
UDP是一种无连接的、不可靠的、面向数据报的传输层通信协议
TCP和UDP有以下特点:
- TCP是有连接的,UDP是无连接的
- TCP是可靠的,UDP是不可靠的
- TCP是数据传输字节流,UDP是面向数据报
- TCP、UDP都是全双工
有连接VS无连接
连接是一种抽象的概念,指客户端和服务器在进行数据通信前需要保存对端的关键信息(IP地址、端口号等)并且依赖保存的信息来发送/接收数据
TCP想要通信序先建立连接,只有连接完成后才能完成后续的通信
UDP无需经过对方的同意就可以直接发送数据,并且不会保存对方的消息。客户端/服务器每次发送数据时都需指定IP和端口号才能完全数据的传输
可靠传输vs不可靠传输
在复杂的网络环境下,数据传输可能存在丢包的情况,这可能会导致得到的信息不能正确解析;
面对这种情况,TCP会将丢失的数据包重新传输来保证通信双方尽量得到正确的数据,原因是TCP内部提供了一些操作来保证这种可靠传输
而UDP则没有这种可靠传输机制,如果数据包在网络传输中丢失了,UDP也不知道,因此不会重传
面对字节流vs面对数据报
TCP与文件操作一样,都是以字节为单位进行数据传输。所有的数据都被视为一连串的字节流,在传输时会被分割成若干大小和时的数据段,到达后在按照顺序被重新组装成完整的字节流
由于数据以一连串字节流的形式存在,因此在写入或读取时没有严格要求的对应关系,即数据读取时可根据需要读取任意字节数的数据
UDP是面向数据报传输数据,所有的数据都被视为一个个的数据报,其中每个UDP数据包都包含了完整的数据以及源/目的的端口IP等信息,因此数据在写入/读取时以单个数据报为单位
TCP/UDP都是全双工
全双工即通信双方既可以发数据,也可以收数据,且发送与接收可以同时进行,不需要等待对方完成操作
UDP协议
UDP报文格式
- 源/目的端口号:用于绑定通信双方主机上的进程,表示数据从哪个进程发出,由哪个进程接收
- UDP报文长度:UDP报文大小+UDP载荷大小,用来表示一个UDP数据包最大可以携带的数据范围,最大为2^16 = 64kb,单位为字节。当传输的数据大于报文长度,会自动进行分片和重组
- UDP校验和:将UDP负载中的数据通过一定的计算方式得到的16位数据,用于检测UDP头部和数据部分传输过程中是否发生错误
- 为什么校验和?
数据在网络传输中,由于受到某些外部因素干扰,可能出现信号反转,导致数据传输发生错误 - 如何通过校验和判断数据是否出错?
先将数据在发送前进行校验和的计算,并将校验和与数据等信息一起发送出去;但数据被接收后,接收方进行校验和的计算,然后将得到的校验和与数据包中的校验和进行比较,若比较的结果不一致,则说明数据在传输过程中大概率出错了
- 为什么校验和?
UDP的使用场景
UDP适合于对高速传输和实时性要求较高、对稳定性和可靠性要求不高、可以容忍少数数据丢失的场景,如音频传输、广播等
TCP协议
TCP报文格式
TCP首部的大小是固定的20字节:源端口号2字节、目的端口号2字节、序列号4字节、确认序列号4字节、4位首部长度1字节,6位保留位1字节,6位控制位1字节、窗口大小2字节、校验和2字节、紧急指针2字节、选项(0-40字节)
- 源/目的端口号(各2字节):这里的端口号与UDP报文中的端口号作用一样,都用于定位发送与接受的主机的进程
- 32位序列号(4字节):范围是0-2^32-1,当序列号超过最大值时置0,序列号用于标识此次发送数据的顺序,它的值为该报文段中数据部分的第一个字节的序号
- 确认序列号(4字节):确定序列号的值为某个TCP数据包中的序列号+数据的字节数,用于确认接收的数据:表示在该值之前的所有数据都已经被正确接收到,并期待下一次发送的数据为确认序列号之后的数据
- 首部长度(4位1字节):也可以称为“数据偏移”,用于确认TCP首部长度,它表示一个0~15的数据,单位位4个字节,由于TCP拥有固定的20字节的首部,因此数据偏移最小值为5(若小于5则视为格式错误),因此一个TCP的数据包大小为20~60字节
- 保留位(6位1字节):目前暂未使用,置0
- URG(Urgent):当URG为1时,表示紧急指针有效,紧急指针所指示的数据优先处理
- ACK:当ACK置1时,表示确认序列号字段的值有效,它用于确认接收的数据。在TCP连接的数据传出过程中,数据接收方每次收到数据后都会返回一个带ACK标志的TCP报文,通知发送端已成功接收到数据
- PSH:当PSH置1时,表示数据接收端应尽快把接受的数据推送到应用层,而不是等待缓存区满后再传输
- RST:当RST置1时,表示发生了严重的个错误或连接出现异常,需要中断TCP连接,重置连接状态
- SYN(Synchronized):当SYN置1时,表示当前通信双方处于正在建立连接的状态通常出现在“三次握手”时候
- 窗口大小(2字节):表示数据接收端允许发送端发送多个最大数据量
- 校验和(2字节):用于检测TCP首部和数据部分在传输过程中是否发生错误
- 紧急指针(2字节):表示紧急数据的结束位置在数据流钟得偏移量,当URG置1时有效
- 选项(0~40字节):为可选字段,且长度不定,提供一些额外的功能和控制信息;若使用选项,则该字段的大小为4的整数倍
TCP协议的重要机制
TCP相比UDP之所以由更多的应用场景,最核心的因素时TCP提供可靠的传输,可靠的传输并不是要求网络数据100%到达,而是当数据丢包时TCP能有补救措施
网络层
网路层处理数据报的路由和转发,以便将数据从源传输到目的地
作用
- 负责将数据包从源主机传输到目的主机,跨越多个网络
- 处理路由选择和逻辑地址(IP地址)的分配
主要协议
主要有IP、ICMP、ARP
ICMP
用于网络诊断(如ping)
ARP
将IP地址解析为物理地址(MAC地址)
IP需要一个单独的文章介绍,这次只介绍个入门部分
网络层中的IP协议
IP的分类
最大主机号个数 = 2的主机号位数次方-2(要排除全为0和全为1的地址)
特殊主机号
- 主机号全为0:
当主机号全为0时,该IP地址表示的是网络地址,它代表整个网络,而不是网络中的某一台具体的主机。
主要用于网络路由器和子网划分等。网络设备通过识别网络地址来确认数据应该被发送到哪个网络区域。当路由器接收一个数据包时,会检查目标IP的网络部分,将数据包转发到对应的网络 - 主机号全为1:
主机号全为1的IP地址被用作广播地址。在一个特定的网络中,发送到这个地址的数据包会被该网络中所有的主机接收
主机到网络接口层
负责将数据包从一台设备传输到另一台设备
这一层主要涉及到局域网(LAN)和广域网(WAN)之间的连接