TCP报头

在三次握手中使用的字段:

32位序列号 seq:表示的是本次报文发送的数据的第一个字节的序号。

32位确认号:ack  表示期望下一次应该接受到的报文的第一个字节的序号,若ack = N则表示,到序号N-1为止的所有的数据都已经正确的收到了。

ACK位(图中红色部分,用ACK大写表示ACK位,ack小写表示确认号):确认,当ACK = 1是确认号ack才有效,建立连接后,所有传送的报文段都必须把ACK置为1.

SYN位(图中红色部分):同部位,在建立连接的时候使用,若SYN=1,ACK=0,则表示是一个连接请求报文,若接收方同意接收连接,则使用SYN = 1,ACK = 1。所以,从上面可以看出来SYN = 1表示这个报文是一个连接请求或连接接收报文。

三次握手的过程

A发送连接请求:A发送连接请求时,将SYN置为1,ACK置为0,seq取一个数x,ack取0(因为ACK为0,所以这个时候ack取值没有意义),这个过程将消耗一个序号。

B确认连接:若B同意A请求连接,则B发送的报文中,SYN = 1,ACK = 1,seq取一个数字y,ack取x +1,这个过程将消耗一个序号。seq取y和前面的过程没有关系,ack取x+1是因为,A发送的数据seq为x,并且在发送的过程当中消耗了一个序号,所以,下一次应该收到的数据的地址为x+1,加的1就是消耗的一个序号。

A确认:A需要再次确认,SYN = 0,ACK = 1, seq = x + 1, ack = y + 1。 seq表示发送的数据的序号为x + 1,同时希望B下一次发送的数据的序号为y + 1。

一个例子

发送的第一个数据包

在第一个包的时候SYN = 1,ACK = 1,seq的值为一个随机的值,ack为0。

发送的第二个数据包

在第二个数据包的时候ACK = 1,SYN = 1,seq的值为一个随机数,ack的值为上一个数据包的seq的值+1。

发送的第三个数据包

在第三个数据包中:SYN = 0,ACK = 1,seq的值为第一个数据包的seq的值+1,ack的值为第二个数据包的seq值+1。

总结一下

在三次握手的时候,有四个字段是非常重要的。SYN和ACK均占一位,表示同步和确认。seq和ack均为32位,分别为发送的数据的序号,和希望对方发送的数据的序号。

在三次握手的过程中,第一次和第二次的过程中SYN的值均为1,并且每个过程都消耗掉一个序号,消耗一个序号的意思是:使得数据的序号加1,好像是发送了一位数据,但是并没有真正的传递数据。

参考:谢希仁 《计算机网络》第六版

一次经典的tcp三次握手的更多相关文章

  1. [Linux]经典面试题 - 网络基础 - TCP三次握手

    [Linux]经典面试题 - 网络基础 - TCP三次握手 目录 [Linux]经典面试题 - 网络基础 - TCP三次握手 一.TCP报文格式 1.1 TCP报头 1.2 报文图例 二.TCP三次握 ...

  2. TCP三次握手及其背后的缺陷

    概述 总结一下TCP中3次握手过程,以及其原生的缺陷 引起的SYN Flood的介绍 [1]TCP三次握手 [2]SYN Flood 1.TCP连接建立--三次握手 几个概念: [1]seq:序号,占 ...

  3. 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    .引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...

  4. [转帖]脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

    脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手   http://www.52im.net/thread-1729-1-1.html     1.引言 网络编程中TCP协议的三次握手和 ...

  5. 从TCP三次握手说起–浅析TCP协议中的疑难杂症(2)

    版权声明:本文由黄日成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/108 来源:腾云阁 https://www.qclo ...

  6. 对TCP三次握手四次分手还不清楚,超简单解析

      关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手 ...

  7. 浅析TCP三次握手及四次挥手

    1. 三次握手 1. TCP为什么相较于UDP是可靠连接? 可靠连接是指,待通信的两个实体,能够满足通信数据包的有序性.完整性以及可靠性.对于UDP来说, 它的连接过程不需要握手,忽略丢失的数据包,并 ...

  8. 简单说说TCP三次握手、四次挥手机制

    1.什么是TCP TCP全称Transmission Control Protocol(传输控制协议),是一种面向连接的.可靠的.基于字节流的传输层通信协议.是为了在不可靠的互联网络上提供可靠的端到端 ...

  9. 阿里二面,面试官居然把 TCP 三次握手问的这么细致

    TCP 的三次握手和四次挥手,可以说是老生常谈的经典问题了,通常也作为各大公司常见的面试考题,具有一定的水平区分度.看似是简单的面试问题,如果你的回答不符合面试官期待的水准,有可能就直接凉凉了. 本文 ...

随机推荐

  1. CentOS7防火墙fiewall用法

    CentOS7与以前常用的CentOS6还是有一些不同之处的,比如在设置开放端口的时候稍许有些不同,常用的iptables命令已经被 firewalld代替.这几天正好有在CentOS7系统中玩Sea ...

  2. UVA题解一

    UVA 100 题目描述:经典3n+1问题在\(n \leq 10^6\)已经证明是可行的,现在记\(f[n]\)为从\(n\)开始需要多少步才能到\(1\),给出\(L, R\),问\(f[L], ...

  3. 【BubbleCup X】F:Product transformation

    按照题解的规律,首先能看出前面每个数幂次的性质. 然后发掘约数的性质 #include<bits/stdc++.h> ; typedef long long ll; using names ...

  4. MYSQL三种安装方式--二进制包安装

    1. 把二进制包下载到/usr/local/src下 2. 如果是tar.gz包,则使用tar zxvf 进行解压 如果是tar包,则可以使用tar xvf 进行解压 3. $ mv mysql-5. ...

  5. 端口扫描———nmap

    nmap教程之nmap命令使用示例(nmap使用方法) 浏览:8268 | 更新:2014-03-29 17:23 Nmap是一款网络扫描和主机检测的非常有用的工具.Nmap是不局限于仅仅收集信息和枚 ...

  6. Tutorial: Reverse debugging with GDB 7 (转载)

    Tutorial: Reverse debugging with GDB 7 Tutorial: Reverse debugging with GDB 7 by Jay Conrod posted o ...

  7. Python 2 到 Python 3 的变化

    1: commands 被 subprocess 所取代:举例 Python2中使用getoutput: >>> import commands >>> print ...

  8. 06 java 基础:java 循环 递归

    1 递归实现 1 + 2 +3 +4 +5 + .... +100 public static int addSum(int num){ if(num == 1) return 1; return n ...

  9. 火狐 firefox proxy moz=proxy:// 407错误 解决办法

    设置代理后,访问任一网站均弹窗要求输入代理的用户名和密码,但是多次输入始终无法认证. 最后才发现原来firefox把代理服务器的认证信息当成网站的认证信息记录了. 解决方法:将已登录信息中的代理相关的 ...

  10. VIM配置示例

    以下是我习惯的vim配置,做个记录~_~ " 文件编码 set fileencoding=utf- set encoding=utf- set termencoding=utf- " ...