传输层的协议

  1. 传输控制协议(TCP)

    • 原理:TCP是一种面向连接的、可靠的传输层协议。它通过三次握手过程建立连接,确保两端通信之前都准备就绪。TCP协议通过序列号、确认应答、窗口控制等机制实现数据的可靠传输、流量控制和拥塞控制。数据被分割成TCP认为最合适发送的“段”,并确保每个数据段都将被对方确认收到,否则将重传这些数据段。
    • 特点
      • 可靠性:确保数据无误地从源传输到目的地。
      • 有序性:确保数据按照发送的顺序到达接收方。
      • 重发控制:未被确认的数据段会被重发。
      • 流量控制:通过控制发送方的数据流量来阻止接收方被大量数据淹没。
      • 拥挤控制:避免网络中的过度拥塞。
  2. 用户数据报协议(UDP)

    • 原理:UDP是一种无连接的协议,提供了一种非常简单的服务。它不保证数据包的顺序、完整性或数据的重发,也不进行流量控制或拥挤控制。因此,UDP协议能够提供较低的延迟和较少的开销,适用于对实时性要求高的应用,如视频流、在线游戏和语音传输。
    • 特点
      • 高效:少量的数据包头开销,处理快速。
      • 无连接:发送数据前不需要建立连接。
      • 无可靠性保证:不确保数据包的顺序、完整性或防止重复。
      • 适用于实时应用:因其低延迟特性而被广泛用于实时通信应用

三次握手的详细过程:

假设两个TCP端点是客户端(Client)和服务器(Server)。

  1. 第一次握手(客户端 -> 服务器)

    • 客户端生成一个初始序列号 seq = x(这里的x是随机的),并发送一个SYN包(SYN=1, seq=x)到服务器,请求建立连接。
  2. 第二次握手(服务器 -> 客户端)

    • 服务器收到客户端的SYN包后,需要确认这个包(ack=x+1)。同时,服务器也选择自己的一个初始序列号 seq = y 并将其发送给客户端,所以这个包是一个SYN-ACK包(SYN=1, ACK=1, seq=y, ack=x+1)。
  3. 第三次握手(客户端 -> 服务器)

    • 客户端接收到服务器的SYN-ACK包后,发送一个ACK确认包(ACK=1, seq=x+1, ack=y+1)回服务器,确认号ack是服务器SYN-ACK包中的seq号加1。至此,建立连接,可以开始数据传输。

四次挥手的详细过程:

假设客户端(C)和服务器(S)已建立连接并准备终止它。

  1. 第一次挥手(客户端 -> 服务器)

    • 客户端决定关闭连接,发送一个FIN包(FIN=1, seq=u),其中seq=u是客户端序列号。
  2. 第二次挥手(服务器 -> 客户端)

    • 服务器接收到这个FIN包,发送ACK确认包(ACK=1, seq=v, ack=u+1),seq=v是服务器的序列号,ack=u+1是对客户端FIN的确认。
  3. 第三次挥手(服务器 -> 客户端)

    • 服务器准备关闭连接,但在关闭前还可能会发送一些数据。当服务器确实完成了数据传输,则发送一个FIN包(FIN=1, seq=w, ack=u+1)给客户端,seq=w是服务器序列号,ack=u+1是对客户端最后一个ACK的确认。
  4. 第四次挥手(客户端 -> 服务器)

    • 客户端收到服务器发来的FIN包后,发送一个ACK包(ACK=1, seq=u+1, ack=w+1)给服务器,seq=u+1是客户端序列号,ack=w+1是对服务器FIN包的确认。

在最后一个ACK发送后,客户端会等待一段时间(称为2MSL)来确认服务器收到了这个ACK包,这个状态称为TIME_WAIT状态。在经过这个等候时间之后,客户端关闭连接,如果服务器收到了ACK包,则在收到ACK后直接关闭连接。如果没有收到,则会在超时后重发FIN包。

值得注意的是,序列号seq是32位的,而每发送一个字节的数据,seq就会加一,所以这些数字是持续增加的,而不是固定的数值。同理,确认号ack表示期望收到对方下一个数据包的起始序列号。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值