网络通信
Internet
电脑与电脑之间是如何通信呢?我们都知道是通过网络,就好比一个人与另一个人交流是通过语言,那么问题来了,世界上这么多的语言我们如何确定语言相同呢,因此我们定义了一个国际通用语言英语
那电脑与电脑之间同样,我们要给他定义一个通用语言,因此网络协议便诞生了。
osi七层协议
互联网协议根据功能不同又分为osi七层协议或tcp/ip五层协议或tcp/ip四层协议

传输层:主要运行四层交换机,四层路由器
网络层:路由器,三层交换机
数据链路层:网桥,以太网交换机,网卡
物理层:中继器,集线器,双绞线
tcp/ip五层模型详解
物理层:主要基于电器特性发送高低电压 高电压对应数字1 ,低电压对应数字0
数据链路层:我们通过物理层可以发送一组一组的电信号(相当于二进制数),但我们怎么知道什么意思呢,因此数据链路层定义了电信号的分组方式
以太网协议 (一个统一的标准)
1 规定一组电信号构成一个数据包,叫做‘帧’
2 每一帧的数据分为:报头head和数据data部分
3 head包含:(固定18个字节) 发送者 / 源地址 (6字节); 接收者 / 目标地址 (6字节); 数据类型(6字节)
4 data包含: (最短46字节,最长1500字节) 数据内容
mac地址 (网卡的地址)
广播
有了mac地址,主机之间便可以通过广播的方式来进行通信

网络层
有了以太网,mac地址,广播的通信方式但这种方式在一个局域网内很好的运作,但所有的电脑都这样通信就会成为灾难了
我们的网络有一个一个的局域网所组成,因此我们必须要能够区分每个局域网
ip协议
规定网络地址的协议叫做ip协议,由32为的二进制组成
范围0.0.0.0 ~255.255.255.255
一个ip地址通常写成四段十进制数,例如:127.0.0.1
ip地址分为两大部分
网络部分:标示子网
主机部分:标示主机
子网掩码
我们如何区分ip地址的两大部分呢,根据子网掩码,他表示子网络特征的一个参数。在形式上等同于ip地址,也是一个32位的二进制数,它的网络部分全部为1,主机部分全部为0
例如:ip地址192.168.11.111,如果已知网络部分是前24位,主机部分为后8位,那么子网络掩码就是1111 1111. 1111 1111. 1111 1111. 0000 0000,写成十进制就是255.255.255.0
通过子网掩码与ip的AND运算我们就可以计算出ip的网络部分 例如:
172.16.10.1:10101100.00010000.00001010.000000001
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
ip数据包
分为head和data
head:长度为20到60字节
data:最长为65515字节
arp 协议
通信是基于mac广播的方式实现 但我们如何获取到目标的mac地址呢,就需要通过arp协议
首先通过ip地址和子网掩码区分自己所处的子网

其次 分析172.16.10.10/24与172.16.10.11/24处于同一网络(如果不是同一网络,那么下表中目标ip为172.16.10.1,通过arp获取的是网关的mac

三 这个包会以广播的方式在发送端所处的自网内传输,所有主机接收后拆开包,发现目标ip为自己的,就响应,返回自己的mac
局域网与局域网之间的通信需要网关
一个主机在局域网内通信 通过广播就可以找到,如果不在同一局域网则将ip交予网关,网关通过路由规则则可以找到相应的局域网,网关与对方网关通信,提供要找的ip,对方网关在自己局域网内广播,根据mac地址找到主机,发送信息,同样滴方式返回数据
传输层
网络层帮我们把主机联系在一起 我们如何找到主机上的应用呢 便是端口
传输层功能:建立端口到端口的通信 (端口范围0~65535, 0~1023为系统占用端口)
tcp协议:可靠传输 理论上没有长度限制 但一般不会超过ip数据包的长度

udp协议:不可靠传输 报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
tcp报文

tcp三次握手和四次握手

socket :帮助我们进行tcp/ip通信 是一个抽象层

socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件
网络通信实现
每台主机需要:本机的ip地址,子网掩码,网关的ip地址,dns的ip地址
获取这些要素的方式
静态获取 (手动配置)
动态获取 (通过dhcp获取)
以太网头 | ip头 | udp头 | dhcp数据包
前边的以太网头设置本机的mac地址和接收方的mac地址 接收方不知道则填入一个FF-FF-FF-FF-FF-FF
ip头 设置发送方的ip和接收方的ip,这时对于这两者,本机都不知道。于是本机为0.0.0.0,接收方设为255.255.255.255
udp头,设置发出方的端口和接收方的端口,这一部分是dhcp协议规定好的,发出方是68 接收方是67
这个数据包构造完成后,就可以发出了。以太网是广播发送,同一个子网络的每台计算机都收到了这个包。因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。当看到发出方IP地址是0.0.0.0,接收方是255.255.255.255,于是DHCP服务器知道”这个包是发给我的”,而其他计算机就可以丢弃这个包。接下来,DHCP服务器读出这个包的数据内容,分配好IP地址,发送回去一个”DHCP响应”数据包。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。
网络通信流程
1. 本机获取
本机的ip地址
子网掩码
网关的ip地址
dns的ip地址
2 打开浏览器
3 dns协议

4 HTTP请求
5 tcp协议
6 ip 协议
7 以太网协议
8 服务端响应

浙公网安备 33010602011771号