网络编程
进程间通讯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
来源:oschina
链接:https://my.oschina.net/u/4321806/blog/4410411