计算机网络
计算机网络学习
客户端访问服务器支援方法:通过服务器软件(端口;)
什么是协议
网络互联模型
为了更好的促进网络的研究和发展,国际化标准组织iso在1985年制定了网络互联模型
osi模型:
物理层,数据链路层,网络层,运输层,会话层,表示层,应用层
tcp/ip协议模型:
网络接口层,网际层,运输层,应用层
网络中的基本知识
请求:获取客户端发送的数据
响应:用来给客户端返回的数据
计算机之间的通信基础:
需要得知对方的ip地址
最终是根据mac地址,输送数据到网卡,被网卡接收(每个网卡都有一个自己唯一的mac地址)
网桥:能够通过自学习得知每个接口那侧的mac地址、并记录设备的mac地址
例子:
当6发出请求ARP广播时,网桥会记录6的MAC地址在左;
当7发出响应ARP广播时,网桥会记录7的MAC地址在左。
交换机(switch):网桥+集线器,二层交换机无ip层,三层交换机有ip层
思考:如果全球设备都用交换机连接会出现什么情况?
1、他们必然处于同一网段,因此 IP地址可能会不够用
2、即使使用交换机,第一次发送数据包仍然需要ARP广播,耗费大量时间。
3、形成广播风暴,只要有一个设备发送ARP广播,全球设备都能收到
路由器
网桥,集线器,交换机(一般)
连接的设备必须在同一个网段
连接的设备必须在同一个广播域
路由器
可以在不同网段之间转发数据
隔绝广播域
主机发数据之前,会判断目标主机是否在同一个网段
mac地址
每一个网卡都有一个6字节的mac地址
全球唯一,固化在了网卡的row中,由ieee802标准规定
前三个字节:标识厂家(组织标识符)
后三个字节:网络接口标识符
当mac地址全为时表示的是代表广播地址
ip地址
IP地址:互联网上的每一个主机都有一个IP地址
ip地址由2部分组成:网络标识,主机标识
同一网段的计算机网络ID相同
IP地址分为:公网IP,私网IP
Internet上的路由器中只有到达公网路由表,没有到达私网的路由表
公网IP由因特网信息中心统一分配和管理
ISP(网络服务提供商)需要向Internet NIC申请公网IP
私网:
主要用于局域网
(平常我们通过ipconfig得到的ip是我们自己的私网)
网段=子网掩码&IP地址
当计算机在判断是否在同一网段时是拿自己的子网掩码和对方的ip地址进行&
IP地址:192.168.1.1
子网掩码:255.255.255.0
网段:255.255.255.0
IP地址:132.168.1.10
子网掩码:255.255.0.0
网段:132.168.0.0
IP地址分类
a类地址:前一位为网络位,后三位位主机位(网络id 0开头0-127)
b类地址:前二位为网络位,后二位位主机位(网络id 10开头128-191)
c类地址:前三位为网络位,后一位位主机位(网络id110开头192-223)
d类地址:以1110开头(无子网掩码)
e类地址:以1111开头
主机id全为0表示主机所在的网段
主机id位全1表示 主机所在网段的全部主机
当ping192.168.1.255时会给这个网段的所有主机发送数据
子网掩码cidr表示方式
192.168.1.1/24,表示子网掩码有24个1
子网划分
子网划分:借用主机位作子网位,划分出多个子网
等长子网划分:将一个网段等分成多个子网,每个子网可用的IP地址数量是一样的
变长子网划分:每个子网可用的IP地址数量是不一样的
IP地址:192.168.1.1/24
子网掩码:255.255.255.0
网段:192.168.1.0
子网等长子网划分为四段:
a类子网:192.168.1.1/27-192.168.1.63
a类子网子网掩码:255.255.255.192
b类子网:192.168.1.65/27-192.168.1.126
b类子网子网掩码:255.255.255.192
c类子网:192.168.1.129/27-192.168.1.190
c类子网子网掩码:255.255.255.192
d类子网:192.168.1.193/27-192.168.1.254
d类子网子网掩码:255.255.255.192
超网
概念:跟子网反过来,它是将多个连续的网段合并成一个更大的网段
200台设备在192.168.0.0/24,200台在192.168.1.0/24
合并为一个网段:192.168.0.0/23
合并网段的规律
ip1:192.168.0.0/24 网段:192.168.0.0
ip2:192.168.1.0 /24 网段:192.168.1.0
ip3:192.168.2.0/24 网段:192.168.2.0
ip4:192.168.3.0/24 网段:192.168.3.0
如果这四个ip地址要合并成同一个网段的话网络位要减少2位
子网掩码:255.255.000000.0000000000
网段:192.168.0.0/22
假设n是2的k次幂
如果第一个网段的网络号能被n整除,那么由它开始连续的n个网段,能通过左移k位子网掩码进行合并
比如:
第一个网段的网络号以二进制0结尾,那么由他开始连续的2个连续网段,能通过左移1位子网掩码进行合并
第一个网段的网络号以二进制00结尾,那么由他开始连续的4个连续网段,能通过左移2位子网掩码进行合并
第一个网段的网络号以二进制000结尾,那么由他开始连续的8个连续网段,能通过左移3位子网掩码进行合并
判断一个网段是子网还是超网
1.先看看该网段的类型,是什么类网络
2.看看该网段的子网掩码位数如果比默认子网掩码多,反之就是超网
路由
默认的情况下,路由器只知道跟他直连的网段,非直连的网段需要通过静态路由,动态路由告诉他
静态路由:
管理员手动添加路由信息
适用于小规模网络
动态路由:
路由器通过选择协议(比如rip,ospf)自动获取路由信息
适用于大规模网络
局域网NAT
私网IP访问Internet需要进行NAT转换公网IP
特点:
可以节约公网IP资源
会隐藏内部真实的IP
分类:
静态转换(手动配置nat映射表;一对一转换)
动态转换(定义外部的地址池,动态随机转换,一对一转换)
PAT(多对一转换,最大程度节约公网IP资源;采用端口多路复用方式,通过端口号标识不同的数据流)
192.168.1.10:2586----->200.0.010:2586
192.168.1.11:4563----->200.0.0.10:4563
192.168.1.13:4587---->200.0.0.10:4587
物理层
作用:物理层定义了接口标准,线缆标准,传输速率,传输发式等
数据通信模型
信道
信息传输的通道,一条传输介质上可以有多条信道
单工通信:信号只能往一个方向传输,任何时候都不能改变信号的传输方向
半双工通信:信号可以双向传输,但是必须是交替进行,同一时间只能往一个方向传输
全双工通信:信号可以双向传输
数据链路层
链路:从一个节点到想邻节点的一段物理线路,中间没有其他交换节点
数据链路:在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输
不同类型的数据链路,所用的通信协议可能是不同的
广播信道:CSMD/CD协议(比如交换机,集线器形成的网络)
点对点信道:PPP协议(比如两个路由器之间)
封装成帧
帧的数据部分
就是网络层传递下来的数据包(ip数据包)
最大的传输单元MTU
每一种数据链路层协议都规定了所能够传送的帧的数据长度上限
透明传输
数据部分一旦出现了SOH,EOT就需要进行转义
差错检验
FCS:根据数据部分+首部计算得出的
FCS作用:
当帧数据发送时会通过计算得出fcs并将得出的fcs封装在数据帧中,当帧被发送到另一台设备(服务器)是时又会进行一次fcs计算,然后将计算出来的fcs进行对比,如果对比成功该数据帧就会被网卡接收,若不相同该数据帧就会被丢弃
(该方式可以对数据是否失帧进行判断,处理)
CSMA/CD协议
载波侦听多路访问/冲突检测
csma/cd的网络可以称为以太网,它传输的是以太帧
以太网帧至少需要64字节
Ethernet V2帧的格式
首部:目标mac地址,源mac地址,类型
以太网帧:首部+数据+fcs
数据长度至少46字节,最多1500
以太网帧的长度:64----1518
数据包:网络层首部,数据部分,填充
当数据部分小于46字节时
数据链路层会在数据的后面加入一些字节填充
接收端会将加的字节去掉
以太网使用曼彻斯特编码接收端接收帧过程只要发现没有信号跳变,就认为帧结束
PPP协议
点对点信道通信不需要源mac地址,目标mac地址
网络层
网络层数据包(IP数据包):由首部,数据2部分组成
数据:一般由传输层传下来的数据段
首部至少是20个字节(最大60个字节)
(固定部分)
一
0--4版本(0b0100:ipv4;0b0110:ipv6)
5-8首部长度(二进制乘以4才是最终长度;最小值:0b0101:20;最大值:0b1111:60)
9-16区分服务(用来提高网络的服务质量)
17-31总长度(首部+数据的长度之和,最大值是65535;因为帧的数据不能超过1500字节,过大的IP数据包需要进行切片,每一片都有自己的网络层首部(IP首部))
二
0-16标识(数据包的id,当数据包过大进行分片时,同一个数据包的所有片的标识都是一样的,有一个计数器专门管理数据包的id,每发出一个数据包,id就加一)
17-19标志(第一位:保留;第二位:1代表不允许分片,0代表允许分片;第三位:1代表不是最后一片,0代表是最后一片)
20-31片偏移(片偏移乘以8:字节偏移;每一片的长度一定是8的整数倍;片偏移乘以8表示这个IP段的第多少个字节)
三
0-8生存时间(每个路由器在转发之前会将TTL减1,一旦发现TTL减为0,路由器会返回错误报告;观察使用ping命令后的ttl,可以推测出对方的操作系统,中间经过了多少个路由器)
windos 版本:server2003,xp,7,10 默认ttl:128
linux 版本:2.0xkernel,Red HAT 9 默认TTL64
MAC OS 默认ttl60
MAC OS X 默认ttl64
9-16协议(表明所封装的数据使用了什么协议)
17-31首部检验和 (用于检查首部是否错误)
协议:
ICMP:1 ; IGMP:2; IP:4; TCP:6; EGP:8; IGP:9; UDP:17; IPV6:41; ESP:50; OSPF:89
四
0-31源IP地址
五
0-31目标IP地址
以下是ping百度通过抓包工具抓的包,我们查看网络层
区分服务的提高网络质量解释:路由器可以设置区分服务的值,例如当该包的网络首部的区分服务上的值是64,而路由器设置的值也是64,这样的化路由器可以让这个包优先通过。
传输层
2个协议:TCP(传输控制协议),UDP(用户数据报协议)
TCP | UDP | |
---|---|---|
连接性 | 面向连接 | 无连接 |
可靠性 | 可靠传输,不丢包 | 不可靠传输,尽最大努力交付,可能丢包 |
首部占用空间 | 大 | 小 |
传输速率 | 慢 | 快 |
资源消耗 | 大 | 小 |
应用场景 | 浏览器,文件传输,邮件发送 | 音视频,直播 |
应用层协议 | HTTP,HTTPS,FTP,SMTP,DNS | DNS |
udp数据格式
◼ UDP是无连接的,减少了建立和释放连接的开销
◼ UDP尽最大能力交付,不保证可靠交付
因此不需要维护一些复杂的参数,首部只有8个字节(TCP的首部至少20个字节)
◼ UDP长度(Length)
占16位,首部的长度 + 数据的长度
◼ 检验和的计算内容:伪首部 + 首部 + 数据
伪首部:仅在计算检验和时起作用,并不会传递给网络层
◼ UDP首部中端口是占用2字节
可以推测出端口号的取值范围是:0~65535
◼ 客户端的源端口是临时开启的随机端口
◼ 防火墙可以设置开启\关闭某些端口来提高安全性
◼ 常用命令行
netstat –an:查看被占用的端口
netstat –anb:查看被占用的端口、占用端口的应用程序
telnet 主机 端口:查看是否可以访问主机的某个端口
TCP数据格式
◼ 数据偏移(计算TCP首部大小)
占4位,取值范围是0x0101~0x1111
乘以4:首部长度(Header Length)
首部长度是20~60字节
◼ 保留
占6位,目前全为0
◼ UDP的首部中有个16位的字段记录了整个UDP报文段的长度(首部+数据)
◼ 但是,TCP的首部中仅仅有个4位的字段记录了TCP报文段的首部长度,并没有字段记录TCP报文段的数据长度
◼ 分析
UDP首部中占16位的长度字段是冗余的,纯粹是为了保证首部是32bit对齐
TCP\UDP的数据长度,完全可以由IP数据包的首部推测出来
✓ 传输层的数据长度 = 网络层的总长度 – 网络层的首部长度 – 传输层的首部长度
检验和
◼ 跟UDP一样,TCP检验和的计算内容:伪首部 + 首部 + 数据
伪首部:占用12字节,仅在计算检验和时起作用,并不会传递给网络层
标志位
◼ URG(Urgent)
当URG=1时,紧急指针字段才有效。表明当前报文段中有紧急数据,应优先尽快传送
◼ ACK(Acknowledgment)
当ACK=1时,确认号字段才有效
◼ PSH(Push)
◼ RST(Reset)
当RST=1时,表明连接中出现严重差错,必须释放连接,然后再重新建立连接
◼ SYN(Synchronization)
当SYN=1、ACK=0时,表明这是一个建立连接的请求
若对方同意建立连接,则回复SYN=1、ACK=1
◼ FIN(Finish)
当FIN=1时,表明数据已经发送完毕,要求释放连接
TCP—序号、确认号、窗口
◼ 序号(Sequence Number)
占4字节
首先,在传输过程的每一个字节都会有一个编号
在建立连接后,序号代表:这一次传给对方的TCP数据部分的第一个字节的编号
◼ 确认号(Acknowledgment Number)
占4字节
在建立连接后,确认号代表:期望对方下一次传过来的TCP数据部分的第一个字节的编号
◼ 窗口(Window)
占2字节
这个字段有流量控制功能,用以告知对方下一次允许发送的数据大小(字节为单位)
TCP可靠传输
停止等待ARQ协议
ARQ:自动重传请求
有一个计时器,接收方在一定时间没有传回应报文时重新发送
发送m1——>确认m1—发送确认信息—>发送m2——>确认m2
TCP—可靠传输—SACK(选择性确认)
在接送方发送的回应报文中我们会知道发送的包是否有丢失的状况,例如在发送1,2,3,4这四个包每个包数据为100,假设第三个包丢失了接收方发回来时ack=301,这证明三包丢失了,这时发送方收到这个报文后会对丢失的包进行重传,发送数据包3,4,5,6.如果不使用SACK技术,它会传3,4,5,6这 四个包,这时接收方的4包与发送方的四包重合了,如果使用SACK它就不会发送4包
◼ 在TCP通信过程中,如果发送序列中间某个数据包丢失(比如1、2、3、4、5中的3丢失了)
◼ TCP会通过重传最后确认的分组后续的分组(最后确认的是2,会重传3、4、5)
◼ 这样原先已经正确传输的分组也可能重复发送(比如4、5),降低了TCP性能
◼ 为改善上述情况,发展出了SACK(Selective acknowledgment,选择性确认)技术
告诉发送方哪些数据丢失,哪些数据已经提前收到
使TCP只重新发送丢失的包(比如3),不用发送后续所有的分组(比如4、5)
选择在传输层就将数据分成多个段,而不是网络层再分层片传递给数据的原因?网络层,数据链路层只负责传输功能,无包的重传功能;另传输层完成分割在包丢失重传时可以只重传被丢失的部分二不是对整个包进行重传
流量控制
点对点,端对端
意义:告诉通信双方的接收窗口大小
拥塞控制
滑动窗口:发送方收到来着接收方接收的数据报文回应时,会移动(在缓存上)
接收窗口rwnd:接送方能接送到的数据
拥塞窗口cwnd:发送方在数据达到某一值时数据会出现拥堵的情况,该情况不是数据溢出
发送窗口swnd:
TCP连接
建立连接(三次握手)
第一步(发送端):SYN=1,ACK=0
第二步(接收端):SYN=1,ACK=1,ack=1;
第三步(发送端):SYN=0,ACK=1
释放连接(四次挥手)
为什么要进行四次挥手?
第一次挥手:
表示主机1告诉主机2,主机一没有数据要发送了,但是这时主机1还是可以收到主机二的报文
第二次挥手:
表示主机二知道主机1没有数据发送了,但是主机2还是是可以发送数据到主机一
第三次挥手:
表示主机2告诉主机1,主机2已经没有数据要发送了
第四次挥手:
表示主机1已经知道主机2没有数据发送了。随后正式断开整个tcp连接
client发送ACK之后,需要有一个TIME-WAIT的等待时间
一般是等待2倍的MSL(msl是tcp报文在internet上的最长生存时间)
进行等待的原因:
如果client发送ACK后马上释放了,然后又因为网络原因,server没有收到client的ACK,server就会重发FIN
这时可能出现的情况是
① client没有任何响应,服务器那边会干等,甚至多次重发FIN,浪费资源
② client有个新的应用程序刚好分配了同一个端口号,新的应用程序收到FIN后马上开始执行断开连接的操作,本来
它可能是想跟server建立连接
应用层
使用ip地址来进行确定通信对象,而不使用域名的原因:
1.长度原因,使用IP地址的长度为32比特,而使用域名最短的也需要几十个字节,最大达到了255字节,这样大大增加了路由器的负担
DNS协议:
以下是基于一台DNS服务器只存放一个域的信息来讲的
<内存空间>= gethostbyname("www.lab.glasscom.com");----->这段代码就是应用程序通过DNS得到IP地址的操作
其中的内存地址是应用程序定义的一个地址空间用来存放被解析过的IP地址
DNS 服务器中的所有信息都是按照域名以分层次的结构来保存的。域名中,越靠后的位置表示层级越高
所有的服务器都映射了根DNS服务器的地址,这是因为上级DNS服务器保管着所有下级DNS服务器的信息,当我们客户端DNS解析器解析时,首先是到达我们最近的DNS服务器查询有没有对应的域名信息,没有的话直接跳转到根服务器,根DNS服务器再一层层的往下找,这里举个例子例如要查询www.baidu.com 的IP地址,当到达根服务器之后因为级DNS服务器保管着所有下级DNS服务器的信息所以我们之后到达com服务器,之后再到达存放baidu的dns的服务器
实现原理:客户端的DNS解析器
调用解析器后,解析器会向 DNS 服务器发送查询消息,然后 DNS 服务器会返回响应消息。响应消息中包含查询到的 IP 地址,解析器会取出 IP地址
解析器内部原理:
注:解析器向DNS服务器发送请求,发送消息这个操作并不是由解析器自身来执行,而是要委托给操作系统内部的协议栈来执行的,这是因为和浏览器一样,解析器本身也不具备使用网络收发数据的功能。
DNS服务器接力
客户端通过dns查询额信息包括:
域名(服务器,邮件服务器(邮件地址中@后面的部分)的名称)
class:将查询消息中的class与本列中的记录进行比较,找到相应的记录
记录类型:表示域名对应何种类型的记录。例如,当类型为 A 时,表示域名
对应的是 IP 地址;当类型为 MX 时,表示域名对应的是邮件服务器。IP 地址反查域名的 PTR 类型,查询域名相关别名的 CNAME类型,查询 DNS 服务器 IP 地址的 NS 类型,对于不同的记录类型,服务器向客户端返回的信息也会不同
例如,如果要查询 www.baidu.com 这个域名对应的 IP 地址,客户端会向 DNS 服务器发送包含以下信息的查询消息。 (a)域名 = www.baidu.com
(b) Class = IN
(c)记录类型 = A
IP地址的分配
静态IP:手动设置
动态IP地址:从DHCP服务器自动获取IP地址
DHCP
翻译:动态主机配置协议
◼ DHCP服务器会从IP地址池中,挑选一个IP地址“出租“给客户端一段时间,时间到期就回收它们
平时家里上网的路由器就可以充当DHCP服务器
DHCP协议基于UDP协议,客户端是68端口,服务器是67端口
分配的第4个阶段:
◼ DISCOVER:发现服务器
发广播包(源IP是0.0.0.0,目标IP是255.255.255.255,目标MAC是FF:FF:FF:FF:FF:FF)
◼ OFFER:提供租约
服务器返回可以租用的IP地址,以及租用期限、子网掩码、网关、DNS等信息
注意:这里可能会有多个服务器提供租约
◼ REQUEST:选择IP地址
客户端选择一个OFFER,发送广播包进行回应
◼ ACKNOWLEDGE:确认
被选中的服务器发送ACK数据包给客户端
DHCP服务器可以实现跨网段分配IP地址(借助中级代理)
HTTP
URI:统一资源定位符
ABNF:用于internet通信协议中的定义语言
报文格式:
HTTP-message = start-line
*( header-field CRLF )
CRLF
[ message-body ]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?