• 网络编程基础


    一、软件开发架构:

    1.c/s架构(client/server)

      c:客户端

      s:服务端

    2.b/s架构(browser/server)

      b:浏览器

      s:服务器

    服务端:24小时不间断的提供服务

    客户端:当想要体验服务,就去找服务器端寻求服务

    ★★★b/s架构的本质其实就是c/s架构

    手机端上看上去cs架构比较火,因为手机上的应用程序很多,而这些都是cs架构的软件。但其实,bs架构已经在慢慢崛起了,例如我们微信中的小程序,我们需要使用这些小程序时,并不用下载相应的客户端,而是通过了微信就可以实现使用小程序,那么我们可以将微信看成一个统一的接口。

    二、网络编程的发展史

    第一代计算机网络---远程终端联机阶段;

    第二代计算机网络---计算机网络阶段;

    第三代计算机网络---计算机网络互联阶段;

    第四代计算机网络---国际互联网与信息高速公路阶段。

    ① 想要实现远程通信第一个需要具备的条件是:物理连接介质

      就像是人要想实现无障碍交流必须说统一的语言:英语。计算机也是如此,计算机与计算机之间要想实现远程通信除了有物理连接介质之外还需要有一套公共的标准/协议

    三、OSI协议

    OSI七层协议:

      ▲ 我们一般将七层协议简化成五层协议。

      1.物理连接层

      例如:网卡,网线。基于电信号传输10101001010二进制数据

    2.数据链路层

      1.规定了电信号的分组方式

      2.规定了任何一台接入互联网的计算机都必须有一块网卡

         每一块网卡的上面都刻有世界上独一无二的编号,是12位16进制数,前6位是厂商编号,后6位是流水线编号,我们称这种编号为MAC地址,每一台主机都有自己唯一的MAC地址

      ps:以上两点合成为“以太网协议”

    交换机:基于以太网通信,不能跨局域网通信

    互联网其实就是有多个局域网彼此之间连接而成的

    3.网络层

    IP协议

    ① 规定了只要是接入互联网的计算机都必须有一个IP地址

    ② IP地址特点:点分十进制

    ③ IP地址最小:0.0.0.0

    ④ IP地址最大:255.255.255.255

    ⑤ IP地址目前有两个版本:IPV4、IPV6(由于IPV4已经不够表示目前存在的计算了 所以推出了IPV6版本)

    IP地址是动态分配的

    4.传输层

    TCPUDP都是基于端口工作的协议

      TCP流式协议,可靠协议,基于TCP协议通信,必先建立双向通道

    计算机与计算机之间其实是计算机上的应用程序与应用程序之间的通信

    ① 端口:用来唯一表示一台计算机上的某个应用程序

     端口号的范围:0 ~ 65535

     注意:0 ~ 1024这些都是操作系统默认使用的端口号

     建议:使用8000之后的端口

    ② MYSQL默认端口号:3306

    ③ Redis默认端口号:6379

    ④ Django默认端口号:8000

    ⑤ flask默认端口号:5000

    端口号是动态分配的,例如我们第一次启动QQ时,分配到的端口号假设是8686,如果将QQ关闭后再次重启端口号的时候可能就变了

    ★★★总结:IP地址:用来唯一标识接入互联网的一台计算机

         port端口:用来唯一标识一台计算机上的某个应用程序

         IP + port:唯一标识接入互联网一台计算机上的某个应用程序

    5.应用层

      HTTP协议:超文本传送协议

      FTP协议:文件传输协议

    四、三次握手四次挥手

    1.三次握手

      

      

    第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

       

    2.四次挥手

     

      

    第一次挥手:TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。

    第二次挥手:服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。

    第三次挥手:服务器关闭客户端的连接,发送一个FIN给客户端。

    第四次挥手:客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

  • 相关阅读:
    android.mk文件里的通配符
    vi常用命令
    如何用ndk-stack察看android崩溃堆栈
    初识lua
    c++标准库中几个常见的数据结构的区别和应用规则
    玩转ubuntu FAQ
    c++0x新特性实例(比较常用的)
    cocos2d-x的Android工程开启c++0x特性
    随笔 — 致2018.
    CPU或内存占用过高时,发生了什么
  • 原文地址:https://www.cnblogs.com/spencerzhu/p/11311742.html
Copyright © 2020-2023  润新知