网络编程理论

网络编程理论

主要内容

  • 软件开发架构
  • OSI七层协议
  • TCP协议
  1. 软件开发架构

    ​ 软件开发架构主要分为两种架构, 第一种是传统的C/S架构, 第二种是B/S架构.

    ​ C/S架构主要是客户端和服务端组成. C代表着client, S代表着server, 使用c/s架构意味着用户要使用某个公司的 服务就必须下载相应的客户端, 例如网络游戏英雄联盟, 或是微信软件等等, 这种架构现在已经逐渐开始被B/S架构给取代了, 即Browser/Server架构, 用户只要使用同一个浏览器就可以访问各种不同的网站, 享受里面的服务, 而不用麻烦要下载各种各样的服务端.

    ​ 所谓服务端或是服务器就是一个不关机, 不间断的为所有用户提供服务的计算机.

    ​ 客户端或浏览器则是用户在任意时刻都可以使用的应用程序.

  2. OSI七层模型

    ​ 在计算机通信领域中, 至少达到2个条件, 2台计算机之间才能互相通信

    1. 使用物理介质相连
      2. 两台计算机之间必须使用相同的通信协议

    ​ 第一个条件物理条件比较好理解, 要想通信必须使用某种物理介质相连, 第二个则可以类比我们人类之间的相互通信, 不同国家之间的人想要毫无障碍的交流, 则必须使用一个语言, 也就是英语, 所以计算机之间也要使用通信协议来让彼此之间能够通信.

    ​ 网络中一套最著名的理论模型OSI协议就是用来描述网络协议的, 来规定网络传输的标准.

    ​ 用一个7字诀来从上到下记就是应表会传网数物, 即这7层分别是

    1. 应用层

    2. 表示层

    3. 会话层

    4. 传输层

    5. 网络层

    6. 数据链路层

    7. 物理连接层:

      通常最上面三层功能比较类似, 我们可以统一合为应用层, 接下来从下到上分别介绍下这5层的功能

      物理连接层:

      ​ 这层的功能顾名思义就是使用物理介质传递电信号(二进制信息)到下一层

      数据链路层:

      ​ 主要功能是负责网络寻址, 错误侦测和改错.

      ​ 数据链路层规协议规定了每台计算机必须有一个独一无二的表示, 也就是mac地址, 这是个由48位组成的数据,前24位表示厂商编号, 后24位表示流水线编号. 这两种决定了编号的独一无二.有了mac地址, 数据就能够在这层之间进行通信了.数据链路层第二个功能就是把数据帧编码, 并能够进行自检纠错.

      ​ 以太网技术就是数据链路层上的一种基于mac地址的高效简单的技术, 例如教师里通过一台交换机, 就能够连通各个电脑, 通过广播的方式,让多个计算机之间实现通信.

      网络层:

      ​ 网络层主要是将局域网内的数据的转发, 在这层的主要协议就是ip协议, ip协议规定了每台计算机必须有一个ip地址, 这个ip地址标识了这台计算机的独一无二.

      传输层:

      ​ 将来自网络层的数据打包成数据包, 这层主要有两个协议,一个是面向连接的安全可靠的tcp协议, 一个是面向无连接的udp协议

      应用层:

      ​ 计算机之间通信其实就是两个应用之间的相互通信. 应用层的协议有ftp协议, http协议.

      ​ 在计算机中标识应用的独一无二, 使用了端口这个概念, 每个应用程序占用一个端口号, 所以在网上通信, 标识一个计算机用的通用格式就是 ip地址+端口号的形式, 使用这个就能找到网络上的任意应用了.

      ​ 端口号的范围是0-65536, 其中0-1023是操作系统使用的端口号区间...

  3. TCP协议

    ​ 在上面的所有协议里面, tcp协议是最重要的那个协议. tcp协议是面向连接的协议, 是流式的, 可靠的协议.

    ​ tcp协议的可靠性根本原因就在于它的反馈机制, 每一次发送都需要有一个反馈确认应答才会进行下一次发送, 否则在一定时间内就会重新发送, 基于这种机制, tcp协议是安全可靠的, 保证了数据的完整性.

    ​ tcp的连接和断开也涉及了很多知识, 简单概括就是3次握手和4次挥手, 这也是面试中经常考的.

    TCP连接建立的三次握手:

    ​ 首先双方都是关闭连接状态的,客户端是主动打开tcp连接的。客户端向服务器端发送请求同步(SYN)的报文,同时携带一个初始化序列seq=x,自身并进入SYN_SENT(同步已发送状态)状态,服务器接收到请求报文,同时发送请求(SYN)和确认(ACK)的回应报文,并携带seq=y, ack=x+1的序列信息。自身同时进入SYN_RCVD(同步收到)状态。

    ​ 客户端收到服务器端的SYN和确认报文后,还要回应一个ACK(ACK=y+1)报文,并进入Established状态。服务器接收到确认报文后,也进入Established状态,双方可以进行通信了。

    img

    TCP连接的释放的4次挥手

    ​ 假如由客户端主动释放连接,客户端停止发送数据,向服务器发送连接终止信号FIN,并携带序列seq=x+1,自身进入FIN_WAIT_1(终止等待1)状态,服务端收到连接终止信号后,回应确认信号和回应序列seq=x+2, 自身进入CLOSE_WAIT(关闭等待)状态。但由于此时服务器可能还有数据没有发送完,所以这个状态还要维持一段时间。客户端收到确认信号后,进入FIN_WAIT_2(终止等待2)状态,等待服务器的连接终止信号(FIN)。服务器发送完数据后,向客户端发送连接释放信号(FIN),并携带自己的序列号(seq=y+`1),自身进入LAST_ACK(最后确认)状态。客户端接收到来自服务端的终止信号后,向服务器发送确认信号,自身进入TIME_WAIT状态,等待2MSL(2倍最大数据段存活时间)后,也进入关闭状态。服务器接收到最后的确认信号后,就直接关闭连接。

    img

posted @ 2019-08-06 20:41  yscl  阅读(151)  评论(0)    收藏  举报