Linux网络编程复习笔记
来源:互联网 发布:网络尖兵软件下载 编辑:程序博客网 时间:2024/05/21 22:51
主要内容有:推荐书籍《UNIX环境高级编程》,简称AQUE.以及华清教学课件“Linux网络编程”部分。
(1)OSI模型和TCP/IP协议的模型
(2)TCP和UDP协议下的服务器和客户端的设计
(3)I/O模型
(4)服务器模型
(5)广播和组播模型
(6)UNIX域套接字
一、OSI模型和TCP/IP协议的模型
TCP/IP协议中,TCP是用来检测网络传输中差错的传输控制协议,IP协议专门负责对不同网络进行互联的互联网络协议。他们的前身是美国的ARPnet的NCP协议。
网络的体系结构是指“网络的层次结构”和每层所使用的协议的集合“。 最重要的两个网络体系结构是:TCP/IP和OSI
OSI参考模型与TCP/IP参考模型的比较: OSI参考模型
面向通信 --> 传输层 --> 差错处理/恢复,流量控制,提供可靠的数据传输
通信子网 --> 网络层 --> 数据的分组和路由的选择
通信子网 --> 链路层 --> 数据组成可发送\接受的帧
通信子网 --> 物理层 --> 传输物理信号\接口\信号心事\速率
TCP协议中只有一下四层:
应用层\传输层\网络层\网络接口和物理层
常见的TCP/IP协议族有:
TCP、IP、UDP、ICMP、SMTP、SNMP、HTTP、TFP、ARP
TCP的数据包的格式
二、TCP和UDP协议下的服务器和客户端的设计
(1)TCP和UDP的区别,虽然都工作在传输层,全双工
TCP:可靠,有连接;数据无误、无丢失、无失序、无重复到达。
UDP:不可靠,无连接;效率很高
(2)socket的介绍,sock位于传输层和会话层
分为三种套接字:sock_stream、sock_dgram和sock_ram(原始套接字)
(3)IP地址:我们平时用的是十进制的点分形式,而最后都会转换为一个无符号的32位整数
常用函数:
inet_aton(); //将字符串转换为32位的网络字节序数
inet_addr(); //将字符串转换为32位的网络字节序数
inet_ntoa(); //转换为32位的网络字节序数转换为点分十进制的字符串
(4)端口号:
常用函数:
主机字节序 --> 网络字节序
htonl(); //用于IP
Htons(); //用于端口号
网络字节序 --> 主机字节序
ntohl();
ntohs();
(5)网络字节序:是大端的。
(6)socket地址相关的数据结构
A、通用地质结构
struct socketaddr
{
u_short sa_family;//地址协议族,AF_XXX
char sa_data[14] //14字节协议地址
};
B、Inetnet协议地址结构
struct socketaddr_in
{
u_short sin_family;
u_short sin_port;
struct in_addr sin_addr; //ipv4地址,4byte
char sin_zero[8]; //8tyte 作为填充
};
C、IPV4的地质结构
struct in_addr
{
in_addr_t s_addr; //u32 network address
};
(7)TCP服务器的设计
A、创建socket文件描述符 sockfd =socket(AF_INET, SOCK_DGRAM, 0);
B、填充地址结构
bzero(&peeraddr, sizeof(peeraddr));
peeraddr.sin_family = PF_INET;
peeraddr.sin_port = htons(atoi(argv[2]));
peeraddr.sin_addr.s_addr = inet_addr(argv[1]);
C、将文件描述符和地质结构进行绑定 bind();
D、设置监听套接字,因为sockfd只能用来连接,不能通信 listen(listenfd);
E、得到一个建立好的套接字来连接 int new_fd accept();
F、数据的发送和接收
send()/recv()
(8)TCP客户端的设计
A、同样创建socket文件描述符 sockfd = socket(AF_INET, SOCK_DGRAM, 0);
B、填充地址结构
bzero(&peeraddr, sizeof(peeraddr));
peeraddr.sin_family = PF_INET;
peeraddr.sin_port = htons(atoi(argv[2]));
peeraddr.sin_addr.s_addr = inet_addr(argv[1]);
C、这歌绑定是可选的,将文件描述符和地质结构进行绑定 bind();
D、同服务器的accept一样,客户端也有一个专门的connect(sockfd),得到一个建立好的套接字来连接.
F、数据的发送和接收
send()/recv()
- Linux网络编程复习笔记
- linux网络编程复习
- linux 网络编程复习
- JAVA复习笔记--------网络编程
- 黑马程序员------网络编程复习笔记
- Android复习笔记(11) -网络编程相关
- Linux 网络编程笔记
- linux网络编程笔记
- linux网络编程笔记
- linux 网络编程笔记
- Linux网络编程笔记
- linux网络编程笔记
- linux网络编程笔记
- linux复习杂记(二) linux网络编程中的细节
- 网络编程复习
- C++网络编程复习
- 网络编程复习_Exp1
- 【javase复习】## 网络编程 ##
- RTP与RTCP协议介绍
- 黑马程序员-c#中问号的含义
- 剖析云计算技术及架构(3 云存储)
- list 模板类的简单实现
- C#十六进制转字符串0x00问题,难啊
- Linux网络编程复习笔记
- jdbc获取各种数据库连接
- 学习robotium自动化有感
- Hibernate 鉴别器 遇到的一个SQLGrammerException
- Android中选项卡TabHost的基本使用
- 图about连通性,简单路径,深搜,广搜。
- [转]Java多线程--让主线程等待所有子线程执行完毕
- 浅谈EditPart的IEditorActionBarContributor
- 常见思想归纳