Skip to content

Latest commit

 

History

History
216 lines (195 loc) · 10.4 KB

网络请求相关内容总结.md

File metadata and controls

216 lines (195 loc) · 10.4 KB

网络请求相关内容总结

网络数据传输,熟悉多线程、Socket网络编程、熟悉TCP、UDP、HTTP等协议

  • 网络编程概述:

    • 网络模型:

      • OSI模型
        • 应用层
        • 表示层
        • 会话层
        • 传输层
        • 网络层
        • 数据连接层
        • 物理层
      • TCP/IP模型
        • 应用层
        • 传输层
        • 网际层
        • 主机至网络层
          image
    • 网络通讯要素

      • IP地址
      • 端口号
      • 传输协议
    • 网络通讯前提:

      • 找到对方IP
      • 数据要发送到指定端口。为了标示不同的应用程序,所以给这些网络应用程序都用数字进行标示这个表示就叫端口
      • 定义通信规则。这个规则称为通信协议,国际组织定义了通用协议TCP/IP
  • TCP和UDP的区别:

    • UDP协议:
      面向无连接
      每个数据报的大小在限制在64k内
      因为是面向无连接,所以是不可靠协议
      不需要建立连接,速度快

    • TCP协议:
      必须建立连接,形成传输数据的通道
      在连接中可进行大数据量传输
      通过三次握手完成连接,是可靠协议
      必须建立连接,效率会稍低

      三次握手:

      • 第一次:我问你:在么? 建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
      • 第二次:你回答:在。服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
      • 第三次:我反馈:哦,我知道你在了。客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

      四次挥手:

      • 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
      • 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
      • 服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
      • 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
  • Socket:

    • Socket是对TCP/IP协议的封装和应用。Socket本身并不是协议,而是一个调用接口。通过Socket,我们才能使用TCP/IP协议.在设计模式中Socket其实就是一个门面模式。 他将复杂的TCP/IP协议归隐到Socket接口后面,对于使用来说,一组简单的接口就是全部,让Socket去组织符合制定协议的数据。
    • Socket就是为网络服务提供的一种机制
    • 通信的两端都有Socket
    • 网络通信其实就是Socket间的通信
    • 数据在两个Socket间通过IO传输
    • 玩Socket主要就是记住流程,代码查文档就行
  • UDP(User Datagram Protocol):用户数据协议

    • UDP概述:
      需要DatagramSocket与DatagramPacket对象来实现UDP协议传输数据
      UDP协议是一种面向无连接的协议。面向无连接的协议指的是正式通信前不必与对方先建立连接,不管对方连接状态就直接发送数据。
    • UDP协议开发步骤:
      • 发送端:
        • 建立DatagramSocket服务;
        • 提供数据,并将数据封装到字节数组中;
        • 创建DatagramPacket数据包,并把数据封装到包中,同时指定接收端IP和接收端口
        • 通过Socket服务,利用send方法将数据包发送出去;
        • 关闭DatagramSocket和DatagramPacket服务。
      • 接收端:
        • 建立DatagramSocket服务,并监听一个端口;
        • 定义一个字节数组和一个数据包,同时将数组封装进数据包;
        • DatagramPacket的receive方法,将接收的数据存入定义好的数据包;
        • 通过DatagramPacke关闭的方法,获取发送数据包中的信息;
        • 关闭DatagramSocket和DatagramPacket服务。
    • UDP协议的Demo(必须掌握):
      • 发送端:

         class UDPSend {
         	public static void main(String[] args) throws Exception {
         		DatagramSocket ds = new DatagramSocket();
         		byte[] buf = "这是UDP发送端".getBytes();
         		DatagramPacket dp = new DatagramPacket(
         			buf,buf.length,InetAddress.getByName("192.168.1.253"),10000);
         		ds.send(dp);
         		ds.close();
         	}
         }
      • 接收端

         class UDPRece {
         	public static void main(String[] args) throws Exception {
         		DatagramSocket ds = new DatagramSocket(10000);
         		byte[] buf = new byte[1024];
         		DatagramPacket dp = new DatagramPacket(buf,buf.length);
         		ds.receive(dp);//将发送端发送的数据包接收到接收端的数据包中
         		String ip = dp.getAddress().getHosyAddress();//获取发送端的ip
         		String data = new String(dp.getData(),0,dp.getLength());//获取数据
         		int port = dp.getPort();//获取发送端的端口号
         		sop(ip+":"+data+":"+port);
         		ds.close();
         	}
         }
  • TCP/IP协议:Socket和ServerSocket

    • 基于TCP协议的网络通信概述:

      • TCP/IP通信协议是一种必须建立连接的可靠的网络通信协议。它在通信两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。
      • 网络虚拟链路一旦建立,两端的程序就可以进行通信。
    • TCP/IP协议开发步骤:

      • 客户端:
        • 建立Socket服务,并指定要连接的主机和端口;
        • 获取Socket流中的输出流OutputStream,将数据写入流中,通过网络发送给服务端;
        • 获取Socket流中的输出流InputStream,获取服务端的反馈信息;
        • 关闭资源。
      • 服务端:
        • 建立ServerSocket服务,并监听一个端口;
        • 通过ServerSocket服务的accept方法,获取Socket服务对象;
        • 使用客户端对象的读取流获取客户端发送过来的数据;
        • 通过客户端对象的写入流反馈信息给客户端;
        • 关闭资源
    • TCP/IP协议的一个Demo(必须要掌握!):

      • 客户端:

         class TCPClient {
         	public static void main(String[] args) {
         		Socket s = new Socket("192.168.1.253",10000);
         		OutputStream os = s.getOutputStream();
         		out.write("这是TCP发送的数据".getBytes());
         		s.close();
         	}
         }
      • 服务端:

         class TCPServer {
         	public static void main(String[] args) {
         		ServerSocket ss = new ServerSocket(10000);
         		Socket s = ss.accept();
        
         		String ip = s.getInetAddress().getHostAddress();
         		sop(ip);
        
         		InputStream is = s.getInputStream();
         		byte[] buf = new byte[1024];
         		int len = is.read(buf);
         		sop(new String(buf,0,len));
         		s.close();
         		ss.close();
         	}
         }
  • HTTP协议:

    • HTTP是Hyper Text Transfer Protocol的缩写
    • 是由W3C制定和维护的。目前版本为1.0和1.1
    • 是开发web的基石,非常地重要
    • Http虽然本身是一个协议,但是最终还是基于TCP的。
    • 首先由客户建立一条与服务器的TCP连接,然后发送一个请求到服务器,服务器向再进行响应。一次TCP连接的建立将需要3次握手。
    • 版本
      • 1.0版本:是无状态的协议,即一次连接只响应一次请求,响应完了就关闭此次连接要想再访问须重新建立连接。而连接都是比较耗资源的。
      • 1.1版本:是有状态的协议。即可以在一次网络连接基础上发出多次请求和得到多次的响应。当距离上次请求时间过长时,服务器会自动断掉连接,这就是超时机制。
    • HTTP协议的组成:
      • 请求部分:
        • 请求行:
          • GET / HTTP/1.1 包含:请求方式GET 请求的资源路径:/ 协议版本号:HTTP/1.1
            • 请求方式。常用的有GET、POST
              • GET方式:默认方式。直接输入的网址。
                • 表单数据出现在请求行中。url?username=abc&password=123
                • 特点:不安全;有长度限制:<1k
              • POST方式:可以通过表单form method="post"设置
                • 表单数据会出现在正文中。
                • 特点:安全;没有长度限制
        • 请求消息头:
        • 请求正文:第一个空行之后的全部都是请求正文
      • 响应部分:
        • 响应行:
          • HTTP/1.1 200 OK 包含:协议版本号:HTTP/1.1 响应码:200 描述:OK
            • 响应码:(实际用到的30个左右,其他都是W3C保留的)
            • 描述:对响应码的描述
            • 常用响应码:
              • 200:一切正常
              • 302/307:请求的资源路径变更了
              • 304:资源没有被修改过
              • 404:资源不存在,找不到资源
              • 500:服务器程序有错
        • 响应消息头:
        • 响应正文:
          • 第一个空行之后的全部都是响应正文,浏览器显示的就是正文中的内容
  • HTTPS HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。

  • HTTPS和HTTP的区别:

    • https协议需要到证书颁发机构(Certificate Authority,简称CA)申请证书,一般免费证书很少,需要交费。
    • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
    • http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
    • http的连接很简单,是无状态的
    • HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全