美文网首页Android开发经验谈
计算机网络:应用层

计算机网络:应用层

作者: 壹零二肆 | 来源:发表于2020-05-11 13:05 被阅读0次
大纲

功能原理

实现进程之间的通信。客户机进程<--->服务器进程

通过套接字socket实现发送和接受消息。可以理解为门,发送方通过该门来发送消息,接收方通过该门来接受消息。

应用层需要做什么

两个进程要实现在庞大的互联网的通信,需要一个唯一可以标识它们的ID,这个ID由 :主机的IP地址 + 端口号 构成,这样一个进程就可以根据ID通过其他层提供的服务来连接到另外的进程进行通信。

应用层需要封装这些信息

应用层使用传输层提供的TCP服务来通信

网络层次都是类似于黑盒。对于使用它的上层只暴露提供什么样的服务,上层不会在乎下层通过什么方法提供。

应用层遵守的协议。

公开协议如HTTP SMTP

私有协议如P2P共享应用。

具体应用

web应用

因为是无状态的,后面会讨论怎么解决保存用户状态问题。

HTTP有两种类型:

持久性连接:允许一次连接建立后传输多个内容对象

非持久性连接:只允许一次连接建立后传输一个内容对象

这里对于html解析发现html页面上面有超链接需要重新发送资源请求对象,每个对象都需要重复该过程。

这里说的建立了TCP连接只消耗了1个RTT其实建立的是一种伪连接,真正的TCP建立连接应该是 HTTP请求信息到达web服务器(伴随着第三次握手)这样才真正建立了TCP连接。

这里会出现RTT分析

一般是根据具体的场景进行分析。

持久性连接:连接建立 1RTT (资源对象a)1RTT (资源对象b)1RTT。如果是带有流水线机制则所有的对象传输只消耗1RTT,用并行来理解。

非持久性连接:连接建立 1RTT (资源对象a)1RTT

(资源对象b) 2RTT (资源对象c)2RTT

method有:get post之类 常见的状态消息码 采用cookie技术记录用户上次访问的记录内容

cookie工作原理

cookie文件保存在本地由浏览器管理,cookie记录在服务端也有记录,可以识别浏览器发送过来的请求查看cookie是否有过会话,有的话就把一些状态直接返回给客户端浏览器。

web缓存代理服务器是由用户所在的一个局域网架设的,这样就可以在用户发送二次请求时候,通过局域网设置的cache来返回请求的内容,减少了访问远方服务器的消耗。

cache同时充当服务器和客户端的角色,它满足本地局域网内部的请求,同时也向服务器发送请求来同步自己持有的内容。

Email

SMTP是应用层的协议下层使用TCP进行email消息的封装和传输

邮件通过SMTP发送,然后通过POP3、IMAP(可以接收多媒体邮件)、HTTP来从服务器下载邮件

DNS

建立域名和IP的对应关系

分别是根域名服务器、顶级域名服务器、权威域名服务器

DNS查询分类:递归查询、迭代查询

迭代查询本地域名服务器压力大 递归查询容易理解就是推卸责任,找到沿请求路线后返回 DNS的记录缓存刷新机制 如何注册一个域名

P2P架构

P2P文件分发

我们讨论一个技术也就是常用的BT种子下载技术(比特洪流)

tracker是保存了持有资源文件的节点的列表,用户节点通过访问tracker就知道应该尝试性的和哪些节点进行文件传输。文件传输是双向的。

尝试性选择最快速率的四个邻居来传输chunk(文件块)这样是不是会导致马太效应呢?

索引技术

采用p2p传输消息,当一端渴望进行p2p连接时,怎么找到另外的一端呢,就是通过索引,索引建立了消息(需要被传输的消息)和目标端(IP+端口)的映射。

常见的索引方法:

压力问题 效率问题 综合两种的优缺点诞生了层次式覆盖网络结构 Skype软件采用的就是层次式覆盖

socket编程

socket是连接应用层和传输层的桥梁,可以理解应用程序通过socket实现网络功能,而socket编程可以实现对TCP和UDP的封装(甚至可以实现附加的一些控制优化实现数据可靠,高效传输)。

socket层

应用其实都是由socket编程实现的。socket编程就是抽象化的建立两个应用端进行写数据和读数据的过程。操作系统通过创建socket然后管理socket可以用socket来读和写消息给另外一端的socket程序。

我们知道应用层实现服务必然需要传输层提供支持,这里可以供使用的有TCP和UDP。面对这两者我们采用API的不同的方法来实现建立连接和通信。这里创建socket的时候就需要封装一些tcp需要的东西,比如tcp需要的IP,端口号之类的消息。API里面都有描述。

这是两个通过socket编程(TCP和UDP)实现网络应用简单功能的例子:

https://blog.csdn.net/xiaolixi199311/article/details/78757228

https://blog.csdn.net/Shayne_Lee/article/details/89608232

也可以参考:

Java 网络编程 | 菜鸟教程

一个C/S的socket实现java例子:

client


import java.net.*;

import java.io.*;

import java.util.Scanner;

public class client

{

    public static void main(String[] args)

    {

        String serverName = "localhost";

        int port = 6066;

        try

        {

            String string;

            Socket client = new Socket(serverName, port);

            OutputStream outToServer = client.getOutputStream();

            DataOutputStream out = new DataOutputStream(outToServer);

            Scanner input = new Scanner(System.in);

            InputStream inFromServer = client.getInputStream();

            DataInputStream in = new DataInputStream(inFromServer);

            while((string =input.nextLine())!="exit"){

                out.writeUTF(string);

                System.out.println(in.readUTF());

            }

        }catch(IOException e)

        {

            e.printStackTrace();

        }

    }

}

server

package socket;

import java.net.*;

import java.io.*;

public class server extends Thread

{

    private ServerSocket serverSocket;

    public server(int port) throws IOException

    {

        serverSocket = new ServerSocket(port);

    }

    public void run()

    {

        Socket server = null;

        try {

            server = serverSocket.accept();

        } catch (IOException e) {

            e.printStackTrace();

        }

        DataInputStream in = null;

        try {

            in = new DataInputStream(server.getInputStream());

        } catch (IOException e) {

            e.printStackTrace();

        }

        DataOutputStream out = null;

        try {

            out = new DataOutputStream(server.getOutputStream());

        } catch (IOException e) {

            e.printStackTrace();

        }

        while(true)

        {

            try

            {

                String string = in.readUTF();

                string  = string.toUpperCase();

                out.writeUTF(string);

            }catch(SocketTimeoutException s)

            {

                System.out.println("Socket timed out!");

                break;

            }catch(IOException e)

            {

                e.printStackTrace();

                break;

            }

        }

    }

    public static void main(String[] args)

    {

        int port = 6066;

        try

        {

            Thread t = new server(port);

            t.run();

        }catch(IOException e)

        {

            e.printStackTrace();

        }

    }

}

我们使用的再复杂的网络应用也是通过这些socket一层层如建筑一般构建的。

相关文章

  • 应用层

    title: 计算机网络 应用层 tag: 计算机网络 应用层协议分类 标准型网络应用 专用网络协议 C/S模式与...

  • 计算机网络目录

    计算机网络目录 运输层网络层应用层

  • 计算机网络 - 目录

    计算机网络01 - 应用层 计算机网络02 - 传输层 计算机网络03 - 网络层 计算机网络04 - 数据链路层...

  • OSI五层网络结构

    一、简介 计算机网络中的五层协议分别包括应用层、传输层、网络层、数据链路层、物理层,其中应用层又包括应用层、会话层...

  • 计算机网络相关知识

    一.计算机网络体系结构 OSI体系结构TCP/IP体系结构五层体系结构应用层应用层(HTTP)应用层表示层会话层传...

  • java重要知识点集合(计算机网络)

    java重要知识点集合(计算机网络) OSI与TCP/IP各层的结构与功能,都有哪些协议?应用层应用层(appli...

  • 计算机网络角度的HTTP

    一、计算机网络分层 应用层 传输层 网络层 链路层 物理层 二、应用层中的HTTP 2.1 万维网WWW概述 万维...

  • 【计算机网络】1.1 概论

    计算机网络体系结构 结合OSI和TCP/IP的特点,采用更简洁的五层协议的结构体系。 1.应用层 应用层(appl...

  • 学习《计算机网络第7版》PDF+《计算机网络释疑与习题解答第7版

    计算机网络概念很多,TCP/IP必须掌握,推荐学习《计算机网络第7版》,知识点丰富,应用层、安全、无线网络部分有点...

  • 应用层

    应用层 应用层: 解决通过应用进程的交互来实现特定网络应用的问题, 是计算机网络体系结构的最顶层, 是设计和建立计...

网友评论

    本文标题:计算机网络:应用层

    本文链接:https://www.haomeiwen.com/subject/fqhunhtx.html