windows系统编程2——内存管理和网络

学习视频链接
06网络的相关概念_哔哩哔哩
目录
一、内存管理
1.1 概念
1.2 内存分区
二、网络基础
2.1 IP地址
2.2 网络分层
2.3 网络程序寻址方式
2.4 TCP协议
2.5TCP服务器/客户端创建过程
2.6UDP服务器/客户端创建过程
三、测试 TCP
3.1 测试连接
3.2 测试收发数据
3.3 多线程服务器连接多客户端
3.4 服务器
一、内存管理 1.1 概念
1、进程的虚拟地址空间
对于32位进程来说 , 这个地址空间是 4GB , 因为 32 位指针可以拥有从至
之间的任何一个值 。这使得一个指针能够拥有 4,294,967,296 个值中的一个值 , 它覆盖了一个进程的 4GB 虛拟空间的范围 。对于 64 位进程来说 , 这个地址空间是 16EB (1TB = , 1PB = , 1EB = )  , 因为 64 位指针可以拥有从 0x0,000,000,000,000,000 至 0xF,FFF,FFF,FFF,FFF之间的任何值 。这使得一个指针可以拥有 个值中的一个值 , 它覆盖了一个进程的 16EB 虚拟空间的范围 。这是相当大的一个范围
32 位的 CPU 的寻址空间是 4G , 所以虚拟内存的最大值为 4G , 而操作系统把这 4G 分成 2 部分 , 即 3G 的用户空间和 1G 的系统空间 , 系统空间是各个进程所共享的 , 他存放的是操作系统及一些内核对象等 , 而用户空间是分配给各个进程使用的 , 用户空间包括用:程序代码和数据 , 堆 , 共享库 , 栈 。
2、分页
分页的基本方法是 , 将地址空间分成许多的页 。每页的大小由 CPU 决定 , 然后由操作系统选择页的大小 。目前 Inter 系列的 CPU 支持 4KB 或 4MB 的页大小 , 而 PC 上目前都选择使用 4KB
1.2 内存分区
内核空间:
内核空间表示运行在处理器最高级别的超级用户模式 ( mode) 下的代码或数据 , 内核空间占用从到的 1GB 线性地址空间 , 内核线性地址空间由所有进程共享 , 但只有运行在内核态的进程才能访问 , 用户进程可以通过系统调用切换到内核态访问内核空间 , 进程运行在内核态时所产生的地址都属于内核空间 。
用户空间:
用户空间占用从到共 3GB 的线性地址空间 , 每个进程都有一个独立的 3GB 用户空间 , 所以用户空间由每个进程独有 , 但是内核线程没有用户空间 , 因为它不产生用户空间地址 。另外子进程共享 (继承) 父进程的用户空间只是使用与父进程相同的用户线性地址到物理内存地址的映射关系 , 而不是共享父进程用户空间 。运行在用户态和内核态的进程都可以访问用户空间 。
在用户空间内内存被分为: 开始
二、网络基础
详细了解看视频和计算机网络相关内容 , 这里只列举一些简单的东西
2.1 IP地址
2.2 网络分层
各层使用的协议
2.3 网络程序寻址方式
1、MAC 地址
网络通信的最边缘便是 LAN(Local Area ) 了 , 我们先来看在 LAN 中如何寻址的
LAN 主要使用广播通信 。在其内部 , 许多主机连在相同的通信通道上 , 通信时的关键问题是当争存在时如何决定谁使用通道 。解决问题的协议属于链路层的子层 , 称为 MAC 子层 。MAC 子层在 LAN 中特别重要 , 因为广播通信是由它控制的
网络中的节点都有链路层地址 。事实上 , 并不是节点有链路层地址 , 而是节点上的适配器有 。链路层地址通常叫做 LAN 地址、物理地址或者 MAC 地址 。MAC 地址的长度为 6 字节 , 共有 2 的 48 次方种可能取值 。这个 6 字节地址通常以 16 进制表示 , 每个字节都用一对 16 进制数表示 , 如:E6-E9-00-17-BB-4B