网络编程理论
网络编程理论
主要内容
- 软件开发架构
- OSI七层协议
- TCP协议
-
软件开发架构
软件开发架构主要分为两种架构, 第一种是传统的C/S架构, 第二种是B/S架构.
C/S架构主要是客户端和服务端组成. C代表着client, S代表着server, 使用c/s架构意味着用户要使用某个公司的 服务就必须下载相应的客户端, 例如网络游戏英雄联盟, 或是微信软件等等, 这种架构现在已经逐渐开始被B/S架构给取代了, 即Browser/Server架构, 用户只要使用同一个浏览器就可以访问各种不同的网站, 享受里面的服务, 而不用麻烦要下载各种各样的服务端.
所谓服务端或是服务器就是一个不关机, 不间断的为所有用户提供服务的计算机.
客户端或浏览器则是用户在任意时刻都可以使用的应用程序.
-
OSI七层模型
在计算机通信领域中, 至少达到2个条件, 2台计算机之间才能互相通信
- 使用物理介质相连
2. 两台计算机之间必须使用相同的通信协议
第一个条件物理条件比较好理解, 要想通信必须使用某种物理介质相连, 第二个则可以类比我们人类之间的相互通信, 不同国家之间的人想要毫无障碍的交流, 则必须使用一个语言, 也就是英语, 所以计算机之间也要使用通信协议来让彼此之间能够通信.
网络中一套最著名的理论模型OSI协议就是用来描述网络协议的, 来规定网络传输的标准.
用一个7字诀来从上到下记就是应表会传网数物, 即这7层分别是
-
应用层
-
表示层
-
会话层
-
传输层
-
网络层
-
数据链路层
-
物理连接层:
通常最上面三层功能比较类似, 我们可以统一合为应用层, 接下来从下到上分别介绍下这5层的功能
物理连接层:
这层的功能顾名思义就是使用物理介质传递电信号(二进制信息)到下一层
数据链路层:
主要功能是负责网络寻址, 错误侦测和改错.
数据链路层规协议规定了每台计算机必须有一个独一无二的表示, 也就是mac地址, 这是个由48位组成的数据,前24位表示厂商编号, 后24位表示流水线编号. 这两种决定了编号的独一无二.有了mac地址, 数据就能够在这层之间进行通信了.数据链路层第二个功能就是把数据帧编码, 并能够进行自检纠错.
以太网技术就是数据链路层上的一种基于mac地址的高效简单的技术, 例如教师里通过一台交换机, 就能够连通各个电脑, 通过广播的方式,让多个计算机之间实现通信.
网络层:
网络层主要是将局域网内的数据的转发, 在这层的主要协议就是ip协议, ip协议规定了每台计算机必须有一个ip地址, 这个ip地址标识了这台计算机的独一无二.
传输层:
将来自网络层的数据打包成数据包, 这层主要有两个协议,一个是面向连接的安全可靠的tcp协议, 一个是面向无连接的udp协议
应用层:
计算机之间通信其实就是两个应用之间的相互通信. 应用层的协议有ftp协议, http协议.
在计算机中标识应用的独一无二, 使用了端口这个概念, 每个应用程序占用一个端口号, 所以在网上通信, 标识一个计算机用的通用格式就是 ip地址+端口号的形式, 使用这个就能找到网络上的任意应用了.
端口号的范围是0-65536, 其中0-1023是操作系统使用的端口号区间...
- 使用物理介质相连
-
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状态,双方可以进行通信了。

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倍最大数据段存活时间)后,也进入关闭状态。服务器接收到最后的确认信号后,就直接关闭连接。


浙公网安备 33010602011771号