博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络知识面试总结之TCP三次握手机制
阅读量:6583 次
发布时间:2019-06-24

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

TCP是面向连接的协议。 TCP连接的建立采用客户端/服务器方式。主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫做服务器

(1)服务器的TCP服务器进程先创建
传输控制块TCB,准备接受客户进程的连接请求。然后服务器进程就处于
LISTEN(收听)状态,等待客户的连接请求。如有,即作出响应。

(2)客户端的TCP客户进程也是首先创建传输控制模块TCB,然后向服务器发出连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序号seq=x。此时,TCP客户进程进入SYN_SENT(同步已发送)状态。 TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但是要消耗掉一个序号,即下一个字节序号为seq=x+1

(3)服务器收到连接请求报文段后,如同意建立连接,则向客户端发送确认。在确认报文段中应把SYNACK都置为1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y。此时,TCP服务器进程进入SYN-RCVD(同步收到)状态。 请注意,这个报文段也不能携带数据,但同样要消耗掉一个序号, 即下一个字节序号为seq=y+1。

(4)TCP客户进程收到服务器的确认后,还要向服务器给出确认。确认报文段的ACK置1,确认号ack=y+1,而自己的序号seq=x+1。此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。 TCP的标准规定,ACK报文段可以携带数据。但如果不携带数据则不消耗序号,在这种情况下,下一个数据报文段的序号仍是seq=x+1。

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

首部固定部分各字段的意义如下: (1)序号(seq) TCP是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段则指的是本报文段所发送的数据的第一个字节的序号。 例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显然下一个报文段(如果还有的话)的数据序号应该从401开始;

(2)确认号(ack) 期望收到对方下一个报文段的第一个数据字节的序号。 例如,B收到了A发送过来的报文,其序列号字段是501,而数据长度是200字节,这表明B正确的收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701;

(3)同步SYN(SYNchronization) 在连接建立时用来同步序号。当SYN=1,ACK=0,表明是连接请求报文,若同意连接,则响应报文中应该使SYN=1,ACK=1。因此,SYN置为1就表示这是一个连接请求或连接接受报文。

(4)确认ACK(ACKnowlegment) 仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1。

参考文献: 谢希仁编著 《计算机网络(第六版)》

转载地址:http://lssno.baihongyu.com/

你可能感兴趣的文章
06-OpenLDAP 图形化管理
查看>>
c# asp.net Cookie(5)
查看>>
路由器,防火墙的角色
查看>>
SpringMVC参数校验(针对`@RequestBody`返回`400`)
查看>>
Redis在win7上的可视化应用
查看>>
sql中带in条件的查询及提高效率
查看>>
HTML5 Canvas 八星聚义动态效果
查看>>
EBS R12用户无职责:There are no active responsibilities available for this user
查看>>
android 29 ArrarAdapter数组适配器
查看>>
在WinFrom里跳转到打开网页
查看>>
socket属性设置与初始化操作
查看>>
深入理解asp.net里的IHttpHandler
查看>>
内存和CPU资源控制
查看>>
mysql -=- DDL
查看>>
关于数据的级联删除和更新
查看>>
SNAP的另类实现,采用js生成IFRAME内嵌框架的形式实现链接的网页'图像预览'
查看>>
Java Bean Copy框架性能对比
查看>>
ORM查询语言(OQL)简介--高级篇(续):庐山真貌
查看>>
了解JavaScript中对象的prototype属性
查看>>
【原】log4cplus使用说明
查看>>