您的位置:首页 > 理论基础 > 计算机网络

【UNIX】认识iner-net网际网以及网络编程

2014-12-03 16:43 204 查看
INTER-NET就是在网络之间的传输共享资源,它也就是跨计算机的传输,那么这种传输需要有什么样的约束,才能确保在网络之间传输,于是就有了网络传输协议的概念。

只要大家遵循这种约定,抽象的理解也就是统一了接口的的含义,只要使用者遵循了这种约定,也就可以像之前一个计算机中两个进程之间的传输信息共享资源。

网络的特点体现了网络进程过程中的分层特点,每一层约定特定的协议进行传输,

网络的体系结构是指网络的层次结构和每层所使用的协议的集合

在网络体系结构中有两个重要的体系结构:OSI于TCP/IP

网络的互联促成了TCP/IP协议的产生



现在通用的一般是TCP/IP体系结构:

1)传输层遵循的是TCP/UDP协议

TCP协议属于传输层的协议其中也包括UDP和SCTP的协议

其中传输层的协议是来保证文件传输的可靠性(数据无丢失,数据无误,数据无乱序,数据无重复到达),

而TCP协议就是其中面向连接的传输层协议,使用范围有:适用于对传输性能要求高,以及大文件传输的通信;在需要可靠性通信的场合;QQ等即是通讯通常采用TCP协议

UDP协议的特点:用户数据报的协议,是不可靠的无连接的协议,在数据发送前不要连接,从而提高了数据的传输效率(为什么会导致数据的可靠性降低:是因为UDP传输在文件的传输过程中没有备份文本的副本,在没有确定文件已经正确传输到达之前已经丢弃了数据的信息)

2)网络层遵循的是IP/ICMP/GMP协议

IP地址是在Internet中标识主机的,一般来说一个主机可以用唯一的IP地址来标识(另外无线网也有一个IP地址)从而可以在网络之间约定协议进行传输,IP地址一般有多种,这里主要的是IPV4,它遵循的IP协议的地址族是AF_INET,一般IP地址分为网络部分和主机部分,当信息通过IP传到主机可以通过掩码来分离网络部分和端口号,

端口号表示一台主机接收的数据报应该转交给那个进程来处理。 一个数据使用不同的传输协议,那么它的TCP和UDP传输端口号是独立的。

3)网络接口与物理层(数据链路层(ARP协议是的物理传输是以以太网数据传输的))

socket的重要性

1)socket是一种编程接口,原始被人们称为套接口后来演变为套接字,它是一种特殊的文件描述符,并不局限于TCP/IP协议。

普通的IO操作过程:

打开文件-》读写操作-》关闭文件

TCP/IP协议被集成到操作系统内核中,从而引入了新的“IO操作”,在OSI体系结构中socket位于会话层和传输层

网络通信的一般编程(端对端循环通信模式):

1)服务器端:

#include
#include
#include
#include
#include
#include
#include
#include

#define MAXLEN 100
typedef struct sockaddr SA;

int main ()
{
int nr;
int listenfd,connfd;
char buf[MAXLEN];
struct sockaddr_in servaddr,cliaddr;
socklen_t clilen;

if ((listenfd = socket(AF_INET,SOCK_STREAM,0)) < 0){
perror("socket");
exit(-1);
}

bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family      = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port        = htons(8888);

if (bind(listenfd,(SA*)&servaddr,sizeof(servaddr)) < 0){
perror("bind");
exit(-1);
}

listen(listenfd,5);

while(1){
clilen = sizeof(cliaddr);
connfd = accept(listenfd,(SA*)&cliaddr,&clilen);
printf("connection from %s ,prot %d\n",inet_ntoa(cliaddr.sin_addr),
ntohs(cliaddr.sin_port));

memset(buf,0,sizeof(buf));

while((nr = recv(connfd,buf,MAXLEN,0)) >0){

printf("this is server read :%s\n",buf);

send(connfd,buf,sizeof(buf),0);
}

close(connfd);
}

close(listenfd);

return 0;
}

2)客户端:

#include
#include
#include
#include
#include
#include
#include
#include

#define MAXLEN 100
typedef struct sockaddr SA;

int main (int argc,char *argv[])
{
int sockfd,nbyte;
socklen_t clilen;
struct sockaddr_in servaddr,cliaddr;
char buf[MAXLEN];

if((sockfd = socket(AF_INET,SOCK_STREAM,0)) <0){
perror("sockfd");
exit(-1);
}
memset(&servaddr,0x00,sizeof(servaddr));
servaddr.sin_family      = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port        = htons(8888);

if (connect(sockfd,(SA*)&servaddr,sizeof(servaddr))< 0){
perror("conncet");
exit(-1);
}

do
{
fgets(buf,MAXLEN,stdin);

write(sockfd,buf,MAXLEN);

memset(buf,0,sizeof(buf));

read(sockfd,buf,MAXLEN);
printf("this is client recv read :%s\n",buf);

}while(strncmp(buf,"quit",4) != 0);

close(sockfd);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: