一、抽象语言(文字、语音、图片)----->电脑可以识别的机器语言
抽象语言---->编码
编码------->二进制数
二进制数---->电信号
处理电信号
二、OSI/RM七层参考模型
分层----核心思想
应用层---->人机交互的接口
表示层---->将编码转换为二进制,其本质是将格式进行统一。
会话层---->搭建一个端到端的连接。
传输层---->区分不同点的应用。端口号
网络层---->IP地址(IP协议)--->逻辑寻址
数据链路层---->MAC地址(以太网协议)--->物理寻址
物理层---->物理特性(端口数量大小、电气电压标准)
三、ARP协议----地址解析协议
-
正向ARP:根据已知的目标IP地址获取目标MAC地址
-
ARP缓存表--->通过ARP协议获取到的信息为动态信息。180S
-
-
反向ARP:根据已知的目标MAC地址获取目标IP地址
-
免费ARP:1.自我介绍;2.地址的冲突检测;一般是在DHCP获取到IP地址后使用。
四、TCP/IP协议栈
TCP/IP标准模型---4层
TCP/IP对等模型---5层
跨层封装
解封装——封装的逆过程
五、DHCP服务
动态主机配置协议--->C/S架构
DHCP Discover报文---广播
DHCP Offer报文
应用层 | DHCP-Discover |
---|---|
传输层 | UDP;源端口:68;目端口:67 |
网络层 | 源IP:0.0.0.0 目IP:255.255.255.255 |
数据链路 | 源MAC:PC的MAC 目MAC:FFFF-FFFF-FFFF |
应用层 | DHCP-offer(携带可用的IP地址及掩码、网关、DNS等信息) |
---|---|
传输层 | UDP;源端口:67;目端口:68 |
网络层 | 源IP:2.1 ;目IP:2.101(华为设备会将即将分配的IP作为目的IP地址) |
数据链路层 | 源MAC:服务器MAC 目MAC:PC的MAC |
应用层 | DHCP-Request(正式请求自己想要的IP地址) |
---|---|
传输层 | UDP;源端口:68;目端口:67 |
网络层 | 源IP:0.0.0.0 ;目IP:255.255.255.255 |
数据链路层 | 源MAC:PC的MAC 目MAC:FFFF-FFFF-FFFF |
应用层 | DHCP-ACK |
---|---|
传输层 | UDP;源端口:67;目端口:68 |
网络层 | 源IP:2.1 ;目IP:2.101 |
数据链路层 | 源MAC:服务器MAC 目MAC:PC的MAC |
交换机转发原理:交换机收到电信号后,会将电信号转换为二进制,之后,截取数据帧。
1、首先查看数据帧中的源MAC地址,之后将该地址和数据进入接口的对应关系记录在本地的MAC地址表中。--->300S
2、查看数据帧中的目的MAC地址,基于本地MAC地址表进行查找,如果表中存在对应记录关系,则执行单播转发;如果表中不存在对应关系,则进行洪泛(交换机会将数据从除了进入的接口外的所有接口发送一遍)
交换机洪泛的情况:
1、收到广播帧或组播帧的情况下,会进行数据洪泛
2、收到未知单播帧
工作过程:
第一种场景—PC首次获取IP地址的情况
1.DHCP —discover包 —客户端—服务端 —广播发送的数据包
Sport 68 Dport 67
SIP 0.0.0.0 DIP 255.255.255.255
SMAC PC1 DMAC FF-FF-FF..FF
2.DHCP—offer包—服务端—客户端 —区分厂商的,华为单播发送,思科广播发送
Sport 67 Dport 68
SIP 服务端自身IP地址 DIP 准备下发的IP地址
SMAC 服务端 DMAC PC1
当网络中存在多台DHCP服务端时,将存在多个Offer包
3.DHCP—request 请求包—客户端-服务端 —广播发送
当客户端收到多个Offer包,会进行选择,选择最先收到的Offer包中携带的IP地址
Sport 68 dport 67
SIP 0.0.0.0 DIP 255.255.255.255
SMAC PC1 DMAC FF-FF-..FF
4.DHCP—ACK 确认包 服务端-客户端 可单播可广播
Sport 67 dport 68
Sip 服务器 dip 下发的地址
Smac 服务端 dmac 客户端
第二种场景—PC(客户端)再次获取IP地址的情况
PC具备存储记忆的功能
在一定时间内,如果PC想要再次获取IP地址,直接重复三四过程
DHCP—request 请求包—客户端-服务端 —单播
Sport 68 dport 67
SIP 曾经获取的IP地址 DIP 服务器的地址
SMAC PC1 DMAC服务器的地址
DHCP—ACK 确认包 服务端-客户端 可单播可广播
Sport 67 dport 68
Sip 服务器 dip 下发的地址
Smac 服务端 dmac 客户端
六、DNS服务---域名解析服务
基于UDP/TCP 53号端口进行封装。一般在客户端和服务端之间的查询和响应使用UDP协议;TCP协议用于主备服务器之间的数据传输。
DNS的查询过程----递归查询、迭代查询
应用层 | DNS请求报文 |
---|---|
传输层 | UDP;源端口:随机数;目端口:53 |
网络层 | 源IP:PC ;目IP:本地记录的DNS服务器的IP地址 |
数据链路层 | 源MAC:PC;目MAC:网关的MAC地址 |
路由器的转发原理:路由器基于数据包中的目的IP地址,查询本地路由表。若表中存在对应路由信息,则无条件转发数据;若表中不存在,则丢弃该数据包。
七、TCP----传输控制协议
是一种面向连接的可靠传输协议。可靠、有序、无丢失和无重复
特点:
-
TCP是一种面向连接的传输协议
-
每一条TCP连接有且只能存在两个端点,形成一种端到端的连接形式。
-
可靠、有序、无丢失和无重复
-
TCP是提供全双工通讯。
-
发送缓存
-
想要发送的应用层数据
-
已经发送但未收到确认的数据
-
-
接收缓存
-
按需到达但还未被应用程序提取的数据
-
乱序到达的数据
-
-
-
TCP是面向字节流的。
源IP、源端口、目IP、目端口----->TCP会话的四元组信息。
套接字:IP:Port
八、TCP报文段
确认序列号表明是接收方期望收到发送方发送的下一个字节的序号;且表示之前的所有数据均已接收。-->累积确认
ACK确认位:当ACK=1时,确认序列号有意义。在连接建立后所有传输的报文段都必须将该标记位置为1。
SYN同步位:代表连接请求。
FIN终止位:表明此报文段发送方数据已发送完毕,要求释放连接。
RST复位:当TCP连接出现严重错误时,必须释放连接,然后重新建立传输连接。
URG紧急位:当URG=1时,表明此报文段中存在紧急数据,是高优先级数据,应尽快传输给应用层程序处理,不再缓存在排队。配合紧急指针使用。
PSH推送位:当PSH=1时,接收方应尽快交付数据给应用层程序,不再等待缓存填满再向上交付。
源端口和目的端口字段
TCP源端口(Source Port):源计算机上的应用程序的端口号,占 16 位。
TCP目的端口(Destination Port):目标计算机的应用程序端口号,占 16 位。
序列号字段
CP序列号(Sequence Number):占 32 位。它表示本报文段所发送数据的第一个字节的编号。在 TCP 连接中,所传送的字节流的每一个字节都会按顺序编号。当SYN标记不为1时,这是当前数据分段第一个字母的序列号;如果SYN的值是1时,这个字段的值就是初始序列值(ISN),用于对序列号进行同步。这时,第一个字节的序列号比这个字段的值大1,也就是ISN加1。
确认号字段
TCP 确认号(Acknowledgment Number,ACK Number):占 32 位。它表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。其值是接收计算机即将接收到的下一个序列号,也就是下一个接收到的字节的序列号加1。
数据偏移字段
TCP 首部长度(Header Length):数据偏移是指数据段中的“数据”部分起始处距离 TCP 数据段起始处的字节偏移量,占 4 位。其实这里的“数据偏移”也是在确定 TCP 数据段头部分的长度,告诉接收端的应用程序,数据从何处开始。
保留字段
保留(Reserved):占 4 位。为 TCP 将来的发展预留空间,目前必须全部为 0。
标志位字段
CWR(Congestion Window Reduce):拥塞窗口减少标志,用来表明它接收到了设置 ECE 标志的 TCP 包。并且,发送方收到消息之后,通过减小发送窗口的大小来降低发送速率。
ECE(ECN Echo):用来在 TCP 三次握手时表明一个 TCP 端是具备 ECN 功能的。在数据传输过程中,它也用来表明接收到的 TCP 包的 IP 头部的 ECN 被设置为 11,即网络线路拥堵。
URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。
ACK:表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。
PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。
RST:表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
SYN:在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。
FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
窗口大小字段
窗口大小(Window Size):占 16 位。它表示从 Ack Number 开始还可以接收多少字节的数据量,也表示当前接收端的接收窗口还有多少剩余空间。该字段可以用于 TCP 的流量控制。
TCP 校验和字段
校验位(TCP Checksum):占 16 位。它用于确认传输的数据是否有损坏。发送端基于数据内容校验生成一个数值,接收端根据接收的数据校验生成一个值。两个值必须相同,才能证明数据是有效的。如果两个值不同,则丢掉这个数据包。Checksum 是根据伪头 + TCP 头 + TCP 数据三部分进行计算的。
紧急指针字段
紧急指针(Urgent Pointer):仅当前面的 URG 控制位为 1 时才有意义。它指出本数据段中为紧急数据的字节数,占 16 位。当所有紧急数据处理完后,TCP 就会告诉应用程序恢复到正常操作。即使当前窗口大小为 0,也是可以发送紧急数据的,因为紧急数据无须缓存。
可选项字段
选项(Option):长度不定,但长度必须是 32bits 的整数倍。
九、TCP的可靠性
排序机制
MTU---最大传输单元
MSS---最大段长度----TCP分段--->该参数是需要在TCP建立握手过程中通过前两次SYN报文段来进行协商确定。
如果在本地进行了分段操作,则不需要进行分片操作。
确认机制和重传机制超时重传---快速重传
RTT---往返时间
RTO---超时重传时间;略大于RTT时间--->动态变化的数值。加倍的形式进行变化。
在快速重传机制中,并不是因为RTO时间到达从而触发重传机制,该重传机制是根据对端的反馈信息进行重传,当连续3三收到相同的ACK报文时,发送端会重传数据。这3个连续的ACK报文被称为冗余ACK。
累积确认----选择确认
选择确认机制也是需要进行协商的。
窗口:指定的是无需等待确认应答,而可以继续发送数据包的最大值。
窗口大小体现在缓存区的大小。
TCP要求发送方依据接收窗口rwnd来控制数据的发送量。rwnd等于接收方接收缓存大小减去已存数据量大小。即rwnd变量是可变的。
十、TCP面向连接
TCP连接的建立
TCP连接建立需要解决的问题:
1、要使双方均知晓对方的套接字信息。
2、允许双方进行参数协商(MSS、窗口值、是否使用选择确认机制)
3、给各设备进行资源分配
TCP连接释放
1、对双方各自资源的释放过程
2、任何一方都可以在数据传输结束后发送连接释放通知
TCP同时建立连接、分别断开连接;和分别建立连接、同时断开连接过程
TCP三次握手过程
1. 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我。
2. 主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用哪佧序列号作为起始数据段来回应我。
3. 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:我已收到回复,我现在要开始传输实际数据了。
四次断开过程
1. 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
2. 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
3. 由B 端再提出反方向的关闭请求,将FIN置1
4. 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束。
同时打开连接请求
正常情况下,通信一方请求建立连接,另一方响应该请求,但是如果出现,通信双方同时请求建立连接时,则连接建立过程并不是三次握手过程,而且这种情况的连接也只有一条,并不会建立两条连接。同时打开连接时,两边几乎同时发送 SYN,并进入 SYN_SENT 状态,当每一端收到 SYN 时,状态变为 SYN_RCVD,同时双方都再发 SYN 和 ACK 作为对收到的 SYN 进行确认应答。当双方都收到 SYN 及相应的 ACK 时,状态变为 ESTABLISHE
同时关闭连接
正常情况下,通信一方请求连接关闭,另一方响应连接关闭请求,并且被动关闭连接。但是若出现同时关闭连接请求时,通信双方均从 ESTABLISHED 状态转换为 FIN_WAIT_1 状态。任意一方收到对方发来的 FIN 报文段后,其状态均由 FIN_WAIT_1转变到 CLOSING 状态,并发送最后的 ACK 数据段。当收到最后的 ACK 数据段后,状态转变化 TIME_WAIT,在等待 2MSL 时间后进入到 CLOSED 状态,最终释放整个 TCP 传输连接。