五层因特网网络协议
OSI七层协议:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
TCP/IP 四层协议:应用层、传输层、网络层、链路层
应用层
通过应用进程(主机中正在运行的程序)之间的交互来完成特定网络应用。
应用层协议:域名系统 DNS、支持万维网应用的 HTTP 协议、支持电子邮件的 SMTP 协议
应用层交互的数据单元为报文
域名系统(Domain Name Syetem)
识别主机有两种方式:主机名和 IP 地址。域名系统是将域名和 IP 地址相互映射的一个分布式数据库,主要是进行主机名到 IP 地址的转换。DNS 协议运行在 UDP 之上,使用 53号端口
HTTP(HyperText Transfer Protocol)
HTTP 使用 TCP 作为支撑运输协议。
超文本传输协议是 Web 的核心,由客户端程序和服务端程序两个程序实现,通过交换HTTP报文进行会话。HTTP 报文分为请求报文和响应报文。
GET:请求指定的页面信息,并返回实体主体。使用 GET 方法时实体体为空。
HEAD:类似于 GET 请求,只是返回的响应中没有具体的内容,可以获取报头。
POST:向指定资源提交数据并进行处理请求。使用 POST 方法时使用实体体。
PUT:从客户端向服务器传送的数据取代指定文档里面的数据。
DELETE:请求服务器删除指定的页面
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS:允许客户端查看服务器的性能
TRACE:回显服务器收到的请求,主要用于测试或诊断
200 OK:请求成功,信息在返回的响应报文中。
301 Moved Permanently:请求的对象已经被永久删除转移了,新的 URL 定义在响应报文的 Location
400 Bad Request:一个通用差错代码,指示该请求不能被服务器理解。
404 Not Fount:被请求的文档不在服务器上
500 HTTP Version Not Supported:服务器不支持请求报文使用的 HTTP 协议版本
传输层
传输层的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。
传输层协议是在端系统中而不是在路由器中实现的。
传输层从发送应用程序进程接收到的报文转换为传输层的分组(传输层报文段)
传输层常用的两种协议:传输控制协议 TCP 和 用户数据协议 UDP
TCP(Transmission Control Protocol)
提供面向连接的、可靠的数据传输服务。(发送数据之前需要建立连接)
每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是一对一。
TCP 提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复、并且按序到达。
TCP 提供全双工通信。TCP 允许通信双方的应用程序在任何时候都能发送数据。TCP 连接的两端都没有发送缓存和接收缓存用来临时存放双方通信的数据。
TCP报文结构:
序号:seq,32比特
确认号:ack,32比特
ACK:用于指示确认字段中的值是有效的,即该报文段包括一个对已被成功接收报文段的确认
RST、SYN和FIN比特用于连接建立和拆除
三次握手:其实就是指建立一个 TCP 连接时,需要客户端和服务器端总共发送三个包。进行三次握手的主要目的是为了确认双方的接收能力和发送能力是否正常,实质上就是连接服务器指定端口,建立 TCP 连接,并且同步连接双方的序列号和正确号,交换 TCP 窗口大小信息。
刚开始客户端处于Closed状态,服务器端处于Listen状态,进行三次握手:
- 第一次握手:客户端向服务器端发送一个
SYN
报文,并指明客户端的初始化序列号
ISN(c)
,此时客户端处于
SYN_SEND
状态。首部的同部位
SYN=1
,初始序号
seq=x
。
SYN
报文段不能携带数据。
- 第二次握手:服务端收到客户端的
SYN
报文之后,会以自己的
SYN
报文作为应答,并且也是指定了自己的初始化序列号
ISN(c)
。同时会把客户端的 ISN + 1 作为 ack 的值,表示自己已经收到客户端的 SYN,此时服务端处于
SYN_REVD
的状态。在确认报文段中,
SYN=1
,
ACK=1
,确认号
ack=x+1
,初始序号
seq=y
。
- 第三次握手:客户端收到
SYN
报文之后,会发送一个
ACK
报文,将服务器的初始序号 ISN + 1 作为 ack 的值,此时客户端处于
ESTABLISHED
状态。确认报文段
ACK=1
,确认号
ack=y+1
,序号
seq=x+1
。ACK 报文段可以携带数据。
四次挥手:TCP 连接的拆除需要发送四个包,因此称为四次挥手(四次握手),客户端和服务器均可主动发起挥手动作。之所以需要发送四个包,是因为 TCP 的半关闭造成的,所谓的半关闭就是 TCP 提供了连接的一端在结束它的发送之后还能接收来自另一端数据的能力。
刚开始双方都处于
ESTABLISHEN
状态,假如是客户端发起关闭请求,则四次挥手的过程如下:
- 第一次挥手:客户端发送一个
FIN
报文,报文中会指定一个序列号,此时客户端处于
FIN_WAIT1
状态,并停止再发送数据,主动关闭 TCP 连接,等待服务器的确认。
- 第二次挥手:服务器收到
FIN
报文,会发送一个
ACK
报文,指定一个序列号,将客户端的序列号的值 +1作为 ACK 报文的确认号的值,此时服务器为
CLOSE_WAIT
状态。此时 TCP 处于半关闭状态,客户端到服务器的连接释放,客户端进入
FIN_WAIT2
状态。
- 第三次挥手:如果服务器也想断开连接,向客户端发送
FIN
报文,指定一个序列号,此时服务器处于
LAST_ACK
状态。
- 第四次挥手:客户端接收到
FIN
之后,发送一个
ACK
报文作为应答,把服务器的序列号的值 +1作为确认号
ack
的值,把服务器的确认号作为
ACK
报文的序列号,此时客户端处于
TIME_WAIT
状态,需要过一段时间(2MSL,MSL为报文段最大生存时间)以确保服务器收到确认报文,进入
CLOSED
状态。
UDP(User Datagram Protocol)
UDP 是无连接的
UDP 是尽最大努力交付,既不保证可靠交付,因此主机不需要维持复杂的链接状态
UDP 是面向报文的
UDP 没有阻塞控制,因此网络出现拥塞不会使源主机的发送率降低(对实时应用很有用,如直播,实时视频会议等)
UDP 支持一对一、一对多、多对多的交互通信
UDP 的首部开销小,只有8个字节,比 TCP 的20个字节要短
网络层
网络层的任务就是选择合适的网间路由和交换节点,确保计算机通信的数据及时传送。在发送数据时,网络层把传输层产生的报文段或用户数据封装成分组和包进行传送。在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报,简称数据报。
IP(Internet Protocol)
IP 网际协议是把各种数据报传送给对方
数据链路层
数据链路层通常也称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的。在两个相邻节点间传送数据时,数据链路层将网络层接下来的 IP 数据报组装成帧,在结点间的链路上传送帧。
物理层
物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具有传输介质和物理设备的差异。在物理层上所传送的数据单位是比特。
HTTP和HTTPS的区别
HTTPS的出现
HTTPS 的出现解决了 HTTP 不安全的问题。由于 HTTP 是明文传输,在 HTTP 的传输过程中,任何人都可以从中截获、修改或者伪造请求发送,所以可以认为 HTTP 是不安全的;在 HTTP 的传输过程中不会验证通信方的身份,因此 HTTP 信息交换的双方可能会遭到伪装;在 HTTP 传输过程中,接收方和发送方并不会验证报文的完整性。
HTTPS 是 HTTP 协议的一种扩展,在 HTTPS 中,使用传输层安全性(TLS)或安全套接字层(SSL)对通信协议进行加密。
HTTP:
- 协议:运行在 TCP 之上,明文传输,客户端与服务器都无法验证对方的身份
- 端口:80
- 资源消耗:较少
- 开销:无需证书
- 加密机制:无
- 安全性:弱
HTTPS:
- 协议:加了 SSL(Secure Socket Layer)的 HTTP,运行与 SSL 上,SSL 运行在 TCP 上,是添加了加密和认证机制的 HTTP
- 端口:443
- 资源消耗:由于加密处理,会消耗更多的 CPU 和内存资源
- 开销:需要证书,而证书一般需要向认证机构购买
- 加密机制:共享密钥加密和公开密钥并用的混合加密机制
- 安全性:由于加密机制,安全性高
TLS(Transport Layer Security)是 SSL 的后续版本,它们是用于在互联网两台计算机之间用于身份验证和加密的一种协议。