为什么需要网络通信?
进程间通信解决的是本机内通信
网络通信解决的是任意不同机器的通信
实现网络通信需要哪些支持
1.通信设备:网卡(PC机自带); 路由器和交换机; 光纤、电缆和基站
2.通信协议:
2.1.操作系统自带协议栈(Linux的特点:丰富的网络协议)
2.2.裸机开发需要独立的协议栈
3.简单网络通信只需要学会系统API
TCP/IP协议栈
什么是通信协议?作用?
OSI七层网络模型
Linux四层网络模型
链路层
物理层
通信介质的信号到数字信号(二进制0101)转换——电信号
数据链路层
局域网之间计算机通信通过mac地址(物理网卡)通信——交换机
MAC地址
1.Medium Access Control,直译为介质访问控制,它通常被固化在每个以太网网卡
2.MAC(硬件)地址长48位(6字节),采用十六进制格式【由生产厂商设置,与硬件相关,不会轻易修改】
交换机
1.是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路
2.交换机的工作原理
2.1交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地址表中
2.2交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发
2.3如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。这一过程称为泛洪(flood)
3.交换机的功能与作用
学习MAC地址
转发数据帧
连接不同网络
划分局域网
网络层
ip地址:实际上是32位二进制数() 【IPV4】
子网掩码:与ip相与,得到结果相等的就算同一个子网
路由器(网关):不同子网的ip地址相通信【协议之间的转换】
【交换机只有LAN口,只能是实现局域网通信;
路由器比交换机多了个WAN口(连接到公网(宽带、互联网))】
公网IP是动态分配的,已经被手机电脑等用完了,改天再看,就不一样了,用时分配,不用就收回:
私网IP:
本地回环地址:127.0.0.1
本地回环地址:被用于通过本地环回网络接口,来访问本机运行的服务,并且将会绕过任何物理网纳接口硬件【加入本机运行了一个服务器,想要访问这个服务器,就访问这个地址】
如何解决IP地址荒?
ipv4(32位)升级到ipv6(128位);
网络地址转换NAT(network address translation):将内网ip转化为公网ip
子网掩码的作用:
1.决定一个网段的大小(可用ip的数量)
2.同一个网段的ip地址,才能直接相互通信,不同网段的ip地址,需要路由器才能相互通信!
ARP协议
"Address Resolution Protocol”(地址解析协议)
把ip地址解析成mac地址〈物理地址,全球唯一)(局域网通信必须通过MAC地址)
《ARP攻击:伪造IP赋值和MAC地址产生ARP欺骗》
ICMP协议—用来检测网络通信故障和实现链路追踪,最典型的应用就是ping和tracerooute
《死亡ping》
传输层
让不同的应用程序,同时使用网络
TCP/UDP:TCP:可靠,速度慢;UDP:不可靠,速度快;
端口(让不同的应用程序,同时使用网络)
给一个ip发消息,怎么确定是哪个应用程序接收(只有一个网卡),是由传输层决定的,就得知道这个应用程序的端口号
应用层
【会话层:控制发报的数据; 表示层:文件格式; 应用层:应用程序的使用; 】
传输层
TCP协议
一、特点:面向连接、可靠的字节流传输
二、字节流传输;
三、TCP的报文格式:
端口号:确定和机器上按个应用程序通信
1.周知/标准端口号,它的范围是0 - 1023。在Unix的操作系统上,使用这些端口之一需要超级用户操作权限
2.注册端口号,范围是1024 -49151。是用于IANA 注册服务的注册端!
3.私有端口号,范围是49152- 655R5。未正式指定用于任何特定服务,可用于任何目的。
这些端口也可以用作临时端口,在生机上运行的软件可以使用这些端口根据需要动态创建通信终结点
序列号seq(随机生成)
TCP表示位:
SYN:建立链接
ACK:回应标识
FIK:断开链接
PSH:数据包
URG:紧急指针
RST :重置(重传)
检验方式
奇偶校验Parity Check
bcc异或按验法(block check character)
crc循环元余校验(Cyclic Redundancy Check)
md5校验和数字签名
海明码校验
四、可靠传输
4.1停止等待协议:
我发送一个数据包给你,然后你跟我回复收到,我继续发送下一个数据句
问题:网络环境不可靠,导致每一次发送的数据包可能会丢失,如果机器A发送了数据包丢失了,那么机器B永远接收不到数据,机器A永远在等待
4.2 超时重传:
当机器A发出一个数据包时便开始计时,时间到还没收到确认回复,就可以认为是发生了丢包,便再次发送,也就是重传
问题:如果原先的数据包并没有丢失,只是在网络中待的时间比较久,这个时候机器B会受到两个数据包,无法辨别
4.3 序号和确认号
表示发送方数据第一个字节的编号,和接收方期待的下一份数据的第一个字节的编号
4.4 连续ARQ协议:
停止等待协议已经可以满足可靠传输了,但有一个致命缺点:效率太低
源源不断地发送,接收方源源不断收到数据之后,逐一进行确认回复。这样便极大地提高了效率
问题1:发送太快导致接收方无法接受,那么只是频繁进行重传,浪费了网络资源
问题2:如何处理丢包情况——选择确认SACK——在TCP报文的选项字段,可以设置已经收到的报文段,每一个报文段需要两个边界来进行确定
4.5 TCP的流量控制:滑动窗口
4.5.1.发送方需要根据接收方的缓冲区大小,设置自己可发送窗口大小,处于窗口内的数据表示可发送
4.5.2当窗口内的数据接收到确认回复时,整个窗口向后移动,窗口外的数据不可发送
五、拥塞控制
避免网络过分拥挤导致丢包严重,网络效率低
解决方法:调整滑动窗口大小——实现流量控制——实现拥塞控制
重点:慢开始,快恢复、快重传、拥塞避免
六、面向连接
6.1连接
不是指实实在在的连接,而是通信双方彼此之间的一个记录
TCP是一个全双工通信,也就是可以互相发送数据,所以双方都需要记录对方的信息(源IP、源端口号、目标IP、目标端口号)
6.2 建立连接
三次握手:
因为TCP是全双工,所以得是三次握手,而非二次,不然server端接受不到client的ack
6.2.1拒绝服务攻击(DOS)
通过各种技术手段导致目标系统进入拒绝服务状态的攻击
6.2.2分布式拒绝服务攻击(DDOS)
利用合理的请求造成资源过载,导致服务不可用,从而造成服务器拒绝正常流量服务
SYN Flood攻击
6.3断开连接
四次挥手
为什么是四次——(因为是全双工)
1.防止丢包导致的,被动关闭端收不到最后一次挥手而无法关闭
2.也防止被动关闭段要给主动关闭段还要发消息
七、粘包与粘包
UDP协议
叫做用户数据报协议
特点:无连接部可靠传输
UDP报文格式
UDP的功能
1.校验数据报是否发生错误
2.区分不同的进程通信
优缺点
1.无法保证消息完整、正确到达,UDP是一个不可靠的传输协议
2.缺少拥塞控制容易互相竞争资源导致网络系统瘫痪
||
1.效率更快;不需要建立连接以及拥塞控制
2.连接更多的客户;没有连接状态,不需要为每个客户创建缓存等
3.分组首部字节少,开销小;TCP首部固定首是20字节,而UDP只有8字节;更小的首部意味着更大比例的数据部分58%
4.在一些需要高效率允许可限度误差的场景下可以使用。如直播场景,
5.可以进行广播;UDP并不是面向连接的,所以可以同时对多个进程进行发送报文
适用场景
视频直播
DNS
RIP路由选择协议
应用层
DNS-域名系统
解决IP地址复杂难以记忆的问题,存储并完成自己所管辖范围内主机的域名到IP地址的映射
域名解析的顺序
1.浏览器缓存
2.找本机的hosts文件
3.路由缓存
4.找DNS服务器(本地域名、顶级域名、根域名)->迭代解析、递归查询
域名由点、字母和数字组成
顶级域(com,cn,net,gov,org)
二级域(baidu,taobao,qq,alibaba)
三级域(www)
DHCP-动态主机设置协议
是一个局域网协议,是应用UDP协议的应用层协议。
作用:为临时接入局域网的用户自动分配IP地址
HTTP (HyperText Transfer Protocol:超文本传输协议)
【TCP,端口80】
例如:https
C/S架构 vs B/S架构
C/S架构:客户端/服务器——qq、电脑游戏... ...
B/S:浏览器游戏、Web的qq ... ...
抓包工具——Wireshark
抓包工具之wireshark安装和使用_wireshark导入密钥_恒悦sunsite的博客-CSDN博客https://blog.csdn.net/carefree2005/article/details/120840566
wireshark:优点在于,可以在windows、Linux和Mac OS