TCP协议基础知识

2018-08-15  本文已影响1人  天渊hyominnLover

TCP连接简介

TCP技术详述

TCP报文格式

  1. 序号:32位的Seq序号,标识从TCP源端向目的端发送的字节流,发送方发送数据时进行标记
  2. 确认号:32位的Ack序号,Ack=Seq+1,只有当Ack标志位为1时,该Ack确认号才有效;确认号表示发出方希望获得的对方下一次报文的Seq序号
  3. 标志位:6个标志位,分别是URG、ACK、PSH、RST、SYN、FIN,含义如下

TCP三次握手

三次握手(Three-way Handshake),指的是建立一个TCP连接时,需要客户端和服务器发送三个包

其目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息

在socket编程中,客户端执行connect()时,将触发三次握手:

  1. 第一次握手:
  1. 第二次握手:
  1. 第三次握手:

TCP四次挥手

四次挥手(four-way handshake),客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

  1. 第一次挥手:
  1. 第二次挥手:
  1. 第三次挥手:
  1. 第四次挥手:

注:若客户端为主动方发送完最后一个ACK报文后,TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后才进入CLOSED状态,而服务器在接到客户端的Ack报文后马上进入CLOSED状态

三次握手和四次挥手完整示意图:


三次握手四次挥手.jpg

MSL(Maximum Segment Lifetime)最长报文段寿命,TCP允许不同的实现可以设置不同的MSL值

1)确保客户端发出的最后一个ACK报文能够传达到服务器,防止丢失
2)防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中

为什么建立连接是三次握手,关闭连接确是四次挥手呢?

服务器收到客户端的断开连接的FIN+ACK时,仅表示客户端不再发送数据,但还能接受数据,所以服务器在进行回发确认ACK报文后,还可以传输一些剩余数据,传输完成后再发送FIN报文,表示数据传输完了,连接可以关闭了,因此是四次挥手

建立连接后客户端故障怎么办

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

上一篇 下一篇

猜你喜欢

热点阅读