day03 网络基础
1、什么是网络
网络=物理连接介质+互联网通信协议
OSI七层协议
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
2、为何要有网络
为了方便数据的传输/通信,信息高速公路
3、以太网(以太网协议数据链路层)
1、以太的数据称之为数据帧,分为head+data两部分,其中head长度固定
2、规定但凡是接入互联网的主机必须有一块网卡,网卡上有一个mac地址,全世界唯一
3、以太网协议的通信采用的是广播的通信方式=》计算机通信靠吼
ps:mac地址学习功能
arp协议 地址解析协议
4、ip协议 (IP协议网络层)
两个IP之间通信(本地IP和目标IP都是和本地子网掩码做运算来判断是否在同一网络)
ip地址+mac地址=》全世界范围内唯一的一台计算机
ip地址的范围:
00000000.00000000.00000000.00000000 ->0.0.0.0
11111111.11111111.11111111.11111111 ->255.255.255.255
子网掩码:
11111111.11111111.11111111.00000000 ->255.255.255.0
例如ip地址1:172.16.10.4/24
10101100.00010000.00001010.00000100 -> 172.16.10.4
11111111.11111111.11111111.00000000 -> 255.255.255.0
10101100.00010000.00001010.00000000 -> 172.16.10.0 子网地址
例如ip地址2:172.16.10.5/24
10101100.00010000.00001010.00000101 -> 172.16.10.5
11111111.11111111.11111111.00000000 -> 255.255.255.0
10101100.00010000.00001010.00000000 -> 172.16.10.0 子网地址
上节课复习:
1、批处理系统
多道技术:
分时操作系统
multics-》unix-》minix-》linux
redhat
centos
2、进程与线程
进程-》资源单位
一个程序在运行过程中使用的数据都与自己的进程有关
线程-》执行单位,cpu执行的线程
进程内代码的运行过程
3、任务运行的三种状态
运行态: 拿到cpu,正在运行
就绪态:等待被分配cpu,一旦拿到cpu就可以立即运行
阻塞态:拿到cpu也无法执行,必须等到io结束,进入就绪态,然后。。。
4、网络
什么是网络?
网络=物理连接介质+互联网通信协议
互联网通信协议就相当于计算机界的英语
为何要有网络?
打破了地域限制,提高传数据的效率=》信息高速公路
应用层 http,ftp,可以自定义协议
表示层 描述文件类型
会话层 决定什么时候发什么时候断
传输层 tcp/udp
1、数据段
2、head+data:head放的源端口 目标端口
3、端口在本机唯一即可
网络层 ip协议:
1、数据包
2、head+data:head放源ip地址 目标ip地址
3、ip地址的通信=》路由协议
ipv4:
ipv4地址
00000000.00000000.00000000.00000000=>0.0.0.0
11111111.11111111.11111111.11111111->255.255.255.255
子网掩码:
11111111.11111111.11111111.00000000-》255.255.255.0
172.16.10.13/24 -》172.16.10.0
172.16.10.14/24 -》172.16.10.0
子网地址相同,代表处于同一个lan中
数据链路层 ethernet以太网协议:
1、数据帧
2、head+data,head里放:源mac地址 目标mac地址
3、基于mac地址的广播的通信方式=》计算机通信基本靠吼
物理层 转换成电信号01010101,然后发送
引入:
1、计算机1要与计算机2通信,计算机1必须拿到计算机2的ip地址,
2、通信分为两类
局域网内
跨局域网
计算机1如何确定与计算机2是否在一个局域网内
如果在一个局域网内,如何通信?要拿到目标mac就是计算机2的mac地址
如果跨局域网,如何通信?要拿到的目标mac是网关的mac地址
1、ARP协议
arp协议-----》获取目标mac,怎么获取???通过ip地址找到mac地址
前提:在一个局域网LAN内,靠的是目标mac地址找到对方在哪里,即只要目标mac地址是谁,数据包就送给谁
情况一:
计算机1
192.168.10.11/24
计算机2
192.168.10.13/24
1、拿到目标mac地址
ARP协议:
判断两台计算机的子网地址是否一样,如果一样,应该尝试获取计算机2的mac地址
I:
计算机1的mac地址 FF-FF-FF-FF-FF-FF 192.168.10.11/24 192.168.10.13/24 数据部分
II:所有计算机都收到该ARP包,
碰到 FF-FF-FF-FF-FF-FF,大家知道对方想跟自己要mac地址
如果目标ip:192.168.10.13/24就是自己,那么就返回mac地址
2、发真正的数据
计算机1的mac地址 计算机2的mac地址 192.168.10.11/24 192.168.10.13/24 数据部分
情况二:
计算机1
192.168.10.11/24
计算机2
202.10.11.13/24
1、拿到目标mac地址
ARP协议:
判断两台计算机的子网地址如果不一样,应该尝试获取网关的mac地址
I:
计算机1的mac地址 FF-FF-FF-FF-FF-FF 192.168.10.11/24 192.168.10.1/24 数据部分
II:所有计算机都收到该ARP包,
碰到 FF-FF-FF-FF-FF-FF,大家知道对方想跟自己要mac地址
如果目标ip:192.168.10.1/24就是自己,那么就返回mac地址
2、发真正的数据
计算机1的mac地址 网关的mac地址 192.168.10.11/24 202.10.11.13/24 数据部分
2、ip+mac
ip地址+mac地址=》全世界唯一一台计算机
ARP会将ip地址转换成mac地址(要么是局域网内一台计算机的mac地址,要么就是网关的mac地址,不能是公网计算机的mac地址)
3、tcp与udp

图中字符详解:
SYN:代表连接请求或接收的报文段。
seq:指发送的第一个字节的序号。
ACK:确认报文段,用于回应SYN。
ack:确认号,表示希望收到的下一个数据的第一个字节的序号。
在TCP协议中,主动发起连接请求的一方被称为客户端,而被动等待连接的一方则被称为服务端。无论是客户端还是服务端,一旦TCP连接成功建立,双方均可进行数据的发送与接收。
连接建立之初,服务器和客户端都处于CLOSED状态。在通信正式开始前,双方需要分别创建自己的传输控制块(TCB)。服务器完成TCB创建后,会进入LISTEN状态,随时准备接收客户端发来的连接请求。
1、第一次握手:
客户端向服务端发送一个SYN报文(SYN=1),并指明客户端的初始化序列号ISN(x),即图中的seq=x,它表示本报文段所发送的数据的第一个字节的序号。在发送SYN报文后,客户端进入SYN_SENT状态,意味着它正在等待服务端的连接确认。
SYN_SENT状态解释:当客户端发送连接请求后,它进入SYN_SENT状态,等待服务端的响应。在这个状态下,客户端准备好了接受服务端的连接确认。
TCP协议规定:SYN=1的报文段是用于建立连接的请求,它不携带任何数据,但会消耗一个序号。这是TCP协议确保连接建立过程中的有序性和可靠性的一种方式。
2、第二次握手:
服务器在接收到客户端的SYN报文后,会以SYN报文作为回应(SYN=1),并赋予自己独特的初始化序列号ISN(y),即图中的seq=y。同时,服务器将客户端的ISN+1设置为确认号ack的值,以此确认已收到客户端的SYN报文,并期待接收到的下一个数据报的起始序号为x+1。在此之后,服务器会进入SYN-RCVD状态,等待对连接请求的进一步确认。
SYN-RCVD状态解析:当服务器在收到并发送连接请求后,会进入SYN-RCVD状态,此时它正在等待对初始连接请求的确认。在这个状态下,服务器已经准备好接受来自客户端的进一步通信。
TCP协议规定:SYN=1且ACK=1的报文段是用于确认连接的应答,它同样不携带任何数据,但通过确认号的使用,确保了连接建立过程中的有序性和可靠性。
3、第三次握手:
在收到服务器发送的SYN报文后,客户端会回应一个ACK报文。这个ACK报文将服务器的ISN+1作为ack的值,表明客户端已经收到了服务器的SYN报文,并期待接收到的下一个数据报的起始序号为y+1。同时,客户端将自己的序列号seq设置为x+1,即初始序列号seq=x增加1。完成这些操作后,客户端进入ESTABLISHED状态,表示连接已成功建立。服务器在收到这个ACK报文后,也会转入ESTABLISHED状态,此时双方连接的建立工作全部完成。
ESTABLISHED状态解释:当一个TCP连接进入ESTABLISHED状态时,它意味着连接已经打开,数据可以开始在双方之间传送。

四次挥手连接释放:
TCP连接的终止需要经过四次包的交换,因此被称为四次挥手。在这四次交换中,客户端或服务器都可以主动发起连接的释放动作。值得注意的是,TCP连接是双向的,因此四次挥手中,前两次主要用于断开一个方向的连接,后两次则用于断开另一方向的连接。
1、第一次挥手
客户端首先发送一个FIN报文,其中包含一个序列号seq=u,表示请求连接终止。在发送完毕后,客户端停止数据发送,并主动关闭TCP连接。此时,客户端进入FIN_WAIT_1状态,等待服务器的确认。
FIN_WAIT_1状态解析:该状态表示客户端正在等待远程TCP的连接中断请求,或者等待先前连接中断请求的确认。FIN=1标志着该报文段是一个连接释放请求。而seq=u则代表客户端向服务器发送的最后一个字节的序号。
2、第二次挥手
服务端在收到客户端的FIN报文后,会发送一个ACK报文作为回应。这个ACK报文中,序列号值设为客户端序号值加1,意在确认已收到客户端的报文。随后,服务端进入CLOSE_WAIT状态,等待本地用户的连接中断请求。
CLOSE_WAIT状态解析:在此状态下,服务端等待来自本地用户的连接释放请求。ACK报文中的ACK=1表示应答,而seq=v则指明了服务端释放应答报文段的首字节序号。同时,ack=u+1表明服务端希望从第u+1个字节开始接收报文段,并已成功接收了前u个字节。
完成第二次挥手后,客户端到服务端的连接已释放,服务端不再接收客户端数据,而客户端也已无数据待发送。然而,服务端到客户端的连接仍保持开启,若服务端在此期间发送数据,客户端仍需正常接收。此状态将持续一段时间,直至整个CLOSE-WAIT状态结束。
3、第三次挥手
服务端在完成数据的发送后,会向客户端发送一个连接释放报文。这个报文头包含FIN标志位为1,以及ack序号值为u+1。由于在CLOSE_WAIT状态期间,服务端可能又发送了一些数据,假设此时的序列号为seq=w。发送完毕后,服务端进入LAST_ACK状态,等待来自客户端的连接中断确认。
4、第四次挥手
客户端在收到服务端的FIN报文后,会响应一个ACK报文,其中ack序号值为w+1,同时将自己的序列值加1作为ACK报文的seq序号值,即seq=u+1。此后,客户端进入TIME_WAIT状态。
TIME_WAIT:确保远程TCP收到连接中断请求的确认
该状态会持续2MSL(最长报文段寿命)的时间。在此期间,TCP连接并未完全释放。若在这段时间内未收到服务端的重发请求,客户端将进入CLOSED状态,并撤销TCB。
服务端在收到客户端的确认ACK报文后,会立即进入CLOSED状态,并撤销TCB,从而结束此次TCP连接。值得注意的是,服务端结束TCP连接的时间点通常早于客户端。
1、为何TCP建立连接时采用三次握手而非两次或四次?
采用两次握手会导致已失效的连接请求报文段被重新发送至服务端,从而造成服务端资源的无效消耗。而三次握手已足够确保握手过程中的通信正常,无需增加至四次,否则将显得冗余。
2、为何TCP关闭连接时需要四次挥手?
TCP协议的半关闭特性允许其连接的一端在完成发送后,仍能继续接收来自另一端的数据。因此,任何一方都可以在数据传输结束后主动发起连接释放的通知,并在对方确认后进入半关闭状态。当另一方也确认无数据再发送时,才会发出最终的连接释放通知,对方确认后,TCP连接即完全关闭。
3、为何TIME_WAIT状态需持续2MSL后才能转为CLOSE状态?
当TCP连接的一方完成连接释放后,会进入TIME_WAIT状态。这个状态需要持续2倍的最大段寿命(Maximum Segment Lifetime,MSL)的时间,这是为了确保在传输过程中可能存在的延迟数据包能够被对方完全接收。只有当2MSL时间过去后,确认对方已收到所有数据,该TCP连接才能完全关闭,进入CLOSE状态。
1.确保服务端能够接收到客户端的确认应答。
如果客户端在发送完确认应答后立即进入CLOSED状态,而该应答不幸丢失,服务端在等待超时后将尝试重新发送连接释放请求。但此时,由于客户端已经关闭,无法再作出响应,这会导致服务端无法正常关闭TCP连接。因此,TIME_WAIT状态的持续存在,是为了保证服务端能够接收到并处理客户端的确认应答,从而确保连接的平滑关闭。
2. 防止“三次握手”中提及的“已失效的连接请求报文段”干扰当前连接。
当客户端发送完最后一个确认报文后,经过2MSL的时间间隔,可以确保在本连接持续时间内产生的所有报文段都已从网络中清除。这样,新建立的连接就不会受到旧连接请求报文的影响。

CLOSING 客户端和服务端同时发FIN时的状态 很少见
tcp通信之前必须建立双向通路 可靠的
udp协议=》不可靠协议
4、socket
应
=====》socket《====
传
网
数
物
5、dhcp
想实现网络通信,每台主机需具备四要素
1、本机的IP地址
2、子网掩码
3、网关的IP地址
4、DNS的IP地址
获取以上地址,有两种方式:
1、手动配置-》静态获取
2、动态获取-》dhcp
dhcpclient(68号端口)-----------》dhcpserver(67号)
获取这四要素分两种方式
以太网头 ip头 udp头 dhcp数据包
(1)最前面的”以太网标头”,设置发出方(本机)的MAC地址和接收方(DHCP服务器)的 MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF- FF-FF-FF-FF。
(2)后面的”IP标头”,设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机 都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设255.255.255.255。
(3)最后的”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部 分。
新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS 服务器等等参数
6、
ip-》域名-》hao123
浏览器DNS缓存->本地系统DNS缓存->本地计算机HOSTS文件->ISP DNS缓存->递归or迭代搜索
递归查询 好人做到底帮你查好告诉你


迭代查询 告诉你应该去那个地址查
SNAT 源地地址转换 缓解ipv4 ip不够用
局域网内的应用(内网IP和端口)转换为外网IP访问外网服务器,服务器返回数据时路由器执行反向SNAT技术(通过端口映射)找到内网应用
DNAT 目标地址转换
内网应用对外提供服务 路由器开放端口
内网穿透
下载一个客户端连接服务端
上节课复习
1、osi七层与数据传输
2、socket
socket是对传输层以下的封装
ip+port标识唯一一个基于网络通讯的软件
3、tcp与udp
tcp:因为在通信之前必须建立双向连接,通常都是客户端主动连接服务端的,所以必须先启动服务端,才能启动客户端
udp:不需要先启动服务端
4、dhcp
ip地址
子网掩码
网关
dns服务所在机器的ip地址
静态配置
动态获取:dhcp
5、dns
域名-ip
浏览器缓存-》操作系统缓存-》本地hosts文件-》本地dns服务-》递归or迭代查询
1.1.1.1 www.baidu.com
今日内容:
1、子网划分
子网掩码是什么?
ip:
10101100.00010000.00001010.00000010-》ip地址:172.16.10.2/25
10101100.00010000.00001010. -> 网络号: 172.16.10.0
.00000010-> 主机号: 2
子网掩码:用来标识一个ip地址的网络号个数,从左到右,只要属于网络号,子网掩码就标记为1
11111111.1111111.111111111.00000000-》255.255.255.0
10101100.00010000.00001010.00000010-》ip地址:172.16.10.2/16
11111111.11111111.00000000.00000000-> 255.255.0.0
10101100.00010000.00001010.11111110--------》ip地址:172.16.10.254/24
11111111.11111111.11111111.00000000--------》子网掩码:255.255.255.0
10101100.00010000.00001010.00000000--------》子网地址:172.16.10.0
10101100.00010000.00001010.11111110--------》ip地址:172.16.10.254/25
11111111.11111111.11111111.10000000--------》子网掩码:255.255.255.128
10101100.00010000.00001010.10000000-------->子网地址:172.16.10.128
127.0.0.1=> 本地回环地址
192.168.10.0
192.168.11.0
192.168.12.0
子网划分:借主机host位给网络位,
什么是子网划分?
借主机位给网络位使用,以此来达到把一个大网段划分为n个儿子网段的目的,
为何要进行子网划分
节省ip地址,缩小广播域
192.168.10.139/24
子网掩码:就是对ip地址打记号
网络地址的计算机方式:ip地址与子网掩码都转换成二进制,然后按位与运算
11000000.10101000.00001010.10001011 IP地址
11111111.11111111.11111111.00000000 子网掩码地址
11000000.10101000.00001010.00000000 192.168.10.0
如果子网掩码就是默认的24位,那么上述c类网段192.168.10.0包含所有的ip地址同属于一个网络
VLAN 虚拟内网(广播域互不影响)
IP地址分类 ABCDE A类 前8位是网络号 B类前16位是网络号 C类前24位是网络号
OSI七层协议:
第一层:物理层
数据称之为:bit
负责:传输电信号
单纯的电信号没有任何意义,要让其有意义必须对其进行分组
第二层:数据链路层 ---以太网协议
规定:
1.一组电信号称之为数据帧
2.每一个数据帧山两部分构成
(1) head:头的长度固定18字节
发送者的地址:6字节
接受者的地址:6字节
数据描述信息:6字节
(2) data: 默认最长是1500字节
3.以太协议的head生用的地址就是mac地址
什么是mac地址:
mac地址:网卡上的地址,每一个mac地址都是全世界独一无二的地址
计算机通信基本靠吼:广播
在局域网内用的就基于以太网(用的是mac地址找到对方在哪)协议的广播方式
强调:mac地址是在局域网内部用的地址,出不了局域网
第三层:网络层---ipv4协议(跨局域网通信,需要ip地址来标识局域网在哪里)
总结:
mac地址可以一个局域网独一无二的计算机
ip地址可以用来标识独一无二的局域网在哪里
ip地址+mac地址:就定位到全世界范围内独一无二的计算机
ip协议的规定:
1.数据被称之为:数据包
2.数据由两部分构成:
head
源ip地址
目的ip地址
data:
数据部分,最长65515个字节
ipv4地址组成:
00000000.00000000.00000000.00000000 ------->0.0.0.0
11111111.11111111.11111111.11111111.-------->255.255.255.255
ip地址的职责,或者说一个ip地址要反应两种信息:
1.要能标识出全世界范围内独一无二的一个局域网
2.一个ip地址与局域网内某台机器的mac地址是一一对应关系
192.168.71.1一一对应---->局域网内的某台机器的mac地址
为了能让一个ip地址同时表示出上面两层含义,在ip地址上又增加一种地址--->子网掩码
192.168.71.7
11000000.10101000.01000111.00000111
11000000.10101000.01000111.00000000 ----->192.168.71.0
11000000.10101000.01000111.00000111 ----->192.168.71.7
子网掩码:
192.168.71.7/24
IP地址:1000000.10101000.01000111.00000111
24位子网掩码:11111111.11111111.11111111.00000000 ----->255.255.255.0
网络地址:1100000010101009.01000111.09000000 ----->192.168.71.0
通信的前提:
发送端需要事先知道对方ip地址
mac地址怎么办:
arp协议: 负责将ip地址解析成mac地址
同局域网内通信
发送端:192.168.71.7/24
接受端:192.168.71.8/24
在通信之前---->arp协议开始工作
1.计算机发送端与接受端的网络地址/子网地址
发送端:192.168.71.0
接收端:192.168.71.0
2.判断发送端的子网地址=接收端的子网地址
在一个局域网内,确定接下来就在一个局域网内:mac+广播
问题来了?arp协议怎么帮我们拿到对方的mac地址
arp协议发送一个广播包:
自己的mac地址 FFFFFFFFFFFF 192.168.71.7/24 192.168.71.8/24
192.168.71.8这台机器返回给客户端自己的mac地址
真正的通信:
1号机器的mac 3号机器的mac 192.168.71.7/24 192.168.71.8/24数据部分
跨局域网通信:
1号机器-发送端:192.168.71.7/24
2号机器-接收端:172.16.202.8/24
在通信之前准备工作----arp协议开始工作
1.计算发送端与接收端的网络地址/子网地址
发送端:192.168.71.0
接收端:172.16.202.0
2.判断 发送端的子网地址1-接收端的子网地址
不在一个局域网内,确定接下来足要跨局域网通信:mac+广播
问题来了,跨局域网通信靠谁?----靠路由器-----要获得路由器的mac地址
自己的mac地址 FFFFFFFFFFFF 192.168.71.7 192.168.71.1
192.168.71.1网关返回自己的mac给1号机器,1号机器手里有网关mac,就可以把信息送给网关
真正通信:
1号自己的mac地址 网关的mac地. 192168.71.7/24 172.16.202.8/24数据部分
总结:
通信的前提一定要拿到对方的地址
ip地址+mac地址:可以表示全世界范围内独一无二的一台计算机
有arp协议的加持:拿到ip对使用者来说就相当于拿到ip+mac
所以,拿到了对方的ip地址就能够表示全世界范围内独一无二的一台计算机
ip+mac: 全世界范围内独无二的一台计算机
arp协议加持:拿到了对方的ip就相当于ip+mac都有了
事实上在使用的时候,拿到对方的ip就能够标识出全世界范围内独一无二的一台计算机了
第四层传输层:tcp/udp 基于端口工作的
但凡是基于tcp协议或者udp协议工作的应用程序,都会拥有一个独一无二的端口号(在一个操作系统里端口
数据称之为数据段:
第五层应用层:
应用程序自是自己开发,所以应用层用用什么协议应用程序自己定义就好
http协议、ssl协议
socket抽象层:是为了方便开发人员开发对传输层以及下面的各个层进行一个封装提供简单的功能,然后让程
socket不是协议!!!!!也不是OSI中的一层!!!
位于传输层与应用层之间
socket层足对传输层及其以下的封装,封装完之后提供了一系列简单的功能给上层应用程序去调用
例如:socket.send(xxxxx)socket.recve(xcox)
基于网络通信的应用程序基本上都是基于socket开发的,所以又称之为套接字程序
套接字就是指:应用程序调用操作系统的接口
当以后看见.sock文件时,就该意识到当前程序是基于socket套接字开发的

浙公网安备 33010602011771号