网络编程:专业术语(IP、端口、字节序、套接字(socket))

一、IP

什么是ip:在因特网中用于区分主机的唯一标识 

​表现形式:点分形式的字符串 ” a.b.c.d“  ->192.168.16.58    0-255

ip地址分类:

IP协议是为计算机网络相互连接进行通信而设计的协议

        那就是给因特网上的每台计算机和其它设备都规定了一个唯一的地址,叫做“IP地址”。由于有这种唯一的地址,才保证了    用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。

        IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。
        公有地址
        公有地址(Public address)由Inter NIC(Internet Network Information Center因特网信息中心)负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。
        私有地址
        私有地址(Private address)属于非注册地址,专门为组织机构内部使用。
        以下列出留用的内部私有地址
        A类 10.0.0.0--10.255.255.255  网络ip   主机ip
        B类 172.16.0.0--172.31.255.255
        C类 192.168.0.0--192.168.255.255

二、端口

用于区分 主机接收到的数据该交由哪一个进程来处理

逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,

比如用于浏览网页服务的80端口,用于
FTP服务的21端口等等。
        1.端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来识别的。
        2.客户端只需保证该端口号在本机上是惟一的就可以了。客户端口号因存在时间很短暂又称临时端口号;
        3.大多数TCP/IP实现给临时端口号分配1024—49151之间的端口号。大于5000的端口号是为其他服务器预留的。
        我们应该在自定义端口时,避免使用well-known的端口。如:80、21等等

三、字节序

TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节。例如上一节的UDP段格式,地址0~1是16位的源端口号,如果这个端    口号是1000(0x3e8),则地址0是0x03,地址1是0xe8,也就是先发0x03,再发0xe8,这16位在发送主机的缓冲区中也应该是低地址存        0x03,高地址存0xe8。但是,如果发送主机是小端字节序的,这16位被解释成0xe803,而不是1000。因此,发送主机把1000填到发送缓冲        区之前需要做字节序的转换。同样地,接收主机如果是小端字节序的,接到16位的源端口号也要做字节序的转换。如果主机是大端字节序的,        发送和接收都不需要做转换。同理,32位的IP地址也要考虑网络字节序和主机字节序的问题。
        
        字节序就是为了 解决由于 cpu差异化导致的整型数据存放的兼容问题?
        
        为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换。
        #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);
        h表示host,n表示network,l表示32位长整数,s表示16位短整数。
        如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回,如果主机是大端字节序,这些函数不做转换,将参数原封不动地返回。

四、套接字(socket)

套接字(socket)  进程间通信的方式之一:用于不同主机进程通信,
                用于同一个主机的进程通信:
                    传统三种:有名、无名管道、信号
                    IPC 三种:共享内存、消息队列、信号灯
                    
直译:插座:
独立于具体协议的网络编程接口
在OSI模型中,主要位于会话层和传输层之间
BSD Socket(伯克利套接字)是通过标准的UNIX文件描述符和其它程序通讯的一个方法,目前已经被广泛移植到各个平台。

文件描述符:
    非负整数(0-1023):0   1   2  
    用于内核打开正在访问的文件 ------
    
套接字类型:
    流式套接字(SOCK_STREAM)
        提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

এ᭄星辰

混口饭吃。。。。。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值