参考资料:
https://huoding.com/2013/11/21/299
https://hpbn.co/building-blocks-of-tcp/#three-way-handshake

示例代码:
https://github.com/gordonklg/study,socket module

A. Wireshark

免费抓包工具,谁用谁知道。
根据端口过滤 frame 的方法:tcp.port==8888
默认安装的 Winpcap 不能对 localhost 抓包,建议安装 Npcap。

B. TCP 三次握手


上图描述了 TCP 建立连接过程中三次握手的过程。

写一段测试代码建立连接,以便 WireShark 抓包分析:
gordon.study.socket.basic.wireshark.ThreeWayHandshake.java

 public class ThreeWayHandshake {

     @SuppressWarnings("resource")
public static void main(String[] args) throws Exception {
new Thread(new Runnable() {
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
while(true) {
System.out.println(socket.getInputStream().read());
}
} catch (Exception e) {
}
}
}).start(); Socket socket = new Socket();
socket.connect(new InetSocketAddress(8888));
}
}

上图为 WireShark 抓取的 TCP 三次握手过程中的报文,三条记录分别对应三次握手过程。当前选中的 Frame 13 是客户端的 SYN 请求,其前4个 Bytes 是链路层相关的信息(不知何意),中间20个 Bytes 是 IPv4 数据报首部,最后32个 Bytes 是 TCP 报文段。


照着上面 TCP 报文段格式图表,我们可以分析出:

  • 第一次握手是客户端发出的 SYN 请求(因为 SYN 标记位置为1),其产生了随机序号 00011000 01001000 10111111 11011111。
  • 服务端接收到 SYN 请求后,将客户端发送的序号值加1作为确认号(00011000 01001000 10111111 11100000),并将 ACK 标记位置为1表示自己是 ACK 请求。同时,服务端也要向客户端发出 SYN 请求,因此要将SYN 标记位置为1,同时生成随机序号。
  • 客户端验证 ACK 无误后,用相同的逻辑回复服务端的 SYN 请求。至此,TCP连接建立完毕。
 
 
 
 

Java网络编程学习A轮_02_抓包分析TCP三次握手过程的更多相关文章

  1. Java网络编程学习A轮_03_抓包分析TCP四次挥手

    参考资料: http://www.jellythink.com/archives/705 示例代码: https://github.com/gordonklg/study,socket module ...

  2. 使用 tcpdump 抓包分析 TCP 三次握手、四次挥手与 TCP 状态转移

    目录 文章目录 目录 前文列表 TCP 协议 图示三次握手与四次挥手 抓包结果 抓包分析 TCP 三次握手 数据传输 四次挥手 TCP 端口状态转移 状态转移 前文列表 <常用 tcpdump ...

  3. Wireshark抓包分析TCP“三次握手,四次挥手”

    1.目的 客户端与服务器之间建立TCP/IP连接,我们知道是通过三次握手,四次挥手实现的,但是很多地方对这个知识的描述仅限于理论层面,这次我们通过网络抓包的方式来看一下实际的TCP/IP传输过程. 2 ...

  4. 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制

    关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...

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

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

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

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

  7. Java网络编程学习A轮_01_目标与基础复习

    A. A轮目标 复习网络编程基础知识,重点学习下TCP三次握手四次挥手,以及可能引发的异常情况. 回顾 Socket 编程,好多年没写(chao)过相关代码了. 重学 NIO,以前学的基本忘光了,毕竟 ...

  8. Wireshark抓包分析TCP 3次握手、4次挥手过程

    Wireshark简介 更多有关Wireshark的教程.软件下载等,请见:http://www.52im.net/thread-259-1-1.html,本文只作简要介绍. 1Wireshark 是 ...

  9. Java网络编程学习A轮_06_NIO入门

    参考资料: 老外写的教程,很适合入门:http://tutorials.jenkov.com/java-nio/index.html 上面教程的译文:http://ifeve.com/overview ...

随机推荐

  1. Linux 2.6 内核阅读笔记 中断和异常

    2014年7月24日 中断门.陷阱门及中断门 中断是能够禁止的,能够通过告诉PIC停止对某个中断的公布.被禁止的中断是不会丢失的,在解除禁止后又会发送到CPU上. 禁止中断和屏蔽(mask)中断的不同 ...

  2. 安装odoo过程中出现的问题

    一 centos6.5 1. simplejson error:module not found fix: easy_install simplejson 2. python version erro ...

  3. 别真以为JavaScript中func.call/apply/bind是万能的!

    自从学会call/apply/bind这三个方法后我就各种场合各种使用各种得心应手至今还没踩过什么坑,怎么用?说直白点就是我自己的对象没有某个方法但别人有,我就可以通过call/apply/bind去 ...

  4. C++学习笔记--友元

    C++控制对类对象私有部分的访问,在外部无法直接访问类的私有或保护成员.通常,公有类方法提供唯一的访问途径.有时这种限制太严格,不适合特定的编程问题.所以C++提供了友元这种形式,通过让函数或类成为类 ...

  5. (转 )C++ static、const和static const 以及它们的初始化

    const定义的常量在函数执行之后其空间会被释放,而static定义的静态常量在函数执行后不会被释放其空间.但不论是Const还是static  他们定义的内容都会随着程序的结束而被系统清楚. sta ...

  6. What does Quick Sort look like in Python?

    Let's talk about something funny at first. Have you ever implemented the Quick Sort algorithm all by ...

  7. java static成员变量方法和非static成员变量方法的区别 ( 二 )

    原创文章,未经作者允许,禁止转载!!! 静态成员变量不用new对象,在类加载的过程中就已经初始化存放在数据区域,静态成员变量是类和所有对象共有的,类和对象都可以改变它的值,每一次改变值之后,静态成员变 ...

  8. python全栈开发从入门到放弃之模块和包

    一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编 ...

  9. python全栈开发从入门到放弃之socket并发编程多进程

    1.1 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程 ...

  10. Java语法糖设计

    语法糖 Java语法糖系列,所以首先讲讲什么是语法糖.语法糖是一种几乎每种语言或多或少都提供过的一些方便程序员开发代码的语法,它只是编译器实现的一些小把戏罢了,编译期间以特定的字节码或者特定的方式对这 ...