`
javababy1
  • 浏览: 1228499 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

TCP/IP三次握手详解

 
阅读更多

TCP握手协议

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:

未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN 包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器 进入ESTABLISHED状态。
Backlog参数:表示未连接队列的最大容纳数目。

SYN-ACK 重传次数 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超 过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。
====================================================================
现在,我们来看一个完整的流程,在一个TCP socket上系统调用connect究竟是如何建立起一个到对端的连接的。我们还是以实验环境172.16.48.2向172.16.48.1的端口5002发起连接请求为例。
第一步,172.16.48.2向172.16.48.1发起连接请求,发送一个SYN段,指明目的端口5002,通告自己的初始序号(ISN,由协议栈 随机产生的一个32位数),设置确认序号为0(因为还没有收到过对端的数据),通告自己的滑动窗口大小为5840(对端是5792,这似乎有问题,有待进 一步细查),窗口扩大因子为2(在首部选项中),通告最大报文段长度为1460(本地局域网),下面是数据内容(已剥去链路层的以太网首部和网络层的IP 首部):
数据内容 含义
基本首部
80 0e 源端口(32782)
13 8a 目的端口(5002)
00 00 07 bc 初始序号ISN
00 00 00 00 确认序号
a 首部长度
0 02 标志位,SYN=1
16 d0 滑动窗口大小(5840)
64 9e 校验和
00 00 紧急指针
TCP选项
02 04 05 b4 最大报文段长度(1460)
04 02 允许SACK
08 0a 00 0a 79 14 00 00 00 00 时间戳(0x000a7914),回显时间戳(0)
01 占位。
03 03 02 窗口扩大因子(2)
第二步,172.16.48.1收到请求包,检查标志位,发现SYN=1,认为这是一个初始化连接的请求,回应这个SYN,同时也发送自己的SYN段(即 ACK,SYN同时置位)。因为SYN本身要占用一个序号(还有标志FIN也要占用一个序号)。所以,确认序号设置为172.16.48.2的ISN加1 (即172.16.48.1期望收到来自172.16.48.2的下一个包的第一个序号为0x07bd。同时也要通告自己的初始序号,滑动窗口大小,窗口 扩大因子,最大报文段长度等,下面是数据内容:
数据内容 含义
基本TCP首部
13 8a 源端口(5002)
80 0e 目的端口(32782)
98 8e 40 91 初始序号ISN
00 00 07 bd 确认序号(对端ISN+1)
a 首部长度
0 12 标志位,ACK=1, SYN=1
16 a0 滑动窗口大小
65 d7 校验和
00 00 紧急指针
TCP选项
02 04 05 b4 最大报文段长度(1460)
04 02 允许SACK
08 0a 00 3c 25 8a 00 0a 79 14 时间戳(0x003c258a),回显时间戳(000a7914)
01 占位
03 03 02 窗口扩大因子(2)
第三步,172.16.48.2对来自172.16.48.1的SYN段进行确认,至此,TCP三次握手协议完成,连接建立,在172.16.48.2收 到SYN段时,将自己对应的socket的状态由TCP_SYN_SENT改为TCP_ESTABLISHED,进入连接建立状态,下面是数据内容:
数据内容 含义
80 0e 源端口(32782)
13 8a 目的端口(5002)
00 00 07 bd 序号(已不是ISN了)
98 8e 40 92 确认序号(对端ISN+1)
8 首部长度(8*4=32,有12字节的选项)
0 10 标志,ACK=1
05 b4 滑动窗口大小(1460,有问题?待确认)
a5 8a 校验和
00 00 紧急指针

01 占位
01 占位
08 0a 00 0a 79 14 00 3c 25 8a 时间戳(0x0a007914), 回显时间戳(0x003c258a)
=====================================================================

7、简述TCP三次握手过程,并说明为什么要3次握手
TCP 三次握手
TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:
1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号x和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。
2. 服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号y、对客户端的序列号的确认x+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。
3. .客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号y+1和序号x+1的ACK报文,一个标准的TCP连接完成。
TCP 使用类似的握手过程来结束连接。这可确保两个主机均能完成传输并确保所有的数据均得以接收
TCP Client Flags TCP Server
1 Send SYN (seq=x) ----SYN---> SYN Received
2 SYN/ACK Received <---SYN/ACK---- Send SYN (seq=y), ACK (x+1)
3 Send ACK (y+1) ----ACK---> ACK Received, Connection Established
w: ISN (Initial Sequence Number) of the Client
x: ISN of the Server



==========================================================
握手阶段:
序号 方向   seq ack
1  A->B 10000 0
2 B->A 20000 10000+1=10001
3 A->B 10001 20000+1=20001
解释:
1:A向B发起连接请求,以一个随机数初始化A的seq,这里假设为10000,此时ACK=0

2:B收到A的连接请求后,也以一个随机数初始化B的seq,这里假设为20000,意思是:你的请求我已收到,我这方的数据流就从这个数开始。B的ACK是A的seq加1,即10000+1=10001

3:A收到B的回复后,它的seq是它的上个请求的seq加1,即10000+1=10001,意思也是:你的回复我收到了,我这方的数据流就从这个数开始。A此时的ACK是B的seq加1,即20000+1=20001


数据传输阶段:
序号  方向      seq ack size
23 A->B 40000 70000 1514
24 B->A 70000 40000+1514-54=41460 54
25 A->B 41460 70000+54-54=70000 1514
26 B->A 70000 41460+1514-54=42920 54
解释:
23:B接收到A发来的seq=40000,ack=30000,size=1514的数据包
24:于是B向A也发一个数据包,告诉B,你的上个包我收到了。B的seq就以它收到的数据包的ACK填充,ACK是它收到的数据包的SEQ加上数据包的大小(不包括以太网协议头,IP头,TCP头),以证实B发过来的数据全收到了。
25:A在收到B发过来的seq为41460的数据包时,一看到41460,正好是它的上个数据包的seq加上包的大小,就明白,上次发送的数据包已安全 到达。于是它再发一个数据包给B。这个正在发送的数据包的seq也以它收到的数据包的ACK填充,ACK就以它收到的数据包的seq(70000)加上包 的size(54)填充,即ack=70000+54-54(全是头长,没数据项)。
26:一样的啊


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/metasearch/archive/2008/03/04/2147213.aspx

分享到:
评论

相关推荐

    TCP-IP详解卷一:协议_TCP-IP详解_TCP/IP_tcp/ip详解_

    TCP通过三次握手建立连接,确保双方都有发送和接收能力。在数据传输过程中,TCP使用滑动窗口机制进行流量控制,防止拥塞,并通过确认和重传机制保证数据的可靠性。 IP(Internet Protocol)则是网络层的主要协议,...

    tcp/ip详解第三卷

    TCP是一种面向连接的、可靠的传输协议,通过三次握手建立连接,通过滑动窗口机制实现流量控制和拥塞控制,确保数据的正确无误传输。书中详细阐述了TCP的各种算法,包括慢启动、快速重传和快速恢复等,这些都是TCP...

    TCP IP 详解三宗卷,tcp,ip详解(三卷全)pdf,C,C++

    卷3《TCP/IP详解:TCP事务协议》聚焦于TCP的事务处理,如TCP的三次握手和四次挥手过程,这是建立和断开TCP连接的关键步骤。同时,这本书也探讨了TCP的性能优化和异常情况处理,以及TCP与其他应用层协议的交互。 ...

    TCP/IP协议详解全三卷 下载

    书中深入探讨了这些协议的工作原理,如IP地址的分配、分片与重组、TCP的三次握手和四次挥手、拥塞控制等机制。 第二卷《TCP/IP实现》则侧重于实际的实现细节,比如TCP的连接管理、滑动窗口机制、超时与重传策略,...

    Tcp/Ip三卷合集

    传输层的TCP和UDP协议是整个卷一的核心,Stevens深入分析了TCP的三次握手、数据流控制和拥塞控制,为理解稳定可靠的网络通信打下基础。这部分内容对于网络通信的基础知识起到了至关重要的作用。 《TCP/IP详解卷二:...

    TCP/IP 卷一 TCP/IP 详解

    - TCP协议的工作机制,如三次握手、四次挥手、滑动窗口、拥塞控制等。 - UDP协议的特点和应用场景。 - 面向连接的服务与无连接服务的区别。 - 端口和套接字的概念,以及它们在通信过程中的作用。 - ARP(地址解析...

    TCP/IP高清资料详解

    在这一卷中,读者可以了解到IP地址的结构、子网掩码的运用、ICMP(Internet Control Message Protocol)的工作原理,以及TCP的三次握手和四次挥手过程。此外,还会探讨端口的概念,以及TCP如何保证数据的可靠传输。 ...

    tcp/ip详解,卷2:实现源码

    1. **TCP连接管理**:包括三次握手建立连接和四次挥手断开连接的过程。源码中会展示如何处理SYN、ACK、FIN等不同类型的报文段,以及超时重传和半关闭状态的处理。 2. **滑动窗口机制**:TCP使用滑动窗口来控制流量...

    tcp/ip详解(卷一)PDF

    在传输层,TCP(传输控制协议)是重点,书中详细阐述了TCP连接的建立与释放(三次握手和四次挥手)、滑动窗口机制、拥塞控制、流量控制以及重传策略等关键机制。同时,也简要介绍了无连接的UDP(用户数据报协议)...

    TCP/IP详解 卷一卷二卷三

    书中详细解析了这些协议的工作原理、交互过程以及各种控制机制,如TCP的三次握手和四次挥手,滑动窗口机制等。此外,还介绍了子网掩码、广播地址、多播等相关概念,以及网络路由的基本原理。 卷二《实现》则聚焦于...

    TCP/IP源码 完整的TCP/IP代码程序

    在源码中,你会看到TCP连接的建立(三次握手)、数据传输、以及断开连接(四次挥手)的过程。此外,TCP还采用了滑动窗口机制来控制流量和实现拥塞避免。 2. **IP(网际协议)**:IP负责将数据包发送到目标地址,它...

    tcp/ip 详解 三本书目录

    TCP连接采用三次握手建立,确保双方都准备好发送和接收数据。结束后,通过四次挥手释放连接,防止半关闭状态造成资源浪费。 7. **TCP流量控制与拥塞控制**: 通过滑动窗口机制实现流量控制,防止接收方来不及处理...

    TCP/IP详解 TCP/IP协议

    2. **传输层**:TCP协议的详细机制,如三次握手建立连接、四次挥手断开连接、拥塞控制、流量控制和超时重传。 3. **应用层**:HTTP、FTP、DNS等常见应用层协议的介绍,它们是如何利用TCP/IP进行通信的。 4. **网络...

    tcp/ip详解卷1

    9. **TCP连接与断开**:TCP连接使用三次握手建立,四次挥手断开。这一过程确保了连接的可靠性和数据传输的准确性。 10. **TCP流量控制与拥塞控制**:通过滑动窗口机制,TCP可以控制发送速率以避免接收方来不及处理...

    tcp/ip详解第一卷源码

    通过运行和调试这些代码,我们可以更直观地理解TCP连接的三次握手和四次挥手过程,以及IP分片和重组的过程。此外,还可以了解到网络层的ICMP(Internet控制消息协议)是如何用于错误报告和诊断的。 此外,书中可能...

    TCP-IP详解(卷一、二、三)超清pdf电子版

    深入TCP/IP实现细节,TCP连接的建立和拆除过程中“三次握手”和“四次挥手”的机制保证了通信双方的状态同步和数据的完整传输。拥塞控制算法如慢启动、拥塞避免等策略,则是防止网络过载和保障通信质量的重要手段。...

    TCP/IP详解:卷一

    - 连接建立:三次握手过程,确保双方都能正确接收和发送数据。 - 数据传输:通过序列号和确认应答机制,确保数据的可靠传输。 - 流量控制:通过滑动窗口机制控制发送速率,避免拥塞。 - 拥塞控制:当网络拥塞时...

    TCP/IP详解

    通过三次握手建立连接,确保双方都能正常通信。数据传输时,TCP会将大块数据分割成小的数据段,并为每个数据段添加序列号,以便接收方能按照正确的顺序重组。如果在传输过程中出现丢包,TCP会通过确认机制和重传策略...

    TCP/IP详解 卷1 中文版 pdf格式

    7. **TCP连接与断开**:TCP连接通过三次握手建立,确保双方都能正常通信。而四次挥手则用于释放连接,确保所有数据传输完毕后才结束连接。 8. **TCP流量控制与拥塞控制**:流量控制避免发送方过快导致接收方处理不...

Global site tag (gtag.js) - Google Analytics