应用层
为什么要引入应用层
定义进程间传输的内容规范。
对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统 DNS,支持万维网应用的 HTTP 协议,支持电子邮件的 SMTP 协议等等。我们把应用层交互的数据单元称为报文。
HTTP协议
https
http长链接和短链接
对于HTTP 1.0的http标准而言,默认连接是短连接,啥叫短连接?就是服务器当发送完最后一个字节的数据之后将关闭连接,也就是回收tcp_sock结构,这样,如果客户端再发送数据给服务器,将直接丢弃。即使此时客户端还有这样的结构,但是我们说连接已经关闭或者已经断了。那客户端知不知道啥时候服务器的连接关闭?不知道,双方可以在任何时候来关闭自己的连接而没有必要通知对方。那短连接的弊端,大家可能都已经知道了,如果对一个服务器要连续发送多个请求,还需要为每次请求建立新的连接。
为了降低建立连接的时间,HTTP 1.1引入了长连接的概念,并把它搞成了默认的连接方式。啥叫长连接?就是当完成一个业务之后,socket结构并不回收。这样,只要在socket结构还存在的时候,客户端发送的任何数据,服务器都可以收到,这就是所谓的长连接。
相比短连接而言,长连接并没有什么特别的新的技术,只是维护socket结构时间长了。因为,说http长连接更不如说是tcp长连接。
http和tcp协议关系
TCP是底层通讯协议,定义的是进程间数据传输和连接方式的规范(进程间可靠传输);
HTTP是应用层协议,定义的是进程间传输数据的内容的规范(应用层内容规范约定);
传输层
为什么引入传输层
我们知道传输层位于网络层之上,网络层提供了主机之间的逻辑通道。那既然已经把一个数据包从一个主机发到另一个主机上面了,为什么还需要传输层呢?这是因为传输层提供了应用进程之间的端-端连接。我们知道一个电脑可能有多个进程同时在使用网络连接,那么网络包达到主机之后,怎么区分自己属于那个进程?这就需要靠传输层的作用了。(网络层只负责IP层面的数据传输,且对可靠性不负责)因此,引入传输层主要有两点:
- 进程层面的数据通信协议。
- 传输可靠性保障。
TCP协议
什么是TCP链接?
这里先说结论,连接实际上是操作系统内核的一种数据结构,称为TCP控制块(TCB),对于linux而言是tcp_sock结构。用于保证可靠性和流控制机制的信息,包括 Socket、序列号以及窗口大小叫做连接。
建立 TCP 连接就是通信的双方需要对上述的三种信息达成共识,连接中的一对 Socket 是由互联网地址标志符(IP)和端口组成的,窗口大小主要用来做流控制,最后的序列号是用来追踪通信发起方发送的数据包序号,接收方可以通过序列号向发送方确认某个数据包的成功接收。
为什么需要TCB?
当应用希望发送数据时,并不是直接向网卡驱动发数据,而是先放入到一个内核缓冲区中,然后根据一定算法(达到一定数量或者调用flush之后),缓冲区中的数据就发送到网卡中了(这里说的不准确,实际上,是网卡主动从