Linux网络通信协议
什么是互联网/什么是网络?
互联网+物理链接设备+互联网通信协议
为什么要有互联网?
方便数据的传输,互联网又称为信息高速公路
CS架构与 BS架构
cs架构是客户端架构 client客户端 ------server服务端
bs架构是浏览器架构 browser———— server
client客户端 server服务端
客户端软件send 服务端软件recv
操作系统 操作系统
计算机硬件 物理介质 计算机硬件
什么是网络通信?
网络通信存在意义就是跨地域数据传输
如何找到目标服务器?
通过ip地址加mac地址标识全世界内独一无二的一台计算机
也可以说ip地址就可以找到全世界那一台独立的计算机
ip地址通过ARP协议,可以自动解析成mac地址
互联网通信协议
osi七层协议
应用层》会话层》表示层》传输层+网络层+数据链路层+物理层
但是我们称为5层
五层协议:
应用层+传输层+网络层+数据链路层+物理层
应用层
可以自定义协议,= 头部+数据
传输层 tcp 和 udp 协议》基于端口(part)
端口范围0----65535, 其中0-1023 端口以被系统占用
ip+端口=》标识全世界范围内独一无二的一个基于网络通信的应用程序
端口:每个端口都由操作系统分配端口编号,一个端口对应一个应用程序,并且端口不能冲突
tcp协议规定:tcp的头+数据
tcp 可靠协议 因为它是每发一个数据包过去,都需要对方回复ack确认信息后,才会把本地数据删除,否则会重复发送几次
三次握手和四次挥手 建立双向链接
三次握手:
建立虚拟通道
客户端 服务端
发送请求 收到请求 包含服务端的请求(我的发建立虚拟通道)
客服收到请求
通道建立成功
四次挥手:
断开虚拟通道
客户端 服务端
(1.1) 客户端首先进入FIN_WAIT_1 (状态) 主动发起断开通道请求
(1.2) 服务端进入close_wait(状态) ? 收到断开连接请求
(2.1)服务端进入LAST_ACK (状态) ) ? 代表下一个通道马上断开,还没断开
(1.3)客户端进入FIN_WAIT_2(状态) 一个通道已经断开
(2.2)客户端收到后进入TIME_WAIT(状态) 所有通道已经断开 向服务端发送ack=1 (2.3)服务端收到ack=1后,不再有反应
1.1---1.2----1.3 2.1---2.2-----2.3 请注意时间段
udp协议:不可靠协议 1, 无连接
2,每发一个数据包不需要对方回复ack确认信息,会直接把本地数据清除
不需要建立双向通道
ps:基于1和2 udp协议协议的程序无需事先启动服务端
ps:udp协议传输数据的效率比tcp更快,但是tcp协议的传输数据更可靠
tcp协议为何建立链接需要三次握手,而断开连接需要4次挥手?
为何tcp协议更可靠?
交换机:二层设备
划分VLAN
一个交换机可以划分VLAN
可以不通过路由器隔离不同的广播域
Access port 口 特点 加VLAN标记 发出去的包没有VLAN标记 连接计算机
socket套接字
把应用层以下的四层协议封装好了
所有基于网络的应用程序,都是socket应用程序
应用程序产生的数据包要往外传输直接传给socket就可以了,socket会完成后续的封装
dns 域名解析
WWW.BAIDU.COM.
WWW.JD.COM.
. 代表根域名 全球13台根服务器
com 代表顶级域名 com就是商业组织 申请难
JD 代表二级域名
www 代表主机名
访问一个网站 需要它的ip地址 不好记,为了好记,我们就用域名
根服务器 只存放顶级域名的ip地址 com解析记录
com顶级域服务器 只存放二级域名
二级域名 存放www
分级管理,分级查询,
dns的查询:
递归:a问b ,b说我不知道,你别急,我知道c知道,b问c,c说我不知道,但是我知道d知道,问清除后,按层返回
迭代:a问b b说我不知道,但是我知道c知道,你自己去问吧,我去问c,c说我不知道,但是我知道d知道,你自己去问吧
dns查询一个域名
首先递归问所有人没问到,只能迭代问
浏览器在访问服务器会通过域名 它的顺序为:
浏览器dns缓存,本地系统dns缓存,本地计算机hosts文件,isp缓存,递归,迭代
hosts文件可以充当本地dns用
linux系统:/etc/hosts
windows: C:\windows\systme32\drive\etc\hosts
dhcp服务端端口67
dns服务端端口
网络层:用头和数据来完成封装,必须通过ip协议
ip协议,当源IP要访问目标ip 方法就是直接去问,会有两种情况:
在同一个子网内 我们子网内有一个网关,网关内有一个mac地址表,如果有直接拿到目标的mac地址
不在一个子网内 我们会拿到网关的mac地址 我们会发一个获取mac地址的包,这个包是ARP的协议的包,当网关拿到这个包就会明白,我曹!问我要我的mac地址,快拿走
自己的mac有了,网关的mac也有了
这时可以发真正的数据包了,网关现在看数据包的ip地址了,源ip地址是自己,还有一个公网的ip地址
网关知道了,我得让一个路由转发,送给对方的网关了,
对方网关看到,这是我公网ip,发起广播,找到那个私网ip地址,就找了mac地址,再把数据包送给网关。
现在我们找到了目标的ip地址和mac地址还不够,我们是想访问运行在他操作系统上的一款软件,
就得用到传输层的端口
ARP协议:
规定了ip地址和子网划分
ip地址的两方面用途
1,arp协议会把ip地址解析成mac地址,
2,标识子网地址:
1,通信的第一步先拿到目标主机的ip地址
2,判断出目标主机与自己是否在一个子网里
如果在一个子网里,数据包的走向:
源主机》》》本地交换机》》》》目标主机
如果不在一个子网里,数据包的走向
源主机》》本地交换机》》》本地路由器》》》公网》》》目标路由器》目标交换机》》目标主机
arp协议 推算原理:
根据源ip和源子网掩码推算出源地址
根据目标ip和目标子网掩码推算出目标地址
如果一样,则在一个子网里
如果不一样,则在公网里
172.16.10.11 用八个二进制数表示 01101011,00101110,01010011 ,001101011
255.255.255.0 用八个二进制数表示 111111111,111111111,111111111,00000000
推算为1+1 为1 1+0=0 推算出来,就是子网地址
前24个数为网络标识位 ,后八个数字表示 主机位
送arp协议的广播包拿到mac地址,格式如下
自己的mac地址,FF,FF,FF,FF,FF,FF 源主机的ip 目标主机的ip 数据部分
跟 路由器要mac地址
发起真正的通信
自己的mac地址 路由器的mac地址 源主机的ip 目标主机的ip 源端口,目标端口 数据
本地回环地址
在一个子网中测试代码是否可以正常运行,规避网络问题
二层隔离和三层隔离:
两台计算机接入不同的交换机,称之为二层隔离
子网地址不同,称之为三层隔离
结论:二层隔离与三层隔离要保持一直
二层联通,三层可以隔离,即两台计算机接入同一个交换机
数据链路层:必须要对它进行分段,每一组都有它的意义,定义电信号的分组方式
协议:规定数据的组织格式
格式: 头部+数据部分
1,以太网协议:
规定一个组电信号称为数据帧,每一组都分为报头head和数据data两部分,是对数据具有描述性的
head头固定位18个字节,前六个位发送者地址,后六位为接收者地址,剩下六位为数据类型
data:最短46字节,最多1500字节
head 像是一个快递盒子,而data是数据
以太网规定:
mac地址
但凡接入网络的计算机必须有 块网卡,每块网卡在出场会刻入mac地址,长度为48为2进制,通常有12位16进制数表示(全世 界独一无二mac地址)
计算机通信靠广播, 通信基本靠吼,
物理层:用来发送电信号01010101高低电频
整体流程:
计算机开机
1,DHCP动态获取计算机 本机ip地址 子网掩码 网关地址 dns的ip地址
2,打开浏览器,想要访问Google ,在地址栏输入:www.Google.com
3,dns协议 基于(udp协议)
4,网线