day14 五层协议 网络通信原理

今日内容概述

网络通信原理

1.osi七层协议

2.tcp/ip五层模型

3.网络通信小结

4.DNS域名解析

5.网络通信流程

今日内容详解

网络通信原理

1.osi七层协议

互联网的本质就是一系列的网络协议.一台计算机安装了操作系统,然后装上操作系统就可以正常使用了,但我们也只能自己使用,每个人自己的计算机之间彼此孤立.如何使计算机之间可以进行沟通呢?

英语成为世界上所有人通信的统一标准,如果把计算机看成分布于世界各地的人,那么连接两台计算机之间的internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列的协议,总称为‘互联网协议’(Internet Protocol Suite).

互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准.

互联网协议按照功能不同分为osi七层或tcp/ip五层.

应用层					应用层       		每层运行常见物理设备:
传输层					表示层					传输层			四层交换机,四层的路由器
网络层					会话层					网络层			路由器,三层交换机
数据链路层			   传输层		            数据链路层      网桥,以太网交换机,网卡			
物理层					网络层					物理层			中继器,集线器,双绞线
					  数据链路层
                        物理层
  • osi七层协议详解
-物理层:
    解决两个硬件之间怎么通信的问题,常见的物理媒介有光纤,电缆,中继器等.它主要定义物理设备标准,如网线的接口类型,光纤的接口类型,各种传输介质的传输速率的.它的主要作用是传输比特流(就是由 1,0转化为电流强弱来进行传输,到达目的地后在转化为 1,0,也就是我们常说的数模转换与模数转换).这一层的数据叫做比特.
-数据链路层:
    在计算机网络中由于各种干扰的存在,物理链路是不可靠的.该层的主要功能就是:通过各种控制协议,将有差错的物理信道变为无差错的,能可靠传输数据帧的数据链路.
    它的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层.这一层的数据叫做帧.
-网络层:计算机网络中如果有多台计算机,怎么找到要发的那台?如果有多个节点,怎么选择路径?这些都是路由要做的事.
    该层的主要任务为:通过路由选择算法,为报文(该层的数据单位,由上一层数据打包而来)通过通信子网选择最适当的路径.这一层定义的是IP地址,通过IP地址寻址,所以产生了IP协议.
-传输层:
    当发送大量数据时,很可能出现丢包的情况,另一台电脑要告诉是否完整接收到全部的包.如果缺了,就告诉丢了哪些包,然后再发一次,直至全部接收为止.
    简单来说,传输层的主要功能就是:监控数据传输服务的质量,保证报文的正确传输.
-会话层:
    虽然已经可以实现给正确的计算机发送正确的封装过后的信息了,但我们总不能每次都调用传输层协议去打包,然后再调用IP协议去找路由,所以我们要建立一个自动收发包,自动寻址的功能.而会话层就可以建立和管理应用程序之间的通信.
-表示层:
    表示层负责数据格式的转换,将应用处理的信息转换为适合网络传输的格式,或者将来自下一层的数据转换为上层能处理的格式.
-应用层:
    应用层是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种环境.

day14 五层协议 网络通信原理

2.tcp/ip五层模型

  • tcp/ip五层模型详解

我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来和功能,搞清楚每层的主要协议,就理解了整个互联网通信的原理.

首先,用户感知到的只是最上面一层应用层,自上而下每层都依赖于下一层,所以我们从最下一层开始切入,比较好理解.

每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件

  • 物理层
物理层由来:上面提到,孤立的计算机之间要想一起玩,就必须接入internet,言外之意就是计算机之间必须完成组网.
# 物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0
  • 数据链路层
数据链路层由来:单纯的电信号 0和 1没有任何意义,必须规定电信号多少位一组,每组什么意思.
# 数据链路层的功能:定义了电信号的分组方式
Ethernet以太网协议:

1.一组电信号构成一个数据包,叫做"帧"

2.每一组数据帧分成:报头head和数据data两部分

-head包括:(固定 18个字节)

发送者/源地址,6个字节

接受者/目标地址,6个字节(48位二进制数)	# mac地址:发送端和接收端的地址,指网卡的地址,长度为48位二进制数,通常由12位16进制数表示.

数据类型,6个字节

-data包含:(最短 46字节,最长 1500字节)

数据包的具体内容:

head长度+data长度 = 最短 64字节,最长 1518字节,超过最大限制就分片发送

3.接入互联网的主机必须有一块网卡,网卡上有一个mac地址,全世界唯一.

基于mac地址的广播的通信方式=>计算机通信基本靠"吼".

mac地址学习
  • 网络层
    """
    网络层由来:有了Ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,这就不仅仅是效率低的问题了,这会是一种灾难.
    """
    因此必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是,如果是就采用广播的方式发送,如果不是,就采用路由的方式(向不同广播域/子网分发数据包),mac地址是无法区分的,它只跟厂商有关.

网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址.
IP协议:

1.规定网络地址的协议叫IP协议,它定义的地址叫IP地址,广泛采用v4版本,即ipv4,它规定网络地址由 32位 2进制数表示.

2.范围0.0.0.0-255.255.255.255

3.一个ip地址通常写成四段十进制数,例: 172.16.10.1(你懂的)

IP地址分两部分

1.网络部分:标识子网

2.主机部分:标识主机

ps:注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网

例: 172.16.10.1与 172.16.10.2并不能确定二者处于同一子网

IP地址+mac地址=.全世 界范围内唯一一台计算机地址

子网掩码

形式上等同于ip地址,也是 32位二级制数字,它的网络部分全部为1(24位连续的 1),主机部分全部为 0(8位 0)

例如ip地址:172.16.10.4/24

10101100.00010000.00001010.0000100 -> 172.16.10.4

11111111.11111111.11111111.00000000 ->255.255.255.0

10101100.00010000.00001010.00000000 ->172.16.0.0 # 子网地址(子网掩码与ip'地址进行AND运算,两个数都为1取1,不相等取0)

子网地址一样,说明在一个子网络内.

ip协议的作用有两个:

1.为每台计算机分配ip地址

2.确定哪些地址在同一个子网络下.

ip数据包:

ip数据包也分为head和data两部分,无须为ip定义单独的栏位,直接放入以太网包的data部分

head:长度为 20到 60字节

data:最长为 65515字节

但是以太网数据包的"数据"部分,最长只有 1500字节,因此如果ip数据包超过了 1500字节,它就要被分割成几个以太网数据包分开发送.
ARP协议:

由来:计算机通信是广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议来发送,在谈及以太网协议的时候,因为通信是基于mac的广播方式实现的,获取自身的mac是容易的,但是如何获取目标主机的mac地址,就需要通过ARP协议.(因为在发送时只知道目标的IP地址,不知道它的mac地址,又不能跨第二,三层,所以需要使用地址解析协议.使用地址解析协议,可根据网络层IP数据包包头中IP地址信息解析出目标的mac地址信息,以保证通信的顺利进行.)

arp协议功能:广播的方式发送数据包,获取目标主机的mac地址

"""
协议的工作方式:每台主机IP都是已知的
"""
# 在一个局域网LAN内,靠的是目标mac地址找到对方在哪,即只要目标mac地址确定,数据包就会送到目标处,每台主机的IP都是已知的.
引入:
    计算机1要和计算机2通信,必须要拿到计算机2的IP地址.
-在一个局域网内如何通信?
	要拿到目标的mac地址,也就是计算机2的mac地址.
-跨局域网通信	# 网关与网关之间通信:基于IP地址的路由协议
	要拿到目标的mac地址,其实就是获取网关的mac地址.
"""
ARP会将IP地址转换成mac地址(要么是局域网内一台计算机的mac地址,要么是网关的mac地址,不能是公网计算机的mac地址.)
"""
1.通信的第一步先拿到目标主机的ip地址
2.判断出目标主机与自己是否在一个子网里
如果在一个子网里,数据包的走向:
	源主机----》本地交换机 -----》目标主机
如果不在一个子网内,数据包的走向:
    源主机->>本地交换机->>本地路由器------>>公网------>>目标路由器->>目标交换机->>目标主机
详解:
    源主机:  172.16.10.10/24
	目标主机: 172.16.10.11/24 
    1.拿到目标主机的ip与子网掩码
		172.16.10.11/24
		
	2.arp协议算出本机的网络地址、目标主机的网络地址
		源: 172.16.10.0
		目标: 172.16.10.0
			
	3.判断源的子网地址与目标的子网地址是否一样
		一样,那么通信就是在同一个子网内通信,靠的是mac地址定位到对方在哪里
		
		发送arp协议的广播包拿到目标主机的mac地址,格式如下
	
			自己的mac地址 + FF-FF-FF-FF-FF-FF 172.16.10.10/24  172.16.10.11/24 + 数据部分
     4.发起真正的通信
		自己的mac地址 + 目标主机的mac地址 172.16.10.10/24  172.16.10.11/24 源端口 目标端口 数据部分
# 交换机只有在两种情况下才把包进行广播:
		1.目标mac是:FF-FF-FF-FF-FF-FF
		2.目标mac不存在于mac地址表中
那么如果源的子网地址与目标的子网地址不一样,那么通信不在同一个子网内,这时候我们要靠路由器将数据包转发出去.
发送arp协议的广播包拿到网关的mac地址,格式如下:
	
		自己的mac地址 + FF-FF-FF-FF-FF-FF 172.16.10.10/24  172.16.10.1/24 + 数据部分
     发起真正的通信
		自己的mac地址  网关的mac地址 172.16.10.10/24  101.200.10.22/24 源端口 目标端口 数据部分   
  • tcp/udp协议(传输层)
数据段:head+data
head:放的是源端口		目标端口(端口在本机唯一即可)
"""
tcp协议应用于程序之间的通信,tcp通信之前必须建立双向通路(虚拟链路).当应用程序希望通过tcp与另一个应用程序希望通过tcp与另一个应用程序通信时,它会发送一个通信请求,这个请求必须被送到一个确切的地址,在双方"握手"之后,tcp将在两个应用程序之间建立一个全双工的通信,这个全双工通信将占用两个计算机之间的通信线路,直到它被另一方或双方关闭为止.
"""
# 建立链接 ==>三次握手(也可以看做四次,因为没有数据交互,所以可以简化为三次)
# 断开链接 ==>四次挥手(什么时候发起断开请求取决于数据是否传输完毕)
深刻理解下图

tcp三次握手和四次挥手
应用层 应用层
传输层 段 传输层
网络层 包 网络层
数据链路层 帧 数据链路层
物理层 <==交换机>物理层

ethernet头 + ip头 + tcp的头 + 应用层的头 + 应用层数据

传输层 tcp/udp 基于端口
端口范围0 - 65535,0-1023为系统占用端口
ip + mac + 端口port = 可以定义全世界范围内的基于网络通信的应用程序
打的数据分为段进行发送,不分段 很容易大量丢失数据

基于tcp协议通信:必须先建立一个双向通信的链接

三次握手建立链接:
    建立链接是为了传数据做准备的,三次握手即可
四次挥手断开链接
    断开链接时,由于链接内有数据传输,所以必须分四次断开
  • 应用层
"""
应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式.

应用层功能:规定应用程序的数据格式。

例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等.那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”.
"""
  • 补充
-1.ip地址的结构和分类
	根据tcp/ip协议,连接在internet上的每个设备都必须有一个ip地址,它是一个 32位二进制数,也可以用点分十进制表示,每八位一组,用一个十进制表示即 0 ~ 255,每组用"."分隔开,例如172.16.45.10
    IP地址分两部分:
1.网络号:标识子网

2.主机号:标识主机
    将ip地址中的网络位和主机位固定下来后,ip地址被分成了不同的积累:A类,B类,C类,D类,E类
-2.特殊ip地址
	1.网络地址:用于表示网络本身,具有正常的网络号部分,而主机号部分全部为0的ip地址称之为网络地址,如 172.16.45.0就是一个B类网络地址
	2.广播地址:用于向网络中的所有的设备进行广播。具有正常的网络号部分,而主机号部分全为 1(即 255)的ip地址称之为广播地址,如 172.16.45.255就是一个B类的网络地址
	3.有限广播地址:指的是 32位全位 1(即 255.255.255.255)的ip地址,用于本网广播
	4.回送地址:网络地址不能以十进制的 127作为开头,在地址中数字 127保留给系统作为诊断用,称为回环地址,如 127.0.0.1用于回路测试
5.	私有地址:只能在局域网内使用,不能在internet上使用的ip地址称为私有ip地址,私有ip地址有:
# 10.0.0.0~10.255.255.255,表示一个A类地址
# 172.16.0.0~172.31.255.255,表示16个B类地址
# 192.168.0.0~192.168.255.255,表示256个C类地址
# 	注意!!!:这些地址是不会被Internet分配的,因此它们在Internet上也从来不会被路由,虽然它们不能直接和Internet网连接,但仍旧可以被用来和Internet通讯,我们可以根据需要来选用适当的地址类,在内部局域网中大胆地将这些地址当作公用IP地址一样地使用。在Internet上,那些不需要与Internet通讯的设备,如打印机、可管理集线器等也可以使用这些地址,以节省IP地址资源
	6.0.0.0.0:指已经不是真正意义上的ip地址,它表示的是所有不清楚主机和目的网络,这里的不清楚指的是在本机路由表里没有特定条目指明如何到达.
-3.子网掩码
	1.子网掩码用于识别ip地址中的网络地址和主机地址.
	2.子网掩码也是 32位二进制数字,在子网掩码中,对应于网络地址部分全用1表示,主机部分全用 0表示.
	3.还可以用网络前缀表示子网掩码,即"/<网络地址位数>",如 172.16.45.0/24表示B类网络 172.16.45.0的子网掩码为 255.255.255.0

3.网络通信小结

  • socket套接字
"""
socket套接字是对传输层及其以下的封装,介于应用层与传输层之间,应用程序产生的数据包想要往外传输,直接传给socket就行了,socket会完成后续的封装.
"""
# 我们知道IP地址可以唯一标识主机,而TCP协议和端口号可以唯一标识主机的一个进程,这样我们可以利用IP地址+协议+端口号唯一标识网络中的一个进程.
socket起源于UNIX,在UNIX一切皆文件的思想下,socket是一种"打开-读/写-关闭"模式实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或读取对方内容,通讯结束时关闭文件.

4.DNS域名解析

  • DNS的作用
"""
在互联网中,其实我们访问的是ip地址,互联网上网站成千上万,每个网站访问都需要记住一大串数字,不但麻烦,而且根本记不住.这个时候DNS就出现了,它的作用就是将222.222.222.222解析为www.xxx.com,那么我们登陆的时候就直接输入域名就可以了.
"""
  • DNS的两种查询方式
# 一:递归
主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询.因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址.

# 二:迭代
本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”.然后让本地服务器进行后续的查询.根域名服务器通常是把自己知道的*域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向*域名服务器查询.*域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询.最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机.
  • DNS缓存及分类
"""
DNS缓存指DNS返回了正确的IP后,系统会将这个结果临时存储起来,并且它会为缓存设定一个失效时间,在这段时间内再次访问该网站时,系统就会之间将电脑本地的DNS缓存中把结果提交出来.而不必再去询问DNS服务器.
当然,在超过N小时之后,系统会自动再次去询问DNS服务器获得新的结果。所以,当你修改了 DNS 服务器,并且不希望电脑继续使用之前的DNS缓存时,就需要手动去清除本地的缓存了.

"""
# 分类
1. 浏览器DNS缓存(内存中): 浏览器会按照一定频率缓存DNS记录

2. 本地操作系统DNS缓存(内存中): 如果浏览器缓存中找不到需要的DNS记录,那就去操作系统找。

3. 本地HOSTS文件(硬盘中): Windows系统中位于C:\Windows\System32\drivers\etc

4. 路由器指定的DNS(远程): 路由器自动获取DNS地址,也可以手动修改-登录后台设置DNS服务器地址
  ps:路由器DNS被篡改会造成域名劫持,你访问的网址都会被定位到同一个位置,但是IP直接可以访问

5 .ISP的DNS服务器(远程): ISP(Internet Service Provider互联网服务提供商、联通电信移动),ISP有专门的DNS服务器应对DNS查询请求 .
6. 根服务器(远程,跨国): ISP的DNS服务器还找不到的话,它就会向根服务器发出查询请求.
  • 浏览器DNS查找顺序
浏览器DNS缓存->本地系统DNS缓存->本地计算机HOSTS文件->ISP DNS缓存->递归or迭代搜索

hosts文件可以充当本地dns用
	linux系统:/etc/hosts
	windows:C:\Windows\System32\drivers\etc\hosts
  • 其他
域名定义:http://jingyan.baidu.com/article/1974b289a649daf4b1f774cb.html

*域名:以.com,.net,.org,.cn等等属于国际*域名,根据目前的国际互联网域名体系,国际*域名分为两类:类别*域名(gTLD)和地理*域名(ccTLD)两种。类别*域名是以"COM"、"NET"、"ORG"、"BIZ"、"INFO"等结尾的域名,均由国外公司负责管理.地理*域名是以国家或地区代码为结尾的域名,如"CN"代表中国,"UK"代表英国.地理*域名一般由各个国家或地区负责管理.

二级域名:二级域名是以*域名为基础的地理域名,比喻中国的二级域有:.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com.
一般来说,二级域名是域名的一条记录,比如alidiedie.com是一个域名,www.alidiedie.com是其中比较常用的记录,一般默认是用这个,但是类似*.alidiedie.com的域名全部称作是alidiedie.com的二级.

5.网络通信流程

1.本机获取
2.打开浏览器,比如访问Google,在地址输入www.google.com
3.dns协议(基于udp协议)
4.HTTP部分的内容
5.TCP协议
6.IP协议
7.以太网协议
8.服务器端响应.

上一篇:Java学习 Day14 Collection List ArrayList


下一篇:java学习day14---(多态)