博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP三次握手
阅读量:6225 次
发布时间:2019-06-21

本文共 766 字,大约阅读时间需要 2 分钟。

建立TCP连接的过程需要进行三次信息交换,通常称为“三次握手”,示意图如下:

图中Seq代表TCP段首部中的“序号(Sequence Number)”:是TCP段所发送的数据部分第一个字节的序号。在TCP传送的数据流中,每一个字节都有一个序号。建立连接时,发送方将初始序号(Initial Sequence Number, ISN)填写到第一个发送的TCP段序号中。

图中Ack代表TCP段首部中的“确认号”:是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个TCP段的首部中的序号,等于已经成功收到的TCP段的最后一个字节序号加1。确认号在ACK标志为1时有意义,除了主动发起连接的第一个TCP段不设置ACK标志外,其后发送的TCP段都会设置ACK标志。

三次握手的具体过程阐述如下:

1. 客户端主动与服务器联系,TCP首部控制位中的SYN设置为1,发送带有SYN的TCP段,并把初始序号告诉对方。

2. 服务器端收到带有SYN的报文,记录客户端的初始序号,选择自己的初始序号,设置控制位中的SYN和ACK。因为SYN占用一个序号,所以确认序号设置为客户端的初始序号加1,对客户端的SYN进行确认。

3. 服务器端的报文到达客户端,客户端设置ACK控制位,并把确认号设为服务器的初始序号加1,以确认服务器的SYN报文段,这个报文只是确认信息,告诉服务器已经成功建立了连接。

至此“三次握手”建立连接完成。在TCP连接中,每台主机会创建一个TCB数据结构,存储与连接有关的数据。关于“建立TCP连接,为什么需要三次握手”,参考:

【学习资料】 《Winsock网络编程经络》

转载于:https://www.cnblogs.com/zhuyf87/archive/2012/12/31/2840587.html

你可能感兴趣的文章
《响应式Web设计实践》一1.6 本书包含哪些内容
查看>>
《Java和Android开发实战详解》——导读
查看>>
《Netty 实战》Netty In Action中文版 第2章——你的第一款Netty应用程序(三)
查看>>
从学界到业界:关于数据科学的误解与事实
查看>>
3.6 HyperLogLog
查看>>
游戏玩家的福音:在 Ubuntu 上安装开源 VoIP 应用 Mumble
查看>>
《Web性能实践日志》一第1章 WebPageTest内部原理1.1 函数拦截
查看>>
《Android Studio应用开发实战详解》——第1章,第1.4节Android和Linux的关系
查看>>
《多核与GPU编程:工具、方法及实践》----3.4 信号量
查看>>
用机器学习的经验指导人生:如何实现学习效率最大化
查看>>
《Hack与HHVM权威指南》——1.6.1 没有类型的变量
查看>>
一次马失前蹄的SQL优化:递归查询引发的血案
查看>>
《HBase实战》一第一部分 HBase基础
查看>>
《触摸屏游戏设计》——导读
查看>>
《OpenGL超级宝典(第5版)》——第1章,第1.2节3D图形技术和术语
查看>>
如何让你的机器学习玩超级玛丽
查看>>
阿里NASA计划“亮剑”:谢崇进和他追求的科学极限
查看>>
docker 基本命令 (CentOs7 Docker 17.03.1-ce)
查看>>
Apache Spark源码走读(八)Graphx实现剖析&spark repl实现详解
查看>>
PostgreSQL 10.0 preview sharding增强 - 支持分布式事务
查看>>