TCP/IP协议
2021 networkTCP/IP 协议包含两个核心协议:TCP(传输控制协议)和 IP(网际协议)。TCP 包含了逻辑编址,路由选择,域名解析,错误检测和流量控制等重要特征。
重要特性
-
逻辑编址
每一块网卡在出厂时就由厂家分配了一个独一无二的永久性的物理地址。在 Internet 中,为每台连入的计算机分类一个逻辑地址,这个逻辑地址被称为 IP 地址。
-
路由选择
在 TCP/IP 中包含了专门用于定义路由器如何选择网络路径的协议,即 IP 数据包的路由选择。
-
域名解析
将域名映射为 IP 地址的操作称为域名解析。
-
错误检测和流量控制
TCP/IP 具有分组交换确保数据在网络上可靠传递的特性。
分层模型
TCP/IP 分层模型由 4 个层次构成,即应用层、传输层、网际层和网络接口层。
-
应用层。用户调用应用程序来访问 TCP/IP 互连网络,应用程序负责发送和接受数据。
-
传输层。传输层的基本任务是提供应用程序之间的通信服务。这种通信又称为端到端的通信。在传输层与网际层之间传递的对象是传输层分组。
-
网际层。又称 IP 层,主要处理机器之间的通信问题。它接受传输层的请求,传输某个具有目的地址信息的分组。
-
网络接口层。处于 TCP/IP 协议层之下,负责接收 IP 数据报,并把数据报通过选定的网络发送出去。
网际层协议
IP
IP 所提供的服务通常被认为是无连接的(connectionless)和不可靠的(unreliable)。
IP 的主要功能包括将上层数据(如 TCP、UDP 数据)或同层的其他数据(如 ICMP 数据)封装到 IP 数据报中;将 IP 数据报传送到最终目的地;为了使数据能够在链路层进行传输,对数据进行分段;确定数据报到达其他网络中的目的地路径。
ARP 和 RARP
地址解析协议(Address Resolution Protocol, ARP)和反地址解析协议(RARP)是网际层另一个重要协议。ARP 的作用是将 IP 地址转换为物理地址,RARP 的作用是将物理地址转换为 IP 地址。
ICMP
Internet 控制信息协议(Internet Control Message Protocol, ICMP),是专门用于发送差错报文的协议。ICMP 定义了 5 种差错报文(源抑制、超时、目的不可达、重定向和要求分段)和 4 种信息报文(回应请求、回应应答、地址屏蔽码请求和地址屏蔽码应答)。IP 在需要发送一个差错报文时要使用 ICMP,而 ICMP 也是利用 IP 来传送报文的。ICMP 也可以用于测试 Internet,例如 Ping 就是利用 ICMP 报文进行目标是否可达测试。
传输层协议
TCP
TCP(Transmission Control Protocol,传输控制协议),它在 IP 提供的不可靠数据服务的基础上为应用程序提供了一个可靠的、面向连接的、全双工的数据传输服务。
每次 HTTP 请求都会有一次通道,每次通道都会建立三次握手四次挥手。
三次握手
利用 TCP 在源主机和目标主机之间建立连接操作时,需要通过三次握手进行确认。
+--------+ +--------+
| | 1 ==== SYN SEQ=X ===> | |
| Client | 2 <=== ACK X+1, SYN SEQ=Y ==== | Server |
| | 3 ==== ACK Y+1 ===> | |
+--------+ +--------+
序列号的作用是使得一个 TCP 接收端可丢弃重复的报文段,记录以杂乱次序到达的报文段。因为 TCP 使用 IP 来传输报文段,而 IP 不提供重复消除或者保证次序正确的功能。另一方面,TCP 是一个字节流协议,绝不会以杂乱的次序给上层程序发送数据。因此 TCP 接收端会被迫先保持大序列号的数据不交给应用程序,直到缺失的小序列号的报文段被填满。
一个完整的 TCP 连接是双向和对称的,数据可以在两个方向上平等地流动。给上层应用程序提供一种双工服务。一旦建立了一个连接,这个连接的一个方向上的每个 TCP 报文段都包含了相反方向上的报文段的一个 ACK。
四次挥手
+--------+ +--------+
| | FIN=1,seq=u | |
| +-------------------------->| |
| | | |
| | ACK=1,seq=v,ack=u+1 | |
| |<--------------------------+ |
| Client | | Server |
| | FIN=1,ACK=1,seq=w,ack=u+1 | |
| |<--------------------------+ |
| | | |
| | ACK=1,seq=u+1,ack=w+1 | |
| +-------------------------->| |
| | | |
+--------+ +--------+
上图符号:
- FIN: 连接终止符
- seq: 发送第一个字节的序号
- ACK: 确认报文段
- ack: 确认号。希望收到的下一个数据的第一个字节的序号
由于 TCP 的半关闭特性,TCP 提供了连接的一端在结束它的发送后还能接受来自另一端的能力。
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入并关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。
UDP
用户数据报协议(User Datagram Protocol, UDP)是一种不可靠的、无连接的协议。UDP 有助于提高传输的速率。
IP 地址
每个 IP 地址都由 4 个小于 256 的数字组成,数字之间用“.”分开。IP 地址可分为 5 类:A 类、B 类、C 类、D 类和 E 类。
在 IP 地址中,全 0 代表的是网络,全 1 代表的是广播。
子网掩码
网络软件和路由器使用子网掩码(Subnet Mask)来识别报文是仅存在网络内部还是被路由转发到其他地方。
在一个字段内,1 表明一个字段包含所有或部分网络地址,0 表明主机地址位置。最常用的 C 类地址使用前 3 个字节来识别网络,最后一个字节识别主机。因此子网掩码是 255.255.255.0
为了避免 IP 浪费,出现了允许应用不同大小的子网掩码来对 IP 地址空间进行子网划分的解决方案,称为可变长子网掩码(VLSM)。就是在 IP 地址后面加上 “/网络号及子网络号编码地址位数”。如 193.168.125.0/27 表示前 27 位表示网络号。