一次经典的tcp三次握手
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三次握手的更多相关文章
- [Linux]经典面试题 - 网络基础 - TCP三次握手
[Linux]经典面试题 - 网络基础 - TCP三次握手 目录 [Linux]经典面试题 - 网络基础 - TCP三次握手 一.TCP报文格式 1.1 TCP报头 1.2 报文图例 二.TCP三次握 ...
- TCP三次握手及其背后的缺陷
概述 总结一下TCP中3次握手过程,以及其原生的缺陷 引起的SYN Flood的介绍 [1]TCP三次握手 [2]SYN Flood 1.TCP连接建立--三次握手 几个概念: [1]seq:序号,占 ...
- 脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手
.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道“三次”和“四次”,但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方 ...
- [转帖]脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手
脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手 http://www.52im.net/thread-1729-1-1.html 1.引言 网络编程中TCP协议的三次握手和 ...
- 从TCP三次握手说起–浅析TCP协议中的疑难杂症(2)
版权声明:本文由黄日成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/108 来源:腾云阁 https://www.qclo ...
- 对TCP三次握手四次分手还不清楚,超简单解析
关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手 ...
- 浅析TCP三次握手及四次挥手
1. 三次握手 1. TCP为什么相较于UDP是可靠连接? 可靠连接是指,待通信的两个实体,能够满足通信数据包的有序性.完整性以及可靠性.对于UDP来说, 它的连接过程不需要握手,忽略丢失的数据包,并 ...
- 简单说说TCP三次握手、四次挥手机制
1.什么是TCP TCP全称Transmission Control Protocol(传输控制协议),是一种面向连接的.可靠的.基于字节流的传输层通信协议.是为了在不可靠的互联网络上提供可靠的端到端 ...
- 阿里二面,面试官居然把 TCP 三次握手问的这么细致
TCP 的三次握手和四次挥手,可以说是老生常谈的经典问题了,通常也作为各大公司常见的面试考题,具有一定的水平区分度.看似是简单的面试问题,如果你的回答不符合面试官期待的水准,有可能就直接凉凉了. 本文 ...
随机推荐
- elk系列3之通过json格式采集Nginx日志【转】
转自 elk系列3之通过json格式采集Nginx日志 - 温柔易淡 - 博客园http://www.cnblogs.com/liaojiafa/p/6158245.html preface 公司采用 ...
- PHP 不让标准浏览器(firfox,chrome等)走浏览器的缓存页面
或在HTML页面里加: <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache,no-store, must-reva ...
- spring data jpa条件分组查询及分页
原book对象 package com.shaying.domain; import javax.persistence.Column; import javax.persistence.Entity ...
- hashCode()与equals()区别
这两个方法均是超类Object自带的成员方法.Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法.在不明确给出超类的情况下,Java会自 ...
- java之正则表达式、日期操作
正则表达式和日期操作 正则表达式简介 正则表达式就是使用一系列预定义的特殊字符来描述一个字符串的格式规则,然后使用该格式规则匹配某个字符串是否符合格式要求. 作用:比如注册邮箱,邮箱有用户名和密码,一 ...
- svm和svr区别--摘自其它博客
学习笔记:SVM柔性边界的补充和SVR(支持向量回归) 作者 小刺猬yyx 关注 2016.08.06 10:31* 字数 1608 阅读 421评论 0喜欢 2 上一个笔记对于SVM不能完美分类的情 ...
- Codeforces 798D - Mike and distribution(二维贪心、(玄学)随机排列)
题目链接:http://codeforces.com/problemset/problem/798/D 题目大意:从长度为n的序列A和序列B中分别选出k个下表相同的数要求,设这两个序列中k个数和分别为 ...
- C++ 静多态与动多态
多态是指通过单一的标识支持不同的特定行为的能力. C++中有两种多态,称为动多态(运行期多态)和静多态(编译期多态),而静多态主要通过模板来实现,宏也是实现静多态的一种途径. 动多态在C++中是通过虚 ...
- DotNetOpenAuth实践之WCF资源服务器配置
系列目录: DotNetOpenAuth实践系列(源码在这里) 上一篇我们写了一个OAuth2的认证服务器,我们也获取到access_token,那么这个token怎么使用呢,我们现在就来揭开 一般获 ...
- [实战]MVC5+EF6+MySql企业网盘实战(5)——登录界面,头像等比例压缩
写在前面 关于该项目,已经很久没更新了.实在是找不到一个好的ui,没办法就在网上找了一个还不错的,就凑合着先用着吧,先出第一版,以后的再想着去优化.最近更新与网盘项目相关的内容是准备在项目中使用一个美 ...