美文网首页
TCP协议基础知识

TCP协议基础知识

作者: 天渊hyominnLover | 来源:发表于2018-08-15 11:04 被阅读1次

TCP连接简介

  • TCP报文包括TCP首部和TCP数据部分,被包装成为IP传输数据,是一种基于连接的字节流传输协议
  • 大小通常为20字节
  • TCP/IP协议族:


    TCP-IP协议族.jpg

TCP技术详述

TCP报文格式

  1. 序号:32位的Seq序号,标识从TCP源端向目的端发送的字节流,发送方发送数据时进行标记
  2. 确认号:32位的Ack序号,Ack=Seq+1,只有当Ack标志位为1时,该Ack确认号才有效;确认号表示发出方希望获得的对方下一次报文的Seq序号
  3. 标志位:6个标志位,分别是URG、ACK、PSH、RST、SYN、FIN,含义如下
  • URG:紧急指针(urgent pointer)有效
  • ACK:确认序号(Ack)有效
  • PSH:接收方应该尽快将报文交给应用层
  • RST:重置连接
  • SYN:发起一个新连接
  • FIN:释放一个连接
  • TCP报文结构图:


    TCP数据包.png

TCP三次握手

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

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

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

  1. 第一次握手:
  • client发送syn报文(此时SYN标志位为1),将自己的序号Seq设置为X
  • client当前状态:SYN-SENT(同步发送)
  • server当前状态:LISTEN(监听)
  • 该报文不携带数据,消耗一个序号
  1. 第二次握手:
  • server发回确认包进行应答,SYN标志位和ACK标志位均为1,将确认序号Ack设置为X+1,自己的序号Seq设置为Y
  • server当前状态:SYN-RCVD(同步收到)
  • client当前状态:ESTABLISHED(连接状态)
  • 该报文不携带数据,消耗一个序号
  1. 第三次握手:
  • client再次发送确认包,SYN标志位回置为0,ACK标志位为1,将确认序号Ack设置为Y+1
  • server当前状态:ESTABLISHED(连接状态)
  • client当前状态:ESTABLISHED(连接状态)
  • 该报文可携带数据,携带数据时需消耗一个序号

TCP四次挥手

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

  1. 第一次挥手:
  • 主动方发送FIN+ACK报文,FIN标志位为1,ACK标志位为1,Ack设置为Z,序号Seq为U
  • 主动方状态:FIN-WAIT-1(终止等待1)
  • 被动方状态:ESTABLISHED(连接状态)
  • 该报文即使不携带数据也要消耗一个序号
  1. 第二次挥手:
  • 被动方发出Ack报文,ACK=1,Ack设置为U+1,序号Seq=V
  • 被动方状态:CLOSE-WAIT(关闭等待)
  • 主动方状态:FIN-WAIT-2(终止等待2),此时主动方还需接收被动方发送的最后数据
  1. 第三次挥手:
  • 被动方最后的数据发送完成后,向主动方发送连接释放报文,FIN=1,Ack设置为U+1,序号Seq=W
  • 被动方状态:LAST-ACK(最后确认)
  • 主动方状态:FIN-WAIT-2(终止等待2)
  1. 第四次挥手:
  • 主动方发出ACK报文,ACK=1,Ack设置为W+1,序号为U+1
  • 主动方状态:TIME-WAIT(时间等待)
  • 被动方状态:CLOSED(关闭状态)

注:若客户端为主动方发送完最后一个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个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

相关文章

  • 文章笔记

    TCP/IP协议(一)网络基础知识 TCP/IP协议(二)tcp/ip基础知识 字符编码常识及问题解析 代码命名的...

  • PHP面试题集合

    互联网基础知识: TCP/IP协议TCP(传输控制协议)和IP(网际协议 ) 简称TCP/IPIP协议:是将多个包...

  • HTTP协议笔记

    HTTP协议笔记 标签(空格分隔): HTTP,TCP/IP [TOC] 1.网络协议基础知识 TCP/IP协议族...

  • Android网络中篇:Http与Https详解

    一、基础知识 1、TCP/IP协议族 IP协议:网络层协议,保证了计算机之间可以发送和接收数据。 TCP协议:传输...

  • 五分钟带你读懂TCP协议(图文并茂)

    TCP 是互联网核心协议之一,本文介绍它的基础知识。 一、TCP 协议的作用 互联网由一整套协议构成。TCP 只是...

  • TCP/IP基础知识

    引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容、作用以及TCP、UDP、IP三种常见...

  • TCP协议简介

    TCP 是互联网核心协议之一,本文介绍它的基础知识。 互联网 一.TCP协议的作用 互联网由一整套协议构成。TCP...

  • 网络基础知识(一)

    TCP/IP 系列文章网络基础知识(-)TCP/IP基础知识(二)物理层(三)数据链路层(四)IP 协议(五)IP...

  • tcp协议 串联

    TCP协议入门级基础知识梳理。 一. 流程图简述 TCP协议是可靠的传输协议。为了实现可靠传输,所以采用连接管理...

  • 数据链路层(四)

    TCP/IP 系列文章网络基础知识(一)TCP/IP基础知识(二)物理层(三)数据链路层(四)IP 协议(五)IP...

网友评论

      本文标题:TCP协议基础知识

      本文链接:https://www.haomeiwen.com/subject/ribibftx.html