1. TCP/IP 网络分层
TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议,通过20多年的发展已日渐成熟,并被广泛应用于局域网和广域网中,目前已成为事实上的国际标准。TCP/IP协议簇是一组不同层次上的多个协议的组合,通常被认为是一个四层协议系统,与OSI的七层模型相对应。
协议的分层从上往下依次是
- Ethernet II:网络接口层以太网帧头部信息
- Internet Protocol Version 4:互联网层 IP 包头部信息
- Transmission Control Protocol:传输层的数据段头部信息,此处是 TCP 协议
- Hypertext Transfer Protocol:应用层 HTTP 的信息
1.1 应用层(Application Layer)
应用层负责处理特定的应用程序细节。
应用层的本质是规定了应用程序之间如何相互传递报文,很多应用层协议都是由 RFC 文档定义,应用层协议有
- 域名解析协议 DNS
- 收发邮件 SMTP 和 POP3 协议
- 时钟同步协议 NTP
- 网络文件共享协议 NFS
以HTTP为例 - 报文的类型,是请求报文还是响应报文
- 报文的语法,报文分为几段,各段是什么含义、用什么分隔,每个部分的每个字段什么什么含义
- 进程应该以什么样的时序发送报文和处理响应报文
1.2 传输层(Transport Layer)
运输层主要为两台主机上的应用程序提供端到端的通信。
传输层的作用是为两台主机之间的「应用进程」提供端到端的逻辑通信,相隔几千公里的两台主机的进程就好像在直接通信一样。
在 TCP / IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。
1.3 网络互连层(Internet Layer)
处理分组在网络中的活动,例如分组的选路。
网络互连层提供了主机到主机的通信,将传输层产生的的数据包封装成分组数据包发送到目标主机,并提供路由选择的能力。
网络互连层协议包括 IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(In ternet组管理协议)。
IP 协议是网络层的主要协议,TCP 和 UDP 都是用 IP 协议作为网络层协议。这一层的主要作用是给包加上源地址和目标地址,将数据包传送到目标地址。
IP 协议是一个无连接的协议,也不具备重发机制,这也是 TCP 协议复杂的原因之一就是基于了这样一个「不靠谱」的协议。
1.4 网络访问层(Network Access Layer)
通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
网络访问层也有说法叫做网络接口层,以太网、Wifi、蓝牙工作在这一层,网络访问层提供了主机连接到物理网络需要的硬件和相关的协议。
2. TCP协议概述
TCP 是一个可靠的(reliable)、面向连接的(connection-oriented)、基于字节流(byte-stream)、全双工的(full-duplex) 协议。
2.1 面向连接的(connection-oriented)
面向连接意味着两个使用 TCP的应用(通常是一个客户和一个服务器)在彼此交换数据
之前必须先建立一个 TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说
“喂”,然后才说明是谁。
建立连接的过程是通过「三次握手」来完成的,顾名思义,通过三次数据交换建立一个连接。 通过三次握手协商好双方后续通信的起始序列号、窗口缩放大小等信息。
2.2 可靠的(reliable)
IP 是一种无连接、不可靠的协议:它尽最大可能将数据报从发送者传输给接收者,但并不保证包到达的顺序会与它们被传输的顺序一致,也不保证包是否重复,甚至都不保证包是否会达到接收者。
TCP 的可靠性主要依靠:
- 应用数据被分割成TCP认为最适合发送的数据块。这和 UDP完全不同,应用程序产生的数据报长度将保持不变。由 TCPTCP传递给I P的信息单位称为报文段或段( segment)
- 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
- 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒
- TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错, TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。
- 既然TCP报文段作为IP数据报来传输,而 IP数据报的到达可能会失序,因此 TCP报文段的到达也可能会失序。如果必要, TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
- 既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
- TCP还能提供流量控制。 TCP连接的每一方都有固定大小的缓冲空间。 TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。
2.3 基于字节流(byte-stream)
TCP 是一种字节流(byte-stream)协议,流的含义是没有固定的报文边界。每次TCP报文发送的字节数都不是固定的,取决于路径最大传输单元 MTU、发送窗口大小、拥塞窗口大小。
两个应用程序通过T C P连接交换8 bit字节构成的字节流。T C P不在字节流中插入记录标识
符。我们将这称为字节流服务( byte stream service)。如果一方的应用程序先传 1 0字节,又传
2 0字节,再传5 0字节,连接的另一方将无法了解发方每次发送了多少字节。收方可以分 4次接
收这8 0个字节,每次接收 2 0字节。一端将字节流放到 T C P连接上,同样的字节流将出现在
T C P连接的另一端。
2.4 全双工的(full-duplex)
在 TCP 中发送端和接收端可以是客户端/服务端,也可以是服务器/客户端,通信的双方在任意时刻既可以是接收数据也可以是发送数据,每个方向的数据流都独立管理序列号、滑动窗口大小、MSS 等信息。
参考资料
《深入理解 TCP 协议:从原理到实战》