众所周知,网络通讯本质上就是进程间通讯,进程间通讯有如下常见的通讯方式:html
1,管道pipe:管道是一种半双工的通讯方式,数据只能单向流动,并且只能在具备亲缘关系的进程间使用,进程的亲缘关系一般指父子进程关系.mysql
2,高级管道通讯:将另外一个程序当作一个新的进程在当前程序进程中启动,则它算是当前程序的子进程面试
3,命名管道FIFO:有命名管道也是半双工的通讯方式,但它容许无亲缘关系的进程间通讯sql
4,消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识.消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限制等缺点浏览器
5,共享存储ShardMemory:共享内存就是映射一段能被其余进程所访问的内存,这段共享内存由一个进程建立,但多个进程均可以访问,共享内存是最快的IPC方式,它是针对其余进程间通讯方式运行效率低而专门设计的.tomcat
6,信号量Semaphore:信号量是一个计数器,能够用来控制多个进程对共享资源的访问,它一般做为一种锁机制,防止某进程正在访问共享资源时,其余进程也访问该资源,所以,主要做为进程间以及同一进程内不一样线程之间的同步手段安全
7,套接字socket:套接字是网络间进程的惟一标识,用于不一样机器间进程的通讯服务器
8,信号:信号是一种比较复杂的通讯方式,用于通知接收进程某个事件已经发生网络
网络间进程通讯架构
端口号与进程号
本地进程通讯的惟一标识是ProcessID,由系统内核分配并统一管理,当进程须要访问网络时,才会有端口号,端口号分为公认端口号,范围从0-1023,这些端口号通常固定分配给一些服务(21FTP服务,25SMTP服务,80HTTP服务,135RPC服务)等.动态或私有端口号范围从1024到65535,这些端口号不固定分配给某个服务,只要进程会系统提出访问网络申请,系统能够从这些端口号中分配一个给该程序使用
面试时可能会考的网络端口号
20,21--FTP相关
22--安全服务(SSH)
23--远程登陆(TTS)
25--电子邮件(SMTP)
80--超文本服务器(HTTP)
110--电子邮件(pop3)
8080--www代理如tomcat
3306--mysql
4000--腾讯QQ客户端
互联网分层:
http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
OSI七层模型:
1,物理层,2,数据链路层,3,网络层,4传输层,5,会话层,6,表示层,7应用层
五层模型:
1,物理层,2,数据链路层,3,网络层,4,传输层,5应用层(应用层+表示层+会话层)
七层模型和五层模型的区别在于拥有众多协议组成的应用层,5层模型将应用层,表示层会话层看作为应用层
物理层,
就是两个电脑用网线链接组成局域网,局域网再组成因特网
数据链路层,
咱们用电线将两个机器链接起来以后,要实现通讯,那就要规定一组高低电平(高低电压)组合的含义,电线链接的高低电平在一段时间内是连续的,怎么样才能知道哪一个点到哪一个点的高低电平算一组数据呢,咱们约定给他一个特殊的标记.咱们将发送者,接收者,要发送的数据类型等通过二进制编码得出一串二进制序列(01序列)加入到高低电平的传输中,之后在高低电平中遇到这串序列就知道他是一组消息的开头(Head),随后跟着的是所携带的数据(Data).这样一个组合电信号叫作帧(Frame),模型以下
以太网协议
以太网协议规定:"标头"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。所以,整个"帧"最短为64字节,最长为1518字节。若是数据很长,就必须分割成多个帧进行发送。
MAC地址,广播,
局域网里电脑多了,数据是向全部电脑发送的(广播),全部电脑都会接收到一样的信号,我要怎么知道,信号来自哪台电脑呢.既然Head包含了发送者和接收者的信息,咱们就要给局域网中的每一台电脑命名并且不能重复,这样咱们才能知道是谁发给个人,以太网规定连入网络的全部设备都必须有网卡接口,并且世界上的每个网卡出厂时都有一个世界独一无二的MAC地址,长度为48个二进制位,一般用12个16进制数表示
这样能够用独一无二的网卡来区别局域网中的电脑.所以咱们能够将MAC地址做为发送者和接收者标识.这样全部电脑接收到信号时,本身解析这串信号的的MAC序列是否是本身,若是是本身则进一步解析编码成信息,若是不是发给本身则丢弃,这样就实现了电脑间的通讯
网络层:
理论上,依靠MAC地址,咱们就能够用深圳的一台电脑,给硅谷的一台电脑发送信息.可是咱们前面说过,这种发送方式是广播的方式,若是这样作,那么全世界的电脑都会收到来自全世界的信息,那是不现实的.因特网是由若干个子网络组成的.
所以必须找到一种方法可以区分哪些MAC地址属于同一个子网络,哪些不是。若是是同一个子网络,就采用广播方式发送,不然就采用"路由"方式发送。("路由"的意思,就是指如何向不一样的子网络分发数据包,这是一个很大的主题,本文不涉及。)遗憾的是,MAC地址自己没法作到这一点。它只与厂商有关,与所处网络无关。那么肯定计算机所在的子网络就要从新引进一套新的地址,俗称网络地址,简称网址.子网络层面的东西叫作网络层
IP协议
规定网络地址的协议叫作IP协议,普遍采用的第四版叫IPv4,中间那层是十进制写法,下面那层是二进制写法,能够计算出他们的范围胡是0.0.0.0一直到255.255.255.255
一套新地址,给互联网上的每一台电脑都会分配一个IP地址,这个地址分为两部分,前一部分表明网络,后一部分表明主机,若是前面网络部分都相同说明两台计算机在同一个子网络.要怎么判断两台计算机在同一个子网络呢,由于,不一样的子网络网络部分的位数不同,经过子网掩码与IP地址相与计算能够识别,子网掩码是区分子网络的一个参数,例如
IP地址172.16.254.1,若是已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,若是是同一个子网络相与以后根子网掩码的网络部分全为1一致,写成十进制就是255.255.255.0
办公室里最多见的网络问题固然就是,网络地址冲突,网络地址被占用,若是你不能自动获取IP地址,或者局域网IP分配不够用被其余电脑占用,那么你就要手动设置IP地址了,一个局域网通常网络部分是前面24位,所以只要改主机部分,就能够链接上网了,子网掩码天然是,255.255.255.0
IP数据包,
以前的包含接受者,发送者,数据类型的Head不变,在data部分添加一个表明IP地址信息的Head即造成了IP数据包,固然若是data数据很大则要分割成多个数据包发送
ARP协议,
如上图IP数据包,IP数据包会经过网络层和局域网,这两层网络,所以必须同时知道两个地址,一个是对方的IP地址,另外一个是对方的MAC地址,一般状况下
IP地址经过中间DNS解析网址(www.google.com)能够知道对方的IP地址,可是没法知道MAC地址,,因此须要一种机制可以从IP地址获得MAC地址
这里又能够分红两种状况。
第一种状况,若是两台主机不在同一个子网络,那么事实上没有办法获得对方的MAC地址,只能把数据包传送到两个子网络链接处的"网关"(gateway),让网关去处理。
第二种状况,若是两台主机在同一个子网络,那么咱们能够用ARP协议,获得对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。若是二者相同,都作出回复,向对方报告本身的MAC地址,不然就丢弃这个包。
总之,有了ARP协议以后,咱们就能够获得同一个子网络内的主机MAC地址,能够把数据包发送到任意一台主机之上了。
传输层
一台计算机的软件(QQ编辑文字)从深圳发出信息到硅谷,通过如干个局域网,最终来到硅谷一台电脑上,这台电脑接收到能够接受到信息,可是必然是用一种软件来接受,那么咱们要知道究竟是哪一个软件来接受这个数据(QQ消息),那么这个标识进程的参数.电脑上运行着这么多软件(进程),前面咱们提到过,进程有一个惟一标识符叫PID,可是若是要链接网络,则会想系统申请端口号(port),前面咱们讲过0-1023被约定俗成的服务或者应用所占用,那么普通的程序只能从私有端口中分配端口号;
传输层的功能就是创建端口到端口的通讯,相比之下,网络层的功能是创建主机到主机的通讯,只要肯定主机和端口号,咱们就能实现程序之间的交流(QQ聊天),主机+端口叫作套接字(socket)
udp协议,
如今咱们要在原来的ip数据包总加入端口信息,所以数据包变成以下
MAC+IP+Port的三个Head组成的数据包头加上data数据就变成了一个UDP数据包
TCP协议
UDP协议的优势是比较简单,容易实现,可是缺点是可靠性较差,一旦数据包发出,没法知道对方是否收到.为了解决这个问题,提升网络可靠性,TCP协议就诞生了。这个协议很是复杂,但能够近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。若是有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。所以,TCP协议可以确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。TCP数据包和UDP数据包同样,都是内嵌在IP数据包的"数据"部分。TCP数据包没有长度限制,理论上能够无限长,可是为了保证网络的效率,一般TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包没必要再分割。
应用层
应用程序收到"传输层"的数据,接下来就要进行解读。因为互联网是开放架构,数据来源五花八门,必须事先规定好格式,不然根本没法解读。"应用层"的做用,就是规定应用程序的数据格式。
举例来讲,TCP协议能够为各类各样的程序传递数据,好比Email、WWW、FTP等等。那么,必须有不一样协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层",应用层的协议最普遍的就是,Http协议,SMTP,DNS,FTP,Telnet,SNMP。
这是最高的一层,直接面对用户。它的数据就放在TCP数据包的"数据"部分。所以,如今的以太网的数据包就变成下面这样。
下篇将会着重讲述应用层几个协议,下篇名词,http,长链接,短链接,DNS,
将会解释,浏览器从输入网址到响应的过程
https://mp.weixin.qq.com/s?__biz=MzI4NTEzMjc5Mw==&mid=2650554715&idx=1&sn=6f5fdf99f33633c9cc4f97904d1209f6&chksm=f3f833cdc48fbadb5921a3c08451fcf5091dc57182c9d1555eebe6890ea8543f498eb9df683e#rd