网络编程的学习

网络编程

       open system interconnect

1、OSI 模型  ===》开放系统互联模型  ==》分为7层:

       理想模型  ==》尚未实现

              tftp

              b  /etc/passwd

              a /etc/123

              应用层 

              表示层  加密解密  gzip

              会话层  网络断开,连接状态,keep-close keep-alive

              传输层tcp  udp  协议  文件    视频,音频

              网路层ip   NAT

              链路层  交换机  数据的格式化  帧 校验

              物理层         100Mb/8  Gbits   100MB 同轴电缆 10Gb    2.4G 5G

  TCP/IP模型  ==》网际互联模型   ==》分为4层:

      实用模型  ===》工业标准

      tcp/ip协议栈

              应用层   ====》应用程序

              传输层   ====》端口号tcp udp

              网络层   ====》IP 地址

              接口层   ====》网卡 驱动  1GB

pcap ,,,

2、TCP/IP协议族:

       www.taobao.com ---> 192.168.0.19

       www.voa.com vpn 

       dns 域名解析

       DHCP

       应用层: HTTP TFTP FTP SNMP DNS ...

       传输层: TCP  UDP   56k猫

       网络层: IP  ICMP(ping) RIP OSPF IGMP ...

       物理层: ARP  RARP  ...   ip--->mac 

       arp,,,,

       192.160.0.112

      

      

========================================================

TCP编程基础知识:

      

1、网络基础 ===》A B C D E 类

010 3333344444

IP地址 == 网络位 + 主机位

IP地址的分类: 点分十进制   ipv4  712934

       A类:       超大规模性网络

                                   8     8     8     8

              1.0.0.0 - 126.255.255.255  126.1.1.1

                                                               126.1.1.2

              255.0.0.0   

              私有:

              10.0.0.0 - 10.255.255.255

              127.0.0.1

       B类:       大中规模型网络

              128.0.0.0 - 191.255.255.255

              128.2.1.2  128.2.7.2

              255.255.0.0

              私有:

              172.16.0.0 - 172.31.255.255

       C类:       中小规模型网络

              192.0.0.0 - 223.255.255.255

              255.255.255.0

              私有:

              192.168.0.0 - 192.168.255.255

              静态路由

              192.168.0.0

              192.168.0.1  网关

              192.168.0.255

       D类:       组播和广播

              224.0.0.0 - 239.255.255.255

              192.168.0.255 ==  255.255.255.255

              235.1.2.3

              192.168.1.0

              192.168.0.1   网关

              192.168.1.255 广播

       E类: 实验

              240.0.0.0 - 255.255.255.255

             

   C 类网络:

     ip地址的前三组是网络地址,第四组是主机地址。

       二进制的最高位必须是: 110xxxxx开头

       十进制表示范围: 192.0.0.0 -223.255.255.255

       默认网络掩码:   255.255.255.0

       网络个数: 2^24 个 约 209 万个

       主机个数: 2^8  个 254 个+2 ===》1 是网关 1是广播

       私有地址: 192.168.x.x 局域网地址。

 

  sudo vim  /etc/network/interfaces

  sudo /etc/init.d/networking restart     

  sudo reboot

       192.168.0.0

       192.168.0.1  route

       192.168.0.255 boardcast

       801.n.g

       单机上网的配置:

       1、有网络接口并插入网线。

       2、有ip地址

       3、配置网络设置

                     ip: ifconfig ethX X.X.X.X/24 up  ifconfig ens33 192.168.0.13/24 up  255.255.255.0

                     网关: route add default gw x.x.x.x

                     DNS:  vi /etc/resolv.conf  ==>nameserver 8.8.8.8

                     测试:ping www.baidu.com 

                    

                     netstat  -anp

2、网络接口

       1、socket  套接字 ==》BSD socket ==》用于网络通信的一组接口函数。socket api  application interface

       2、ip+port 地址+端口===》地址用来识别主机

                                               端口用来识别应用程序

                port分为TCP port / UDP port  范围都是: 1-65535

                约定1000 以内的端口为系统使用。

                     http 80   www.baidu.com

                            3306

                            telnet 21

                            ssh 22

3、网络字节序 ===》大端存储

              12 00   小端   0x12345678

              00 12

              192.168.0.12

              12.0.168.192

             

              00 12

       数字转换函数:

       #include <arpa/inet.h>

       1236234687

       主机转网络:uint32_t htonl(uint32_t hostlong);

       ipv4 192.168.0.1 1~65535

                            uint16_t htons(uint16_t hostshort);

       网络转主机:host to net

                            net to host

                            uint32_t ntohl(uint32_t netlong);

                            uint16_t ntohs(uint16_t netshort);

                           

       字符串转换函数:

       #include <sys/socket.h>

       #include <netinet/in.h>

       #include <arpa/inet.h>

       主机转网络:in_addr_t inet_addr(const char *cp);

       inet_addr("192.168.1.20");

       cli.sin_addr

       网络转主机:char *inet_ntoa(struct in_addr in);

client, server

browser

b/s  http  

p2p   peer  

1、模式  C/S 模式  ==》服务器/客户端模型

server:socket()-->bind()--->listen()-->accept()-->recv()-->close()

client:socket()-->connect()-->send()-->close();

int on = 1;

setsockopt(listfd, SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));

服务器端:

#include <sys/types.h>          /* See NOTES */

#include <sys/socket.h>

int socket(int domain, int type, int protocol);

功能:程序向内核提出创建一个基于内存的套接字描述符

参数:domain  地址族,PF_INET == AF_INET ==>互联网程序

                                     PF_UNIX == AF_UNIX ==>单机程序

         type    套接字类型:

                      SOCK_STREAM  流式套接字 ===》TCP  

                       SOCK_DGRAM   用户数据报套接字===>UDP

                       SOCK_RAW     原始套接字  ===》IP

         protocol 协议 ==》0 表示自动适应应用层协议。

返回值:成功 返回申请的套接字id

              失败  -1;

2、int bind(int sockfd, struct sockaddr *my_addr,

             socklen_t addrlen);

功能:如果该函数在服务器端调用,则表示将参数1相关

         的文件描述符文件与参数2 指定的接口地址关联,

         用于从该接口接受数据。

         如果该函数在客户端调用,则表示要将数据从

         参数1所在的描述符中取出并从参数2所在的接口

         设备上发送出去。

         注意:如果是客户端,则该函数可以省略,由默认

               接口发送数据。

参数:sockfd 之前通过socket函数创建的文件描述符,套接字id

         my_addr 是物理接口的结构体指针。表示该接口的信息。

         struct sockaddr      通用地址结构

         {

                u_short sa_family;  地址族

                char sa_data[14];   地址信息

         };

         转换成网络地址结构如下:

         struct _sockaddr_in    ///网络地址结构

         {

                u_short               sin_family; 地址族

                u_short               sin_port;   ///地址端口

                struct in_addr  sin_addr;   ///地址IP

                char                   sin_zero[8]; 占位

         };

         struct in_addr

         {

                in_addr_t s_addr;

         }

         socklen_t addrlen: 参数2 的长度。

返回值:成功 0

              失败  -1;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值