TCP详解

TCP协议全称: 传输控制协议, 顾名思义, 就是要对数据的传输进行一定的控制.

tcp报头

源端口号/目的端口号: 表示数据从哪个进程来, 到哪个进程去.

32位序号:

4位首部长度: 表示该tcp报头有多少个4字节(32个bit)

6位保留: 顾名思义, 先保留着, 以防万一

6位标志位

 URG: 标识紧急指针是否有效
 ACK: 标识确认序号是否有效
 PSH: 用来提示接收端应用程序立刻将数据从tcp缓冲区读走
 RST: 要求重新建立连接. 我们把含有RST标识的报文称为复位报文段
 SYN: 请求建立连接. 我们把含有SYN标识的报文称为同步报文段
 FIN: 通知对端, 本端即将关闭. 我们把含有FIN标识的报文称为结束报文段

16位窗口大小:

16位检验和: 由发送端填充, 检验形式有CRC校验等. 如果接收端校验不通过, 则认为数据有问题. 此处的校验和不光包含TCP首部, 也包含TCP数据部分.

16位紧急指针: 用来标识哪部分数据是紧急数据.

选项和数据暂时忽略

三次握手|四次挥手

SYN:同步序列编号(Synchronize Sequence Numbers)。是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

ISN:Initial Sequence Number 32位初始化序列号
ISN = M + F (Sip, Sport, Dip, Dport, <Some Secret>)
M:单调增加的计数器
F:单向散列哈希函数 (例如 MD4 or MD5)
Sip:源IP地址
Sport:源端口
Dip:目的IP地址
Dport:目的端口
<Some Secret>:哈希函数可选部分,使远程攻击者更难猜到ISN。
  • LISTEN:侦听来自远方 TCP 端口的连接请求。
  • SYN-SENT:在发送连接请求后等待匹配的连接请求。
  • SYN-RECEIVED:在收到和发送一个连接请求后等待对连接请求的确认。
  • ESTABLISHED:代表一个打开的连接,数据可以传送给用户。
  • FIN-WAIT-1:等待远程 TCP 的连接中断请求,或先前的连接中断请求的确认。
  • FIN-WAIT-2:从远程 TCP 等待连接中断请求。
  • CLOSE-WAIT:等待从本地用户发来的连接中断请求。
  • CLOSING:等待远程 TCP 对连接中断的确认。
  • LAST-ACK:等待原来发向远程 TCP 的连接中断请求的确认。
  • TIME-WAIT:等待足够的时间以确保远程 TCP 接收到连接中断请求的确认。
  • CLOSED:没有任何连接状态

tcp三次握手四次挥手

  • 第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN(c)。此时客户端处于 SYN_Send 状态。
  • 第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s)。同时会把客户端的 ISN + 1 作为 ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_REVD 的状态。
  • 第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 establised 状态。
  • 服务器收到 ACK 报文之后,也处于 establised 状态,此时,双方已建立起了链接。

三次握手的作用

三次握手的作用也是有好多的,多记住几个,保证不亏。例如:

  • 确认双方的接受能力、发送能力是否正常。
  • 指定自己的初始化序列号,为后面的可靠传送做准备。
  • 如果是 HTTPS 协议的话,三次握手这个过程,还会进行数字证书的验证以及加密密钥的生成
参考:
https://blog.csdn.net/sinat_36629696/article/details/80740678
https://blog.csdn.net/u011957758/article/details/72353485

Leave Comment

电子邮件地址不会被公开。 必填项已用*标注