网络编程基础知识笔记(1)

来源:互联网 发布:理正软件 编辑:程序博客网 时间:2024/06/06 00:33
网络编程:
1:网络理论,TCP/IP协议,套接字编程模型
2:网络服务器模型、网络连接的建立和断开,多路复用
3:广播,带外数据,组播


//============网络编程===============
网络协议:网络中各个主机或终端接入互联网锁必须遵循的一种规则
         一些代码()
网络协议模型
    OSI(Open System Interconnection))模型:OSI是一个理想的模型,没有实现
    七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
    
    TCP/IP模型:
        网络接口与物理层:通过物理接口发送或接受数据
            MAC地址:物理上唯一的标示一台主机,48位
                 MAC地址是网卡决定的,是固定的。    前三个字节是由IEEE的注册管理机构RA负责给不同厂家分配后三个字节由各厂家自行分配
                 IP和MAC地址这种映射关系由ARP(Address Resolution Protocol,地址解析协议)协议完成。
        网络层:寻找对方的主机在哪里(通过路由器),路由器处于网络层
            IP地址:逻辑上标示一台主机
                ipv4:32位,主机号 + 网络号
                ipv6:128位
                四类:A类 1.0.0.1-127.255.255.254
                          主机号(1字节) + 网络号(3字节)
                      B类 172.16.0.0--172.31.255.255
                          主机号(2字节) + 网络号(2字节)
                      C类 192.0.1.1-223.255.255.254
                         主机号(3字节) + 网络号(1字节)
                      D类 224.0.0.1--239.255.255.255
        传输层:保证要传输的数据能够正确无误、无丢失、无重传的发送给对方
                端口号:
        应用层:产生数据,或显示数据
                进程的id,pid
        
 //========TCP/IP======================
 TCP/IP协议是一个协议族:有多个协议组成,因为TCP,IP是这个协议族
 最重要的两个协议
 传输层:
    TCP协议(Transmission Control Protocol):传输控制协议
    UDP协议(User Datagram Protocol):用户数据报协议
 网络层协议:
    IP协议(Internet Protocol):网际协议
    ICMP协议(Internet Control Message Protocol):网际控制报文协议,
     ping命令就是发送的该协议包。
    ARP协议:地址解析协议,将IP地址转换为MAC地址
    RARP协议:反地址解析协议,将MAC地址转换为IP地址
    IGMP协议:
  应用层协议
    FTP协议:文件传输协议 (自己模拟FTP)
    HTTP:超文本传输协议    (解析HTTP协议)
    SMTP:简单邮件传输协议
    DNS:域名解析协议
    SNMP:简单网络管理协议
    Telnet:远程登录协议

    
    RTP协议(Real-time Transport Protocol):RTP协议详细说明了在
    互联网上传递音频和视频的标准数据包格式,是介于应用层和传输层之
    间的一种协议
    
 TCP头:
    序号:发送端将数据分段的编号
    确认号:接收端告诉发送端下一个应该发送的字节编号
    窗口(滑动窗口,滑窗管理):接收方发给发送方,告诉发送方,下一次应该发送
        的字节的长度

TCP和UDP的区别
    TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高
    可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达
    的通信)
    适用情况:
    适合于对传输质量要求较高,以及传输大量数据的通信。
    在需要可靠数据传输的场合,通常使用TCP协议
    MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议
    UDP,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接
    ,所以可以进行高效率的数据传输,实时性较好,主要用在直播、视频会议
    
 
socket:通信接口、文件描述符、函数API
流式套接字(SOCK_STREAM)----->TCP
提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。

数据报套接字(SOCK_DGRAM)----->UDP
提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。

原始套接字(SOCK_RAW)------->协议的开发者
可以对较低层次协议如IP、ICMP直接访问。

//=============IP地址===============
IPV4(32位) 和 IPV6(128位)
IP地址 = 网络地址  + 主机地址
A类地址
第1字节为网络地址,其他3个字节为主机地址。第1字节的最高位固定为0
1.0.0.1 – 126.255.255.255
255.0.0.0

B类地址
第1字节和第2字节是网络地址,其他2个字节是主机地址。第1字节的前两位固定为10
128.0.0.1 – 191.255.255.255
255.255.0.0

C类地址  (我们是该类IP)
前3个字节是网络地址,最后1个字节是主机地址。第1字节的前3位固定为110
192.0.0.1 – 223.255.255.255
255.255.255.0

D类地址(组播地址)
不分网络地址和主机地址,第1字节的前4位固定为1110
224.0.0.1 – 239.255.255.255

MAC地址 48位 ,在物理上表示一台唯一的主机



TCP/IP协议分层:
应用层(QQ、游戏终端,飞秋)--->Telnet(远程登录),HTTP(超文本传输协议),DNS(域名解析)、FTP(文件传输协议),SMTP(简单邮件传输协议)
    产生数据或显示数据
传输层   --->TCP(传输控制协议) UDP(用户数据报协议)
    保证数据能够准确无误的到达对方
网络层  --->IP(互联网协议) ARP(地址解析协议) RARP(反地址解析协议) ICMP(ping命令 网际控制报文协议) IGMP(互联组管理协议)
    寻找对方主机的位置(依靠路由器,所以路由器一定处于网络层)
网络接口和物理层 --->网卡和网卡驱动
    接受和发送网络包(以太网帧)


TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)
UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

流式套接字(SOCK_STREAM)
    提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。

数据报套接字(SOCK_DGRAM)
    提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。

原始套接字(SOCK_RAW)
    可以对较低层次协议如IP、ICMP直接访问。


端口号:16位(1-65535)
    为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区别
    1-1024:  系统使用
    1025-5000:系统保留
    5001-65535:用户使用
    
TCP/UDP常用端口号
******************************************************
    
20 /tcp  FTP数据
21 /tcp  FTP控制 文件传输协议
22 /tcp  SSH 安全登录、文件传送(SCP)和端口重定向
23 /tcp  Telnet 不安全的文本传送
25 /tcp  SMTP 简单邮件传输协议(Simple Mail Transfer Protocol)(E-mail)
53 /tcp  域名服务器
69 /udp  TFTP 日常文件传输协议(Trivial File Transfer Protocol)
70 /tcp  Gopher      
79 /tcp  Finger
80 /tcp  WWW (HTTP超文本传送协议)
88 /tcp  Kerberos Authenticating agent
110 /tcp  POP3 邮局协议(Post Office Protocol)(E-mail)
113 /tcp  ident old identification server system
119 /tcp  NNTP网络新传输协议(Network New Transfer Protocol) used for usenet newsgroups
137 /udp  NetBIOS名称服务(NetBIOS Name service,Nbname)      
138 /udp  NetBIOS数据报服务(NetBIOS Datagram service,Nbdatagram)
139 /tcp  NetBIOS会话服务(NetBIOS Sessions service,Nbsession)
161 /udp  SNMP 简单网络管理协议(Simple Network Management Protocol)
220 /tcp  IMAP3 Internet消息访问协议(Internet Message Access Protocol)
443 /tcp  HTTPS 经过加密的HTTP(used for securely transferring web pages)
636 /tcp  LDAP 轻量目录存取协议(Lightweight Directory Access Protocol)  
1080 /tcp  SOCKS      

    
字节序
    网络字节序:大端序
    主机字节序: ARM(小) IBM(大)
    大端序:高字节放在低地址,低字节放在高地址
    小端序:高字节放在高地址,低字节放在低地址
    
    主机字节序到网络字节序
    u_long htonl (u_long hostlong);
    u_short htons (u_short short);
    网络字节序到主机字节序
    u_long ntohl (u_long hostlong);
    u_short ntohs (u_short short);


点分十进制:192.168.7.10
网络二进制:100010001100
    应用
    

    /*负责点分十进制和网络二进制之间的转换*/
    将strptr所指的字符串转换成32位的网络字节序二进制值
    #include <arpa/inet.h>
    int inet_aton(const char *strptr, struct in_addr *addrptr);
    
    struct in_addr addrptr;//用来保存32位的网络字节序二进制值
    inet_aton(“192.168.7.10”,  &addrptr);

    功能同上,返回转换后的地址。
    int_addr_t inet_addr(const char *strptr);
    
    int_addr_t  addr;//用来保存32位的网络字节序二进制值
    addr  =  inet_addr("192.168.7.10");
    
    
    //将32位网络字节序二进制地址转换成点分十进制的字符串。
    char *inet_ntoa(struct in_addr in);

    char buf[50];
    stuct in_addr inaddr  =  func(xxxxx);
    printf("ip: %s\n",inet_ntoa(inaddr));
    strcpy(buf, inet_ntoa(inaddr));
    

    将IPV4/IPV6的地址转换成binary格式
    int inet_pton(int af, const char *src, void *dst);
    
    struct in_addr addrptr;
    inet_pton(AF_INET, "192.168.7.10",  &addrptr);//用于IPV4
    inet_pton(AF_INET6, "192.168.7.10",  &addrptr);//用于IPV6
原创粉丝点击