zoukankan      html  css  js  c++  java
  • 网络通讯详解

    作为一个IT工作者,网络通讯的过程是必修课,这里我就把我的心得与大家分享一下;希望对一些工程师有帮助,在工作中能更深入的理解网络通讯,数据怎样通过网线传输;

    现在很多文献都有对这方面的描述,但是很多人都看不懂,不理解;主要原因都是一些名词,不好理解;因为不是语音讲解,所以我就尽量使用大白话,让大家都理解到底是怎么回事;

    首先,我们就来看下原始的网络模型;

    应用层:其实这就是一个应用,一个软件比如QQ,注每个软件都有自己独立的端口用来标识

    表示层:封装数据,比如QQ上发送图片,到了这一层进行数据封装

    会话层:确定要与谁进行通话(发起会话请求IP/MAC/主机名)

    传输层:用什么样的方式传输数据(TCP  UDP)

    网络层:要发送给哪个IP地址(路由器解封装IP地址)

    数据链路层:IP地址对应的MAC地址,其实就是网卡,网卡地址全球唯一(交换机)

    物理层:二进制数据如:0101110(比特流通过网线发送到另一台机器上的物理层进行解析数据)

    如果你还是有点不理解,那不要慌:

    网络参考模型能帮你解决问题,其实我更喜欢把网络模型理解为这个样子;

    应用层 = 应用层+表示层+会话层

    传输层

    网际层 这一层负责指路,我要访问sina,baidu都是他在指路

    主机至网络层 = 数据链路层+物理层

    其实在物理层之前数据一直都在本机电脑上,直到完成二进制解析,才会变为比特流(电流强弱)发送出去,首先发送到域名解析器,先查找本地host文件中是否存在,然后发往最近的DNS解析器,找到DNS里面对应的域名,其实就是IP地址,从而锁定访问对象;

    那有人又要问了我们是做web产品的,在网络传输过程中还要发送http请求,这又是怎么一回事呢?

    其实浏览器就是一个软件,http请求:就是告诉服务端我要用超文件语言html进行沟通,你也用超文本语言来跟我进行对话;这个请求就在应用层,http里面还包括两种常见发送方式get和post有时间我会继续发文给大家讲解,这里就不啰嗦;那么我们就来看一下在输入网址后,我们到底向服务端发送了什么?

    import java.io.*;
    import java.net.*;
    public class Server{
          public static void main(String[]args)throws IOException{
                ServerSocket ss = new ServerSocket(9966);
                Socket s = ss.accept();
                String ip = s.getInetAddress().getHostAddress();
                System.out.println(ip);
                InputStream in = s.getInputStream();
                byte[]buf = new byte[1024];
                int len = 0;
                len=in.read(buf);
                  System.out.println(new String(buf,0,len));
                PrintWriter pw =new PrintWriter(s.getOutputStream(),true);
                pw.println("<font color='red' size='7'>欢迎光临我的服务器</font>");
                //pw.flush();
                s.close();
          }
    }

    这是一个我用java写的简易服务端,能够接受浏览器发送的请求;同时进行一个反馈;如果不理解你可以把它看成一个中间件,例似tomcat;打开IE浏览器,输入http://loaclhost:9966/

    192.168.1.2
    GET / HTTP/1.1
    Accept: text/html, application/xhtml+xml, */*
    Accept-Language: zh-CN
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
    Accept-Encoding: gzip, deflate
    Host: 192.168.1.2:9966
    Connection: Keep-Alive

    消息行  HTTP/1.1版本 get方式发送

    消息头:Accept:能够接受的数据类型,*/*标识全部类型

    Accept-Encoding:这是解压缩方式;网站资源比较大的时候,服务端会先把资源进行解压缩,然后再发送给你,提升效率;

    还有就是浏览器版本,端口,IP地址,链接状态等;但是最主要的还是消息行中内容;

    只要有了这些我们自己也可以写一个浏览器,把上述数据发送给服务端就可以了;只不过解析功能弱一点;

    那么就很明显了在web传输的时候,发送了http协议,IP地址,端口号等;

  • 相关阅读:
    C# WinForm编程TabControl控件的标签TabPage怎么做成图片
    javascript 用面向对象自写前端验证工具
    javascript 用面向对象自写stringbuffer工具
    java socket 深入学习tomcat 自写动态服务器 tomcat
    java socket 自写静态服务器 apache
    java socket 实现多个客户端通过服务器一对一聊天并实现文件传输
    java socket 实现多个客户端向服务器上传文件
    java socket 实现多个一对一聊天
    java 读取文件,内容方置Person 序列化到磁盘,在读入程序并写到另外地址
    java 读取文件,内容方置Person 并写到另外地址
  • 原文地址:https://www.cnblogs.com/wangyinxu/p/6919729.html
Copyright © 2011-2022 走看看