首页
题库
面试
求职
学习
竞赛
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收藏
4296浏览
热门推荐
相关试题
UDP使用什么提供可靠性?
华为
网络基础
评论
(33)
RARP的作用是什么?
华为
网络基础
评论
(17)
C类地址最大可能子网位数是?
华为
网络基础
评论
(10)
《拳皇97》最后BOSS是谁?
游戏常识
评论
(1)
《魔兽世界》中,下列不属于玩家可以...
游戏常识
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题