TCP三次握手建立连接
来源:互联网 发布:在淘宝上面卖什么好 编辑:程序博客网 时间:2024/05/24 01:52
【 TCP三次握手 建立连接】
A运行的是TCP客户端程序,B运行的是TCP服务器程序。
最初两端的TCP进程都处于closed关闭状态。
A主动打开连接,B被动打开连接;
B的TCP服务器进程先创建传输控制块TCB(存储没个连接中的一些重要信息),准备接收客户进程的连接请求。 然后服务器就处于Listen(监听状态),等待客户的连接请求,如有,则做出回应。
1: A—>B:SYN = 1, seq = x (ACK=0)
A的TCP客户进程也是首先创建传输控制模块TCB,然后向B发出连接请求报文段,这时首部中的同步位 SYN = 1,并选择一个初始序号seq = x,表明传送数据时的第一个数据字节的序号是 x。
TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但要消耗一个序号。
当SYN=1而ACK=0时,表明这时一个连接请求报文段。 对方若同意建立连接,则应在响应的报文段中使SYN=1,ACK=1。
因此,同步SYN = 1就表示这是一个连接请求或连接接受报文。
这时,TCP客户A进程进入SYN-Sent(同步已发送状态).
2: A<—B: SYN = 1, ACK = 1, seq = y, ack= x +1
B收到连接请求报文段后,如同意建立连接,则向A发送确认。
确认报文段中应把SYN为和ACK位都置1(SYN = 1,ACK = 1),确认号是ack = x+1,同时也为自己选择的序号seq = y。
注意,这个报文段也不能携带数据,但同样要消耗一个序号。
这时TCP服务器B进入SYN-Rcvd(同步收到状态)。
3: A—>B:ACK = 1, seq = x + 1, ack = y+1
A收到B的确认后还要向B给出确认。
确认报文段的ACK = 1,确认号 ack = y+1,而自己的序号seq=x+1。
TCP的标准规定,ACK报文段可以携带数据,但如果不携带数据则不消耗序号,在这种情况下,下一个报文段的序号仍是seq=x+1。
这时TCP连接已经建立,A进入ESTABLISHED(已建立连接状态),A的TCP通知上层应用进程,连接已经建立。
B收到A的确认后,也进入ESTABLISHED(已建立连接状态),也通知其上层应用进程:TCP连接已经建立。
开始数据传输。
- TCP三次握手建立连接
- TCP三次握手建立连接
- TCP三次握手建立连接
- TCP三次握手建立连接
- tcp三次握手建立连接
- TCP三次握手建立连接
- TCP三次握手建立连接
- TCP建立连接三次握手
- tcp建立连接为什么要三次握手
- TCP/IP的三次握手建立连接
- TCP/IP协议三次握手建立连接
- TCP建立连接的三次握手
- TCP建立连接的三次握手
- TCP建立连接为什么进行三次握手?
- 建立TCP连接的三次握手
- 三次握手——TCP建立连接
- TCP建立连接为什么要三次握手
- TCP连接的建立(三次握手)
- 测试
- 计算机网络分层(OSI七层、 TCP/IP四层)
- Android聊天软件的开发
- OSI七层模型
- SQL注入攻击
- TCP三次握手建立连接
- TCP三次握手中,为什么需要第三次握手?
- JDBC初学者的basedao工具类
- Python程序打包--PyInstaller
- 如何查看Tdxdbgridlookupcolumn中数据源
- 微信公众号获取用户信息-网页授权
- [BZOJ]1104: [POI2007]洪水pow
- public static void main(String[] args){} 关于Java main()方法
- Spring Boot实战之项目搭建(二)