OSI 模型(Open System Interconnection Reference Model,缩写为 OSI), 全名 “开放式系统互联通信参考模型”,是一个试图使各种计算机在全世界范围内互联为网络的标准框架。1983 年,国际标准组织(ISO)发布了著名的 ISO/IEC 7498 标准,它定义了网络互联的 7 层框架,也就是开放式系统互联参考模型。

参考: https://wsgzao.github.io/post/osi/

TCP 的那些事儿(上)

TCP 的那些事儿(下)

OSI模型

OSI 模型(Open System Interconnection Reference Model,缩写为 OSI), 全名 “开放式系统互联通信参考模型”,是一个试图使各种计算机在全世界范围内互联为网络的标准框架。1983 年,国际标准组织(ISO)发布了著名的 ISO/IEC 7498 标准,它定义了网络互联的 7 层框架,也就是开放式系统互联参考模型。

7 层是指 OSI 七层协议模型,主要是:

  • 应用层(Application)
  • 表示层(Presentation)
  • 会话层(Session)
  • 传输层(Transport)
  • 网络层(Network)
  • 数据链路层(Data Link)
  • 物理层(Physical)

第 7 层应用层 (Application Layer)

主要功能: 为应用软件提供接口,使应用程序能够使用网络服务

典型设备: 网关

典型协议、标准和应用: http(80)、ftp(20/21)、smtp(25)、pop3(110)、telnet(23)、dns(53)

第 6 层表示层 (Presentation Layer)

主要功能: 数据的解码和编码,数据的加密和解密,数据的压缩和解压缩

典型设备: 网关

典型协议、标准和应用: ASCLL、PICT、TIFF、JPEG、 MIDI、MPEG

第 5 层会话层 (Session Layer)

主要功能: 建立、维护、管理应用程序之间的会话

典型设备: 网关

典型协议、标准和应用: RPC、SQL、NFS 、X WINDOWS、ASP

第 4 层传输层 (Transport Layer)

主要功能: 负责建立端到端的链接,保证保温在端到端之间的传输

典型设备: 网关

典型协议、标准和应用: TCP、UDP、SPX

第 3 层网络层 (Network Layer)

主要功能: 负责将分组数据从源端传输到目的端,网络层的主要作用就是路由和寻址

典型设备: 路由器

典型协议、标准和应用: IP、IPX、APPLETALK、ICMP

第 2 层数据链接层 (Data Link Layer)

主要功能: 在不可靠的物理链路上,提供可靠的数据传输服务

典型设备: 交换机、网桥、网卡

典型协议、标准和应用: 802.2、802.3ATM、HDLC、FRAME RELAY

第 1 层物理层 (Physical Layer)

主要功能: 利用传输介质为数据链路层提供物理连接,实现比特流的透明传输

典型设备: 集线器、中继器

典型协议、标准和应用: V.35、EIA/TIA-232

image-20240516135553519

OSI参考模型

TCP/IP 四层模型

TCP/IP 提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化

实际应用的是TCP/IP四层模型,五层是教科书上方便让大家理解TCP/IP四层模型的参考

TCP/IP 协议族常用协议

应用层: TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等

传输层: TCP,UDP

网络层: IP,ICMP,OSPF,EIGRP,IGMP

数据链路层: SLIP,CSLIP,PPP,MTU

image-20240516135619668

四层模型

简化的七层 OSI 模型

通常人们认为 OSI 模型最上面三层(应用层、表示层、会话层)在 TCP/IP 中是一个应用层

互联网协议族(英语:Internet Protocol Suite,缩写为 IPS),是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。它常被通称为 TCP/IP 协议族(英语:TCP/IP Protocol Suite,或 TCP/IP Protocols),简称 TCP/IP。因为这个协议家族的两个核心协议,包括 TCP(传输控制协议)和 IP(网际协议),为这个家族中最早通过的标准 。由于在网络通讯协议普遍采用分层的结构,当多个层次的协议共同工作时,类似计算机科学中的堆栈,因此又被称为 TCP/IP 协议栈(英语:TCP/IP Protocol Stack)。这些协议最早发源于美国国防部(缩写为 DoD)的 ARPA 网项目,因此也被称作 DoD 模型(DoD Model)。这个协议套组由互联网工程任务组负责维护。

TCP/IP 提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化。它将软件通信过程抽象化为四个抽象层,采取协议堆栈的方式,分别实现出不同通信协议。协议套组下的各种协议,依其功能不同,被分别归属到这四个层次结构之中,常被视为是简化的七层 OSI 模型

TCP/IP 和 OSI 模型组并不能精确的匹配,但是我们可以尽可能的参考 OSI 模型并在其中找到 TCP/IP 的对应位置。如上图所示,我们已经标出了 TCP/IP 对应的四层位置所在。通常人们认为 OSI 模型最上面三层(应用层、表示层、会话层)在 TCP/IP 中是一个应用层。由于 TCP/IP 有一个相对比较弱的会话层,由 TCP 和 RTP 下的打开和关闭连接组成,并在 TCP/UDP 下的各种应用提供不同的端口号,这些功能被单个的应用程序添加。

TCP/IP 三次握手

在建立 TCP 连接之前需要进行三次握手,以便于链接到服务器,如果要断开服务器需要进行四次挥手,具体流程如下。

  • 第一次握手: Client 将标志位 syn 设置为 1,随机产生一个 Number 值 seq=100,并将数据发送给 Server,Client 进入 SYN_SENT 状态,等待 Server 确认;
  • 第二次握手: Server 收到数据包后 Client 设置的标志位 syn=1 知道 Client 要求建立连接,Server 将标志位 syn 和 ack 都置为 1,并且发送一个确认序号 ack=100+1,然后随机产生一个值 seq=130,并将该数据包发送给 CLient 以确认连接请求,Server 进入 SYN_RCVD 状态。
  • 第三次握手: Client 收到确认后,检查 ack 状态是否为 100+1,ACK 是否为 1,如果正确则将标志位 ACK 置为 1,ack=130+1,并将该数据包发送给 Server,Server 检查 ack 是否为 130+1,ACK 是否为 1,如果正确则连接建立成功,Client 和 Server 进入 ESTABLISHED 状态,完成三次握手,随后 Client 与 Server 之间可以开始传输数据了。

一个完整的三次握手也就是请求 — 应答 — 再次确认

image-20240516140412394

TCP/IP 四次挥手

为什么要挥手,简单点来说就是既然建立了链接,那么肯定还要断开连接吖,连接总不能一直占用吧,这样多浪费系统该资源,下面让我们来看看四次挥手的流程。

  • 第一次挥手: Client 发送一个 FIN,用来关闭 Client 到 Server 的数据传送,Client 进入 FIN_WAIT_1 状态。
  • 第二次挥手: Server 收到 FIN 后,发送一个 ACK 给 Client,确认序号为 ack=100+1(与 SYN 相同,一个 FIN 占用一个序号),Server 进入 CLOSE_WAIT 状态。
  • 第三次挥手: Server 发送一个 FIN,用来关闭 Server 到 Client 的数据传送,Server 进入 LAST_ACK 状态。
  • 第四次挥手: Client 收到 FIN 后,Client 进入 TIME_WAIT 状态,接着发送一个 ACK 给 Server,确认序号为 131+1,Server 进入 CLOSED 状态,完成四次挥手。

image-20240516140504631

Q&A

  1. 为什么建立连接是三次握手,而关闭连接却是四次挥手呢?

这是因为服务端在 LISTEN 状态下,收到建立连接请求的 SYN 报文后,把 ACK 和 SYN 放在一个报文里发送给客户端。而关闭连接时,当收到对方的 FIN 报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即 close,也可以发送一些数据给对方后,再发送 FIN 报文给对方来表示同意现在关闭连接,因此,己方 ACK 和 FIN 一般都会分开发送。

  1. 为什么建立连接要三次握手?

目的:防止已经失效的连接请求到达服务端,创建无效的连接,浪费资源。

说明:当客户端发出的第一个连接请求在网络上的某个节点被滞留了(网络会存在许多不可靠的因素),过一段时间后突然又到达了服务端,服务端误以为这是一个新的建立连接的请求,于是就会向客户端发出确认包并建立连接。

实际上客户端当前并没有发出创建连接的请求,就会丢弃服务端的确认包。而服务端却创建了连接并等待客户端发送数据,浪费了相关的资源。

  1. SYN 攻击

在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的 TCP 连接称为半连接 (half-open connect)。此时服务器处于 SYN_RECV 状态,当收到 ACK 后,服务器转入 ESTABLISHED 状态.

SYN 攻击就是:攻击客户端在短时间内伪造大量不存在的 IP 地址,向服务器不断地发送 SYN 包,服务器回复 ACK 确认包,并等待客户的确认从而建立连接。由于源地址是不存在的,不会再发送 ACK 确认包,所以服务器需要不断的重发直至超时,这些伪造的 SYN 包将长时间占用未连接队列,正常的 SYN 请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

SYN 攻击是一个典型的 DDOS 攻击。检测 SYN 攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源 IP 地址是随机的,基本上可以断定这是一次 SYN 攻击

  1. 为什么 TIME_WAIT 状态需要经过 2MSL (最大报文段生存时间) 才能返回到 CLOSE 状态?

虽然按道理,四个报文都发送完毕,我们可以直接进入 CLOSE 状态了,但是我们必须假象网络是不可靠的,有可以最后一个 ACK 丢失。所以 TIME_WAIT 状态就是用来重发可能丢失的 ACK 报文。

  1. TCP/IP 四层还是五层?

实际应用的是TCP/IP四层模型,五层是教科书上方便让大家理解TCP/IP四层模型的参考

image-20240516140604819

网络配置

==IP 地址、子网掩码、网关地址、DNS 服务器==

概念

  • 客户端:应用 C/S(客户端/服务器) B/S(浏览器/服务器);
  • 服务器:客户端提供服务、数据、资源的机器;
  • 请求:客户端向服务器索取数据;
  • 响应:服务器对客户端请求作出反应,一般是返回给客户端数据;
  • URL:统一资源定位符(Uniform Resource Locator), 网络中每一个资源都对应唯一的地址——URL;
  • MAC地址:MAC(Media Access Control,介质访问控制)地址,又称物理地址, 如同我们身份证上的身份证号码,具有全球唯一性;
  • IP:网络互连协议(Internet Protocol),是TCP/IP体系中的网络层协议;
  • 子网掩码:子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩;
  • 网关:网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连;
  • DNS:域名系统(Domain Name System),为Internet上的主机分配域名地址的IP地址;
  • DHCP:由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。提升地址的使用率;

IP地址

子网掩码

subnet mask

网关地址

Gateway

DNS服务器

Domain Name System

它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

DHCP

Dynamic Host Configuration Protocol

常用配置

尽量使用DHCP服务器自动配置,如果经常发生ip冲突,使用静态配置

手机wifi可以设置使用随机mac地址,保护隐私(建议除家之外的wifi都使用随机mac地址)

IP地址: 192.168.0.2~192.168.0.254

子网掩码: 255.255.255.0

网关地址: 路由器IP地址: 192.168.0.1

DNS服务器: 国内使用当地电信(搜索 城市+DNS服务器地址)默认的即可(墙内相当于巨型局域网,都差不多)