https://zhuanlan.zhihu.com/p/346889307
https://www.bilibili.com/video/BV1uK411C7TZ?p=1&vd_source=7155082256127a432d5ed516a6423e20
~$ sudo apt install netwox
~$ cd /usr/bin/netwox
http://c.biancheng.net/view/6378.html
~$ sudo apt install wireshark
~$ cd /usr/bin/wireshark
http://c.biancheng.net/view/6379.html
网卡不是网关,网关是一般指路由器
网络适配器(与MAC地址有关)
连接计算机和传输介质的接口
传输介质:如网线等(传输介质(物理介质)决定电信号的传输性能)
MAC地址就是网卡的序列号
网卡类型
物理网络适配器
有线网卡、无线网卡
虚拟网络适配器
宽带拨号、VPN
注意还有虚拟机配置的ip地址
ipconfig:
Lo表示虚拟网络适配器
Eth表示以太网网络适配器
交换机、路由器
发送和接受数据的终端设备
可以将多个网络设备组成一个局域网
只用用于同一个局域网下的终端通信(也就是不能连接多个局域网)
网关一般指的是路由器
网关不是主机
网关是子网与子网之间的桥梁
一个路由器最少有两块网卡
路由器的作用就是将要一个网段的数据转发给另一个数据
网关与IP
(见下面的IP地址解释)
https://www.zhihu.com/question/362842680/answer/951412213
只要目的ip不是当前局域网,那么电脑上的操作系统就会自动的将这个数据转发给当前局域网中的默认网关
网关,可以理解为一个电脑,这个电脑连接另外一个网段
例如:如果一台电脑发送数据的目标IP不再局域网内(一个网段内),那么就把数据发送给该电脑设置的默认网关,(一般把路由器的IP设置为这台电脑的默认网关)
数据传输规则,最常用的TCP/IP
TCP/IP 不是一个协议,而是一个协议族(协议栈)的统称
TCP、IP、ICMP、HTTP等
以太网、无线网等
http://c.biancheng.net/view/6381.html
现有局域网最常用的通信协议标准,网络结构为星型
计算机和通信设备为点,传输介质为线
点-线组成拓扑结构
两种形式:
http://c.biancheng.net/view/6383.html
http://c.biancheng.net/view/6391.html
https://zhuanlan.zhihu.com/p/346889307
http://c.biancheng.net/view/6377.html
https://www.bilibili.com/video/BV1uK411C7TZ/?p=6&spm_id_from=pageDriver&vd_source=7155082256127a432d5ed516a6423e20 !!! 太重要了!!!
https://www.bilibili.com/video/BV1uK411C7TZ/?p=7&spm_id_from=pageDriver&vd_source=7155082256127a432d5ed516a6423e20 !!! 太重要了!!!
应用层: HTTP、FTP、SMTP
传输层: TCP、UDP
网际层(网络层): IP、ARP、路由器
网络访问层(链路层): 以太网、网桥应用层
定义数据格式,并按照对应的格式解读数据
传输层
定义端口,确认主机上的应用程序身份,将数据包传输给对应的应用程序
网络层
定义IP地址,确认主机所在网络位置,通过IP、ARP协议进行MAC寻址,对外网数据包进行路由转发
链路层
分组、定义以太网数据帧,确认主机物理地址,传输数据
每一层都呼叫他的下一层所提供的协议来完成自己的需求
每一层都根据特定的协议与不同层进行通信,协议之间的通信都最终都要转化为0-1的电信号,通过物理介质传输才能到达目的主机
过程
(配送车就是物理介质,配送站就是网关, 快递员就是路由器,收货地址就是IP地址,联系方式就是MAC地址)
当你输入一个网址并按下回车键的时候,首先,应用层协议对该请求包做了格式定义;紧接着传输层协议加上了双方的端口号,确认了双方通信的应用程序;然后网络协议加上了双方的IP地址,确认了双方的网络位置;最后链路层协议加上了双方的MAC地址,确认了双方的物理位置,同时将数据进行分组,形成数据帧,采用广播方式,通过传输介质发送给对方主机。而对于不同网段,该数据包首先会转发给网关路由器,经过多次转发后,最终被发送到目标主机。目标机接收到数据包后,采用对应的协议,对帧数据进行组装,然后再通过一层一层的协议进行解析,最终被应用层的协议解析并交给服务器处理。
在没有应用层的时候,传输的数据是字节流的形式
应用层的作用是通过定义的协议规范数据格式,并按照对应的格式解读数据
区分数据包达到主机后所属的进程
为网络应用程序提供接口
为端到端链接提供流量控制、差错控制、服务质量等管理服务
提供多路复用、多路分解机制
确认数据传输以及进行纠错处理
TCP协议、UDP协议
数据传输类型
有连接:两主机建立通信 TCP协议
无连接:无需双方事先建立通信线路 UDP协议
为了区分同一个主机上不同应用程序的数据包
https://blog.csdn.net/Cristiano2000/article/details/119190238
应用程序通过套接字向网络发出请求或应答网络请求,使主机间或者一台计算机上的进程间可以通讯
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题
多个TCP连接或多个应用程序可能需要通过同一个TCP协议端口传输数据
套接字的作用就是区分不同应用程序进程间的网络通信和链接
套接字=IP+端口
https://blog.csdn.net/L_fengzifei/article/details/124192461
提供了主机之间的逻辑地址,即通过寻址的方式,把数据包从一个主机发送到另一个主机
负责数据的传输,路径及地址选择
IP协议、ARP协议、路由协议
IP协议
IPv4和IPv6
用于区分源主机和目标主机是否属于一个网络,IP地址
ARP协议
用于解析地址,根据IP地址获取MAC地址
ARP的MAC寻址功能限制在一个子网内
路由协议
根据IP协议判断两主机是否在一个子网下,如果不在一个子网,以太网就将数据包转发给本子网的网关进行路由
对电信号进行分组,并组成数据帧,然后采用广播的形式,通过物理介质发送数据包到目标地址
网络访问层
物理层
用于提供传输数据的通路和可靠的环境
对应网络适配器,即网卡(虚拟或物理)数据链路层
介于物理层和网络层之间,用来为网络层提供数据传输服务
链路层定义了数据传输的起始位置;
并且通过一些规则来控制这些数据的传输,以保证数据传输的正确性;包括两个子层
MAC(介质访问控制):提供与网络适配器的接口。网络适配器的驱动程序称为MAC驱动,网卡的硬件地址称为MAC地址
逻辑链路控制LLC:对经过子网传递的帧进行错误检查,并且管理子网上通信设备之间的链路MAC地址
即物理地址
一种标识符,用来标记网络中的每个设备(网络内传输的所有数据都会包含发送方和接受方的物理地址)
物理地址只有在当前局域网内有效,所以接受方的物理地址都必须存在于当前局域网内,否则会导致发送失败
MAC地址 不等于 IP地址
MAC地址只能用于局域网内,不能跨越,且使用MAC传输数据很麻烦
公有地址:可以上网
私有地址:不可直接上网(192.168.xxx.xxx),需要转接
ping 127.0.0.1,用于判断当前设备是否具有网络功能
IP地址为互联网上的每个网络和每台主机分配一个逻辑地址,以此来屏蔽物理地址的差异
每个计算机都有对应的IP地址
IP地址=网络ID+主机ID
网络ID: 同一个物理网络上的所有主机都使用一个网络ID。用于识别书记所在的网络
每个网络终端设备有一个主机ID。用于识别所属网络的主机
IP地址一共32位:
政府机关:8(网络ID)+24(主机ID)
0.0.0.0~127.255.255.255
学校属于政府机关中型企业:16(网络ID)+16(主机ID)
128.0.0.0~191.255.255.255
个人:24(网络ID)+8(主机ID)
192.0.0.0~223.255.255.255
还有隐藏地址类型http://c.biancheng.net/view/6407.html
在网络中传输,通过识别IP地址中的网络ID,从而将数据发送到正确的网络中,然后再根据主机ID将数据发送到目标主机上
简单逻辑:数据通过网关找到对应的网络,然后再由网关分配
高级方法:将网络划分为更小的网络,即进行子网划分
子网划分:
IP地址=网络ID+主机ID
IP地址=网络ID+子网ID+主机ID
即将主机ID划分为子网ID和主机ID
子网ID: 用于寻找网络中的子网
主机ID:用于寻找子网中的主机
子网掩码:
用来指明地址中多少位用于子网ID,保留多少位用于实际的主机ID
子网掩码的作用:用于判断不同IP地址是否处于同一个网段下
https://blog.csdn.net/z19950712/article/details/111473085
源地址主机 --> 目标地址主机
在打包数据帧时,发送方和接受方的IP地址都是已知的
同段网段下:
目标IP地址被ARP协议解析为MAC地址,然后根据MAC地址,源主机直接把是数据包发给目标主机
不同网段下:
网关(一般为路由器)的IP地址被ARP协议解析为MAC地址,根据该MAC地址,源主机将数据包发送到网关
网关根据数据包中的网段ID寻找目标网络,如果找到,将数据包发送到目标网段,如果没找到,重复步骤1,将数据包发送到上一级网关
数据包经过网关被发送到正确的网段中,目标IP地址被ARP协议解析成MAC地址,根据该MAC地址,数据包被发送到目标地址的主机
IP数据报文=报头+数据
报头是必须有的,包括原始IP地址、目的IP 地址等
版本,双方使用的IP协议版本必须一致,IPv4和IPv6
http://c.biancheng.net/view/6411.html
协议:该数据携带数据所使用的协议类型,TCP、UDP、ICMP
源地址
目的地址
…
数据部分:传输层的数据,保存TCP、UDP、ICMP、IGMP数据,长度不固定
DNS服务器,其实可以认为是一台IP注意,当访问http的内容时,会根据DNS协议解析域名,找到域名对应的IP地址,再进行TCP/IP传输
地址解析协议
用于网际层(网络层)和网络访问层(链路层)之间的链接,通过IP地址向MAC地址转换
数据传输时,必须通过ARP协议获取目标IP地址对应的MAC地址
同一网段下,两终端通过MAC地址定位
不同网段下,两终端通过IP地址定位
根据arp协议解析目标(目的)IP的MAC地址(目的地址)
http://c.biancheng.net/view/6388.html
控制报文协议
用于在IP主机和路由器之间传递控制消息,描述网络是否通畅,主机是否可达、路由器是否可用等网络状态
IP协议在数据传输时存在不可靠、无连接等特点,
ICMP协议的数据包不传输用户数据
数据在发送目标主机的过程中,通常会经过一个或多个路由器。传输过程中会存在问题导致数据包无法发送到目标主机上。ICMP协议通过跟踪消息,并把问题反馈给源主机,就能够在传输的过程中发现在哪个环节出现了问题
ICMP协议可以用来探测目标主机,判断目标主机是否启用
ping命令利用ICMP协议,发出要求回应的信息,如果目标主机的网络功能没有问题,就会回应小时,从而得知主机是否运行正常
识别一个设备到另一个设备的网络路径
traceroute命令用来检测发出数据包的主机到目标主机之间所经过的网关
通过设置探测包的TTL值,跟踪数据包到达目标主机所经过的网关,并监听来自网关ICMP的应答
traceroute ip地址/域名
单工
只发不收:收音机
半双工
同一时刻只能收或发
全双工
同一时候可以收或发
传输控制协议,面向连接,可靠
客户端:发送数据请求
服务端:接受数据响应服务端要开启监听端口,客户端才能连接通信
TCP协议同样定义端口,用于表示应用程序身份,实现端口到端口的通信
TCP数据包没有长度限制
TCP发送的每个数据都必须得到接收方的应答才认为传输成功 – 超时传输、数据校验、流量控制,阻塞
全双工的
目的就是申请内存、建立连接
connect 连接时,在还没有发送实际数据时,也会发送一个应答数据客户端发送应答数据,
服务器对应答数据+1,服务器发送+1的应答数据,除了+1的数据还会发送应答额外数据,给客户端;
对+1的数据进行验证,如果数据一致,客户端认为服务端已经准备好了 ;并将额外的应答数据+1,发送给服务端;
服务端对+1的额外数据进行验证,如果诗句一致,服务端认为客户端准备好了
32位,标识从计算机A发送到计算机B的数据包的序号,计算机发送数据时对此进行标记
32位,
ack=seq+1,实际上ack=seq+传输的字节数+1(加不加1看实际的情况,wireshark冲实际就没有加)
确认号(与收发的字节数有关) 不等于 确认位(0或1属于标志位)
每个标志位占1位
URG : 紧急指针有效
ACK:确认需要有效
PUSH:接收方应该尽快将这个报文交给应用层
RST:重置连接
SYN:建立一个新连接
FIN:断开一个连接
客户端调用
socket()
函数创建套接字后,没有建立连接 处于closed状态
服务端调用listen()
函数后,套接字进入监听状态,且会在执行accept()
函数后阻塞
- 客户端connect,TCP组建一个数据包(SYN包),设置SYN标志位(表明该数据包是用来建立同步连接的),生成一个随机序号seq(seq1)(表示该数据包的序号),组包完成后向服务端发送数据包,进入SYN-SEDN状态
(SYN=1 ACK=0 seq=x)
- 服务端接收到数据,发现SYN标志位被设置(表明这是客户端发来的建立连接的请求数据包((第一次握手)传输过程中不设置SYN标志位)),随之服务端组建一个数据包(SYN包),并设置SYN和ACK(确认位)标志位(SYN标志位 表示该数据包用来建立连接(第二次握手))(ACK确认位标志 表示确认收到了刚才客户端发送过来的数据),随之再生成一个随机序号seq(seq2)(不等于客户端的seq(seq1)),将客户端数据包序列号+1(seq1+1)作为ack确认号,组包完成后,将数据包发送,进入SYN-RECV状态,
SYN=1,ACK=1,seq=y,ack=x+1
- 客户端收到服务端的数据,发现(服务端数据包中)SYN标志位和ACK标志位被设置(表明这是服务端发来的 确认包),进一步检测ack确认号是否等于seq(seq1)+1,等于则说明一次握手成功,且正在进行第二次握手。客户端继续组包(此时不再是SYN包),并设置ACK确认位标志位(表示客户端正确接收了服务端发来的 确认包),并将seq(seq2+1)作为确确认号ack,组包完成客户端发送数据,进入ESTABLISED状态,
SYN=0,ACK=1,seq=x+1(说明此时不带数据),ack=y+1
- 服务端接收到客户端的数据包,发现(客户端数据包中)ACK标志位被设置(表明这是客户端发来的 确认包),并**检验ack是否等于seq2+1,**成功则进入ESTABLISED状态
- 客户端和服务端都进入到了ESTABLISED状态,表明三次握手成功,建立连接成功,可以收发数据
(最重要的是ack确认号,计算机会记录下自己发送的数据报序号seq,然后当收到对方的数据包后,检验ack=seq+1 成立则说明对方正确收到了自己的数据包)
注意
三次握手时,和实际接收发送数据时,ack确认号不同,三次握手ack确认号+1,收发数据ack确认号不加1
发送端只有再收到接收端传回的ACK确认包后,才会清空输出缓冲区的数据
超时重传
TCP面向连接,为了保证数据能够准确、不丢失到达目标IP,每次需要接收端回传ACK包,告诉发送端正确收到了,这样发送端才知道数据被传输成功
如果接收端没有或发送错误的ACK包,则发送端重新发送数据,直到接收端回传正确的ACK包
为了完成数据的重传,TCP套接字每次发送数据包时都会启动定时器,如果在一定事件内没有收到接收端回传的ACK包,那么定时器超时,数据包重传
数据重传次数根据系统业务有所不同
- 客户端调用close函数后,想服务器发送FIN包(表示完成需要断开连接),进入FIN_WAIT_1状态
- 服务器收到数据包后,检测到设置了FIN标志位,知道要断开连接,想客户端发送ACK确认包,进入CLOSE_WAIT状态(服务器收到请求后并不是立即断开连接,而是先想客户端发送确认包,告诉客户端知道了,且服务端需要准备一下再断开连接)
- 客户端收到服务端发来的确认包,进入FIN_WAIT_2状态,等待服务器准备完毕后再次发送数据包
- 等待片刻,服务端准备完毕,可以断开连接,然后在主动向客户端发送FIN包,告诉客户端准备完毕,可以断开连接(此时是准备断开连接),然后进入LAST_ACK状态
- 客户端收到服务端的FIN包后,再向服务端发送ACK包,告诉服务端可以断开连接,然后进入TIME_WAIT状态(此时客户端没有真的断开连接)
- 服务端收到客户端的ACK确认包,断开连接(此时服务端才是真正的断开连接),关闭套接字,进入CLOSE状态
客户端最后一次发送ACK包后进入TIME_WAIT状态,而不是直接进入CLOSE状态关闭连接
客户端最后一次想服务端回传ACK包时,有可能因为网络问题导致服务端收不到,服务端会再次发送FIN包,如果这时客户端没有进入WAIT状态,而是完全关闭了连接,那么服务器无论如何也收到了ACK包,则不知道客户端的信息,所以客户端需要等待片刻,确认对方收到ACK包后才能进入CLOSE状态
报文最大生存时间MSL,TIME_WAIT=2MSL,ACK包到达服务器需要MSL时间,服务器重传FIN包也需要MSL事件,2MSL是数据包往返的最大时间,如果2MSL后还未收到服务端重传的FIN包,则说明服务端已经收到了ACK包
无连接协议,不可靠
UDP协议定义端口,为主机上的每个应用程序制定端口,规定数据包必须加上端口信息,最终数据包根据端口定位应用程序
UDP数据包有长度限制
html:界面显示,(静态)
css:文档控制显示,(静态)
资源文件:图片、视频,(静态)
js脚本:前端动态功能,(动态)
html、css、js都是部署在后端的
静态文件服务方案:html、css、js文件存储在什么地方,使用什么服务提供给前端浏览器
API接口设计:定义前端和后端交互接口规范。REST API
数据库存储方案:选择什么样的数据库(关系型、非关系型)
数据库表结构设计:增删改查
缓存业务、异步任务
云存储
大数据分析
超文本传输协议
http协议是基于TCP协议的,客户端和服务端必须首先要建立TCP连接
http协议中,服务端不能主动先发送信息给客户端
局域网
接内部IP地址
相当于交换机接口
广域网
接外部IP地址,指出口,转发来自内部LAN接口的IP数据包
想当于路由器接口
虚拟局域网
是基于有线局域网的,将一个物理上的大局域网,分割成几个小的独立无干扰的小局域网
无线局域网
通过无线传输数据
可以认为就是WIFI