java网络编程基础知识

前言

一直以来,认为自己从事的是android开发,后台接口怎么提供是后台的事情,至于用java,go,php等和自己有关系,后来发现错了,做前端开发熟练掌握网络编程知识,对前端程序开发是事半功倍。参考了一些技术博客文档,并仔细查看了javaAPI,把java编程知识总结一下,以备日后学习翻阅。

基础知识

1,OSI分层模型和TCP/IP分层模型的对应关系



网络分层有原来的7层模式,演变成五层模型。越靠近下层,越接近硬件;越上面的层,越靠近用户。

每一层为了完成一种功能,就需要大家遵守公共的规则。大家遵守的规则,就叫做协议(protocol)。
每一层都定义了很多协议,这些协议的总称,就叫做互联网协议(Internt Protocol Suite)。

物理层-----最底层,这一层就是用光缆、电缆、无线电波等方式把电脑连接起来的物理手段,负责传送0和1的电信号;
数据链路层-----数据包,mac地址,广播的发送都在这一层做了规定;
网络层-----规定了ip协议,建立主机到主机的通信;
传输层-----提供了端口号(port),通过端口号可以区分不同的程序,进而建立端口到端口的通信。UDP协议数据包发出,无法知道对方是否知道,TCP协议过程复杂,消耗资源,但是能够确保数据包不会遗失;
应用层-----规定应用程序的数据格式,来接受不同数据源的数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。


2,TCP与UDP

1、TCP是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。它能够提供两台计算机之间的可靠的数据流,HTTP、FTP、Telnet等应      用都需要这种可靠的通信通道。

2、UDP是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传送目的地,至于能够达到目的地,达到目的地的时     间以及内容的正确性都是不能保证的。

既然有了保证可靠传输的TCP协议,为什么还要非可靠传输的UDP协议呢?原因有两个:

1、可靠的传输是要付出代价的,对数据内容的正确性的检验必然会占用计算机处理时间和网络带宽。因此TCP的传输效率不如UDP高。

2、许多应用中并不需要保证严格的传输可靠性,比如视频会议系统,并不要求视频音频数据绝对正确,只要能够连贯就可以了。所以在这些场景下,使用UDP更合适些。

3,IP地址与端口号

1、ip地址用于唯一标示网络中的一个通信实体,这个通信实体可以是一台主机,可以是一台打印机,或者是路由器的某一个端口。而在基于IP协议网络中传输的数据包,必须使用IP      地址来进行标示。ip地址就像写一封信,必须指定收件人的地址一样。每个被传输的数据包中都包括了一个源IP和目标IP。

2、ip地址唯一标示了通信实体,但是一个通信实体可以有多个通信程序同时提供网络服务。这个时候就要通过端口来区分开具体的通信程序。一个通信实体上不能有两个通信程序        使用同一个端口号。

    IP地址和端口号,就像一个出差去外地入住酒店一样,IP地址表示了酒店在具体位置,而端口号则表示了这个人在酒店的房间号。

4,URL(统一资源定位符


是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL。

它是用协议名、主机、端口和资源组成,即满足如下格式:

     protocol://host:port/resourceName

     http://www.crazyit.org/index.php


 try {
            URL url = new URL("https://www.cnblogs.com/dongguacai/p/5747397.html");
            Log.i("getAuthority", url.getAuthority());
            Log.i("getFile", url.getFile());
            Log.i("getHost", url.getHost());
//            Log.i("getRef", url.getRef());
            Log.i("getPath", url.getPath());
            Log.i("getProtocol", url.getProtocol());
//            Log.i("getQuery", url.getQuery());
//            Log.i("getUserInfo", url.getUserInfo());
            Log.i("getDefaultPort", String.valueOf(url.getDefaultPort()));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

输出结果:



openConnection()、openStream()是URL最常用的方法

/**
 * @param path      网址
 * @param localPath 本地路径
 */
private void writeFileByUrlConneciton(String path, String localPath) {
    try {
        URL url = new URL(path);
        URLConnection urlConnection = url.openConnection();
        InputStream inputStream = urlConnection.getInputStream();
        OutputStream outputStream = new FileOutputStream(localPath);
        byte[] bytes = new byte[1024];
        int index = 0;
        while ((index = inputStream.read(bytes)) != -1) {
            outputStream.write(bytes, 0, index);
        }
        outputStream.close();
        inputStream.close();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

参考文章:https://www.cnblogs.com/dongguacai/p/5747397.html

5 http与https


定义优点缺点端口 
http超文本传输协议 明文传输传输速度相对快,效率高,不需要费用安全性低,容易被攻击80
https
带有安全套接字层的超文本传输协议,加入了ssl协议
通过证书验证服务器身份,为浏览器和服务器之间通
信加密  密文传输
ssl+http加密传输、身份认证的网络协议,
安全行更高,不易被攻击
需要支付一定的费用,通常一个域名绑定
一个IP,IPv4资源有限
443 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值