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


适配器在生产时就被永久性地安排了一个 MAC 地址 , 它记录在适配器的 ROM 中 , 是不可改变的 。另外 , MAC 地址空间是赋 IEEE 管理的 , 它保证所有适配器的 MAC 地址都不相同
2、IP地址
IP 地址就是给每个连接在上的主机分配的一个 32bit 地址 。互联网上的 IP 地址统一由一个叫 "IANA" (,互联网网络号分配机构) 的组织来管理 。
各个厂家生产的网络系统和设备 , 如以太网、分组交换网等 , 它们相互之间不能互通 , 不能互通的主要原因是因为它们所传送数据的基本单元 (技术上称之为 “帧”) 的格式不同 。IP 协议实际上是一套由软件程序组成的协议软件 , 它把各种不同"帧”统一转换成 "IP数据报" 格式 , 这种转换是因特网的一个最重要的特点 , 使所有各种计算机都能在因特网上实现互通 , 即具有 "开放性” 的特点 。
3、端口号
按照 OSI 七层模型的描述 , 传输层提供进程 (应用程序) 通信的能力 。为了标识通信实体中进行通信的进程 (应用程序) , TCP/IP 协议提出了协议端口 ( port , 简称端口) 的概念 。
端口是一种抽象的软件结构 (包括一些数据结构和 I/O 缓冲区)。应用程序通过系统调用与某端口建立连接 () 后 , 传输层传给该端口的数据都被相应的进程所接收 , 相应进程发给传输层的数据都通过该端口输出 。
端口用一个整数型标识符来表示 , 即端口号 。端口号跟协议相关 , TCP/IP 传输层的两个协议 TCP 和 UDP 是完全独立的两个软件模块 , 因此各自的端口号也相互独立 。
端口使用一个 16 位的数字来表示 , 它的范围是 0~65535 , 1024 以下的端口号保留给预定义的服务 。例如:http 使用 80 端口 。
2.4 TCP协议
三次握手
1、第一次握手:建立连接 。客户端发送连接请求报文段 , 将 SYN 位置为 1 ,  为 x;然后 , 客户端进入 SYN _SEND 状态 , 等待服务器的确认;
2、第二次握手:服务器收到 SYN 报文段 。服务器收到客户端的 SYN 报文段 , 需要对这个 SYN 报文段进行确认 , 设置为 x+1( +1);同时 , 自己还要发送 SYN 请求信息 , 将 SYN 位置为 1,为 y;服务器端将上述所有信息放到一个报文段 (即 SYN+ ACK 报文段) 中 , 一并发送给客户端 , 此时服务器进入状态;
3、第三次握手:客户端收到服务器的 SYN+ACK 报文段 。然后将设置为 y+1 , 向服务器发送 ACK 报文段 , 这个报文段发送完毕以后 , 客户端和服务器端都进入状态 , 完成 TCP 三次握手 。
完成了三次握手 , 客户端和服务器端就可以开始传送数据 。

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

文章插图
四次分手
当客户端和服务器通过三次握手建立了 TCP 连接以后 , 当数据传送完毕 , 断开 TCP 连接
1、第 1 次分手:主机1 (可以是客户端 , 也可以是服务器端) , 设置和 , 向主机 2 发送一个 FIN 报文段此时 ,  主机 1 进入状态;这表示主机 1 没有数据要发送给主机 2 了;
2、第 2 次分手:主机 2 收到了主机 1 发送的 FIN 报文段 , 向主机 1 回一个 ACK 报文段 , 为加 1;主机 1 进入状态;主机 2 告诉主机 1 , 我也没有数据要发送了 , 可以进行关闭连接了;