zoukankan      html  css  js  c++  java
  • 网络编程01

    软件架构的两种方式:
      c/s架构:client(客户端)------->基于网络--------->server(服务端)

      b/s架构:browser(客户端)------->基于网络--------->server(服务端)

    ps:1.服务端和客户端都必须有唯一的地址,但是服务端的地址必须是绑定的

      2.服务端必须要24小时对外提供服务

      3.服务端要能支持并发

    网络编程的发展史:

      现在任何先进的技术都是来源于军事的

    通信的发展:

      1.早期的电话----->电话线连接,中间需要转接员

      2.老式电脑----->需要插网线

      3.笔记本电脑 无线电话------>网卡

    总结以上发现想要实现远程的通信都需要一个物理连接介质

    计算机和计算机之间实现远程通信方式:网线------->物理连接层基于电信号------->信息传输为二进制数(010011010111010101)----->如何解析这些数据(从哪断句????读出的是啥??怎么读??)

    综上所以就有了OSI协议(OSI七层协议)

    OSI七层协议:

    1.应用层

    2.表示层

    3.会话层

    4.传输层

    5.网络层

    6.数据链路层

    7.物理连接层

    1.物理连接层

      基于电信号01011010的二进制

    2.数据链路层

      以太网协议(Ethernet):

        1.规定了电信号的组合方式(数据报(报头和数据))

        2.规定每个接入互联网的计算机都必须有网卡

    ps:在每块网卡上都有一个独一无二的编号(mac地址)

      mac地址:一个12位16进制数,其中前6位表示出产的厂家,后六位表示流水线号

    局域网:

      一个局域网就类似一个孤岛,我们只能在这个孤岛中通信,通信的方式位"吼",也就是广播的形式.当我们想要在这个局域网中找到某个人,我们会先将信息发至交换机,交换机会把这个信息在局域网内播放,也就是在这个局域网内的每个人都会收到,但是只有被找寻的那个人才会打开信息,这个过程叫广播.

      当被找寻的人返回他的信息的给交换机,至发起人的手上这个过程叫单播.

    ps:广播风暴就是局域网内的人在同一时刻全都开始发起请求,造成混乱

    3.网络层

      IP协议:
        规定了只要介入互联网的计算机就必须有一个ip地址

        每个IP地址的格式为:点分十进制数入:192.168.0.1
        IP地址的范围:0.0.0.0 到255.255.255.255 

        IP地址的两个版本:IPV4和IPV6,之所有存在IPV6是因为IPV4的范围已经满足不了使用了,所以才加了IPV6

    ps:不同局域网内的计算机想要通信必须借助路由器,路由器就是将一个个局域网进行连接,当局域网1内的计算机想要访问局域网2内的某个计算机,会先将信息交给局域网1的网关,然后通过路由器的连接给局域网2的网关,进而找到目标计算机

    ps:IP都是动态随机分配的

    4.传输层

      tcp/udp协议

    ps:tcp和udp都是基于端口工作的

      端口(port):用来唯一标识计算机上的某个应用程序(端口是随机分配的,当运行的程序结束运行后,再次开启端口号会改变)

    ps:端口的范围是0-65535,其中最好使用8000之后的端口,0-1024的端口是操作系统可能占用的

    补充:MySQL默认端口是:3306

      Redis默认端口是:6379

      django默认端口是:8000

      flask默认端口是:5000

    TCP协议(建立双向通道):流式协议,可靠协议

    ps:TCP协议之所以可靠是因为有一个反馈机制.反馈机制:在客户端发送一个申请后,系统会在内存中存储这个信息不会立即删除,只有等到服务器给出明确的收到信息后才会删除,如果没有收到确认消息会在限定的时间内规律的发送,直至最后还没回应才会删除.

     三次握手:

    ps:在这之中将中间的2次握手合并成一次是因为这样可以提高反应速度,且在逻辑上合理,因为通道时双向的,我可以借此来减少中间的时间损耗.其中用syn=n来标识请求通道建立,用ack=n+1来唯一标识我要建立通道的对象是谁

      四次挥手:

    ps:在断开连接的过程中我们为什么不向建立连接的时候一般将中间的2个合并呢?

    因为在断开连接的时候,一般都是客户端想要断开和服务端之间的连接,但是当客户端发送(syn=n)请求断开后,服务端回复我收到你想断开连接的消息了(ack=n+1),但是在这之中我要看看还有没有什么东西是你之前申请的我还没来得及给你,所以有一段延时在回复你没东西在我这了,同意断开连接(syn=i),之后客户端回复收到(ack=i+1)这就断开了双向通道

    ps:这就类似分手,男的对女的讲咱分了吧(syn=n),女的说我知道了(ack=n+1),我考虑下,然后这之中过了段时间,找了个富二代直接就回复了分就分吧(syn=i),少了你我还找了个更好的,男的回复那祝你幸福(ack=i+1)

    ps:ip地址:用来唯一标识接入互联网的一台计算机
       port端口:用来唯一标识一台计算机上的某个应用程序    
       ip+port:唯一标识接入互联网一台计算机上的某个应用程序

    5.应用层

      http协议

      ftp协议

  • 相关阅读:
    【转】最奇特的编程语言特征
    【原】mysql 视图
    自己动手写ORM框架(一):目标效果预览
    (二)Javascript面向对象:命名空间
    在JAVA中封装JSONUtils工具类及使用(一)
    .NET3.5中JSON用法以及封装JsonUtils工具类(二)
    (四)Javascript面向对象:继承
    自己动手写ORM框架(三):关系映射配置—Table属性
    (一)javascript面向对象:(2)类
    自己动手写ORM框架(二):AdoHelper支持多数据库操作的封装(1)
  • 原文地址:https://www.cnblogs.com/z929chongzi/p/11311451.html
Copyright © 2011-2022 走看看