参考资料:
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. 008-Shell 流程控制

    一.if else 1.1.if if 语句语法格式: if condition then command1 command2 ... commandN fi 写成一行(适用于终端命令提示符): ]; ...

  2. spring MVC中的异常统一处理

    1.spring MVC中定义了一个标准的异常处理类SimpleMappingExceptionResolver 该类实现了接口HandlerExceptionResolver 2.看下SimpleM ...

  3. SDUT2857:艺术联合会(简单dp)

    链接: http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2857 题目解析: 这是去年校赛的题目, ...

  4. PHP程序执行时间过长,超时了怎么办

    解决办法:修改php.ini文件,把最大的执行时间改为0,0表示不限制时间. max_execution_time = 0

  5. Restful概念

    文章节选自: http://www.ruanyifeng.com/blog/2011/09/restful https://www.zhihu.com/question/28557115/answer ...

  6. android 列表图片优化经历

    先上个优化之后的fps图,丝滑流畅:具体实现请看最终优化后的app 背景:一个通讯录app(开源地址),每次登陆时,针对每个用户,如果头像图片不在本地,则生成一个异步下载任务(AsyncTask). ...

  7. loadrunner配置多台负载机设置

    面对并发量比较大的性能需求,用单台机子进行加压由于本身硬件资源.网络资源等的限制已经不能满足该性能测试条件,这个时候就需要在场景中添加多台负载机来联机做性能测试.添加多台负载机的设置非常简单下面做一个 ...

  8. TOSCA自动化测试工具--Log defect

    1.执行完用例后,对于失败的用例进行分析,如果有缺陷,可以提对应的缺陷 2.在issues模块, 右键创建自己需要的文件夹,然后在文件夹上右键找到虫子图形点下,就可以创建缺陷了,填上对应的内容 3.如 ...

  9. “凯易迅Calix”实习上机——打折问题

    题目要求: 题目记得不太清楚,大概的意思是一个商店的打折方案如下:设一个客户买了n个商品,价格分别是p1,p2,...,pn (1)第一个商品不打折,即cost=p1; (2)第i个商品的折扣d=mi ...

  10. 让div水平垂直居中的几种方法

    最近,公司招了一批新人,吃饭的时候恰好碰到一个新同事,就跟他聊了起来.听他说了主管面试的时候出的一些问题,其中一个问题我印象特别深刻,因为,我当年进来的时候,也被问到这个问题.虽然这个问题已经问烂了, ...