网络模型
为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了”开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)
越下面的层,越靠近硬件,越上面的层,越靠近用户
层与协议
每一层都是为了完成一种功能,为了实现这种功能,就需要每一层遵守共同的规则,这个遵守的规则就叫做“协议”。
- 上下层之间进行交互时所遵循的约定叫做接口
- 同一层之间的交互所遵循的约定叫做协议
互联网的每一层都定义了很多协议,这些协议的总称,就叫做“互联网协议”
物理层
用物理的手段把电脑连接起来,作用就是负责传送0和1的电信号
链接层
基于物理层接收到一串二进制数,而链接层就是用来处理这串二进制,用“以太网协议”来确定0和1的分组方式
以太网协议
以太网规定一组电信号构成一个数据包叫做“帧”,分成两个部分:标头(Head)和数据(Data)
“标头”包含数据包的一些说明项,比如,发送者(MAC地址)、接受者、数据类型等等;“数据”则是数据包的具体内容。
“标头”的长度固定为18字节,“数据”的长度,最短为46字节,最长为1500字节,因此,整个“帧”最短为64字节,最长为1518字节,如果数据很长,就必须分割成多个帧进行发送。
MAC地址
MAC地址是用来标识发送者和接受者,连入网络的所有设备都必须具有“网卡”接口,数据包必须是从一块网卡,传送到另一块网卡,网卡的地址就是数据包的发送地址和接收地址,这叫做MAC地址。
每块网卡出场的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示(MAC地址其实是可以修改的,涉及ARP欺骗)
前6个十六进制数是厂商标号,后6个是该厂商的网卡流水号,有了MAC地址,就可以定位网卡和数据包的路径了
交换机
交换机就是用来提供网络连接端口,组建局域网,能够在特定范围之内进行数据的交换
局域网
局域网是指在某一区域内由多台计算机互联成的计算机组。在局域网中可以直接基于mac地址实现数据交互,但是MAC地址只能用于局域网交互数据,不能跨局域网传输
路由器
路由器就是将局域网彼此链接起来并支持数据交互,通俗易懂就是上网
广播与单播
讲解了什么是MAC地址,那么一块网卡如何知道另一块网卡的MAC地址呢?
计算机A向交换机发送一条消息,说我要找计算机B,然后交换机向所有计算机发出消息,说计算机A要找计算机B,这个过程就叫广播
那么单播又是什么呢?单播是指单台设备与单台设备之间的通信,源地址和目的地址都是单一的IP地址,单播数据包的通信可以在网络之间转发。在实际的网络通信中,大多数的通信都属于单播。参
更多文章:https://blog.51cto.com/alligator/910681
网络层
如果单单依靠MAC地址,采用广播方式发送数据吧,不仅效率低,而且局限在发送者的子网络,但是因为两台计算机不再同一个子网络,广播是传不过去的,这种设计是合理的,否则互联网上每一台计算机都会收到所有的包,那会引起灾难。
所以必须有一种办法来区分哪些MAC地址属于同一个子网络,哪些不是,如果是同一个子网络,就采用广播的方式发送,否则就采用“路由”方式发送
于是“网络层就诞生了”,它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做”网络地址”,简称”网址”。
“网络层”出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。
网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。因此,从逻辑上可以推断,必定是先处理网络地址,然后再处理MAC地址。
IP协议
规定网络地址的协议叫IP协议,它定义的地址称之为IP地址,广泛采用的v4版本即IPV4,它规定网络地址由32位2进制表示,一个IP地址通常写成四段十进制数,范围0.0.0.0-255.255.255.255
ARP协议
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址。
收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
ARP欺骗
地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。
传输层
PORT协议(端口协议)
同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?
也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做”端口”(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。
“端口”是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。
“传输层”的功能,就是建立”端口到端口”的通信。相比之下,”网络层”的功能是建立”主机到主机”的通信。只要确定主机和端口,就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做”套接字”(socket)。有了它,就可以进行网络应用程序开发了。
TCP协议
TCP是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。 一个TCP连接必须要经过三次“对话”才能建立起来
TCP三次握手过程
第一次握手:主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B,向主机B 请求建立连接,通过这个数据段, 主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我。
第二次握手:主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用那个序列号作为起始数据段来回应我
第三次握手:主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:”我已收到回复,我现在要开始传输实际数据了,这样3次握手就完成了,主机A和主机B 就可以传输数据了。
特点:没有应用层的数据 ,SYN这个标志位只有在TCP建立连接时才会被置1 ,握手完成后SYN标志位被置0。
TCP四次挥手过程
第一次: 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
第二次: 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
第三次: 由B 端再提出反方向的关闭请求,将FIN置1
第四次: 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束
由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式, 提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互, 为数据正式传输打下了可靠的基础。
UDP协议
UDP是一个非连接的协议,传输数据之前源端和终端不建立连接, 数据的传输速度快 但是可能会丢失
TCP协议之所以比UDP协议可靠 就是因为有双向通道 对不对?
不对!TCP协议之所以比UDP协议可靠 原因在于TCP协议发送消息有反馈机制,基于TCP发送的消息会在本地先保存该消息 如果地方确认收到才会删除,否则在一定的时间内会频繁的多次发送知道确认或者超时为止,UDP协议发送数据之后会立刻删除内存数据 不会保留
更多文章:https://zhuanlan.zhihu.com/p/24860273
应用层
应用程序收到”传输层”的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。
“应用层”的作用,就是规定应用程序的数据格式。
举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。
这是最高的一层,直接面对用户。它的数据就放在TCP数据包的”数据”部分。