码迷,mamicode.com
首页 > 其他好文 > 详细

计算机网络 -- TCP的三次握手

时间:2020-01-12 20:26:52      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:客户端   close   网络   strong   建立连接   服务器   二进制   字段   缓冲区   

计算机网络 -- TCP的三次握手

参考:https://blog.csdn.net/qq_38950316/article/details/81087809

一)、TCP协议的特点

定义:

1.是一个面向连接的、可靠的、基于字节流的传输层协议。

2.将应用层的数据分割成报文段并发送给目标节点的TCP层。

3.数据都有序号,对方收到则发ACK确认,没有则重传。

4.使用校验和来校验数据在传输过程中是否有误。

二)、TCP报文头的结构

TCP报文头结构如下:

技术图片

请求报文头由4个字节,32位二进制数组成。

第一层:

源端口 目的端口 (各占16位)

第二层

序列号(占32位)

官方作用:用来标记数据段的顺序,Tcp把连接发送的所有字节数据都编上号,第一个字节序号由本地随机产生,给字节编上号后,就给每一个报文段编上号,每个报文段的编号就是该报文段第一个字节的编号。

个人理解: tcp协议的数据段由32位二进制组成,给数据段的所有字节数据都编上号,TCP将数据分割成报文段分发的目标节点的TCP层,因为给每个字节都编上了序号,那么,每一个数据段都有其对应的序号啦,即该数据段的第一个字节所对应的编号就是该数据的的编号,这样有利于接收方对数据的重排,保证的接收数据的可靠性。

第三层

ack确认号(占32位): 期望收到下一个字节的编号。

例: 客户端A向 -- >服务端 B发送了一个报文段,该报文段的序号为301, 长度为200,服务端B成功接收了改报文段,响应客户端确认收到将ack = 501的值传给客户端A,期望下一次收到的报文段的字节编号从502开始。

第四层

偏移量 保留 URG/ACK/PSH/RST/SYN/FIN (占16位) 窗口(占16位)

URG: 紧急指针, 0:有效 1:忽略紧急指针

ACK: 确认标志 ,1: 确认有效, 0:报文中不含确认信息,忽略确认字段。

PSH: push标志,接收方接收到报文后应该尽快交付给用用程序,而不是在缓冲区 中排队。

RST: 重置连接标志,重置错误连接。

SYN: 同步连接序号,用于建立连接,SYN =1, ACK = 0(连接请求报文段) 没有使 用请求捎带的确认方式; SYN =1, ACK =1 (连接接受报文段)使用连接请求捎 带的连接方式。

第五层

检验和(占16位) 紧急指针(占16位)

第六层

可选项

三)、TCP的3次握手

TCP三次握手的过程

技术图片

1.客户端A主动打开处于closed状态,服务端B被动打开处于closed状态

2.服务进程创建传输控制块等待客户请求,此时服务器处于监听状态

3.客户端A创建传输控制块,发送连接请求报文,此时客户端进程进入同步已发送 状态SYN-SEND

? 请求报文内容:SYN =1, seq = x ;(第一次握手)

? 特点: 该请求报文并没有携带数据,但是服务端也消耗了一个字节,当服务端发 回确认报文时,期待收到下一个字节的编号, ack = x + 1;

? SYN: 同步连接序号,

? seq : 报文段的第一个字节的编号,刚开始的seq是随机的一个数

4.服务器同意连接,并发送一个确认报文,此时服务器进入同步收到状态SYN- RCVD

? 确认报文内容:SYN =1, ACK = 1, seq = y, ack = x+1;(第二次握手)

? ack: 期待收到下一个字节的编号

? seq:是服务端响应报文段的字节编号

5.客户端进入连接状态ESTAB-LISHED

? 连接报文内容:SYN =1, ACK =1, seq = x +1, ack = y+1;(第三次握手)

6.服务端进入到连接状态ESTAB-LISHED

计算机网络 -- TCP的三次握手

标签:客户端   close   网络   strong   建立连接   服务器   二进制   字段   缓冲区   

原文地址:https://www.cnblogs.com/Auge/p/12183420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!