Linux应用编程_网络通信TCP/UDP

发布时间 2023-09-05 22:55:32作者: charlie12345
(1)网络协议被分为5层
	1)应用层:直接为用户的应用进程提供服务
		HTTP协议,FTP协议,DNS,POP3,SNMP,Telnet
	2)运输层(传输层):负责向两个主机中进程之间的通信提供服务							(基于TCP/UDP)
		(1)传输控制协议TCP(Transmission Control Protocol):
			1)数据传输的单位是报文段
			2)面向连接的,可靠
			3)流量控制(即发送方/接收方速率匹配)
			4)包括了应用层报文划分为短报文,并提供拥塞控制机制
		(2)用户数据包协议UDP(User Datagram Protocol):
			1)数据传输的单位是用户数据报
			2)无连接的,不可靠
			3)没有流量控制
			4)也没有拥塞控制
	3)网络层:负责将被称为数据包(datagram)的网络层分组从一台主机移动到另一台主机		(基于IP)
	4)链路层:因特网的网络层通过源和目的地之间的一系列路由器路由数据报					(基于MAC)
	5)物理层:任务就是透明地传送比特流
(2)函数:
	int socket(int domain, int type,int protocol);						//此函数用于创建一个套接字
	int bind(int sockfd, struct sockaddr *my_addr, int addrlen);		//函数用于将地址绑定到一个套接字
	int listen(int sockfd,int backlog);									//此函数宣告服务器可以接受连接请求
	int accept(int sockfd, struct sockaddr *addr,int *addrlen);			//server,使用此函数获得连接请求,并且建立连接

	int connect(int sockfd, struct sockaddr * serv_addr,int addrlen);	//client, 用connect建立一个连接

	ssize_t send(int sockfd, const void *buf, size_t len, int flags);	//用于TCP连接
	ssize_t recv(int sockfd, void *buf, size_t len, int flags);			//用于TCP连接
	
	ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,		//通常用于无连接套接字
					struct sockaddr *src_addr, socklen_t *addrlen);
	ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,	//通常用于无连接套接字
				  const struct sockaddr *dest_addr, socklen_t addrlen);

参考:韦东山Linux教程