目录
VLSM(Variable Length Subnet Mask)——可延长子网掩码
CIDR(Classless Inter-Domain Routing)——无类域间路由
IP地址
VLSM(Variable Length Subnet Mask)——可延长子网掩码
作用
子网划分
增加网络位位数(从主机位借)
192.168.1.0/24
192.168.1.0 0000000/25——192.168.1.0/25——192.168.1.1-192.168.1.126
192.168.1.1 0000000/25——192.168.1.128/25——192.168.1.129-192.168.1.254
172.16.0.0/16——8个网段——借3位
172.16. 000 00000.00000000/19——172.16.0.1-172.16.31.254
172.16. 001 00000.00000000/19——172.16.32.1-172.16.63.254
172.16. 010 00000.00000000/19——172.16.64.1-172.16.95.254
172.16. 011 00000.00000000/19——172.16.96.1-172.16.127.254
172.16. 100 00000.00000000/19——172.16.128.1-172.16.159.254
172.16. 101 00000.00000000/19——172.16.160.1-172.16.191.254
172.16. 110 00000.00000000/19——172.16.192.1-172.16.223.254
172.16. 111 00000.00000000/19——172.16.224.1-172.16.255.254
CIDR(Classless Inter-Domain Routing)——无类域间路由
作用
汇总——子网划分的逆过程
取相同,去不同——针对二进制
192.168.1.0 0000000/25
192.168.1.1 0000000/25
——192.168.1.0/24
192.168.0.0/24——192.168.000000 00.00000000/24
192.168.1.0/24——192.168.000000 01.00000000/24
192.168.2.0/24——192.168.000000 10.00000000/24
192.168.3.0/24——192.168.000000 11.00000000/24
——192(C类).168.0.0/22——超网(超过默认子网掩码极限)
172.16.0.0/24
172.16.1.0/24
172.16.2.0/24
172.16.3.0/24
——172(B类).16.0.0/22——汇总
OSI/RM——开放式系统互联参考模型
1979年——ISO组织——国际标准化组织
核心思想:分层
分层——属于同一层面的不同功能其目的和作用相同或相似,不同层面的不同功能具有明显的差异。每一层都在下层提供服务的基础上再提供增值服务。
分层的好处
①便于标准化
②降低层次之间的关联性——解耦(解除耦合)——使各功能模块尽可能独立
③便于学习和理解
应用层
表示层
会话层——维持网络应用和网络服务器之间的会话联系
传输层——实现端到端的传输——应用到应用的传输
地址
端口号——区分和标定不同的应用的——16位二进制构成——0-65535(其中0不作为传输层的端口使用),所以端口号的取值范围1-65535
1-1023称为知名端口号。
SPORT(源端口号)——随机值——作用不大
PORT(目标端口号)——固定的
HTTP协议——80端口
HTTPS(HTTP+TLS(确保传输安全))——443端口
FTP协议——20、21端口
网络层
数据链路层
由MAC和LLC两个子层组成
MAC(介质访问控制层)——控制物理硬件
LLC(逻辑链路控制层)——在数据结尾加FCS(帧校验序列)
FSC作用
确保数据完整性(CRC——循环冗余算法)
物理层
TCP/IP——协议簇
TCP/IP模型
TCP/IP四层模型——TCP/IP标准模型
TCP/IP五层模型——TCP/IP对等模型
PDU——协议数据单元——为每一层次的数据设置一个单位
L1PDU
L2PDU
……
L7PDU
TCP/IP中的单位
应用层——数据报文
传输层——数据段
网络层——数据包
数据链路层——数据帧
物理层——比特流
封装和解封装
封装——往数据中加入源IP和目标IP——实现逻辑寻址
应用层(需要封装)
HTTP协议(超文本传输协议)——获取网页信息——TCP 80
HTTPS协议(HTTP + SSL)——TCP 443
FTP协议(文件传输协议)——TCP 20/21
TFTP协议(简单文件传输协议)——UDP 69
DHCP协议(动态主机配置协议)——UDP 67/68
DNS协议(域名解析协议)——UDP/TCP 53
Telnet协议(远程登录协议)——TCP 23
SSH协议(Telnet + SSL)——TCP 22
传输层(需要封装端口号——目的)
TCP协议
UDP协议
网络层(需要封装IP地址)
IP协议
数据链路层(需要封装MAC地址)——以太网(交换机组建的二层网络)
物理层(不需要封装)
只有物理层不用封装
以太网II型帧
Preamble——前导符——切分数据帧
Destination address——目标MAC地址
Source address——源MAC地址
Date——上层封装所使用的协议类型
FCS——帧校验序列
TCP/UDP
区别
①TCP是面向连接的协议,UDP是无连接的协议
②TCP协议的传输是可靠的(确认、重传、排序、流控),UDP协议的传输是尽力而为
③TCP可以实现流控,而UDP不行
④TCP可以实现分段操作,而UDP不行
⑤TCP的传输速度较慢,消耗资源较大;UDP的传输速度较快,消耗资源较小
适用场景
TCP——更适用于对速度要求不高,但是对可靠性要求较高的场景
UDP——更适用于对速度要求较高,但是对可靠性要求不高的场景(即时类通讯)
面向连接
在传输数据之前,先使用预备的协议建立点到点的连接,之后进行数据传输。
TCP的头部是可变长头部——最短20个字节
紧急URG(URGent)---紧急标记位
当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据),而不要按原来的排队顺序来传送。
当URG置1时,发送应用进程就告诉发送方的TCP有紧急数据要传送。于是发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。这时要与手中紧急指针字段配合使用。
确认ACK(ACKnowledgment)---确认标记位
仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。
推送PSH(PuSH)
当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。这种情况下,TCP就可以使用推送(push)操作。这时,发送方TCP把PSH置1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快的(即“推送”向前)交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
复位RST(ReSeT)
当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立运输连接。RST置1还用来拒绝一个非法的报文段或拒绝打开一个连接。RST也可称为重建位或重复位。
同步SYN(SYNchronization)---请求标记位
在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使SYN=1和ACK=1。因此,SYN置1就表示这是一个连接请求或连接接受报文。
终止FIN(FINis)---结束标记位
用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接。
校验和——确保数据完整性——反码相加法——伪头部校验——12个字节的内容一起进行校验——32位源IP地址,32位目标IP地址,8位保留,16位的总长度,8位协议
UDP头部——8个字节——固定的
TCP的三次握手(面试必问)
目的
建立可靠的通信信道,就是双方确认自己与对方的发送与接收是正常的
第一次握手
客户端给服务器发送一个SYN段(在 TCP 标头中 SYN 位字段为 1 的 TCP/IP 数据包), 该段中也包含客户端的初始序列号(Sequence number = J)
第二次握手
服务器返回客户端 SYN +ACK 段(在 TCP 标头中SYN和ACK位字段都为 1 的 TCP/IP 数据包), 该段中包含服务器的初始序列号(Sequence number = K);同时使 Acknowledgment number = J + 1来表示确认已收到客户端的 SYN段(Sequence number = J)
第三次握手
客户端给服务器响应一个ACK段(在 TCP 标头中 ACK 位字段为 1 的 TCP/IP 数据包), 该段中使 Acknowledgment number = K + 1来表示确认已收到服务器的 SYN段(Sequence number = K)
TCP的四次挥手
目的
终止数据传输,并回收资源
第一次挥手
客户端打算断开连接,向服务器发送FIN报文(FIN标记位被设置为1,1表示为FIN,0表示不是),FIN报文中会指定一个序列号,之后客户端进入FIN_WAIT_1状态。
也就是客户端发出连接释放报文段(FIN报文),指定序列号seq = u,主动关闭TCP连接,等待服务器的确认。
第二次挥手
服务器收到连接释放报文段(FIN报文)后,就向客户端发送ACK应答报文,以客户端的FIN报文的序列号 seq+1 作为ACK应答报文段的确认序列号ack = seq+1 = u + 1。
接着服务器进入CLOSE_WAIT(等待关闭)状态,此时的TCP处于半关闭状态(下面会说什么是半关闭状态),客户端到服务器的连接释放。客户端收到来自服务器的ACK应答报文段后,进入FIN_WAIT_2状态。
第三次挥手
服务器也打算断开连接,向客户端发送连接释放(FIN)报文段,之后服务器进入LASK_ACK(最后确认)状态,等待客户端的确认。
服务器的连接释放(FIN)报文段的FIN=1,ACK=1,序列号seq=m,确认序列号ack=u+1。
第四次挥手
客户端收到来自服务器的连接释放(FIN)报文段后,会向服务器发送一个ACK应答报文段,以连接释放(FIN)报文段的确认序号 ack 作为ACK应答报文段的序列号 seq,以连接释放(FIN)报文段的序列号 seq+1作为确认序号ack。
之后客户端进入TIME_WAIT(时间等待)状态,服务器收到ACK应答报文段后,服务器就进入CLOSE(关闭)状态,到此服务器的连接已经完成关闭。
会牵扯到数据的传输,第二次和第三次不一定能合并
为什么“握手”要三次,而“挥手”却要四次呢?
TCP建立连接时之所以只需要"三次握手",是因为在第二次"握手"过程中,服务器端发送给客户端的TCP报文是以SYN与ACK作为标志位的。SYN是请求连接标志,表示服务器端同意建立连接;ACK是确认报文,表示告诉客户端,服务器端收到了它的请求报文。
即SYN建立连接报文与ACK确认接收报文是在同一次"握手"当中传输的,所以"三次握手"不多也不少,正好让双方明确彼此信息互通。
TCP释放连接时之所以需要“四次挥手”,是因为FIN释放连接报文与ACK确认接收报文是分别由第二次和第三次"握手"传输的。