目录

  • 1 课程简介
    • 1.1 课程介绍
    • 1.2 考核方式
    • 1.3 教学大纲
    • 1.4 参考书目
    • 1.5 教学日历
    • 1.6 知识结构
  • 2 作业
    • 2.1 作业1
    • 2.2 作业2
    • 2.3 作业3
    • 2.4 作业4
    • 2.5 作业5
    • 2.6 作业6
    • 2.7 作业7
    • 2.8 作业8
    • 2.9 上机报告提交
    • 2.10 调研报告
    • 2.11 课程设计
  • 3 第一次课
    • 3.1 计算机网络
      • 3.1.1 什么是计算机网络(理解)
      • 3.1.2 网络协议(重点)
      • 3.1.3 通信模型
    • 3.2 网络体系结构(重点)
      • 3.2.1 分层体系结构
      • 3.2.2 OSI参考模型
      • 3.2.3 TCP/IP协议模型
      • 3.2.4 五层体系结构
  • 4 第二次课
    • 4.1 IP层概述
    • 4.2 IP地址及子网划分
    • 4.3 路由聚合
    • 4.4 第一周内容提纲
  • 5 第三次课
    • 5.1 数据报结构
    • 5.2 IP 数据报分片
    • 5.3 章节测试
    • 5.4 作业
  • 6 第四次课
    • 6.1 地址解析协议ARP/RARP
    • 6.2 ICMP协议
    • 6.3 IPv6基础
    • 6.4 packet tracer 仿真
    • 6.5 章节测试
  • 7 第五次课
    • 7.1 IP路由概述
    • 7.2 路由选择算法
    • 7.3 内部网关协议
    • 7.4 外部网关协议BGP-4
    • 7.5 仿真
    • 7.6 章节测试
  • 8 第六次课
    • 8.1 传输层概述
    • 8.2 UDP
    • 8.3 TCP
      • 8.3.1 连接建立与释放
      • 8.3.2 可靠数据传输
    • 8.4 章节测试
  • 9 第七次课
    • 9.1 流量控制
    • 9.2 拥塞控制
  • 10 第八次课
    • 10.1 网络编程基础
    • 10.2 socket API编程概述
    • 10.3 socket API函数介绍
    • 10.4 作业
  • 11 第九次课
    • 11.1 客户服务器编程模型
    • 11.2 客户端编程
    • 11.3 服务器编程
    • 11.4 作业
  • 12 第十次课
    • 12.1 MFC与Qt简介
    • 12.2 windows 套接字接口类
      • 12.2.1 CAsyncSocket类
      • 12.2.2 CSocket类
      • 12.2.3 作业
  • 13 第十一次课
    • 13.1 IP组播
    • 13.2 组播路由选择
    • 13.3 网际组管理协议
    • 13.4 IGMP配置仿真
  • 14 第十二次课
    • 14.1 应用层协议概述
    • 14.2 DNS协议
    • 14.3 HTTP协议
    • 14.4 FTP协议
    • 14.5 远程登陆
    • 14.6 课下作业
  • 15 第十三次课
    • 15.1 章节测验
    • 15.2 Qt实现应用层编程
    • 15.3 邮件传输协议
  • 16 第十四次课
    • 16.1 自举与自配置
      • 16.1.1 BOOTP协议
      • 16.1.2 DHCP协议
    • 16.2 网络管理概述
  • 17 第十五次课
    • 17.1 SNMP网络管理模型
    • 17.2 MIB与SMI
    • 17.3 SNMP协议工作原理
  • 18 第十六次课
    • 18.1 网络安全概述
    • 18.2 网络安全技术
      • 18.2.1 数字加密
      • 18.2.2 数字签名
      • 18.2.3 数字证书
  • 19 网络安全(二)
    • 19.1 安全协议
      • 19.1.1 SSL
      • 19.1.2 IPSec
    • 19.2 课程总复习
  • 20 第20次课(上机)
    • 20.1 上机一
    • 20.2 上机二
    • 20.3 上机三
    • 20.4 上机四
    • 20.5 上机五
  • 21 课程设计
    • 21.1 课程设计内容说明
socket API编程概述

一、套接字编程原理

       利用在应用层与传输层之间提供应用程序设计接口实现对内核程序(协议)的操作和管理。

二、什么是套接字

    1、起源:是一种网络编程接口,1983年最初提出(伯克利套接字接口——Berkeley Socket API),用于Unix的衍生系统BSD系统,1991年windows基于伯克利套接字接口制定了Windows网络应用程序编程接口(Windows Socket API)。winsock API通过套接字(socket)进行通信

    2、含义:                    

    • 可以理解为TCP/IP网络编程接口的集合,包含了许多函数

    • 可以理解为通信连接的一个端点,其主要包括协议、主机IP地址和端口号,将两个套接字连接到一起便可以在不同应用进程之间传递数据

    忽略底层通信过程,网络中的通信就是由发送者将信息写入套接字,通过中间环节传输到接收端的套接字中,被接收端应用程序读取的过程。

       基于套接字的通信过程可以描述为: 创建/打开套接字、向套接字收发数据、关闭套接字。

       套接字的本质是通信过程中所要使用的一些缓冲区及相关的数据结构。

三、套接字分类

    1、流套接字,可靠的,面向连接的双向数据传输,被传输的数据看作是无记录边界的字节流。(TCP)

    2、数据报套接字,不可靠,无连接的双向数据传输,数据以有记录边界的独立的包形式被发送。(UDP)

    3、原始套接字,允许对较低层协议(如IP或ICMP)进行直接访问

四、套接字工作机制

       1、通信过程与基本函数

    • 服务端创建提供服务的套接字,同时确定所使用的协议(socket()函数)

    • 将服务端口号与服务以及本地IP进行绑定(bind()函数)

    • 监听客户端请求(listen()函数)

    • 客户端发出服务请求(socket()——connect())

    • 服务器建立新套接字接收请求,与客户端建立IP与端口关联(accept()函数)

    • 向/从套接字发送/接收数据(recv()与send() 函数)

    • 关闭套接字,释放通信资源(closesocket()函数)


    2、错误检查与控制——SOCKET_ERROR

        int WSAGetLastError(void)  获取错误详情的说明

    3、字节顺序

        含义:占内存多于一个字节类型的数据在内存中的存储顺序。通常有如下两种存储顺序:

    • Little endian:将低位字节存储在起始地址(低序字节序、主机字节顺序)

    • Big endian:将高位字节存储在起始地址(高序字节序、网络字节顺序),TCP/IP中规定的数据格式

    • 字节为单位

    • 格式转换:(htons/ntohs、htonl/ntohl、inet_ntoa/inet_addr)

        举例:

    • 如一个32位的长整型数 0x12 34 56 78 存储在内存中以1000开始连续地址内

    • 192.168.1.12 <——> 0xC0   0xA8   0x01 0x0C


        4、数据结构