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

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

TCP的三次握手

当应用程序希望通过TCP与另一个应用程序通信时,它会发送一个通信请求,这个请求必须被送到一个

确切的地址,在双方握手之后,TCP将在两个应用之间建立一个双攻的通信,这个双工的通信将占用两个

计算机之间的通信线路,直到它被一方或双方关闭。

双工是指计算机A可以给计算机B发送消息,在发送消息的同时,计算机B也可以给计算机A发送消息。

 

三次握手流程

开始服务端和客户端都处于CLOSED状态,假设主动打开客户端,被动打开服务端。

(1)刚开始TCP服务器进程先创建传输控制块PCB,时刻准备其他客户进程发送过来的连接请求,

此时服务器进入LISTEN监听状态,此时TCP客户端进程也是先创建一个传输控制块TCB,

向服务器发送连接请求报文,SYN=1,seq=x,此时TCP客户端进入SYNSENT同步已发送状态,

此时发送过去的数据包及报文段会被称为SYN报文段,不能携带数据,但是要消耗一个序号,这便是第一次握手。

 

(2)当服务器接收到请求报文后,如果同意连接则发出确认报文,确认报文中包含了TCP flags中的两个位的字段,

SYN=1,ACK=1,ack=x+1(确认号),同时为自己的缓存初始化一个序列号SEQ=y,此时服务器进入SYN-RCVD同步收到状态,

这个报文也不能携带数据,并且同样需要消耗一个序号,这便是第二次握手。

 

(3)当TCP客户端进程收到确认报文后还要想服务器给出一个确认,确认报文中的ACK=1,seq=x+1,ack=y+1

此时TCP连接建立,客户端进入ESTABLISHED已建立连接状态,TCP规定这个报文段可以携带数据,

当然也可以不携带,如果不携带数据则不消耗序号,这是第三次握手。

 

当服务器收到客户端的确认后也会进入ESTABLISHED状态,此后双方就可以开始通信了。

 

转载于:https://www.cnblogs.com/marton/p/10991878.html

你可能感兴趣的文章
vue route 跳转
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。...
查看>>
Linux中防火墙centos
查看>>
mysql新建用户,用户授权,删除用户,修改密码
查看>>
FancyCoverFlow
查看>>
JS博客
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
ASP.NET WebApi 基于OAuth2.0实现Token签名认证
查看>>
283. Move Zeroes把零放在最后面
查看>>
Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法
查看>>
Python 数据类型
查看>>
S5PV210根文件系统的制作(一)
查看>>
centos下同时启动多个tomcat
查看>>
slab分配器
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>