• tcp三次握手


    在进行tcp三次握手讲解之前先需要先认识tcp报文段首部的几个字段及其他们的作用

    1、 ACK 只有当ACK置1时 ack确认号才有效

    2、 SYN 在建立连接时用来同步序号,当SYN=1,ACK=0时表明这是一个请求报文段

    3、 FIN 终止  当FIN为1时表名此报文段的发送方数据已经发送完毕,并且请求释放连接

    SYN和FIN的作用相似只是一个用于请求连接,一个用于请求释放连接

    4、 ack(确认号) 期望收到对方下一个报文段的序号,同时也说明自己已经收到的报文段序号,例如:ack=x+1;表示期望收到的下一个报文段的序号为x+1,并且序号为x的报文段已经收到。

    5、 seq序号,因为tcp是面向连接的传输方式,通过序号可确认是否有数据丢失,表示当前报文段的序号。

    三次握手

    先大体描述整个过程:

    一、 客户端请求连接

    二、 服务端收到请求,并发送确认

    三、 客户端收到确认并向服务端发送确认

    为什么需要第三步:如果只有前面两个步骤的话会存在这样一种情况:客户端发送请求后久久没收到服务端的确认(但请求消息依然是在网络中的),所以就主动断开了这次连接,过了一段时间后服务端收到请求,就会一直等待客户端发送数据,而实际上客服端已经断开了连接,这样就会造成服务端资源的浪费。

    下面是具体的一个过程:每个过程与上面是相对应的

    一、客服端将TCP报文段的首部的 SYN置1,ACK依然为零,同时seq=x(x为随机产生的数)将该TCP报文段发送给服务端,此时客户端进入SYN-SENT(同步已发送)状态。该报文段是不能携带数据的,但依然消耗掉一个数据。

    二、服务端收到该报文段后知道这是一个请求报文,所以就将TCP首部中 SYN置1,ACK也置1(需要确认),同时seq=y(y也是随机产生的),ack=x+1,表示自己已经收到序号为x的报文段期望下次收到的报文段的序号为x+1。服务端就进入SYN-RCVD(同步收到)状态。该报文段也是不能携带数据的,但依然消耗掉一个数据。

    三、客服端收到报文段后将自己的TCP报文段的首部的ACK置1(需要确认),同时ack=y+1,(说明已经收到服务端序号为y的报文段,希望下次收到的报文段为y+1),同时seq=x+1;客户端进入ESTABLISHED(已建立连接)状态

    服务端收到确认后也进入了ESTABLISHED(已建立连接)状态。

    心有多大,天有多高,一起奋斗!!
  • 相关阅读:
    实践2.2 内核模块编译
    Linux及安全课程——相关链接总结
    20135202闫佳歆--week 9 期中总结
    20135202闫佳歆--week 8 实验:理解进程调度时机跟踪分析进程调度与进程切换的过程--实验及总结
    20135202闫佳歆--week 8 课本第4章学习笔记
    20135202闫佳歆--week 7 深入理解计算机系统第七章--读书笔记
    20135202闫佳歆--week 8 进程的切换和系统的一般执行过程--学习笔记
    20135202闫佳歆--week 7 Linux内核如何装载和启动一个可执行程序--实验及总结
    laravel open_basedir restriction in effect
    workerman wss net::ERR_SSL_PROTOCOL_ERROR
  • 原文地址:https://www.cnblogs.com/zhaolei1996/p/10737492.html
Copyright © 2020-2023  润新知