网络架构
- C\S架构:客户端服务端架构
客户端(client) : 享受服务端提供的服务
服务端(server) : 给客户端提供服务
- 软件CS架构: 京东,淘宝,qq,微信,暴风影音,快播 硬件CS架构: 打印机
- B\S 浏览器和服务端 B(browser)
- 谷歌,360,IE
名词 硬件
网络通信当中遇到的名词 硬件
网卡: 接收电信号
mac地址: 网卡的唯一标识,全球唯一, 6位点分16进制 8C-EC-4B-87-99-D7 16进制的6个数表示,前三位厂商 编号,后三位生产流水号
广播 : 信息发给所有人
单播 : 单独发给某个人或者说某个设备
广播风暴 : 不安全,容易拥堵网络
IP地址 : 划分广播域
192.168.15.113 四个点分十进制
IPv4 :
IPv6 : 6个冒号分十六进制
IPv6 地址: fe80::48c3:8f81:8474:c7d0%2
集线器 : 将所有连电脑连通起来
交换机 : 升级版集线器
DHCP协议 : 自动分配IP地址
划分广播域--> IP网段 : 192.168.15.0 - 192.168.15.255 属于同一子网
192.168.16.0 - 192.168.16.255
子网掩码 : 计算目标IP地址是否和咱们是同一网段
同一网段的:广播发送
不同网段的:发送给路由器
255.255.255.0,
例外一个班的同学的IP地址为:192.168.14.12
192.168.14.12
255.255.255.0
11000000.10101000.00001110.00001100
11111111.11111111.11111111.00000000
11000000.10101000.00001110.00000000
192.168.14.0
计算是否属于同一网段
属于同一个网段的,我们成为属于同一子网
路由器(内网的作用) : 管理局域网 连接外网
找外部网路的设备:
域名:www.jd.com --> IP地址
DNS服务器:记录着所有的域名和他网站对应的那台服务器的IP地址的对应关系,理解为一个字典
{'www.jd.com':192.168.15.12}
网关:在路由器这儿,把关你对外的请求
NAT技术: 将你的IP地址,转换为网关的IP地址
外网又称为公网 ,网关的IP地址又称为外网IP地址或者公网IP地址
路由器(外网的作用) : 转发消息
路由协议 : 计算一个最优路径,然后进行路由转发
发到京东的路由器上,京东的路由器做了端口映射(看图)
端口:标识电脑上某个应用程序,范围0-65535 0-1024 内部程序用的,我们一般使用的都是8000以后的
通过IP地址+端口:我就能唯一确定一台电脑上的某个应用程序
网络通信协议
应用层:
- HTTP(Hypertext Transfer Protocol 超文本传输协议,显示网页)
- DNS(Domain Name System)域名系统
- FTP(File Transfer Protocol)文件传出协议
- SFTP(SSH File Transfer Protocol,和FTP不一样)安全文件传送协议
- SCP(Secure copy,based on SSH)SCP是智能网的核心部件,一般由小型机、高性能微机和大型实时高速数据库组成。
- SSH (Secure Shell)
通信层:
- TCP(Transmission Control Protocol 三次握手传输协议)
- UDP
网络层:
- IP(Internet Protocol)
- ICMP(Internet Control Message Protocol,主要用于路由发送错误报告)
链路层:
- MAC(media access control)
tcp\ip五层
arp协议:通过IP地址找到mac地址
OSI 协议
博客资料:
互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,人为的分层七层。实际上这个七层是不存在的。没有这七层的概念,只是人为的划分而已。
- 七层划分为(osi七层):应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
- 五层划分为(tcp/ip五层) : 应用层、传输层、网络层、数据链路层、物理层。
- 四层划分为:应用层、传输层、网络层、网络接口层。
每层中的 设备:
每层中的作用:
- 应用层:
提供应用程序间的通信, 应用层是实际应用程序间的接口 - 表示层:
处理数据格式,数据 加密 解密 压缩 解压缩 像应用层提供数据 负责数据转换和代码格式化 - 会话层:
建立维护和管理会话,将不同的应用程序数据分离 - 传输层:
建立主机端到端的链接,提供流量控制,差错校验,分片上层数据,保证数据正确传输
端口范围 0 - 65535 0-1024 为系统占用 一般使用 8000 以上 - 网络层:
IP地址寻址 和 路由选择 定义网络地址 路由选择 - 数据链路层:
介质访问,链路管理,mac 地址寻址 - 物理层:
规范介质,传输bit流
OSI中的层 | 功能 | TCP/IP协议族 |
应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet |
表示层 | 数据格式化,代码转换,数据加密 | 没有协议 |
会话层 | 解除或建立与别的接点的联系 | 没有协议 |
传输层 | 提供端对端的接口 | TCP,UDP |
网络层 | 为数据包选择路由 | IP,ICMP,RIP,OSPF,BGP,IGMP |
数据链路层 | 传输有地址的帧以及错误检测功能 | SLIP,CSLIP,PPP,ARP,RARP,MTU |
物理层 | 以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802,IEEE802.2 |
详细解释
物理层:
- 字面意思解释:物理传输、硬件、物理特性。在深圳的你与北京的朋友聊天,你的电脑必须要能上网,物理体现是什么?是不是接一根网线,插个路由器,北京的朋友那边是不是也有根网线,也得插个路由器。也就是说计算机与计算机之间的通信,必须要有底层物理层方面的连通,就类似于你打电话,中间是不是必须得连电话线。
- 中间的物理链接可以是光缆、电缆、双绞线、无线电波。中间传的是电信号,即010101...这些二进制位。
- 底层传输的010010101001...要让这些010010101001...有意思,人为的分组再适合不过了,8位一组,发送及接收都按照8位一组来划分。接收到8位为一组的话,那么就可以按照这8位数来做运算。如果没有分组,对方接收的计算机根本就不知道从哪一位开始来做计算,也解析不了收到的数据。我发了16位你就按照16位来做计算吗?我发100位你就按照100位做计算吗?没什么意义是吧。因此要想让底层的电信号有意义,必须要把底层的电信号做分组。我做好8位一组,那么我收到数据,我就知道这几个8位做一组,这几个8位做一组。那么每个8位就可以得到一个确定的数。分组是谁干的活呢?物理层干不了,这个是数据链路层干的。
数据链路层:
- 早期的时候,数据链路层就是来对电信号来做分组的。以前每个公司都有自己的分组方式,非常的乱,后来形成了统一的标准(标准就是协议),即以太网协议Ethernet。
- Ethernet规定
一组电信号称之为一个数据包,或者叫做一个“帧”
每一数据帧分成:报头head和数据data两部分
- head包含:(固定18个字节)
发送者(源地址,6个字节) 数据类型(6个字节) - data包含:(最短46字节,最长1500字节)
- 数据包的具体内容
head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送。
这就像写信,发送者的地址(源地址)就是你家的地址,接收者地址(目标地址)就是对方的收信地址,你家的路由器就相当于邮局。其实在计算机通信中的源地址和目标地址指的是mac地址。 - Mac地址的由来:
head中包含的源和目标地址由来:Ethernet规定接入Internet的设备都必须具备网卡,发送端的和接收端的地址便是指网卡的地址,即Mac地址。
每块网卡出厂时都被烧录上一个实际上唯一的Mac地址,长度为48位2进制,通常由12位16进制数表示,(前六位是厂商编码,后六位是流水线号)
- 有了mac地址以后,计算机就可以通信了,假设一个教室就是一个局域网(隔离的网络),这个教室里面有几台计算机,计算机的通信和人的通信是一个道理,把教室里面的人都比作一个个计算机,假设教室里面的人都是瞎子,其实计算机就是瞎子的,计算机通信基本靠吼,现在我要找教室里面的飞哥要战狼2的片,然后我就吼一声,说我要找飞哥要战狼2的片,战狼2的片就属于我的数据,但是我在发的时候我是不是要标识我是谁,我要找谁,我是谁就是我的mac地址,我要找谁就是飞哥的mac地址,这两个地址做数据包的头部,再加上数据战狼2的片就构成了一个数据帧。
- 这个数据包封装好以后就往外发,到物理层以后就全部转成二级制,往外发是怎么发的呢?就是靠吼。即“我是Edison,我找飞哥要战狼2的片”。这么吼了一嗓子以后,全屋子的人都能听到,这就是广播。
计算机底层,只要在一个教室里(一个局域网),都是靠广播的方式,吼。
- 局域网的理解:什么是互联网,互联网就是由一个个局域网组成,局域网内的计算机不管是对内还是对外都是靠吼,这就是数据链路层的工作方式-----广播。
广播出去以后,所有人都听得见,所有人都会拆开这个包,读发送者是谁,接收者是谁,只要接收者不是自己就丢弃掉。对计算机来说,它会看自己的Mac地址,飞哥收到以后,他就会把片发给我,发送回来同样采用广播的方式了,靠吼。
同一个教室(同一个局域网)的计算机靠吼来通信,那不同教室的计算机又如何?
比如说局域网1的pc1与局域网2的pc10如何通信?你在教室1(局域网1)吼,教室2(局域网2)的人肯定是听不见的。这就是跨网络进行通信,数据链路层就解决不了这个问题了,这就得靠网络层出面了。
- 在讲网络层之前,其实基于广播的这种通信就可以实现全世界通信了,你吼一声,如果全世界是一个局域网,全世界的计算机肯定可以听得见,从理论上似乎行得通,如果全世界的计算机都在吼,你想一想,这是不是一个灾难。因此,全世界不能是一个局域网。于是就有了网络层。
网络层:
- 网络层定义了一个IP协议,
你想,我是这个教室的一个学生,我想找隔壁教室一个叫老王的学生,我也不认识老王,那怎么办,我吼?老王在另外一个教室肯定是听不到的。找教室的负责人,这个教室的负责人就负责和隔壁教室的负责人说话,说我们教室的有个学生要找你们教室的老王。往外传的东西交给负责人就可以了,内部的话上面已经提到,通过广播的方式,对外的东西广播失效。教室的负责人就是网关,网关即网络关口的意思。 - Mac地址是用来标识你这个教室的某个位置,IP地址是用来标识你在哪个教室(哪个局域网)。你要跨网络发包你是不是要知道对方的IP地址,比如你要访问百度,你肯定得知道百度服务器的IP地址。计算机在发包前,会判断你在哪个教室,对方在哪个教室,如果在一个教室,基于mac地址的广播发包就OK了;如果不在一个教室,即跨网络发包,那么就会把你的包交给教室负责人(网关)来转发。Mac地址及IP地址唯一标识了你在互联网中的位置。
数据链路层中会把网络层的数据包封装到数数据链路层的数据位置,然后再添加上自己的包头,再发给物理层,物理层发给网关,网关再发给对方教室的网关,对方教室的网关收到后在那个教室做广播。
在数据链路层看,数据封装了两层,跟玩俄罗斯套娃有点类似,一层套了一层。
现在来看另一个问题,在吼之前怎么知道对方的Mac地址?这就得靠ARP协议。 - ARP协议的由来:在你找飞哥要片之前,你的先干一件事,想办法知道飞哥的Mac地址。即你的机器必须先发一个ARP包出去,ARP也是靠广播的方式发,ARP发送广播包的方式如下:
- 局域网中怎么获取对方的Mac地址:
肯定要知道对方的IP地址,这是最基本的,就像你要访问百度,肯定得知道百度的域名,域名就是百度的IP地址。自己的IP可以轻松获得,自己的Mac也轻松获取,目标Mac为16个F,我们叫广播地址,表达的意思是我想要获取这个目标IP地址172.16.10.11的机器的Mac地址。Mac为16个F代表的是一种功能,这个功能就是获取对方的MAC地址,计算机的Mac永远不可能是16个F。假设是在本教室广播,一嗓子吼出去了,所有人开始解包,只有IP地址是172.16.10.11的这个人才会返回他的Mac地址,其他人全部丢弃。发回来源Mac改成飞哥自己的Mac地址,同时把飞哥的Mac地址放在数据部分。
跨网络怎么获取对方的Mac地址:
通过IP地址区分,计算机运算判断出飞哥不在同一个教室,目标IP就变成了网关的IP了。网关的IP在计算机上配死了,可以轻松获取。
样网关就会把它的Mac地址返回给你,然后正常发包
网关帮你去找飞哥,但对用户来说,我们根本就感觉不到网关的存在。
传输层
- 传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,
那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。
传输层功能:建立端口到端口的通信
补充:端口范围0-65535,0-1023为系统占用端口
tcp协议:
- 可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
- 以太网头 数据
udp协议:
- 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
- 以太网头 数据
应用层
- 应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式 。
应用层功能:规定应用程序的数据格式。
例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。
三次握手
- 用户发出链接请求, 服务端确认可以进行链接 并返回响应,用户端发出链接请求
四次挥手
- 用户发出请求断开的请求,服务端返回需要等待完成后续的工作 响应,再次返回 可以断开链接的响应,用户发出正式断开链接的请求
tcp和udp的区别
udp协议:面向无连接,消息不可靠,传输速度快,消息是面向包的,有消息保护边界.
socket 是在应用层 跟传输层之间 的 一个抽象层