TCP/IP协议簇(四层模型)

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

四层模型:

  • 数据链路层:负责设备之间数据帧的识别和传送
  • 网络层:负责地址管理和路由的选择(IP/ARP,ICMP…)
  • 传输层:负责主机之间的数据传输(TCP,UDP)
  • 应用层:负责应用程序间的沟通(HTTP,DNS,URI,HTML…)

应用层

应用层最常见的协议就是HTTP协议

HTTP协议是基于请求与响应模式的、无状态的、应用层的协议

HTTP请求由三部分组成

  • 请求行
  • 消息报头
  • 请求正文

请求方法有很多,例如:

  • GET 获取资源
  • POST 传输实体主体
  • PUT 传输文件
  • HEAD 获得报文首部
  • DELETE 删除文件

HTTP响应由三部分组成

  • 状态行
  • 消息报头
  • 相应正文

响应状态码有五种类型:

  • 1XX 信息性状态码
  • 2XX 成功状态码
  • 3XX 重定向状态码
  • 4XX 客户端错误状态码
  • 5XX 服务器错误状态码

我们常见的状态码有:

  • 200 OK 客户端请求成功
  • 302 对象已移动
  • 403 Forbidden 服务器收到请求,但是拒绝提供服务
  • 404 Not Found 请求资源不存在
  • 504 未执行该参数的命令

HTTP常见的属性

  • Content-Type: 数据类型
  • Content-Length: Body的长度
  • Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端⼝口上
  • User-Agent: 声明⽤用户的操作系统和浏览器版本信息
  • referer: 当前⻚页⾯面是从哪个⻚页⾯面跳转过来的

传输层

传输层最常用的是UDP和TCP协议

UDP协议

UDP协议端格式:
TCP/IP协议簇(四层模型)_第1张图片

UDP的特点:

  • 无连接:通过对端的IP和端口号进行传输,不用建立连接
  • 不可靠:无确认机制,无重传机制
  • 面向数据报:不能拆分和合并应用层发来的报文
  • 一个UDP传送的最大数据长度是64K

基于UDP的应用层协议:

  • NFS: 网络文件系统
  • TFTP: 简单文件传输协议
  • DHCP:动态主机配置协议
  • BOOTP:启动协议
  • DNS:域名解析协议

TCP协议

TCP协议段格式
TCP/IP协议簇(四层模型)_第2张图片
连接管理机制

一般情况下,TCP要经过三次握手,四次挥手

三次握手:建立TCP连接,需要客户端和服务器端一共发出三个包以确认连接

TCP/IP协议簇(四层模型)_第3张图片

  • 第一次握手:客户端向服务器端发送请求建立连接,发送SYN连接请求给服务器端
  • 第二次握手:服务器端接收SYN,而后发送服务器端的SYN和ACK给客户端,告知客户端可以连接并请求和客户端连接
  • 第三次握手:客户端发送ACK给服务器端,告知服务器端可以连接,这时,服务器端和客户端就完成了三次握手的连接

四次挥手:断开TCP连接,需要客户端和服务器端一共发出四个包

TCP/IP协议簇(四层模型)_第4张图片

  • 第一次挥手:客户端发送一个FIN,关闭向服务器端的数据传送,请求断开连接
  • 第二次挥手:服务器端收到FIN包后,确认断开连接,发送一个ACK给客户端
  • 第三次挥手:服务器端发送一个FIN给客户端,关闭向客户端的数据发送
  • 第四次挥手:客户端接收到FIN包后,发送ACK给服务器端,确认断开连接,完成了四次挥手,服务器端和客户端都处于关闭状态

确认应答(ACK)机制

TCP/IP协议簇(四层模型)_第5张图片

TCP对每个字节的数据都进行了编号,每个ACK都带有对应的序列编号,是在回复发送者“已经接收数据,下一个从哪里开始发送”

超时重传机制

TCP/IP协议簇(四层模型)_第6张图片
主机A在发给主机B后,数据因为某些原因未发送到主机B,在特定的时间间隔里主机A没有收到主机B的ACK,就会重新发送

去重:如果是主机B的ACK丢失了,主机B就会收到重复的数据,这时TCP协议就会利用序列号去掉重复的包

快速重传机制

接收方接到了第二条数据,但是没有接收到第一条,认为第一条数据丢失,立即发送第一条数据的重传请求,并且连续发送三次,当发送方连续收到三次重传请求时,就不等待超时,直接将丢失的数据重新发送

滑动窗口

TCP/IP协议簇(四层模型)_第7张图片
这样一次发送多条数据,就提高了性能

窗口大小指的是无需等待确认应答,继续发送数据的最大值

发送前三个段直接发送,收到第一个ACK后, 滑动窗口向后移动, 继续发送第四个段的数据,依次类推

丢包状况

  • 部分ACK丢失:无关紧要,后边的ACK可以进行确认

  • 数据包丢失:发送端会重复接收到请求发送丢失数据包的ACK,当发送端连续收到三次这个ACK就会重新发送丢失数据包

流量控制

TCP根据接收端的处理能力, 来决定发送端的发送速度

  • 接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” ,通过ACK端通知发送端
  • 接收端一旦发现缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端
  • 发送端接受到这个窗口之后,就会减慢发送速度
  • 接收端缓冲区满了,就会将窗口大小置为0, 发送方就不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端

拥塞控制

网络通信开始时,并不会直接发送窗口大小的数据,而是以一种慢启动,快增长的方式进行数据传输,避免刚开始因为网络阻塞而引起问题,在快增长的过程中,若出现丢包则初始化拥塞窗口的大小,重新开始探测网络状况

基于TCP的应用层协议

  • HTTP
  • HTTPS
  • SSH
  • FTP
  • SMTP

TCP/UDP对比

  • TCP用于可靠传输的情况
  • UDP用于对高速传输和对实时性要求较高的通信领域

网络层

负责地址管理和路由选择

IP协议

IP地址的组成:网络号 + 主机号

  • 网络号: 保证相互连接的两个网段具有不同的标识
  • 主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号

网段的划分

IP地址分为五类:
TCP/IP协议簇(四层模型)_第8张图片
A类 0.0.0.0到127.255.255.255
B类 128.0.0.0到191.255.255.255
C类 192.0.0.0到223.255.255.255
D类 224.0.0.0到239.255.255.255
E类 240.0.0.0到247.255.255.255

子网掩码:

  • 子网掩码与IP地址相与得到网络号
  • 子网掩码取反可以得到局域网中主机号的个数

私有IP和公网IP

RFC1918规定,组建私网的网段,只能用以下:10.* ; 172.16. -172.31. ; 192.168.*

特殊的IP地址:

  • 主机号全为1的IP地址
  • 主机号全为0的IP地址
  • 127.0.0.1

主机号虽然有256个,只有254个可以分主机

数据链路层

以太网协议

以太网帧的格式:
TCP/IP协议簇(四层模型)_第9张图片

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的
  • 帧协议类型字段有三种值,分别对应IP、ARP、RARP
  • 帧末尾是CRC校验码

MTU对TCP协议的影响:TCP在传输层的时候会获取MTU的大小进行计算得到自己的MSS的大小,取其中较小的一个作为传输大小,TCP在传输层会自动将数据分段,不会再网络层进行数据分段

MTU对UDP协议的影响:当UDP传输的数据大小大于MTU但是小于64K-20k-8k的时候,数据会在网络层进行数据分片,在对端就会进行分片重组,只要有一个分片出现问题,整个UDP数据报都会被丢弃,对于UDP来说分片越多,传输越危险,因此将数据大小控制在MTU-20k-8k内

你可能感兴趣的:(TCP/IP协议簇(四层模型))