计算机网络的两种模型:OSI 模型和 TCP/IP 模型
由于 OSI 模型过于复杂难以实现,导致 TCP/IP 模型更早地应用在现实中,这也使得 TCP/IP 模型成为标准
在 OSI 模型中,将计算机网络分成了 7 层,而在 TCP/IP 模型中则分成了 4 层,其各层对应关系如下表所示:
OSI | TCP/IP | 对应网络协议 | 所在位置 |
---|---|---|---|
应用层 | 应用层 | TFTP, FTP, NFS, WAIS | 主机 |
表示层 | Telnet, Rlogin, SNMP, Gopher | ||
会话层 | SMTP, DNS | ||
传输层 | 传输层 | TCP, UDP | |
网络层 | 网际层 | IP, ICMP, ARP, RARP, AKP, UUCP | 媒介 |
数据链路层 | 网络接口层 | FDDI, Ethernet, Arpanet, PDN, SLIP, PPP | |
物理层 | IEEE 802.1A, IEEE 802.2到IEEE 802.11 |
在 Internet 中所有的传输都是通过 TCP/IP 进行的。
HTTP 协议作为 TCP/IP 模型中应用层的协议也不例外,HTTP 协议通常承载于 TCP 协议之上,有时也承载于 TLS 或 SSL 协议层之上,这个时候,就成了我们常说的 HTTPS
HTTP 默认的端口号为 80,HTTPS 的端口号为 443
在整个计算机网络体系中,最核心的当属是位于传输层的 TCP 与 UDP 协议了。因为他们位于主机协议栈的最底层,向上方应用层提供不同的数据交付方式。
UDP 全称用户数据报协议(User Datagram Protocal),它有以下几个值得注意的特点:
其中从 1 到 8 字节分别是来源端口号、目的端口号、报文长度、检验和,每个字段各占两字节。
UDP 的通信方式较为简单,发送端发送完一个报文继续发送下一个,待将所有报文发送完毕通信就结束了。
接收方也是如此。
TCP 全称传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP 协议所要实现的功能是端到端之间的可靠传输,因此,相较于 UDP 协议而言,TCP 协议要复杂的多。
相对于 UDP 协议,TCP 协议有下面的几个特点:
此外,还需要注意的是,TCP 提供的是全双工的通信。
各个字段功能如下:
来源端口(2字节):标识来源端口号
目的端口(2字节):标识目的端口号
序列号码(4字节):表明此封包在字节流中的顺序号(因为 TCP 是面向字节流的协议,需要保证最终的数据顺序与发送方发送的顺序一致,所以需要这个字段来表明该封包在字节流中的位置)
确认号码(4字节):对此前按顺序收到的最后一个封包的序列号码的确认(确认号 =n,表示 n-1 及其之前的封包都已经收到)
报头长度(1字节):指示报文头部的长度
保留字段(10位):暂时没打算好干啥用,一律置 0
标识符(6位):
窗口(2字节):表示从确认号开始,本报文的源方可以接收的字节数,即源方接收窗口大小。用于流量控制
校验和(2字节)对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。这是一个强制性的字段
紧急指针(2字节):本报文段中的紧急数据的最后一个字节的序号
选项字段(最多40字节):每个选项的开始是 1 字节的 kind 字段,说明选项的类型
为了搞明白下面要说的 TCP 的一些机制,首先需要知道 TCP 协议能够实现可靠传输的一个基本的原理--超时重传。
说来很简单,其实就是收到当接收方收到一个数据封包的时候就向发送方发送一个确认数据封包。而当发送方发送完一个数据封包经过一段时间没有收到接收方的确认封包时,就会将上一个封包再次向接收方发送一次。
当然,TCP 中真正的机制比这个要复杂的多,但是基于的原理都是一样的。
在说 TCP 连接之前先插播一个小故事。
有一天,小明到店里去买笔,于是跟老板有了以下对话: 小明:我要一支笔。 老板:你确定要一支笔? 小明:我确定要一支笔! 于是老板就给了小明一支笔……
这就是典型的 TCP 连接建立的过程。如下面的图:
ACK 表示 TCP 包头中的确认标识
以上步骤就是俗称的“TCP 三次握手”
当然,有连接建立,就有连接释放,客户端与服务器之间的连接释放过程大概是下面这个样子的
跟建立连接的时候差不多,大概过程大概向下面这样:
如上步骤就是俗称的“TCP 4次挥手”。
这里之所以是 4 次,主要是与建立连接时相比,服务器的确认和结束被分成了两个封包分别发送了出去
1、传输层提供端到端的可靠报文传递和错误恢复
2、HTTP 的端口号是 80;HTTPS 的端口号是 443
3、UDP 注重数据传输快,TCP 注重数据可靠性