为什么学习网络编程?
1.无名管道 (具备亲缘关系的进程)
2.有名管道
3.信号量
4.消息队列
5.共享内存
6.信号灯集
7.socket
前6中只能由于同主机之间,socket用于不同主机之间
OSI开放系统控制模型
四层
应用层(telnet(远程登录服务协议), FTP, HTTP, SMTP,DNS ,TFTP等)SSH: 安全外壳协议
传输层(TCP,UDP)
网络层(IP, ICMP, IGMP)
链路层(ARP(由IP获取MAC),RARP(由MAC获取IP))
最大传输单元:MTU 1500字节,如果包含以太网头和以太网尾的话就是1518字节,其中头14字节,尾4字节
内核管理的5大功能
1.文件管理
2.进程管理
3.设备管理
4.网络管理
5.内存管理
TCP和UDP的异同:
都是传输层的协议。
TCP是传输控制协议,是面向链接的,提供可靠性传输数据的协议;
使用情况:在需要传输大量数据的时候,需要可靠数据传输的时候,例如QQ,MSN
UDP:是用户数据报协议,提供无连接,不可靠的数据传输,
使用场合:音视频,网络聊天室
点分十进制IP地址转成网络字节序用 ret = inet_addr(IP);
网络字节序转c点分十进制 char *p = (unsigned char *)&ret
端口号: 每一个进程都有一个唯一标识进程号,但是因为进程在停止以后 在启动时,进程号会发生变化,所以人们认为的给进程规定了端口号。
SOCKET 与TCP结合 实现流程
服务器端:
1. 创建套接字 socket();
2. 填充网络信息结构体 struct sockaddr_in server_addr;
3. 绑定套接字和网络信息结构体 bind();
4. 使套接字处于被动监听状态 listen();
5. 阻塞等待客户端链接 accept();
6. 收发数据 recv,send
6. 关闭套接字 close();
客户端:
1. 创建套接字 socket();
2. 填充网络信息结构体 struct sockaddr_in server_addr;
3.与服务器建立联系 connect();
4. 收发数据 recv send
5. 关闭套接字 close();
UDP 与socket结合
服务器端:
1. 创建套接字 socket();
2. 填充网络信息结构体
3. 将套接字和网络结构体绑定 bind();
4. 收发数据 recvfrom sendto
5. 关闭套接字 close();
客户端:
1. 创建套接字 socket();
2. 填充网络信息结构体 struct sockaddr_in server_addr;
3. 收发数据 recvfrom sendto;
4. 关闭套接字 close();