zoukankan      html  css  js  c++  java
  • linux 网络编程 1---(基本概念)

    1.TCP和UDP协议

        共同点:同为传输层协议

        不同点: TCP:有连接,可靠

            UPD 无连接,不保证可靠

        TCP(即传输控制协议):

           是一种面向连接的传输层协议,它是能提供高可靠性通信(即,数据无误,数据无丢失,数据无失序、数据无重复到达的通信)

           适用情况:

              适合于对传输质量要求较高,以及传输大量数据的通信。

              在需要可靠数据传输的场合,通常使用TCP协议

              QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议

        UDP(User Datagram Protocol)用户数据报协议

            是不可靠的无连接协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

            使用情况:

            发送小尺寸数据(如对DNS服务器进行IP地址查询时)

            在接收到数据,给出应答较困难的网络中使用UDP。(如:无线网络)      

            适合于广播、组播式通信中。

            MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议

            流媒体、VOD/VoIP/IPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输。

    2.socket

        是一个编程接口

        是一种特殊的文件描述符(everything in Unix is a file) 

        并不仅限于TCP/IP协议

        面向连接(Transmission Control Protocol  Protocol    -TCP/IP)

        无连接(User Datagram Protocol  -UDP 和 Inter-network Packet Exchange  -IPX)

        

        Socket类型:

          流式套接字(SOCK_STREAM)

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

          数据报套接字(SOCK_DGRAM)

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

          原始套接字(SOCK_RAM)

            可以对较低层次协议如IP、ICMP直接访问。(如  Ping )

    3.IP地址

       IP地址是Internet 中主机的标识

       IP地址为32位(IPv4)或者128位(IPv6)

       ipv4表示形式:点分十进制,例如:192.168.1.123

       IP地址分类(根据ipv4前八位来区分):

        A类   0000 0000  - 0111 1111   0.x.x.x   -  127.x.x.x

        B类   1000 0000  - 1011 1111   128.x.x.x - 191.x.x.x

        C类   1100 0000 -  1101  1111   192.x.x.x  -  223.x.x.x

        D类    1110 0000  - 1110  1111   224.x.x.x  -  239.x.x.x   组播地址

        E类     1111 0000  -  1111  1111  240.x.x.x  -  255.x.x.x 保留测试

        192.168.x.x  属于局域网Ip地址,可以砸任意一个ip地址下使用路由器分配地址

          以192.168.1.x为例:

            192.168.1.255  广播地址

            192.168.1.0  表示网络号

            192.168.1.1  表示网关

          127.x.x.x   属于本机地址

        子网掩码:可以用于得到当前最大的主机连接数

          A类:255.0.0.0  0~24

          B类:255.255.0.0  2~16

          C类:255.255.255.0  2~8

        #include<arpa/inet.h>

         将点分十进制ip地址转化为网络字节序的整形数据

         in_addr_t    inet_addr(const char *cp);

         将网络字节序的整形数据转化为点分十进制ip地址

          char * inet_ntoa(struct in_addr in);

          例子:

            inet_addr("192.168.1.123");

     4.端口号

       为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区别

       TCP端口号与UDP端口号独立

       端口号一般由IANA(Internet Assigned Numbers Authority) 管理

       众所周知端口:1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用)

       已登记端口:1024~49151
       动态或私有端口:49152~65535

       使用 vi /etc/services 可以查看已经使用的端口号

       一般使用 5555、6666、7777、8888、9999、10001、10000

    5.字节序

      不同类型CPU的主机中,内存存储多字节整数序列有两种方法,称为主机字节序(HBO):
      小端序(little-endian)
        低序字节存储在低地址,将低字节存储在起始地址,称为“Little-Endian”字节序,Intel、AMD等采用的是这种方式;

      大端序(big-endian)
        高序字节存储在低地址,将高字节存储在起始地址,称为“Big-Endian”字节序,由ARM、Motorola等所采用

        如何测试主机字节序:
          方法1:使用指针
          方法2:使用file命令, file a.out,其中LSB的L为小端存储
          方法3:使用共用体

      网络字节序:大端存储

        主机字节序和网络字节序转换接口:

          #include <arpa/inet.h>

          将主机字节序转化为网络字节序
          uint32_t htonl(uint32_t hostlong);
          uint16_t htons(uint16_t hostshort);

          将网络字节序转化为主机字节序
          uint32_t ntohl(uint32_t netlong);
          uint16_t ntohs(uint16_t netshort);

          例子:
          htons(9999);

              

  • 相关阅读:
    嵌入式开发杂谈
    C#连接数据库
    C软件机密解密之动态跟踪
    navicat连接mysql8报错
    tomcat 服务版本内存设置
    python2/python3 升级pi版本
    各种源文件和目录
    Day 2 : 变量、JAVA基本类型、运算符和表达式1
    猜字母游戏
    Day 1 : 行业概述、JAVA开发环境
  • 原文地址:https://www.cnblogs.com/jiaan/p/9416021.html
Copyright © 2011-2022 走看看