zoukankan      html  css  js  c++  java
  • http的三次握手

    在http的三次握手当中,首先客户端发起一个我要发送一个数据包的请求,发送到服务端,这里面呢会有一个标志SYN=1,Seq=X,syn是一个标识,就是我这是一个创建请求的数据包,然后seq等于一个数字,一般来说都是1,然后服务端接收之后,知道了我有一个客户要跟我创建连接了,那创建这个连接之后呢,服务端就会开启一个tcp,socket的一个端口,然后这个端口开启了之后,它返回给客户端,它返回的数据里面也是一个SYN=1,ACK=X+1,Seq=Y,然后它会返回一个ACK,ACK就等于第一次发送过来的Seq,就是X,然后+1,然后它再发送一个Seq,这个是服务器端的一个Seq,然后客户端拿到之后,服务端允许我们打开创建这个连接,然后客户端再去发送它的ACK=Y+1,Seq=Z,它再发送一个Seq,等于一个新的数字Z,这就是tcp去创建的一个过程

    =======================

    第一次握手: 建立连接,客户端A发送SYN=1、随机产生Seq=client_isn的数据包到服务器B,等待服务器确认。

    第二次握手: 服务器B收到请求后确认联机(可以接受数据),发起第二次握手请求,ACK=(A的Seq+1)、SYN=1,随机产生Seq=client_isn的数据包到A。

    第三次握手: A收到后检查ACK是否正确,若正确,A会在发送确认包ACK=服务器B的Seq+1、ACK=1,服务器B收到后确认Seq值与ACK值,若正确,则建立连接。

    至于为什么要经过三次握手呢,是为了防止服务端开启一些无用的链接,网络传输是有延时的,中间可能隔着非常远的距离,通过光纤或者中间代理服务器等,客户端发送一个请求,服务端收到之后如果直接创建一个链接,返回内容给到客户端,因为网络传输原因,这个数据包丢失了,客户端就一直接收不到服务器返回的这个数据,超过了客户端设置的时间就关闭了,那么这时候服务端是不知道的,它的端口就会开着等待客户端发送实际的请求数据,服务这个开销也就浪费掉了

    =====================

    http的三次握手和四次挥手:

    浏览器在给服,务器传输数据之前,有三次握手,握手成功之后,才可以传输数据

    1、浏览器需要先发送SYN码,客户端请求和服务器建立连接;

    2、服务器接收到SYN码,再发送给客户端SYN+ACK码,我可以建立连接;

    3、客户端接收到ACK码,验证这个ACK是否正确,如果正确则客户端和服务端则建立起数据连接;双方的数据发送通道都将开启;

    四次挥手:

    1、当客户端无数据要传输了,会发送FIN码告诉服务器,我发送完毕了;

    2、当服务端接收完毕后,告诉客户端ACK码,告诉客户端你可以把数据通道关闭了;

    3、当服务器发送完毕之后,也会发送FIN码,告诉浏览器,数据发送完毕;

    4、当客户端接收完毕 之后,同样发送ACK码,告诉服务器,数据接收完毕,你可以关闭;

     三次握手和四次挥手的好处:确保数据的安全和完整

    ============

    物理层将二进制的0和1和电压高低,光的闪灭和电波的强弱信号进行转换
    链路层代表驱动

  • 相关阅读:
    c# list排序的三种实现方式 (转帖)
    LINQ TO SQL 中的join(转帖)
    Linq to sql 增删改查(转帖)
    DBLinq (MySQL exactly) Linq To MySql
    github
    eclipse安装github插件egit
    Android中图片的目录
    Fragment
    世界500强榜单出炉:中国公司首进三强 沃尔玛居首
    经济学,不会挣钱,更不会赚钱
  • 原文地址:https://www.cnblogs.com/testzcy/p/11647916.html
Copyright © 2011-2022 走看看