作者:~小明学编程
文章专栏:JavaEE
格言:热爱编程的,终将被编程所厚爱。
目录
局域网和广域网
局域网
局域网组建的方式
广域网
网络通信基础
IP地址
端口号
协议
什么是协议
协议分层
分层模型
OSI七层模型
TCP/IP五层模型
网络设备所在的分层
封装和分层
封装
应用层
传输层(操作系统内核)
网络层(操作系统内核)
数据链路层(驱动程序)
物理层(硬件设备,网卡)
分用
物理层
数据链路层
网络层
传输层
应用层
传输过程
局域网和广域网
局域网
局域网,即 Local Area Network,简称LAN。
局域网通俗的来说就是将一小片区域(没有明确的界限)的主机给连接起来,然后连接起来的主机之间就可以互相通信了,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。
局域网组建的方式
1.基于网线连接:通过网线将多台设备连接起来。
2.基于集线器的连接:将多台设备都连到集线器上面。
3.基于交换机组建:将多台设备连到交换机上。
4.基于交换机和路由器组建:将多台设备连接到交换机上再将多个交换机连在一个路由器上。
广域网
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。所谓的广域网和局域网之间是没有明确的界限的,只是一个相对概念。
网络通信基础
刚刚简单的介绍了一下广域网和局域网,他们主要是通过某种设备将多台设备连接起来,连接起来的目的就是为了彼此相互交流,下面就简单的给大家介绍一下他们之家是如何实现相互交流的。
IP地址
所谓的IP地址是用于定位我们主机的网络地址。
其中IP地址是一个32位的一个二进制数,但是32位的二进制数不易读,所以我们通常把它分为四个八位的二进制数也就是4个一个字节的数,这样的过也就规定了每个字节的大小是0~255.
通常情况下通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6
特殊的IP
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
这样的话我们就可以通过IP地址找到我们指定的主机了,但是光找到主机的话还是不够的我们需要找到哪一个进程来解决问题,这就需要我们的端口号了。
端口号
我们的IP地址用于锁定我们的主机的位置,而端口号用于锁定该主机的某一个进程,这样才能精确的知道我们的数据要放在哪里。
端口号的本质是2个字节的无符号整数所以其能够表示的范围就是从0~65535,值得我们注意的是一个端口号只能绑定一个进程,但是一个进程可以绑定多个端口号。
协议
什么是协议
所谓的协议就是一种约定我们的计算机之间的交流是比较复杂的,我们需要很多的约定才能使彼此之间能够很好的交流并且正确的交流。
计算机之间的传输媒介是光信号和电信号。通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。
协议分层
前面我们说了协议很复杂有多种多样的规定和约束才能保证我们通信的正常,所以这个时候需要我们对协议进行分层,各自管理各自的东西这样可以避免将所有的规定都写在一起所造成的复杂,协议的分层有利于我们对协议更好的维护和扩展。
优点
1.每层协议不需要理解其他层协议的细节(更好的做到了封装)。就像打电话的人,不需要理解电话的工作原理,就能完成打电话的操作。制造电话的人,也不需要成为语言大师。
2.把对应层的协议替换成其他协议(更好的耦合)。就像打电话的人,可以使用有线电话,也可以使用无线电话。打电话的人,可以使用汉语,也可以使用英语。
分层模型
OSI七层模型
OSI七层网络模型是将网络从逻辑上分为了七层,他们分别是
应用层
网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示层
数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、EBCDIC、加密格式等
会话层
建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话
传输层
定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
网络层
进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6)
数据链路层
建立逻辑连接、进行硬件地址寻址、差错校验 等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
物理层
建立、维护、断开物理连接。(由底层网络定义协议)
这种分层并不是很实用所以我们通常将上面的三层合并到一起也就是TCP/IP五层/四层(不算上物理层)模型。
TCP/IP五层模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
下面我们就分别详细的介绍这五层分别的功能是什么。
物理层:
网络通信中的硬件部分,主要是针对硬件的一些约束,就像我们的买u盘的时候一般不需要考虑插口的问题,拿来直接就能插进去使用了,这是因为我们事先对其进行了一些约定,多宽多长等都约定好了。
数据链路层:
数据链路层主要是负责相邻的两个设备之间的通信的,例如我们一个路由器连接了两个主机,主机以和主机2,那么我们的主机和路由器之间就是相邻的,而两个主机之间是不相邻的。
网络层:
网络层是负责点对点之间的通信的,在一个复杂的网络之中我们想要连接两台主机的话就需要网络层来规划出一条合适的路线。
传输层:
负责端到端之间的通信,只关注数据有没有传输到位不关注数据是怎么传输的。
应用层:
和应用程序相关主要负责告诉我们这个数据是干嘛用的,不同的应用程序就会有不同的用途。
网络设备所在的分层
主机:实现了物理层要应用层这五个层面,其中操作系统实现了传输层到物理层。
路由器:实现了从物理层到网络层这三个层面。
交换机:实现了物理层到数据链路层。
封装和分层
封装
描述了不同的分层的协议之间,是如何相互配合的。就是将应用层的内容,封装为传输层的内容。封装的时候就是将上面放上一些辅助的信息。封装的时候不需要考虑脏数据。
应用层
首先我们需要构造一个应用层的协议,就拿我们发微信来举例子,我们现在想要发一个"圣诞快乐",我们假设微信的协议是这样的。
这样就构造好了我们的应用层的协议报文。
传输层(操作系统内核)
然后接下来就到了我们的传输层,在传输层我们需要根据刚才应用层的协议报文来构造一个传输层的协议报文,其中传输层最典型的协议:UDP,TCP。
构造成的数据报,TCP 数据报 = TCP 报头 + 数据载荷(Payload,也就是一个完整的应用层数据。
以上就是构造好了一个以TCP为例的传输层的协议报文。
网络层(操作系统内核)
拿到了完整的传输层数据报,就会在根据当前使用的网络层协议(例如 IP),再次进行封装,把 TCP 数据报构造成 IP 数据报,还是添加一个协议报头。仍然是字符串拼接的过程。紧接着,当前的 网络层协议,就会把这个 IP 数据报,交给数据链路层。
IP 数据报 = IP 协议报头 + 载荷(完整的 TCP/UDP 的数据报)
IP 数据报当中也有很多重要的信息:其中最重要的就是 源IP 和 目的IP。相当于发件人的地址,和收件人的地址。
以上就构造好了我们网络层的协议报文,接着就交给我们的数据链路层了。
数据链路层(驱动程序)
在刚才的 IP 数据报基础上,根据当前使用的数据报链路层的协议,给构成一个,数据链路层的数据报。典型的数据链路层的协议,叫做 “以太网” ,就会构造成一个 “以太网数据帧”。
不同于上面,数据链路层会在IP数据包的基础上加上帧头和帧尾,网络层的的IP协议里面主要包含了起点和终点,我们的帧头是起点和下一个节点的地址,其中起点的地址是不变的而下一个节点的地址是变化的。
物理层(硬件设备,网卡)
物理层的作用就是把刚才的以太网的数据帧(一组01)变成高低电平或者变成高低电磁波给传输出去。
分用
分用就是封装的逆过程,就是将层层的封装给拆开最后拿到我们想要的数据。
物理层
将我们得到的高低电平或者电磁波转换成01,然后这一串 0 1 就是一个完整的以太网数据,然后 物理层 就把数据交给 数据链路层。
数据链路层
在数据链路层会去掉这些帧头和帧尾,拿到IP数据报,再将ip数据报交给网络层。
网络层
在网络层我们会去掉我们的IP协议报头然后将里面的TCP协议报文交给传输层。
传输层
接着传输层又会对当前协议进行解析,去掉TCP协议报头将里面的东西交给应用层。
应用层
就会调用 socket API 从内核中读取到这个应用层的数据报,再按照应用层协议进行解析,然后根据解析结果显示到窗口中。
传输过程
通过交换机
通过路由器
我们复杂的传输过程基本都是通过这两种情况而来的,中间可能会经过多个路由器或者交换机。