- day1
- 一、ip地址
- 1.基本概念
- ●IP地址是Internet中主机的标识
- ●IP地址为32位(IPv4)或者128位(IPv6)
- ●表示形式:常用点分十进制形式,如202.38.64.10,最后都会转换为一个32位的无符号整数。
- 2.二级划分
- ip = 网络号 + 主机号
- 网络号:表示是否同一个网段
- 主机号:本网段的ID,同一个网段不能重复
-
- A类:1.0.0.0~126.255.255.255
- B类:128.0.0.0~191.255.255.255
- C类:192.0.0.0~223.255.255.255
- D类(组播地址):224.0.0.0~~239.255.255.255
- E类:保留待用 11110
-
- 3.特殊地址
- (1).网络地址:用于表示网络的起始地址,有效的网络,主机号全为0
- (2).广播地址:用于给局域网内所有主机发送数据,有效的网络,主机号全为1
- (3).0.0.0.0 用于服务器中, 0.0.0.0指的是监听本机上所有的IPV4地址
- (4).127.0.0.1~127.255.255.254,回环地址/本机地址,一般用来测试使用,所有发往该类地址的数据包都应该被loop back原样送回;
- 4.子网掩码
- 4.1作用
- 将IP划分成网络地址和主机地址
- 4.2特点
- (1).子网掩码长度是和IP地址长度完全一样的,32bit的二进制数组成;
- (2).网络号全为1,主机号全为0
- ip地址 & 子网掩码 = 网络地址
- ip地址 & ~子网掩码 = 主机地址
- 4.1作用
- 5.三级划分
- ip=网络号 + 子网号 + 主机号
- 1.基本概念
- 二、网络模型
- 1.网络的体系结构
- ●每层向上层提供服务,同时使用下层提供的服务
- ●网络体系结构即指网络的层次结构和每层所使用协议的集合
- ●两类非常重要的体系结构:OSI与TCP/IP
- 2.OSI模型
- OSI模型是最理想的模型
-
- OSI模型是最理想的模型
- 3.TCP/IP模型
-
- 1.网络的体系结构
- 三、TCP和UDP
- 1.UDP TCP 协议相同点
- 都存在于传输层
- 2.UDP TCP 协议不同点
- TCP:传输控制协议
- 是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)
- 高可靠性原因
- (1).三次握手、四次挥手
- (2).序列号和应答机制
- (3).超时、错误重传机制
- (4).拥塞控制、流量控制(滑动窗口)
- UDP :用户数据报协议
- 是不可靠的无连接的协议
- TCP:传输控制协议
- 1.UDP TCP 协议相同点
- 四、编程预备知识
- 1.socket套接字
- 1.1socket简介
- (1)、是一个编程接口
- (2)、是一种特殊的文件描述符
- (3)、并不仅限于TCP/IP协议
- (4)、面向连接
- (5)、无连接
- 1.2socket类型
- (1).流式套接字(SOCK_STREAM) TCP 提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
- (2).数据报套接字(SOCK_DGRAM) UDP 提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。
- (3).原始套接字(SOCK_RAW) 可以对较低层次协议如IP、ICMP直接访问。
- 1.1socket简介
- 2.端口号
- ●为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区分
- ●TCP端口号与UDP端口号独立
- ●端口用两个字节来表示 2byte
- (1).众所周知端口:1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用)
- (2).已登记端口:1024~49151 (选1000以上10000以下)
- (3).动态或私有端口:49152~65535
- 3.字节序
- 3.1概念
- (1).字节序是指不同类型的cpu主机,内存存储 "多字节整数" 序列的方式
- (2).浮点类型,字符类型,字符串没有字节序。
- (3).小端序(little-endian) - 低序字节存储在低地址 (主机字节序)
- (4).大端序(big-endian) - 高序字节存储在低地址 (网络字节序)
- 面试题:写一个函数,判断当前主机的字节序?
- 测试方法:指针强转、共用体测试、数据类型强转
- 3.2主机字节序到网络字节序
- u_long htonl(u_long hostlong);
- u_short htons(u_short short);//掌握这个
- 3.3网络字节序到主机字节序
- u_long ntohl(u_long hostlong);
- u_short ntohs(u_short short);
- 3.1概念
- 4.IP地址转换
- typedef uint32_t in_addr_t; struct in_addr { in_addr_t s_addr; };
- in_addr_t inet_addr(const char *ip);//从人看的IP地址转换为机器使用的32位无符号整数
- char *inet_ntoa(struct in_addr in);//从机器到人
-
- 1.socket套接字
- 五、TCP编程
- 1.流程
-
- 2.函数接口
- 2.1socket
-
- 2.2bind
-
- 2.3listen
-
- 2.4accept
-
- 2.5recv
-
- 2.6send
-
- 2.7connect
-
- 2.1socket
- 3.代码实现
- 3.1TCPserver.c
-
- 3.2TCPclient.c
-
- 3.1TCPserver.c
- 1.流程
- 一、ip地址