TCP/IP协议栈

发布于:2024-10-13 ⋅ 阅读:(50) ⋅ 点赞:(0)

一、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端口是否打开