网络编程知识点总结
IP
IPv4:32位整形描述
192.168.1.102
IPv6:128位整型描述
端口
IP在网络中找到主机,端口在主机中找到接收消息的进程。
网络协议
网络分层模型
TCP协议->传输
UDP协议->传输层协议
IP协议->网络层协议
以太网帧协议->网络接口层协议
数据封装
socket编程
字节序
小端
数据的低位字节存储到内存的低位地址,数据的高位字节存储到内存的高位地址
大端
数据的低位字节存储到内存的高位地址,数据的高位字节存储到内存的低位地址
套接字通信的过程中操作的数据都是大端存储,包括;接收/发送的数据、IP地址、端口
TCP通信流程
TCP是一个面向连接的,安全的,流式传输协议,这个协议是一个传输层协议。
- 面向连接:是一个双向连接,通过三次握手完成,断开连接需要通过四次挥手完成。
- 安全:tcp通信过程中,会对发送的每一数据包都会进行校验,如果发现数据丢失, 会自动重传。
- 流式传输:发送端和接收端处理数据的速度,数据的量都可以不一致
- 在tcp的服务器端, 有两类文件描述符
- 监听的文件描述符
只需要有一个
不负责和客户端通信, 负责检测客户端的连接请求, 检测到之后调用accept就可以建立新的连接 - 通信的文件描述符
负责和建立连接的客户端通信
如果有N个客户端和服务器建立了新的连接, 通信的文件描述符就有N个,每个客户端和服务器都对应一个通信的文件描述符
服务端代码示例
#include <stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<arpa/inet.h>
int main(){
//1.创建 监听的套接字
int fd = socket(AF_INET, SOCK_STREAM, 0);
if(fd == -1){
perror("socket");
return -1;
}
//2. 绑定本地的IP port
struct sockaddr_in saddr;
saddr.sin_family = AF_INET;
saddr.sin_port = htons(