了解什么是 OSI 七层模型?

OSI Open System Interconnection Reference Model 开放式系统互联通信参考模型,简称 OSI 模型 OSI model,由国际标准化组织 ISO 于 1984 年提出。

分为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层七层。

iso

图来自:OSI七层模型详解

应用层 Application Layer 提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如:HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3 等。

表示层 Presentation Layer 把数据转换为能与接收者的系统格式兼容并适合传输的格式。

会话层 Session Layer 负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接。

传输层 Transport Layer 把传输表头 TH 加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:TCP、UDP 等。

网络层 Network Layer 决定数据的路径选择和转寄,将网络表头 NH 加至数据包,以形成分组。网络表头包含了网络数据。例如:互联网协议 IP 等等。

数据链路层 Data Link Layer 负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成帧。数据链表头 DLH 是包含了物理地址和错误侦测及改错的方法。数据链表尾 DLT 是一串指示数据末端的字符串。例如 以太网、无线局域网 Wi-Fi 和 通用分组无线服务(GPRS)等。

物理层 Physical Layer 在局部局域网上传送数据帧 data frame,它负责管理计算机通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中断器、网卡、主机适配器等。

什么是 TCP/IP 四层模型

因为 ISO 七层里面的分层分得不够清晰,有的层没什么用,有的层的实现却在其他的层里,所以后来 ISO 七层模型别 TCP/IP 四层模型替换掉了:应用层、传输层、网络层、数据链路层。

应用层是大多数普通与网络相关的程序为了通过网络与其他程序通信所使用的层。这个层的处理过程是应用特有的;数据从网络相关的程序以这种应用内部使用的格式进行传送,然后被编码成标准协议的格式。每一个应用层协议一般都会使用到传输层协议 TCP 和 UDP 协议之一:

运行在 TCP 协议上的协议:

  • HTTP(80 端口),主要用于普通浏览
  • HTTPS(443 端口),HTTP 协议的安全版本
  • FTP(20 和 21 端口),用于文件传输
  • POP3(110 端口),收邮件用
  • SMTP(25 端口),用来发送邮件
  • SSH(22端口),用于加密安全登陆用

运行在 UDP 协议上的应用层协议:

  • DHCP(67 端口,动态主机配置协议),动态配置 IP 地址

其他:

  • DNS(Domain Name Service 域名服务),用于完成地址查找,邮件转发等工作(运行在 TCP 和 UDP 协议上)
  • SNMP(Simple Network Management Protocal,简单网络管理协议),用于网络信息的收集和网络管理
  • ARP(Address Resolution Protocol,地址解析协议),用于动态解析以太网硬件的地址。

传输层:解决诸如端对端可靠性(数据是否已经到达目的地)和保证数据按照正确的顺序到达这样的问题。TCP 和 UDP 都是传输层协议。

网络层:解决在一个单一网络上传输数据包的问题。IP 协议是网络层协议

数据链路层:它是数据包从一个设备的网络层传输到另外一个设备的网络层的方法。这个过程能够在网卡的软件驱动程序中控制或者专用芯片中控制。这将完成如添加报头准备发送、通过实体介质实际发送这样一些数据链路功能。另一端,链路层将完成数据帧接收、去除报头并且将接收到的包传到网络层。

TCP 的三次握手

TCP 传输控制协议,面向连接的可靠的基于字节流的传输层通信协议。

A:SYN 提问的序号,seq 提问的内容
B:ACK 回答的问题的序号,ack 已经回答了,在提问的内容上加 1。同时提问 SYN 提问序号,seq 提问内容
A:ACK 回答的问题的序号,ack 针对谁的回答,谁 加 1,同时我当前的问题为 seq 序号加 1。

TCP 的三次握手

  • 客户端发送 SYN 报文给服务器端,序号为 n,进入 SYN-SEND 状态
  • 服务器端收到 SYN 报文,回应一个 ACK(序号是 n + 1)同时发送一个 SYN 报文,序号是 m,进入 SYN-RCVD 状态
  • 客户端收到服务器端的 SYN 报文,回应一个 ACK 序号为 m + 1,进入 Established 状态。表示连接成功。注意第三次挥手的 seq 与服务器的 ack 是一样的。

TCP 四次挥手

TCP 的四次挥手

服务器去终止传输必须等到应用传输完成才能终止,所以才有四次挥手。

  • 客户端发送一个 FIN,告诉服务器想关闭连接
  • 服务器收到这个 FIN,发回一个 ACK
  • 服务器通知应用程序关闭网络连接,应用程序关闭后通知服务器。服务器发送一个 FIN 给客户端
  • 客户端发回 ACK 报文确认

服务器端的 LISTEN 状态下的 SOCKET 当收到客户端建立连接请求的 SYN 报文后,它可以把 ACK 和 SYN (ACK 起应答作用,而 SYN 起同步作用)放在一个报文里来发送。但关闭连接时,当服务器收到客户端的 FIN 报文通知时,服务器只能发一个回应报文 ACK:“哦,我知道了”,然后通知应用程序。等应用程序完成全部数据发送并确定可以终止了,服务器才能发送 FIN 告诉客户端可以真正断开连接了。所以这一步 ACK 报文和 FIN 报文需要分开发送,因此有四次挥手,而不是三次。

TCP 报文格式

  • ACK:TCP 协议规定,只有 ACK = 1 时有效,也规定连接建立后所有发送给的报文的 ACK 必须为 1
  • SYN(SYNchronization):在连接建立时用来同步序号。当 SYN = 1 而 ACK = 0 时,标明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使用 SYN = 1 和 ACK = 1,因此,SYN 置 1 就表示这是一个连接请求或连接接受报文。
  • FIN(finish)用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。