IPV4 -- IP地址分类:主机号是区分主机的,网络号是区分网段的

子网掩码是对主机号进行划分子网用的

举例说明:

对 192.168.1.0网段划分4个 其子网掩码 : 拿出主机号的两个位进行划分子网才可以有4种情况

其子网掩码 1111111.11111111.11111111.11000000 ---- 255.255.255.192

子网掩码与IP地址进行按位与运算后悔知道其是哪个子网下的,根据子网掩码可以知道有几个子网

按照子网掩码 255.255.255.192  和 网段 192.168.1.0 划分四个子网如下:

第一个子网 : 192.168.1.1 ~ 192.168.1.62

第二个子网 : 192.168.1.65 ~ 192.168.1.126

第三个子网 : 192.168.1.129 ~ 192.168.1.190

第四个子网 : 192.168.1.193 ~ 192.168.1.254

 协议模型:

端口号:

(1)网络通信 ip 是区分那台电脑的,端口号是区分电脑上那个程序的,如QQ,微信是不同的端口

(2)TCP和UDP的端口是分开,如TCP服务器可以使用8080端口,UDP服务器也可以使用8080端口

(3)端口号分配众所周知端口:1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用) 已登记端口:1024~49151  动态或私有端口:49152~65535

对于socket:

socket 是网络通信过程中的文件描述符,网络通信过程中的发送接收数据bind,连接都是针对这个socket操作;它就是一个网络文件描述符和IO中的fd一样

socket 类型

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

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

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

 IP地址转换:

(1) 将strptr所指的字符串转换成32位的网络字节序二进制值

  int  inet_aton(const  char  *strptr,  struct  in_addr  *inp);

(2) 将网络地址转换成 “.” 点隔的字符串格式 

  char *inet_ntoa(struct in_addr in);

(3)将cp指向的字符串格式的ip转为整数网络字节序的格式   

  in_addr_t inet_addr(const char *cp);

  

(4)转换后的为主机字节序整数  

  in_addr_t inet_network(const char *cp);

(5)将网络字节序的端口号转为主机字节序格式 uint16_t ntohs(uint16_t netshort);

 大小端问题:针对多字节存储

网络字节序是大端格式,但是对于不同的主机,其大小端不确定只能通过函数转换,把不同主机上的字节序全部转换为网络字节序格式。

大端格式:低地址放数据的高位字节。

小端格式:低地址放数据的低位字节。

 

 字节序转换函数:

(1)主机字节序到网络字节序

    u_long htonl (u_long hostlong);

    u_short htons (u_short short);

(2)网络字节序到主机字节序

    u_long ntohl (u_long hostlong);

    u_short ntohs (u_short short);

Linux网络编程 了解的更多相关文章

  1. 【深入浅出Linux网络编程】 "开篇 -- 知其然,知其所以然"

    [深入浅出Linux网络编程]是一个连载博客,内容源于本人的工作经验,旨在给读者提供靠谱高效的学习途径,不必在零散的互联网资源中浪费精力,快速的掌握Linux网络编程. 连载包含4篇,会陆续编写发出, ...

  2. 【linux草鞋应用编程系列】_5_ Linux网络编程

    一.网络通信简介   第一部分内容,暂时没法描述,内容实在太多,待后续专门的系列文章.   二.linux网络通信     在linux中继承了Unix下“一切皆文件”的思想, 在linux中要实现网 ...

  3. Linux 网络编程(IO模型)

    针对linux 操作系统的5类IO模型,阻塞式.非阻塞式.多路复用.信号驱动和异步IO进行整理,参考<linux网络编程>及相关网络资料. 阻塞模式 在socket编程(如下图)中调用如下 ...

  4. linux网络编程 no route to host 解决方案

    linux网络编程 no route to host 解决方案 [整合资料] (2013-05-13 21:38:12) 转载▼ 标签: net iptables it 分类: Linux 参考资料h ...

  5. linux网络编程-(socket套接字编程UDP传输)

    今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...

  6. Linux网络编程&内核学习

    c语言: 基础篇 1.<写给大家看的C语言书(第2版)> 原书名: Absolute Beginner's Guide to C (2nd Edition) 原出版社: Sams 作者: ...

  7. linux网络编程_1

    本文属于转载,稍有改动,以利于学习. (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个 ...

  8. Linux网络编程入门 (转载)

    (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...

  9. Linux网络编程必看书籍推荐

    首先要说讲述计算机网络和TCP/IP的书很多. 先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的<计算机网络>第五版,这本书难易适中. &l ...

  10. [转] - Linux网络编程 -- 网络知识介绍

    (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...

随机推荐

  1. mac 密码重置

    首先请开机或重新启动系统,在电脑刚启动时,请按下键盘上的 command+S 组合键不动, 接下来会在屏幕上看到一串串的命令字符显示,当进入安全模式以后,会看到 一个 root 开始的命令行输入端口. ...

  2. CF322F

    CF322F 拉格朗日插值 #include<iostream> #include<cstdio> #include<algorithm> #include< ...

  3. Spring Boot实现通用的接口参数校验

    Spring Boot实现通用的接口参数校验 Harries Blog™ 2018-05-10 2418 阅读 http ACE Spring App API https AOP apache IDE ...

  4. collections库的namedtuple+pytest的使用

    from collections import namedtupleTask=namedtuple('Task',['summary','owner','done','id'])Task.__new_ ...

  5. 深信服杯ctf部分wp

    CRYPTO1,NO SOS题目给了一段由.和-构成的密码由于题目提示不是摩斯码,将.和-化为0和1,长度为65位无法与8或7整除,无法转换为ascii,但可以被5整除,猜测为培根密码,将0化为a,1 ...

  6. 消费kafka的消息,并将其SparkStreaming结果保存到mysql

    将数据保存到mysql,需要用到jdbc.为了提高保存速度,我写了一个连接池 1.保存到mysql的代码 package test05 import org.apache.log4j.{Level, ...

  7. c# DataTable第二行改为各列标题字段

    DataTable dt = ExcelHelper.ToDataTable(fileinfo.FilePath); //将datatable的第二行变为列标题字段 DataTable dt2 = n ...

  8. JS对象 window对象 屏幕可用高和宽度 1. screen.availWidth 属性返回访问者屏幕的宽度,以像素计,减去界面特性,比如任务栏。 2. screen.availHeight 属

    屏幕可用高和宽度 1. screen.availWidth 属性返回访问者屏幕的宽度,以像素计,减去界面特性,比如任务栏. 2. screen.availHeight 属性返回访问者屏幕的高度,以像素 ...

  9. LayUI最近遇到的问题以及处理

    layui是我最近才接触的..也是新项目中用到的后台前端框架..与easyui有些类似..在这段时间的使用中,经常会碰到大大小小的问题.. 1.选显卡切换又是加载数据表格.分页条不显示 2.layui ...

  10. C之输入输出函数(1) -- fgets()

    https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_71/rtref/fgets.htm #include <stdio.h> ...