Wifi网络中,在传输数据前通常需要进行( )次握手,以建立无线通信网络连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Wifi网络中,在传输数据前通常需要进行( )次握手,以建立无线通信网络连接相关的知识,希望对你有一定的参考价值。

这个啊!看用什么加密方式了,不过基本上都相同的,需要四次握手。
3.4.1 WPA-PSK 初始化工作
使用 SSID 和passphares使用以下算法产生PSK 在WPA-PSK 中PMK=PSK
PSK=PMK=pdkdf2_SHA1(passphrase,SSID,SSID length,4096)
3.4.2 第一次握手
AP广播SSID,AP_MAC(AA)→STATION
STATION 端
使用接受到的SSID,AP_MAC(AA)和passphares使用同样算法产生PSK
3.4.3 第二次握手
STATION 发送一个随机数SNonce,STATION_MAC(SA)→AP
AP端
接受到SNonce,STATION_MAC(SA)后产生一个随机数ANonce
然后用PMK,AP_MAC(AA),STATION_MAC(SA),SNonce,ANonce 用以下算
法产生PTK
PTK=SHA1_PRF(PMK, Len(PMK), "Pairwise key expansion",MIN(AA,SA) ||
Max(AA,SA) || Min(ANonce,SNonce) || Max(ANonce,SNonce))
提取这个PTK 前16 个字节组成一个MIC KEY
3.4.4 第三次握手
AP发送上面产生的ANonce→STATION
STATION 端
用接收到ANonce 和以前产生PMK,SNonce,AP_MAC(AA),STATION_MAC(SA)
用同样的算法产生PTK。
提取这个PTK 前16 个字节组成一个MIC KEY
使用以下算法产生MIC值
用这个MIC KEY 和一个802.1x data 数据帧使用以下算法得到MIC值
MIC = HMAC_MD5(MIC Key,16,802.1x data)
3.4.5 第四次握手
STATION 发送802.1x data ,MIC→AP
STATION 端
用上面那个准备好的802.1x 数据帧在最后填充上MIC值和两个字节的0(十六进
制)让后发送这个数据帧到AP。
AP端
收到这个数据帧后提取这个MIC。并把这个数据帧的MIC部分都填上0(十六进
制)这时用这个802.1x data 数据帧,和用上面AP产生的MIC KEY 使用同样的
算法得出MIC’。如果MIC’等于STATION 发送过来的MIC。那么第四次握手成
功。若不等说明则AP 和STATION 的密钥不相同,或STATION 发过来的数据帧
受到过中间人攻击,原数据被篡改过。握手失败了。
参考技术A 2次本回答被提问者采纳

《精通android网络开发》--使用Socket实现数据通信

No1:

网络传输应用通常使用TCP、IP或UDP这三种协议实现数据传输。在传输数据的过程中,需要通过一个双向的通信连接实现数据的交互。在这个传输过程中,通常将这个双向链路的一端称为Socket,一个Socket通常由一个IP地址和一个端口号来确定。

No2:

在网络编程中有两个主要的问题,一个是如何准确地定位网络上的一台或多台主机,另一个就是找到主机后如何可靠高效地进行数据传输。

在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠(TCP)的或非可靠(UDP)的数据传输机制。

No3:

Socket工作过程基本步骤:

1)创建Socket

2)打开连接到Socket的输入/输出流

3)按照一定的协议对Socket进行读/写操作

4)关闭Socket

No4:

聊天室程序在服务端包含多条线程,其中每个Socket对应一条线程,该线程负责读取Socket对应输入流的数据(从客户端发送过来的数据),并将读到的数据向每个Socket输出流发送一遍(将衣蛾客户端发送的数据“广播”给其他客户端),因此需要在服务器端使用List来保存所有的Socket。

public class IServer{
    //定义保存所有Socket的ArrayList
    public static ArrayList<Socket> socketList = new ArrayList<Socket>();
    public static void main(String[] args) throws IOException{
        ServerSocket ss = new ServerSocket(3000);
        while(true){
            //此行代码会阻塞,将一直等待别人的连接
            Socket s = ss.accept();
            socketList.add(s);
            //每当客户端连接后启动一条ServerThread线程为该客户端服务
            new Thread(new Serverxian(s)).satart();
        }
    }
}
//负责处理每个线程通信的线程类
public class Serverxian implements Runnable{
    //定义当前线程所处理的Socket
    Socket s = null;
    //该线程所处理的Socket所对应的输入流
    BufferedReader br = null;
    public Serverxian(Socket s) throws IOException{
        this.s = s;
        //初始化该Socket对应的输入流
        br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    }
    
    public void run(){
        try{
            String content = null;
            //采用循环不断从Socket中读取客户端发送过来的数据
            while((content = readFromClient())!=null){
                //遍历socketList中的每个Socket
                //将读到的内容向每个Socket发送一次
                for(Socket s:IServer.socketList){
                    PrintStream ps = new PrintStream(s.getOutputStream());
                    ps.println(content);
                }
            }
        }catch(IOException e){
            //e.printStackTrace();
        }
    }
    //定义读取客户端数据的方法
    private String readFromClient(){
        try{
            return br.readLine();
        }catch(IOException e){
            //如果捕捉到异常,表明该Socket对应的客户端已经关闭
            //删除该Socket
            IServer.socketList.remove(s);
        }
        return null;
    }
}

 

以上是关于Wifi网络中,在传输数据前通常需要进行( )次握手,以建立无线通信网络连接的主要内容,如果未能解决你的问题,请参考以下文章

请教下:网络数据传输的原理

第7课 网络编程

使用 WiFi 网络在 iphone 之间传输文本

如何在android中找到GPRS/3G网络数据传输速度?

STM32单片机通过ESP8266WiFi模块与Android APP实现数据传输---上位机搭建

WIFI模块在网络中的作用?