网络编程与协议分析复习纲要
作者:互联网
网络编程与协议分析复习纲要
- 字节序Little-Endian和Big-Endian
- 主机字节顺序
- 网络字节顺序
- 端口号
- 计算机网络的OSI七层模型
- 计算机网络协议三要素
- 网络体系结构的关键要素
- TCP/IP协议体系结构
- 各类型IP网络地址所能容纳主机数
- 特殊IP地址
- IP协议
- ICMP协议
- IP路由
- TCP协议
- Socket编程
- 各套接字对应协议
- 常用Winsock函数
- MFC中的工作者线程和用户界面线程的概念
- ARP与RARP
- DNS协议
- DHCP协议的功能
阅前提示:本文按照复习重点而写,不会涉及所有知识点
字节序Little-Endian和Big-Endian
1)Little-endian:将低序字节存储在起始地址(低位编址)
2)Big-endian:将高序字节存储在起始地址(高位编址)
例:0x01020304
Little-Endian:04,03,02,01
Big-Endian:01,02,03,04
主机字节顺序
大端Big-endian,小端Little-endian都有
网络字节顺序
大端Big-endian
低位在前(右),高位在后(左)即网络字节顺序
端口号
FTP:20和21
SMTP:25
DNS:53
HTTP:80
POP3:110
SNMP:161
HTTPS:443
计算机网络的OSI七层模型
OSI七层模型 |
---|
应用层 |
表示层 |
会话层 |
传输层 |
网络层 |
数据链路层 |
物理层 |
计算机网络协议三要素
语法:定义了所交换数据的格式和结构,以及数据出现的顺序
语义:定义了发送者或接收者所要完成的操作,包括对协议控制报文组成成分含义的约定
同步:定义了事件实现顺序以及速度匹配,体现在当两个实体进行通信时,数据发送的事件以及发送的速率
网络体系结构的关键要素
协议和拓扑
TCP/IP协议体系结构
各类型IP网络地址所能容纳主机数
A类IP地址:2的24次方-2
B类IP地址:2的16次方-2=65534
C类IP地址:2的8次方-2=254
特殊IP地址
种类 | 网络地址 | 主机地址 | 范例 |
---|---|---|---|
网络地址 | 指定网络地址 | 全0 | 157.34.0.0 |
直接广播地址 | 指定网络地址 | 全1 | 157.34.255.255 |
受限广播地址 | 全1 | 全1 | 255.255.255.255 |
本网络本主机地址 | 全0 | 全0 | 0.0.0.0 |
本网络特定主机地址 | 全0 | 指定主机地址 | 0.0.123.24 |
环回地址 | 127 | 任意值 | 127.0.0.1 |
私有地址:只能用在内部网络,不能用在因特网上,与因特网上地址不冲突
- A类:10.0.0.0~10.255.255.255
- B类:172.16.0.0~172.31.255.255
- C类:192.168.0.0~192.168.255.255
IP协议
IP数据报结构
IP数据报头部
P首部是IP模块为了正确传输数据而添加的各种控制信息的集合,是IP数据报的核心,其长度是20~60字节。在IP首部中,数据的组织都是低位在前(右),高位在后(左)即网络字节顺序
- 版本,4bit,用于存放该IP数据报所使用的IP版本信息
- 首部长度,4bit,以4个字节的倍数方式说明IP首部的长度
- 服务类型,8bit,用于规定数据报在网络传输过程中的处理方式
- 总长度,16bit,以字节为单位具体说明包括IP首部在内的整个IP数据报的总长度,IP数据报长度限制在65535(2的16次方-1)字节之内
- 标识,16bit,又称作“片标识符”,是由信源指定的数据报标识码,用于将分割后的数据报分片重组成原始数据报
- 标志,3bit,IP数据报分割控制标志,用于表示该IP数据报是否允许分片以及是否是最后一片
- 片偏移,13bit,表示本片数据在它所在的原始数据报数据区中的偏移量
- 生存时间(Time To Live,TTL),8bit,用来指定IP数据报可以在网络上传输的最长时间
- 上层协议标识,8bit,用于指明IP数据报所封装的上层协议类型
上层协议标识字段取值 | 上层协议 |
---|---|
1 | ICMP |
2 | IGMP |
6 | TCP |
17 | UDP |
50 | ESP |
51 | AH |
89 | OSPF |
- 首部校验和,16bit,用于IP首部数据有效性的校验,以保证IP首部在传输时的正确性和完整性
计算过程简述:首先将首部校验和字段的值设为0,然后把整个IP首部划分为若干个16位的段,并用反码算术运算把各段相加,最后把相加的结果取反后写入到首部校验和字段中 - 源地址,32bit,存储发送数据报的信源的IP地址
- 目的地址,32bit,存储接收数据报的信宿的IP地址
ICMP协议
ICMP报文划分
ICMP报文分为ICMP差错报告报文和ICMP查询报告报文
ICMP报文结构与封装
- 类型:用于定义ICMP报文类型
- 代码:用于标识发送这个特定报文类型的原因
- 校验和:用于数据传输过程的差错控制,提供ICMP整个报文的校验和
- 首部其他部分:由报文类型来确定相应内容,大部分差错报告报文未使用该字段
- 数据:提供了ICMP差错和状态报告信息,内容因报文类型而异
ICMP报文封装
各类型值的ICMP报文
-
ICMP差错报告
类型字段3:信宿不可达报告
类型字段4:源端抑制报告
类型字段5:重定向报告
类型字段11:超时报告。代码字段0表示TTL超时,代码字段1表示分片重组超时
类型字段12:参数错误报告 -
ICMP查询报告
类型字段13:时间戳请求报告
类型字段14:时间戳应答报告
类型字段8:回应请求
类型字段0:应答
类型字段17:地址掩码请求报告
类型字段18:地址掩码应答报告
类型字段10:路由器询问报告
类型字段9:路由器通告报告
IP路由
RIP协议与OSPF协议
RIP是一个广泛使用的内部网关协议。目前有两个版本:RIP-1和RIP-2
OSPF是一种基于SPF算法的路由协议。与RIP不同,没有跳数限制,并且选择最佳路径的度量标准可以基于带宽,延迟,可靠性和负载等服务类型
RIP协议的基本原理
作为基于距离向量算法的路由选择协议,RIP把到达目的网络的距离作为选择路由的度量,而距离一般指跳数,也就是所经过的路由器数量。每经过一个路由器,条数就增1,也就是距离增1,RIP认为一条好的路由就是他所经过的路由器数量最少的路由
OSPF协议的基本原理
OSPF协议是基于SPF算法的路由协议,为了有效减少路由信息更新过程中的通信量,引入了分层的思想,即在每个自治系统中,将网络划分为不同的区域。每个区域由位于同一自治系统中的一组网络,主机和路由器构成。区域内部的路由器以泛洪方式在区域内部交换路由信息。在区域的边界定义一个边界路由器,负责汇总该区域的信息,并将该信息传递到其他区域。每个自治系统都有自治系统边界路由器,用于实现与其他自治系统的连接与通信。这样,当网络中的某条链路状态发生变化时,此链路所在的区域中的每个路由器重新计算本区域路由表,而其他区域中的路由器只需要修改其路由表中的相应条目而无须重新计算整个路由表,节省了计算路由表的时间
反向路径转发基本思想
当多播数据报到达多播路由器时,路由器做RPF检查,以决定是否转发或抛弃该数据报,若成功则转发,否则抛弃,RPF检查过程如下:检查数据报的源地址,以确定该数据报经过的接口是否在从源到此路由器的最短路径上;若数据报是从源到此路由器的最短路径上,则RPF检查成功,转发该数据报到多播路由器输出接口表上的所有接口,否则RPF检查失败,抛弃该数据报
解决距离矢量算法的路由环路问题方法
- 定义最大值
- 水平分割技术
- 路由毒化
- 毒化逆转
- 控制更新时间
- 触发更新
TCP协议
TCP协议的主要特点
(1)向应用进程提供面向连接的服务,两个需要通过TCP进行数据传输的应用进程之间首先必须建立一个TCP连接
(2)提供全双工数据传输服务
(3)提供面向字节流的服务
TCP报文结构与封装
- 每个TCP报文段都包括源端和目的端的端口号,用于标识发送端和接收端的应用进程
- 序列号用来标识从TCP发送端向接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节序号
- 确认号是指期望接收的下一个报文段的第一个字节的序列号,也就是期望接收对方的下一个报文段首部的序列号字段的值。同时,确认号也表明在确认号之前的所有数据接收方都已经收到
- 首部长度字段占4位,用来标识TCP报文段首部的长度共有多少个32位字块构成,因此首部的长度一定是32位的整数倍
- 保留字段目前未用,供将来使用。其后面的6位是控制字段,用于TCP的流量控制、连接的建立和终止以及表示数据的传送方式等。各位的具体含义如下:
URG:当该位为1时,表明紧急指针有效,否则无效
ACK:当该位为1时,表明确认序号有效,即该报文段是一个确认报文段,否则无效
PSH:其值为1时表示接收方应尽快将这个报文段交给应用层处理
RST:重建连接标志
SYN:同步序号标志,其值为1时用来发起一个连接
FIN:其值为1时表示发送端完成发送任务 - 窗口大小用来配合TCP中的流量控制算法实现流量控制,该字段的值用来定义通信对方必须维持的以字节为单位的窗口值,以实现对对方发送数据量的控制。该字段的值表明在确认号字段给出的字节后面还可以发送的字节数,其取值范围是0~65535
- 校验和字段用来校验整个TCP报文段的所有数据的正确性,包括TCP首部和数据。为了校验TCP数据报是否正确地传递到了信宿机,在计算校验和时引入了伪首部的概念,其包括信源机IP地址和信宿机IP地址
- 紧急指针字段的值是一个相对于当前序列号的字节偏移值。把这个值和TCP首部中的序列号值相加就得到报文段数据部分中最后一个紧急字节的序列号,即该序列号之前的数据都是紧急数据
- 通过选项使TCP可以提供一些额外的功能。每个选项由选项类型、选项总长度和选项值组成
TCP报文的封装
TCP三次握手与四次挥手
- 三次握手
- 四次挥手
TCP拥塞控制
- 慢开始:拥塞窗口大小指数增长
- 拥塞避免:拥塞窗口大小线性增长
- 快速重传和快速恢复基本思想
超时重传是TCP协议保证数据可靠性的一个重要机制,其原理是在发送一个数据以后就开启一个计时器,在一定时间内如果没有得到发送数据报的ACK报文,那么就重新发送数据,直到发送成功为止。这是数据包丢失情况下给出的一种修补机制。一般来说,重传发生在超时之后,但是如果发送端接收到3个以上的重复ACK,就应该意识到数据丢了,需要重新传递。这个机制不需要等到重传定时器溢出,所以叫做快速重传,而快速重传以后,因为走的不是慢启动而是拥塞避免算法,所以这又叫做快速恢复算法
Nagle算法与Clark算法
Nagle算法:主要针对发送方产生数据比较慢,而造成发送报文段包含数据量比较小的情况,其主要思想是强迫发送方等待,让它收集发送数据,以便发送大块数据,即通过降低发送次数来加大每次发送的数据量
Clark算法:主要针对接收方接收处理数据较慢,而造成频繁发送确认报文的情况。即只要接收方的接收缓冲区已满,则每次接收到TCP报文后返回窗口值为0的确认报文,以停止发送方的数据发送,直到接收缓冲区的空闲区域已经能容纳最大长度的报文段或有一半以上的接收缓空间已经空闲,再发送一个窗口值不为0的确认窗口,以重新更新发送方的滑动窗口大小,使发送方可以继续发送报文段
延迟确认算法的主要思想
延迟确认算法:当接收方收到报文段后,并不马上回复确认报文,而是等接收缓冲区已经有一定数量的空闲空间后,再回送确认报文段。这样便可减慢发送方滑动窗口的滑动速度,进而降低数据的发送速度。同时也减少了确认报文的数量,进而减少了通信量。但是延迟确认的延迟时间过长有可能迫使发送方重传没有确认的报文,因此延迟确认的时间不能太长,一般不能超过500ms
Socket编程
有连接与无连接的C/S程序工作模型图
面向连接
无连接
各套接字对应协议
流套接字:TCP协议
数据报套接字:UDP协议
原始套接字:UDP协议
常用Winsock函数
- 套接字与通信连接的建立和关闭函数
- WSAStartup函数
功能:用于初始化WinSock,即检查系统中是否有Windows Sockets的实现库 - socket函数
功能:为应用程序创建套接字 - bind函数
功能:实现套接字与主机本地IP地址和端口号的绑定 - listen函数
功能:将套接字设定为侦听状态,准备接收由客户机进程发出的连接请求 - connect函数
功能:提出与一个服务器进程建立连接的请求,如果服务器进程接受请求,则服务器进程与客户机进程之间便建立一条通信连接 - accept函数
功能:接受由客户机进程调用connect函数发出的连接请求 - shutdown函数
功能:关闭套接字读写通道,即停止套接字接收/传送的功能 - closesocket函数
功能:关闭套接字,释放与套接字关联的所有资源 - WSACleanup函数
功能:终止使用WinSock,释放为应用程序分配的相关资源
- 数据传输函数
- recv函数
功能:在已建立连接的套接字上接收数据 - recvfrom函数
功能:在无连接的套接字上接收数据 - send函数
功能:在已建立连接的套接字上发送数据 - sendto函数
功能:在无连接套接字上发送数据
- 其他相关函数
- setsockopt函数
功能:设定套接字的状态 - getsockopt函数
功能:获取套接字上的相关信息 - htonl函数
功能:将4字节主机字节顺序的数转换为网络字节顺序 - htons函数
功能:将2字节主机字节顺序的数据转换为网络字节顺序 - ntohl函数
功能:4字节网络字节顺序的数转换为主机字节顺序 - ntohs函数
功能:将2字节网络字节顺序的数据转换为主机字节顺序 - inet_addr函数
功能:将点分十进制数表示的IP地址转换为网络字节顺序的IP地址 - inet_ntoa函数
功能:将网络字节顺序表示的IP地址转换为点分十进制数表示的IP地址 - gethostbyname函数
功能:获取给定主机名的主机信息 - gethostbyaddr函数
功能:获取给定地址的主机信息 - gethostname函数
功能:获取目前正在使用的主机名称 - getpeername函数
功能:获取与指定套接字相连的对方套接字地址
MFC中的工作者线程和用户界面线程的概念
利用MFC可以创建两种线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程之外的用户输入,响应用户及系统产生的事件和消息等。
ARP与RARP
ARP
ARP功能:IP地址到物理地址的映射
ARP请求数据包中,目的MAC地址字段内容一般为广播地址
ARP请求报文操作码字段:0x0001
ARP回应报文操作码字段:0x0002
RARP
RARP功能:物理地址到IP地址的映射
一般,RARP请求由一个正在引导的无盘计算机产生,并以广播方式发送给本网络中的每一台主机,包括RARP服务器
RARP请求报文操作码字段:0x0003
RARP回应报文操作码字段:0x0004
DNS协议
递归解析与反复解析
- 递归解析:当一个DNS服务器接收到请求后,如果它本身就是授权服务器,则查询其所存储的域名空间信息并给出响应;如果它不是授权服务器,则将请求转发给另一个DNS服务器;直到请求最终被响应后,再逐级将响应信息返回给请求客户机
- 反复解析:当一个DNS服务器接收到请求后,如果能给出解析结果则向客户机返回最终结果,否则应向客户提供其认为能够给出解析结果的DNS服务器的IP地址。客户机收到该IP地址后再向该IP地址对应的DNS服务器发出请求,直到获得最终结果。
DHCP协议的功能
(1)支持IP地址动态分配
(2)支持IP地址静态分配
(3)支持租用地址管理
(4)支持永久租用地址
(5)恢复中止的租用地址
标签:协议,字节,IP,报文,编程,TCP,纲要,IP地址,复习 来源: https://blog.csdn.net/qoQAQop/article/details/122107694