TCP Handshake
来源:互联网 发布:淘宝分销 批量上架 编辑:程序博客网 时间:2024/06/05 20:57
温故而知新,TCP协议学习已经是很久以前了,今天再温习一下。
TCP 是面向连接的,面向连接的意思是TCP要经过3次握手来建立连接, TCP是全双工的, 两端可以独立收发packets, ,4次握手断开连接。
首先我们从TCP建立连接握手开始:
客户端与服务器建立握手的过程
1)客户端Host A发送TCP sync packet给HOST B,同时指定一个随机的sequence number X;
2) 服务器Host B接收到A的Sync packet;
3)服务器发送SYNC-ACK packet给客户端,同时把A的串号X+1赋值给ACK number,同时指定一个随机的sequence number Y;
4)客户端接收到SYNC-ACK;
5)客户端发送SYNC packet给服务器,同时把B的串号Y+1赋值给ACK number;
6)服务器端接收到SYNC;
到此TCP socket 连接建立起来了。
Diagram:
Synchronize 和 Acknowledge消息是通过TCP header里面的 SYNC和ACK bit来表示的。SYNC-ACK消息就是把SYNC和ACK 位全部设为1。
我们可以通过SYNC, SYNC-ACK, ACK消息来知道当前状态,正在打开连接,同步中还是已经建立连接。
当双方的通信终止的时候, 同样需要4次握手来关闭连接,关闭连接可以由双方中任何一方终止连接。
关闭连接的过程如下:
1)A是主动断开连接方, 把FIN位设为1,seq num u是通信过程中的A发送的字节数+1,此报文的tcp len为0,为TCP协议规定
2) 此时A连接状态为Fin-wait-1;
3)B收到Fin报文;
4) B发送ACK报文确认FIN,ACK num是A的seq num u +1, 同时发送自己的seq num v,v是B发送所有字节数+1;
5)此时B处于Close Wait状态, 这个状态服务器B正在等待服务应用关掉连接;
6)Client A收到ACK报文;
7)Client状态改为FIN Wait 2,这个状态的时候, 从客户端A到服务端B的连接以及关闭, 客户端等待服务器关闭TCP连接。
8)服务器应用程序关闭了TCP 连接。
9)服务器端发送FIN-ACK报文。
10)服务器端状态改变为Last ACK,等待client 发送ACK。
11)客户端A收到FIN;
12)客户端A发送ACK到服务器端;
13)客户端A开启一个定时器,用来处理last ACK被丢失, 服务器重新发送FIN;
14)客户端等待服务器重新发送FIN 在time wait状态;
15)服务器接收到ACK;
16)服务器把连接置为close状态;
17)客户端time wait 定时器超时,客户端连接变为close状态;
Diagram:
Time Wait定时器有两个作用:
1) 确保B能够收到最后一个ACK。如果ACK报文丢失,B会超时重传FIN+ACK,A在Time Wait状态可以重新发送ACK,并且重置定时器。如果B一直收不到last ACK,B会一直处于Close Wait状态。通过定时器可以确保TCP的全双工连接终止。
2)让老的失效的packet在网络中失效,TCP不允许处于TIME_WAIT状态的连接启动一个新的化身,因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个TCP连接的时 候,来自连接先前化身的重复分组已经在网络中消逝。
在建立连接的时候, 同时也协商MSS,MSS由TCP header中表示, 采用TCP双方中最小的MSS, MSS的计算方法为MTU - IP header - TCP header
引用:
本文参考附件的PDF及以下链接:
http://packetlife.net/blog/2010/aug/4/tcp-windows-and-window-scaling/
- TCP Handshake
- TCP 3 way handshake
- TCP Three Way Handshake
- TCP Split Handshake Attack
- TCP Split Handshake Attack
- TCP Split Handshake Attack
- TCP Three-Way handshake
- TCP Split Handshake Attack
- TCP三次握手(Three-way Handshake)
- TCP 3次握手模式(3-WAY HANDSHAKE)
- TCP Connection Establishment Process: The "Three-Way Handshake"
- TCP三次握手过程详解(二) three way handshake of TCP
- TCP 3 way handshake (三向握手,三次握手)--TCP连接建立过程
- socket 编程入门教程(三)TCP原理:5、TCP的三次握手(three-way handshake)
- jdbc handshake
- TLS handshake
- 09-Handshake
- peer handShake
- Oracle中的记录(Record)的使用
- 排序 自己总结 自己写代码
- KMP算法的next[]数组通俗解释
- 项目总结
- Java 基础学习IO流之BufferedReader
- TCP Handshake
- Signal QQmlEngine::quit() emitted, but no receivers connected to handle it quit信号无法接收解决方案 Qt5.7
- 关于tomcat启动完自动执行的问题,初始化问题,加载两次问题
- Displaying Bitmaps Efficiently之Managing Bitmap Memory
- Lubuntu 桌面环境变为 LXQt
- 记录第一天
- 加密算法、DES、IDEA、RSA、DSA
- 支持向量机SVM算法原理及应用(R)
- java判断日期是否为工作日(排除节假日和调整周末上班)