首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
TCP的连接和释放连接。
[问答题]
简单描述一下,TCP的连接和释放过程。
添加笔记
求解答(0)
邀请回答
收藏(190)
分享
纠错
4个回答
添加回答
6
kzh2020
Tcp的链接建立(三次握手)
1.
服务端进程先创建传输控制块(TCB),准备接受客户端进程的连接请求,服务端处于listen的状态,等待客户端的连接请求;
2.
客户端继承创建传输控制块(TCB),然后向服务端发送请求报文段,这是首部的同步位SYN=1,同时选择一个序列号seq = x.(TCP规定,SYN报文段不能携带任何数据,但是要消耗一个序号),这时客户端进程进入SYN-SENT(同步已发送)状态;
3.
服务端收到客户端的请求报文后,如同意建立连接,则向客户端发送确认。在确认报文中应把SYN和ACK都置为1,确认号是ack=x+1,同时也为自己选择一个初始的序号seq=y,这个确认报文也不能携带数据,但是要消耗一个序号,这时TCP服务端进程进入SYN-RCVD(同步已收到状态)状态。
4.
客户端收到服务端的确认后,还要向服务端进行确认。确认报文段的ACK为1,确认好为ack = y+1,自己的序号为seq = x+1,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号,此时TCP连接已经建立,客户端进入ESTABLISHED状态(已建立连接状态);
5.
服务端收到确认后也进入以建立连接状态。
Tcp的连接释放(四次握手)
1.
当不再需要传输数据时,客户端会向服务端发送释放报文段,将连接释放报文段的FIN置为1,其序号为seq = u,这时客户端进入终止等待1状态;(TCP规定,FIN报文段即使不携带数据,也消耗掉一个序号)
2.
服务端收到释放报文段后发送确认,确认号为ack=u+1,这个报文段自己的序号为w,然后服务端进入关闭等待状态(这时TCP服务器进程就会通知应用进程,因而从客户端到服务器的连接就是放了),这时TCP处于半关闭状态
3.
当客户端收到来自服务器端的确认后就会进入终止等待2状态,等待服务器发出的连接释放报文;
4.
服务端发出连接释放报文段,使得FIN=1,服务器必须重复上次已发送的确认号ack=u+1,这时服务器进入最后的确认状态,等待客户端的确认;
5.
客户端在收到服务端的释放报文段后,必须对此发出确认。在确认报文段中报ACK置为1,确认号为ack = w+1,自己的序号变成seq = u+1,进入时间等待状态。
发表于 2019-03-04 22:30:12
回复(0)
5
嗖嗖嗖嗖
TCP三次握手整个流程为: 1 客户端主动打开,发送连接请求报文段,将SYN标识位置为1,Sequence Number置为x(TCP规定SYN=1时不能携带数据,x为随机产生的一个值),然后进入SYN_SEND状态 2 服务器收到SYN报文段进行确认,将SYN标识位置为1,ACK置为1,Sequence Number置为y,Acknowledgment Number置为x+1,然后进入SYN_RECV状态,这个状态被称为半连接状态 3客户端再进行一次确认,将ACK置为1(此时不用SYN),Sequence Number置为x+1,Acknowledgment Number置为y+1发向服务器,最后客户端与服务器都进入ESTABLISHED状态 TCP四次挥手 当客户端没有数据再需要发送给服务端时,就需要释放客户端的连接,这整个过程为: 1 客户端发送一个报文给服务端(没有数据),其中FIN设置为1,Sequence Number置为u,客户端进入FIN_WAIT_1状态 2 服务端收到来自客户端的请求,发送一个ACK给客户端,Acknowledge置为u+1,同时发送Sequence Number为v,服务端年进入CLOSE_WAIT状态 3 服务端发送一个FIN给客户端,ACK置为1,Sequence置为w,Acknowledge置为u+1,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态 4 客户端收到FIN后,进入TIME_WAIT状态,接着发送一个ACK给服务端,Acknowledge置为w+1,Sequence Number置为u+1,最后客户端和服务端都进入CLOSED状态
发表于 2019-01-25 16:08:13
回复(0)
1
门头沟菜鸡
三次握手四次挥手
发表于 2019-02-28 18:49:19
回复(0)
0
古罗马哥哥古巴比伦
TCP建立连接采用三报文握手机制
TCP连接释放采用四报文握手机制
发表于 2020-04-29 11:55:48
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
C++工程师
测试工程师
网络基础
Java工程师
上传者:
小小
难度:
4条回答
190收藏
4302浏览
热门推荐
相关试题
RARP的作用是什么?
华为
网络基础
评论
(17)
UDP使用什么提供可靠性?
华为
网络基础
评论
(33)
C类地址最大可能子网位数是?
华为
网络基础
评论
(10)
已知a
40
=...
京东
职能
2019
财务
保险
评论
(1)
有20000人的就餐需求,现建了一...
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题