【复习】|网络|TCP三的次握手

TCP三次握手复习

OSI开放式互联参考模型

OSI是一个规范良好的协议规范机,是一个概念性框架,OSI的实现是TCP/IP。
OSI是7层概念模型 如下图所示:
OSI 7层概念模型

第一层 - 物理层(机器A向机器B发送比特流):主要作用为传输比特流,二进制数据传输,将二进制数据转化为电流,到达目的位置后在将电流转化为比特流;
            网卡工作在物理层;
            数据:比特流
第二层 - 数据链路层(物理寻址,同时将原始比特流转变为逻辑传输线路):定义了如何格式化数据进行传输,以及控制了如何对物理介质的访问;通常还提供了错误检测和纠正,以确保数据传输的可靠性。
            将比特数据组成了帧,交换机工作在该层面,对帧数据进行解码,并根据帧中包含的信息,将数据发送到正确的位置;
            数据:帧数据
第三层 - 网络层(控制子网运行,如逻辑编址、分组传输、路由选择):将网络地址翻译成对应的物理地址,决定如何将数据从发送方路由到接收方。
            路由器属于网络层;
            数据:数据包;
            协议:TCP/IP中IP协议;
第四层 - 传输层(接收上一层的数据,在必要的时候把数据进行分割,并将这些数据都交给网络层,且保证这些数据段有效到达对端):解决了传输质量的问题,分割数据包等;
            协议:TCP/IP协议中的TCP协议及UDP协议;
第五层 - 会话层(不同机器上的用户之间建立及管理会话):建立和管理应用程序之间的通信;
第六层 - 表示层(信息的语法、语义及他们的关联,如加密解密,转换翻译、压缩解压缩):在表示层,数据将按照网络可以理解的方案进行格式化,这种格式化也因为网络的理解方案不同而不同;
第七层 - 应用层:TCP/IP协议中的HTTP协议;

当一个数据进行发送的时候,从应用层开始,都会给数据的头部加上自己本层的一些信息,最后由物理层通过以太网电缆将数据传输到目标地址。到了目标地址后,在由各层逐步解析,解析出来。

TCP/IP协议

TCP/IP是四层概念模型,对OSI的7层模型进行了简化

TCP/IP与OSI模型的对比
从图上可以看到,对于TCP/IP协议,在概念层模型上,TCP/IP通过应用层包装了OSI里的会话层、表示层和应用层;而在链路层,则包含了OSI的数据链路层及物理层,在概念模型上更加精简。

数据传输上,与OSI一样,TCP/IP模型在传输数据的时候,发送端也是自上而下的在数据前加装自己的头部数据,当数据发送到对端后,对端根据协议再自下而上的解析头部数据。流程可参照下图:
TCP/IP模型数据传输
关于网络基础介绍完了,下面切入重点,TCP的三次握手,在学习之前,我们还是要先学习一下TCP的报头;

传输控制协议TCP简介

  • 面向连接的、可靠的、基于字节流的传出层通信协议
  • 将应用层的数据分割成报文段,并发送给目标节点的TCP层
  • 数据包都有序号、对方收到则发送ACK确认,发送端未收到确认则重传
  • 使用校验和来检验数据在传输过程中是否有误

TCP报头简介

TCP报头
source Port/destination port : 端口用来标识发送端和对端的进程,用于标识网络中的一个进程 (ip+port)
SEQ number:序号字段用于标识本报文字段的总长度,若本报文,携带段长度为100,(本报文序号为107)则下一个报文的序号字段就是从207开始
ACK Number : 期望收到对方下一个字节的序号:若对端收到的SEQ为201,报文长度为300,则返回给发送端的ACK NO为501;
offset : 指出TCP报文的数据距离TCP报文的起始处有多远(长度不固定);
reserved : 保留域;
TCP Flags : TCP控制位 ;
window : 滑动窗口大小,用来告知发送端接收端缓存的大小
checksum : 奇偶校验,是对整个TCP报文段,包括TCP头部和TCP数据以16位计算所得,由发送端计算和存储,并由接收端进行验证;
urgent pointer : 指出本报文中紧急数据的字节数;
Tcp Options :定义一些可选项

TCP Flags

URG:紧急指针标识 | 为0 :忽略紧急指针;为1:表明紧急指针有效
ACK:确认序号标志 |为0:表示报文中不含确认信息;为1:标识确认号有效
PSH:push标志 |为1:表示带有push标识的数据,指示接收方在接收到该字段时应尽快将报文段交给应用程序,而非在缓冲区排序;
RST:重置链接标志 |用于重置,由于主机奔溃或其他错误的原因而出现错误的链接,或者用于拒绝非法的报文段或非法的请求;
SYN:同步序列号,用于建立链接过程|Syn=1,ACK=0表明该数据段没有使用捎带的确认域,SYN=1,ACK=1表明链接应答捎带一个确认域;
FIN:finish链接,用于释放链接|当fin=1时,代表发送方已经没有数据包要发送了,则关闭本链接;

TCP 的三次握手

当应用程序C通过TCP与另一个应用程序S通信时,会发送一个通信请求,该请求必须发送到一个确切的地址,在双方握手之后,TCP将在两个应用之间建立一个全双工的网络通信。这中间的握手操作,被普遍称之为TCP的三次握手。下边我们就来看一下TCP的三次握手的过程:

TCP的三次握手

图上的close所在的一列,是客户端/服务端的状态,在没有发生链接是,假设都是close状态的,接下来详细的讲述一下三次握手:

  1. 首先,客户端想要与服务端建立链接,则他向服务端发送一个SYN数据包,这个数据包里SYN=1(这个标记在TCP报头的TCP Flags里),说明这是一个SYN数据包,那么这个数据报头会携带一个seq number,这个number可能是任意一个正整数。比如说这里x=0,那么第一条发送的消息就是:

syn=1,seq=0

  1. 当客户端发送完这条消息时,会将客户端的状态置为SYN_SEND状态,并且等待服务器的响应。
  2. 服务器此时收到了客户端发来的SYN数据包,那么要建立链接,服务器会回发一条消息,这条消息就是第二次握手消息“SYN-ACK”确认包,同样的,TCP Flags里有两个标志位被置为1,就是SYN和ACK,当这两个标志位置1时则说明该条消息有包含seq确认域。那么服务器发送的这个消息会发送一个自己的seq no ,比如说是 2,然后会将从第一次握手时,客户端发送来的seq no加1作为验证字段,也就是报头里的ack no验证字段返回;

SYN=1,ACK=1,seq=2,ack number=1

  1. 当发送完这条消息时,服务端会将状态置为SYN_RECV状态,等待第三次握手。
  2. 当客户端收到第二次握手,由服务端发来的消息SYN-ACK确认包时,客户端会发送第三次握手确认,本次握手是一个纯验证消息,ACK标志位会置为1,然后seq no会发送为由服务端发来的确认的ack no,以此来标识自己确切的收到了第二次握手。此时还会发送一个ack no作为验证,该验证就是会将第二次握手时,由服务端发送来的服务端的seq number1以后发送给服务端:

ACK=1,seq=1,ack number=3

  1. 当第三条握手消息发送给服务端后,客户端会进入到ESTABLISHED状态,服务端在接收到消息后,也会进入ESTABLISHED状态,到此,TCP三次握手结束。客户端和服务端之间可以进行数据通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值