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

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; } 
           
          
         
       
      
      
     
     
    
    
   
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值