一、简述OSI的七层及TCP/IP五层(网络模型)
OSI( Open System Interconnection )
开放式网络互连,把网络通信工作分为7层,分别是物理层、表示层、会话层、传输层、网络层、数据链路层和物理层。
OSI参考模型及解释’
TCP/IP五层协议和OSI的七层协议对应关系如下
在每一层都工作着不同的设备,比如我们常用的交换机就工作在数据链路层;一般的路由器是工作于网络层
在每一层实现的协议不同,即每一层的服务也不同。下面主要列出每层的主要协议
二、TCP/IP协议
- TCP/IP协议是一个**协议簇**。里面有包括很多协议。包括UDP,TCP和IP协议。
- TCP/IP协议集包括了应用层、传输层、网络层、数据链路层和物理层
三、各协议的基本介绍
应用层
- HTTP
超文本传输协议是一个简单的请求–响应协议;它通常是运行在TCP之上,它指定了客户端可能发送给服务器什么样的请求什么样的请求消息应该得到什么样的响应消息;请求和响应消息头以ASCII码式给出;就是请求体非常的臃肿;并且位于应用层
- HTTPS
超文本传输安全协议;是以安全为目的的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。常见于应用在交易支付方面;(SSL为安全套接层,及其继任者TLS(传输层安全)是为网络传输提供安全和数据完整性的一种安全协议;SSL和TL在应用层和传输层之间对网络进行加密)
- SSH
安全外壳协议;SSH为建立在应用层上安全协议;较可靠的、专为远程登录会话和其他网络服务提供安全协议。有效的防止远程管理过程中信息的泄露;
SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digita、UNIX、Irix,以及其他平台,都可运行SSH 22
- FTP
文件传输协议;用于网络上文件传输的一套标准协议;工作于OSI模型的第七层,TCP模型的第五层,基于TCP的协议,三次握手四次挥手。 21
- Telnet
远程终端协议;提供远程访问其他主机的功能,它允许用户登录internet主机,并在这台主机上执行命令
- DNS
域名系统(服务)协议;是一种分布式网络目录服务,主要用于域名与IP地址的相互转化,以及控制因特网的电子邮政的发送。
host文件;域名解析器(域名转化为IP地址)
传输层
- TCP
传输控制协议;是一种面向连接的、可靠的、基于字节流的传输层通信协议
- UDP
用户数据协议;无连接的传输协议;为应用程序提供了一种无需建立连接就可以发送IP数据报的方法
网络层
负责数据的传输,在不同网络和系统间寻找路由,分段和重组数据报文,另外还有设备寻址
- IP协议(网络互连协议)
负责TCP/IP协议主机间提供数据报服务,进行数据封装并产生协议头,是TCP和UDP的基础
数据链路层
ARP:地址解析协议; 通过IP地址获得物理地址;
RARP:逆向地址解析协议;通过物理地址获得IP地址;
四、TCP协议安全可靠
TCP(传输控制协议),是面向连接的协议,也就是说在发送和接收数据时,必须和对方建立可靠的连接
TCP建立连接的三次握手:(同步序列号和确定应答)
1、主机A向主机B发送一个含有同步序列号的标志位的数据段给主机B,向主机B建立连接。主机A通过这个数据段告诉主机B两件事:我想跟你通信和 你可以用此序列号作为起始数据段来回应我
2、主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)的标志位的数据段来回应给主机A,也告诉主机A两件事:我已经收到你的了,你可以传输数据了和 你可以用此序列号作为起始数据段来回应我
3、主机A接收到了这个数据段,用序列号(SYN)和确定应答(ACK)发送给主机B,我已经收到回复,我现在开始传输实际数据给主机B;
TCP断开连接的四次挥手:(控制位FIN 和 确认字符 ACK)
1、当主机A完成数据传输后,将控制位FIN置为1,提供停止TCP连接的请求;
2、主机B接收到FIN进行作为响应,这一连接将关闭,将ACK置为1;
3、主机B再提出反方向的关闭请求,将FIN置为1;
4、主机A对主机B的请求进行确认,将ACK置为1,双方向的请求关 闭;
由TCP的建立请求的三次握手和请求关闭的四次挥手可以看出,TCP使用面向连接的通信方式,大大提高了数据的可靠性,使数据发送端和接收端在数据传输前就有了交互,为我们数据正式传输打下了可靠的基础。
五、Socket
Socket是什么
- Socket被翻译为套接字;它是计算机之间通信的一种约定或一种方式;通过Socket这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据
- Socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作
- 我们可以理解Socket是该模型的一个实现,即Socket是一种特殊的文件,一些Socket函数进行 读写、打开、关闭等IO操作进行计算机通信
- Socket()函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的
- Socket是用来解决网络通信的;网络编程也称为Socket编程。
网络通信
- 网络进程中通信存在的问题
a、我们要如何标识一台主机,即怎样确定我们将要通信的进程是在哪一台主机上
运行?
b、我们要如何标识唯一进程,本地通过pid标识,网络中应该怎样标识?
- 解决办法
a、TCP/IP协议簇帮我们解决了识别主机的问题;我们通过网络层的"IP地址"可以
唯一标识网络中的主机;
b、传输层的“协议+端口号”可以唯一识别主机中的引用程序;因此我们利用三元组
(IP地址、协议、端口号)就可以识别网路中不同主机的线程;网络中的线程通信就
可以利用这个标志与其他线程进行相互
六、HTTP
超文本传输协议是一个简单的请求–响应协议;它通常是运行在TCP之上,它指定了客户端可能发送给服务器什么样的请求什么样的请求消息应该得到什么样的响应消息;请求和响应消息头以ASCII码式给出;就是请求体非常的臃肿;并且位于应用层
请求
-
由三部分组成:
- 请求行;消息报头;请求正文
-
请求方式
GET 查询 POST 新增 PUT 修改 DELETE 删除 HEAD 获得响应消息报头 TRACE 主要用于测试或诊断 CONNECT 保留将来使用 OPTIONS 请求查询服务器性能,或者查询与资源相关的选项和需求
响应
状态行、消息报文、响应正文
1XX 指示信息;表示请求已接收,继续处理;
2XX 成功;表示已被成功接收;
3XX 重定向;要完成请求必须更进一步的操作
4XX 客户端错误; 请求语法错误或请求方式无法实现
5XX 服务器错误
200 查询成功
201 添加成功
204 修改或删除成功
304 重定向
400 请求参数错误
401 权限不足
403 跨域
404 找不到
405 请求方式错误