网络编程

进程间通讯IPC各种手段,都是在同一台机器上。

不同计算机通过网络链接上进程相互通讯的机制:网络进程间通讯 network IPC

1)Internet的历史

Internet-“冷战”的产物

1957年10月和11月,前苏联先后有两颗“Sputnik”卫星上天

1958年美国总统艾森豪威尔向美国国会提出建立DARPA (Defense Advanced Research Project

Agency),即国防部高级研究计划署,简称ARPA

1968年6月DARPA提出“资源共享计算机网络” (Resource Sharing Computer Networks),

目的在 于让DARPA的所有电脑互连起来,这个网络就叫做ARPAnet,即“阿帕网”,是Interne的最早雏形

早期的ARPAnet使用网络控制协议(Network Control Protocol,NCP),不能互联不同类型的计算 机和不同类型的操作系统,

没有纠错功能

1973年由 Robert Kahn 和Vinton Cerf两人合作为ARPAnet开发了新的互联协议。

1974年12月两人正式发表第一份TCP协议详细说明,但此协议在有数据包丢失时不能有效的纠正

TCP协议分成了两个不同的协议:

用来检测网络传输中差错的传输控制协议TCP

专门负责对不同网络进行互联的互联网协议IP

从此,TCP/IP协议诞生

1983年ARPAnet上停止使用NCP,互联网上的主机全部使用TCP/IP协议。

TCP/IP协议成为Internet中的“世界语”

1. 批处理(20世纪50年代)

单道批(顺序性,单道性,自动性)

多道批(多道性,无序性,复杂性,调度性)

是指实现将用户每个数据装入卡带或者磁带。并有计算机按照一定的顺序读取,是用户索要执行的这些程序和数据能够一并批量得到处理的方式。

2. 分时系统(20世纪60年代)

是指多个终端(包含鼠标、键盘、显示器等输入输出设备组成,最初还包括打印机)与一台计算机连接,允许多个用户同时使用一台计算机的系统

特性:多路性、独立性、交互性和及时性。

3.计算机之间的通信(20世纪70年代)

\4. 计算机网络的产生(20世纪80年代)

\5. 互联网的普及(20世纪90年代)

\6. 以互联网技术为中心的时代(2000年)

\7. 从“单纯建立连接”到“安全建立连接”(2010年)

2)联网协议

联网协议: 定义如何在一个网络上传输信息的一组规则。 网络采用分层思想

联网协议通常会把功能相同相近的协议们组织在一起,放在一层

2.1 OSI七层模型

ISO(国际标准化组织)制定了一个国际标准OSI(开放式通讯系统互联参考模型),对通讯系统进 行了标准化。

应用层:提供为应用软件而设的接口,以设置与另一个应用软件之间的通讯。

表示层:设备固有数据格式和网络标准数据格式的转换。

会话层:负责数据传输中设置和维护计算机网络中两台计算机之间的通讯连接

传输层:管理两个节点之间的数据传输

网络层:地址管理与路由选择

数据链路层:互联设备之间传送和识别数据帧

物理层:以0 1代表高低电平,二进制比特流传输

OSI模型相关的协议已经很少使用,但模型本身非常通用

OSI模型是一个理想化的模型,尚未有完整的实现

2.2 TCP/IP模型

TCP/IP协议是Internet事实上的工业标准。

2.3TCP/IP各层与典型协议

1)网络接口和物理层 :

是TCP/IP的最底层,负责间二进制流转换为数据帧,并进行收发。

MAC地址:48位全球唯一,网络设备的身份标识。 电气电子工程师学会IEEE分配

ARP/RARP:地址解析协议

ARP:IP地址--获取--》MAC。根据IP地址获取物理地址的一个TCP/IP协议

RARP:MAC地址--获取--》IP地址

PPP协议:拨号协议(GPRS/3G/4G)

2)网络层

  IP :Internet Protocol网际协议(IPv4和IPv6)

ICMP:Internet控制管理协议,ping命令属 于ICMP

IGMP:Internet分组管理协议,广播、组播

3)传输层

负责提供应用程序之间的通讯服务,又称为端到端通讯

TCP协议(Transmission Control Protocol,传输控制协议)

提供一个面向连接的,一对一的 可靠数据传输协议。

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

提供一个不可靠,无连接的尽力传输协议。

4)应用层

  网页访问协议:HTTP/HTTPS

Hyper Text  Transfer Protocol Secure

邮件发送接收协议:

POP3收/SMTP发、IMAP可以接收邮件的一部分 文件传输的FTP

Telnet/SSH远程登录

5)嵌入式相关

NTP网络时钟协议 SNMP简单网络管理协议

RTP/RTSP用于传输音视频的协议(安防监控)

TCP/IP通信模型

CRC循环冗余校验码

校验每一帧,验证解码或者编码是否正确

MTU

Maximum Transmit Unit 最大传输单元 物理接口(数据链路层)

提供给上层(IP层)最大一次传输数据的大小 以普遍使用的以太网,

缺省MTU=1500Byte,这是以太网接口对IP层的约束 如果IP层有<=1500字节需要发送,

只需要一个IP包即可 如果IP层 有>1500字节需要发送,需要分片才能发送,

那么如何区分是被拆分的同一个包呢?

这些分片有一个共同点,及IP头一样

MSS

Maximum segment Size 最大报文长度

IP提交给TCP层最大分段大小,不包含TCP头和IP头

MSS是TCP用来限制应用层最大发送字节数MSS = 1500 -20 -20= 1460字节 mtu-ip头-tcp头

3)IP地址

IP地址是Internet中主机的标识, 每个数据包都必须有目的的IP地址和源IP地址,

路由器依靠此信息为数据包选择路由。

3.1、IP地址分类

1)IPv4

采用32位的整数来表示 局域网是为了解决IP地址不够用的问题

LAN:Loacl Area Network WAN:Wide Area Network

2)IPv6

采用了128位整数来表示

3.2IPv4

每个32位的IP地址被分割成2部分,这样的两级层次结构设计使寻址很有效。

地址的前一部分确定了计算机从属的物理网络,网络号:network number

地址的后一部分确定了是哪个一主机,主机号 host number

ABC类称为基本类,因此他们用于主机地址,即位基本的Internet地址,用户可以根据需要申请。

D不标识网络,用于特殊用途用于组播

E类实验 保留

3.3IPv4点分十进制

为了方便人记忆使用点分十进制 将其32位二进制数中每8位为一组,

用十进制表示,利用点分隔各部分。

每一组的范围0~255 范围0.0.0.0~255.255.255.255

点分值十进制非常适合用于IP地址,因为IP以8位一组,把地址分为前缀和后缀。

A类地址中,后三组对应主机后缀

B类地址中,后两组对应主机后缀

C类地址中,最后一组对应主机后缀

特殊IP地址

网络地址:

有效的网络号+全是0的主机号  代表一个网络

192.168.1.0

广播地址:

有效的网络号+全是1的主机号

代表向当前网络所有主机发送消息 向这个192.169.1.255 ip 发送消息,

这些192.169.1.2~192.169.1.254收到

组播地址

224.XXX.XXX.XXX~239.XXX.XXX.XXX ,不能以255结尾

局域网IP192.XXX.XXX.XXX

3.4 子网掩码

由于两级的IP地址存在灵活性差问题,把主机号进一步划分。

子网掩码就是和IP地址长度完全一样的32位整数

左边都是1右边都是0

A类IP默认的子网掩码:255.0.0.0

B类IP默认的子网掩码:255.255.0.0

C类IP默认的子网掩码:255.255.255.0

公司里8个部门:行政、研发部、销售部、市场部,品保部,人事部、财务部、安全部,
​如果要在192.168.1.0网段位每个部门划分子网,子网掩码应该怎么设置?

答:

若要划分8个部门子网,则需占用主机位的高三位。则子网掩码应该设置为:255.255.255.224
每个部门可分配主机数:2^5 - 2 = 30个

子网数2^3=8

行政部子网主机范围:192.168.1.1——192.168.1.30
研发部子网主机范围:192.168.1.33——192.168.1.62
销售部子网主机范围:192.168.1.65——192.168.1.94
市场部子网主机范围:192.168.1.97——192.168.1.126
品保部子网主机范围:192.168.1.129——192.168.1.158
人事部子网主机范围:192.168.1.161——192.168.1.190
财务部子网主机范围:192.168.1.193——192.168.1.222
安全部子网主机范围:192.168.1.225——192.168.1.254

3.5网关

网关是一个网络通向其他网络的IP地址

目前家用路由器一般使用192.168.1.1 192.168.0.1作为LAN口的地址,比较常见的网关地址。

比如网络A和网络B

网络A的IP地址范围192.168.1.1~192.168.1.254,子网掩码255.255.255.0

网络B的IP地址范围192.168.2.1~192.168.2.254,子网掩码255.255.255.0

在没有路由器情况下,两个网络之间是不能通讯,

即使在两个网路连接在同一个交换机上。通过网关出去

3.6 网段于子网掩码

网段:

两个IP地址是否是同一个网段是通过IP地址于子网掩码做与运算,

得到结果是网络号,一致为同一网段,不一致就不是同一网段。

例如

双方都会独立进行与运算,因为通讯双方的,收发双方都必须得到对方认可是统一网段才行。

能不能通讯时建立在是不是同一网段(网络号一致)的基础上。

例子:

192.168.0.1/26与192.168.0.65/26

虽然子网掩码一样(255.255.255.192) 但是不属于同一网段,

0000 0001 & 1100 0000   = 0000 0000 . 即子网1的网络号为:192.168.0.0

0100 0001 & 1100 0000   = 0100 0000.  即子网2的网络号为:192.168.0.64

前者192.168.0.0 后者是192.168.0.64,不能通讯。

在没有路由器情况下,两个网络之间是不能通讯,

即使在两个网路连接在同一个交换机上。通过网关出去

3.7 域名系统

由于使用IP地址来指定计算机不方便人记忆,并且输入时容易出现错误,

用字符标识网络中计算机的

这种命名方法就是域名Domian  Name

域名是internet中联网计算机的名称

域名服务器(Domian Name Server)用来处理IP地址和域名之间的转换。

域名翻译成IP地址的软件称为域名系统(Domian Name System,DNS)

3.7.1域名结构

计算机主机名,机构名.网络名,最高层域名

www.xxx.com.cn cn为最高层域名,

一级域名,cn代表中国 ,

com为网络名,属于二级域名,它通常标识组织或部门

中国的二级域名共40个

edu表示教育部门,gov表示政府部门,com表示商业部门,

net表示网络支持中心,mil军事, 组织等

xxx机构名,属于三级域名

www表示这台主机提供www服务(world wide web万维网)

也叫环球信息网,是一种特殊的信 息结构框架。

4、端口号

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

16位无符号整数 众所周知的端口号

1~1023这些端口号编程时候不能用,因为提前占了

HTTP超文本传输服务占了 TCP的80端口

HTTPS占了 TCP的443端口

FTP  TCP的21

SSH TCP的22

DNS域名解析服务UDP的53端口

可用使用的: 1024-49151这些是我们平时编写服务器使用的端口号范围。

临时的端口号:49152-65535这些是部分客户端进程运行时候动态选择的范围。

TCP和UDP的端口号是相互独立的

网络里面通讯是由IP地址+端口号来决定

IP地址是找到你的电脑,端口号是找到你电脑中的那个进程.

字节序

1)字节序指不同类型CPU的主机中,内存存储多字节整数序列的方法。

在同一台计算机中进程间通讯时,一般不考虑字节序的问题。

小端序(little-endian)低序字节存储在低地址 一般Intel、AMD,ARM采用这种

大端序(big-endian)高序字节存储在低地址

ARM作为路由器时候采用

大小端的特点 大端模式:符号位判断固定在第一个字节,容易判断正负。

小端模式:强制转换不需要调整字节内容

2.、本地字节序和网络字节序

主机字节序(host byte order)HBO

网络字节序(network byte order)NBO

Linux环境下,网络编程基础概念(仅学习笔记)相关推荐

  1. Linux环境下网络编程杂谈

    今天我们说说"Pre-网络编程".内容比较杂,但都是在做网络应用程序开发过程中经常要遇到的问题. 一.大端.小端和网络字节序 小端字节序:little-endian,将低字节存放在 ...

  2. c linux下并行编程指南,Linux环境下C编程指南(第2版)

    摘要: <Linux环境下C编程指南(第2版)>系统地介绍在Linux平台下用C语言进行程序开发的过程,通过列举大量的程序实例,使读者能够很快掌握在Linux平台下进行C程序开发的方法和技 ...

  3. 动态环境下的SLAM:DynaSLAM 论文学习笔记

    动态环境下的SLAM:DynaSLAM 论文学习笔记 这篇文章 论文摘要 系统流程 相关环节的实现方法 神经网络检测图中动态物体(Mask R-CNN) Low-Cost Tracking 使用多视图 ...

  4. linux环境下python编程指南,在Linux系统中搭建Python编程环境

    Linux系统是为编程而设计的,因此在大多数Linux计算机中都默认安装了Python. 1. 检查Python版本 在系统中运行应用程序Terminal(如果是Ubuntu,可按Ctrl+Alt+T ...

  5. linux c控制进程并发量,浅谈Linux环境下并发编程中C语言fork()函数的使用

    由fork创建的新进程被称为子进程(child process).fork函数被调用一次,但返回两次.子进程的返回值是0,而父进程的返回值则是新进程的进程ID.将子进程ID返回给父进程的理由是:因为一 ...

  6. 一文搞定Linux环境下线程编程,这些东西老师也不会教你。(史上最详细的线程攻略)

    一.线程的概念 1.1 什么是线程 线程是一个实体,是CPU调度和分派的基本单元,有时我们也可以称它为轻量级的进程.每个线程都包含有表示执行环境所必须的信息,其中包括标识线程 的线程ID.一组寄存器值 ...

  7. Linux环境下Shell脚本基础篇-鸡兔同笼问题

    概述 鸡兔同笼,是古代著名典型趣题之一,记载于<孙子算经>之中,题目为"有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚.问笼中各有多少只鸡和兔?" ...

  8. Linux环境下网络性能测试

    网络性能测试的几项重要指标 1.可用性 测试网络性能的第一步是确定网络是否正常工作,最简单的方法就是使用ping命令,通过向远端的机器发送ICMP请求,并等待接收ICMP回应,来判断远端的机器是否连通 ...

  9. 网络编程基础概念-网络协议

    网络协议 (1)TCP/IP协议 TCP/IP协议是Internet信息交换.规则.规范的集合,是Internet的标准通信协议,主要解决异种计算机网络的通信问题,使网络在互连时把技术细节隐藏起来,为 ...

最新文章

  1. PHP 安装 扩展时 抛出 /usr/local/Cellar/php@7.1/7.1.25/pecl 异常解决
  2. C++二维数组new小结(zz)
  3. CSS flex布局
  4. python字符数组输出_python字符串格式化输出
  5. 迪士尼小哥转行测试,月薪翻倍:成年人的童话世界, 需要自己创造
  6. 学生阅读作业三——对习而学教学方式的思考
  7. python绘图代码大全_python绘图代码总结
  8. 在阿里 AI Lab 做 NLP 高级算法专家是一种什么样的体验?
  9. 按字节编址、按字编址、按字节寻址、按字寻址。
  10. 浅谈CVPR2022的几个研究热点
  11. 题目1:MySQL基本练习【单、多表】
  12. Linux常用命令英文全称与中文解释 (pwd、su、df、du等)
  13. 支付宝与微信对账文件解析
  14. PM2.5传感器通过树莓派推送到ThingsPanel
  15. oracle 12 去掉 cdb,Oracle 12c no-CDB转换为CDB
  16. pandas 之 pivot_table 与 pivot 的区别
  17. Go语言如何自定义 linter(静态检查工具)
  18. Office 365最新2022新版本
  19. 想学温州蛮话?我教你..
  20. CCF 201709-2 公共钥匙盒 (Java 100分)

热门文章

  1. 利用simsimi小黄鸡接口,做一个微信公共账号上的机器人
  2. 淡黄色阴离子交换树脂-CsPbBr3量子点/FA-PEG-DSPE-CdTe的制备
  3. 在一个大型流量系统中如何进行亿级UV(用户访问记录)统计
  4. java搭建分布式项目
  5. 函数MessageBox
  6. Qt发布程序(windows平台)
  7. livy使用样例_在 Amazon EMR 中使用 Apache Knox 实现边界安全
  8. 在MATLAB中使用数学符号,在matlab中怎么输入特殊符号 function在MATLAB中怎么用
  9. vmware 多网卡配置-笔记本配置
  10. win10恢复注册表初始状态该如何操作?