一、TCP/IP和OSI模型的比较
-
相同点
两者都是以协议栈的概念为基础
协议栈中的协议彼此相互独立
下层对上层提供服务
-
不同点
OSI是先有模型;TCP/IP是先有协议,后有模型
OSI是国际标准,适用于各种协议栈;TCP/IP实际标准,只适用于TCP/IP网络
二、 TCP报文段
-
源端口号、目的端口号
通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。
0是不可以用的 代表位置端口
1-1024 超级管理员用
1024及以上 普通用户
知名的协议有端口号
服务端:端口号一般是固定的
客户端:端口号是随机生成的
端口号在一台机器上是唯一的,在不同机器是可以相同的。
-
序列号
-
确认号(ack)
确认机制:确保A B双方都能收到数据的机制
-
窗口大小
表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value * Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值。
-
首部长度
表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。
-
控制位
(1)SYN 同步位
在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。
(2)ACK 确认位
连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段。
(3)FIN 结束位
如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以断开连接了”。
(4)URG 紧急位
表示本报文段中发送的数据是否包含紧急数据。
(5)PSH 急切位
立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。
(6)RST 重置位
如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应。
三、三次握手
tcp是面向连接的,就是说每次发送数据之前都要和对方建立一条可靠的连接,这个建立连接的过程分为3个步骤,就叫做三次握手。
PC1和PC2建立连接的过程:
PC1首先会把序号x 和同步位1的SYN报文给PC2,请求建立连接;
PC2收到PC1发来的建立连接请求后,会回复一个序号为y且确认号为x+1、同步位为1、确认位也为1的报文,表示同意和PC1建立连接;
PC1收到PC2同意连接的报文后,会再回复一个序号为x+1且确认号为y+1和确认位为1的报文给PC2。
此时PC1和PC2就完成了三次握手。
三次握手的目的是保证双方可以正常通信。
四、TCP四次挥手
(1)四次挥手过程
- 第一次挥手:客户端发送一个带有FIN标志的数据包给服务端,表明它不再发送数据,但还可以接收数据。客户端进入FIN_WAIT_1状态。
- 第二次挥手:服务端收到FIN包后,发送一个ACK确认包给客户端,表示已经收到了关闭连接的请求。服务端进入CLOSE_WAIT状态。
- 第三次挥手:服务端完成数据发送后,发送一个FIN包给客户端,表示它也准备关闭连接。服务端进入LAST_ACK状态。
- 第四次挥手:客户端收到服务端的FIN包后,发送一个ACK确认包给服务端,表示已经收到了关闭连接的请求。客户端进入TIME_WAIT状态。
半关闭状态:发生在TCP连接的第三次挥手过程中。在客户端发送FIN报文后,服务端回复ACK报文,此时客户端进入FIN_WAIT_2状态,不再发送数据,但仍然能够接收服务端发送的数据,连接处于半关闭状态。
客户端先发送一个FIN给服务端,自己进入FIN_WAIT_1状态,这时等待接收服务端报文,该报文会有两种可能:
-
只有服务端的ACK
ACK=1 收到关闭连接的请求,但还不能断开连接,进入半关闭状态。
-
基于服务端的ACK,又有FIN
ACK=1 FIN=1 真的断开。
(2)为什么需要四次挥手
- 全双工通信:TCP连接是全双工的,意味着数据可以在两个方向上独立传输。因此,每个方向的关闭都需要单独的FIN和ACK交换。
- 确保数据完整性:通过四次挥手,可以确保双方都确认了连接的关闭,从而避免数据丢失或不完整。
(3)2MSL
- TIME_WAIT等待时间是2MSL的原因:等待2MSL的时间是为了确保在网络中的所有数据包都已过期并被丢弃,防止出现旧的数据包在网络中循环并导致连接错误关闭的问题。
五、TCP超时重传
(1)工作原理
- 发送方发送数据包:发送方将数据分割成多个数据包,并为每个数据包分配一个序列号。然后,发送方会将数据包发送给接收方,并为每个数据包启动一个计时器。
- 发送方启动计时器:发送方在发送数据包后会启动一个计时器,该计时器的值称为RTO(Retransmission Timeout),即重传超时时间。RTO的值通常会根据网络状况进行动态调整。
- 接收方接收数据包:接收方收到数据包后会检查数据包的完整性,并对数据包进行排序。如果数据包完整且按序到达,接收方会发送确认报文给发送方。
- 发送方收到确认报文:发送方收到确认报文后,会停止计时器。如果在RTO时间内没有收到确认报文,发送方会认为数据包丢失,并重新发送该数据包。
(2)意义
TCP超时重传机制确保了数据传输的完整性和可靠性,是TCP协议可靠性的重要保障。通过这一机制,TCP协议能够广泛应用于各种网络应用中,如文件传输、电子邮件、网页浏览等,成为构建可靠网络应用的基础。
六、UDP协议
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输层协议,它不提供数据包的顺序保证或重传机制。
-
TCP和UDP的区别
TCP | UDP | |
连接类型 | 面向连接 | 无连接 |
传输速度 | 慢 | 快 |
稳定性 | 稳定 | 不稳定 |
重传机制 | 有重传报错机制 | 没有重传机制 |
七、Telnet
Telnet是一种基于TCP/IP协议的网络协议,主要用于远程登录和管理计算机。它允许用户通过命令行界面与远程计算机进行交互,是Internet远程登录服务的标准协议之一。
格式: telnet ip地址 端口
示例:
telnet 192.168.91.100 22
本机测试 远端服务器192.168.91.100的 22端口是否打开