编写前的基础知识html
C/S结构:数据库
C/S是Client/Server,即客户端/服务器端架构,一种典型的两层架构。客户端包含一个或多个在用户的电脑上运行的程序服务器端有两种,一种是数据库服务器端,客户端经过数据库链接访问服务器端的数据;另外一种是Socket服务器端,服务器端的程序经过Socket与客户端的程序通讯。咱们在本次的搭建就是利用的是Socket服务器端,其架构以下图所示:编程
ps:若是想对其进行进一步的了解能够看看这篇文章:https://blog.csdn.net/qq_26399665/article/details/52421723socket技术分为阻塞和非阻塞两种,两种的区别是是否马上的返回,非阻塞的方式资源的利用率会更高。设计模式
https://www.cnblogs.com/onepixel/p/7092302.html(TCP/IP协议)缓存
服务器端:服务器
客户端:网络
有关于eproll:http://www.javashuo.com/article/p-aljzskag-m.html ,这里咱们不详细介绍,咱们主要来介绍一下Socket通讯,Socket是一个编程接口(API),TCP/IP协议须要向开发者提供作网络开发用的接口,这就是Socket接口,它是对TCP/IP协议网络通讯的封装,首先咱们来介绍一下TCP/IP协议族:架构
可是呢在此以前咱们先介绍一个基础的知识,就是IP地址和MAC地址的区别,首先么一个上网的设备都会有一个网卡的东西(又叫作网络适配器),每台上网的电脑的都有一个不一样的MAC地址就像是一个身份证同样的东西,而IP地址是设备地址同样的存在,IP地址分为内网IP地址和外网Ip地址,再外网中每一个路由都有不一样的IP地址,而链接路由的设备都有相同的外网IP,可是在这个局域网中每一个设备的内网IP都各不相同,其实就像每个人都有属于本身的身份证件,若是咱们根据身份证向某人发快递那么将很是的困难,而外网的IP地址就像省市小区同样具备惟一性,可能几号楼几单元(内网)在不一样的局域网中可能相同,可是加上外网的IP后基本就不会搞错了,并且咱们发送快递的效率将大大的提高。socket
两个主机通讯三个条件:MAC,IP,端口(pid)spa
好了接下来咱们来介绍TCP/IP
整个数据帧由首部、数据和尾部三部分组成,首部固定为14个字节,包含了目标MAC地址、源MAC地址和类型;数据最短为46个字节,最长为1500个字节,若是须要传输的数据很长,就必须分割成多个帧进行发送;尾部固定为4个字节,表示数据帧校验序列,用于肯定数据包在传输过程当中是否损坏。所以,以太网协议经过对电信号进行分组并造成数据帧,而后经过物理介质把数据帧发送给接收方。因此链路层的主要工做就是对电信号进行分组并造成具备特定意义的数据帧,而后以广播的形式经过物理介质发送给接收方。
对于上面的过程,有几个细节问题值得咱们思考:
发送者如何知道接收者的MAC地址?
发送者如何知道接收者和本身同属一个子网?
若是接收者和本身不在同一个子网,数据包如何发给对方?
为了解决这些问题,网络层引入了三个协议,分别是IP协议、ARP协议、路由协议。
经过前面的介绍咱们知道,MAC地址只与厂商有关,与所处的网络无关,因此没法经过MAC地址来判断两台主机是否属于同一个子网。
所以,网络层引入了IP协议,制定了一套新地址,使得咱们可以区分两台主机是否同属一个网络,这套地址就是网络地址,也就是所谓的IP地址。
IP地址目前有两个版本,分别是IPv4和IPv6,IPv4是一个32位的地址,常采用4个十进制数字表示。IP协议将这个32位的地址分为两部分,前面部分表明网络地址,后面部分表示该主机在局域网中的地址。因为各种地址的分法不尽相同,以C类地址192.168.24.1为例,其中前24位就是网络地址,后8位就是主机地址。所以, 若是两个IP地址在同一个子网内,则网络地址必定相同。为了判断IP地址中的网络地址,IP协议还引入了子网掩码, IP地址和子网掩码经过按位与运算后就能够获得网络地址。
因为发送者和接收者的IP地址是已知的(应用层的协议会传入), 所以咱们只要经过子网掩码对两个IP地址进行AND运算后就可以判断双方是否在同一个子网了。
即地址解析协议,是根据IP地址获取MAC地址的一个网络层协议。其工做原理以下:
ARP首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,而后这个数据包会在链路层进行再次包装,生成以太网数据包,最终由以太网广播给子网内的全部主机,每一台主机都会接收到这个数据包,并取出标头里的IP地址,而后和本身的IP地址进行比较,若是相同就返回本身的MAC地址,若是不一样就丢弃该数据包。ARP接收返回消息,以此肯定目标机的MAC地址;与此同时,ARP还会将返回的MAC地址与对应的IP地址存入本机ARP缓存中并保留必定时间,下次请求时直接查询ARP缓存以节约资源。cmd输入 arp -a 就能够查询本机缓存的ARP数据。
经过ARP协议的工做原理能够发现,ARP的MAC寻址仍是局限在同一个子网中,所以网络层引入了路由协议,首先经过IP协议来判断两台主机是否在同一个子网中,若是在同一个子网,就经过ARP协议查询对应的MAC地址,而后以广播的形式向该子网内的主机发送数据包;若是不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由。网关是互联网上子网与子网之间的桥梁,因此网关会进行屡次转发,最终将该数据包转发到目标IP所在的子网中,而后再经过ARP获取目标机MAC,最终也是经过广播形式将数据包发送给接收方。
而完成这个路由协议的物理设备就是路由器,在错综复杂的网络世界里,路由器扮演者交通枢纽的角色,它会根据信道状况,选择并设定路由,以最佳路径来转发数据包。
在网络层被包装的数据包就叫IP数据包,IPv4数据包的结构以下图所示:
IP数据包由首部和数据两部分组成,首部长度为20个字节,主要包含了目标IP地址和源IP地址,目标IP地址是网关路由的线索和依据;数据部分的最大长度为65515字节,理论上一个IP数据包的总长度能够达到65535个字节,而以太网数据包的最大长度是1500个字符,若是超过这个大小,就须要对IP数据包进行分割,分红多帧发送。
因此,网络层的主要工做是定义网络地址,区分网段,子网内MAC寻址,对于不一样子网的数据包进行路由。
传输层其实就是TCP(又称确认版UDP,主要传送控制指令)或是UDP层(传送数据指令),将每一个应用程序分配端口,将数据传送到具体的应用程序。
应用层就很少讲了,其实总结起来就是当你输入一个网址并按下回车键的时候,首先,应用层协议对该请求包作了格式定义;紧接着传输层协议加上了双方的端口号,确认了双方通讯的应用程序;而后网络协议加上了双方的IP地址,确认了双方的网络位置;最后链路层协议加上了双方的MAC地址,确认了双方的物理位置,同时将数据进行分组,造成数据帧,采用广播方式,经过传输介质发送给对方主机。而对于不一样网段,该数据包首先会转发给网关路由器,通过屡次转发后,最终被发送到目标主机。目标机接收到数据包后,采用对应的协议,对帧数据进行组装,而后再经过一层一层的协议进行解析,最终被应用层的协议解析并交给服务器处理。
而Socket是应用层与TCP/IP协议族通讯的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来讲,一组简单的接口就是所有,让Socket去组织数据,以符合指定的协议。