网络及TCP/IP简明快速基础
网络基础知识,除了网络管理人员必须掌握之外,对于系统运维人员,数据库管理员以及程序员等多了解和掌握是有百利而无一害。本文简明扼要介绍了网络常见的名词及术语以及TCP/IP模型,并列出了几个网络相关的常见问题,旨在快速了解或者用于归纳型回顾这些知识。供大家参考。
一、常规名词术语
MAC地址: 媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC地址。因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址。
CSMA/CD: 基带冲突检测的载波监听多路访问技术(载波监听多点接入/冲突检测),是一种争用型的介质访问控制协议。在传统的共享以太网中,所有的节点共享传输介质。如何保证传输介质有序、高效地为许多节点提供传输服务,就是以太网的介质访问控制协议要解决的问题。CSMA/CD应用在 OSI 的第二层数据链路层。
Token Ring令牌环: 令牌环网(Token Ring)是一种 LAN 协议,定义在 IEEE 802.5 中,其中所有的工作站都连接到一个环上,每个工作站只能同直接相邻的工作站传输数据。通过围绕环的令牌信息授予工作站传输权限。
冲突域: 所有在底层设备上能发生冲突的集合,可以使用以下方式解决冲突域 网桥:是用来分割冲突域的设备 多接口:交换机
广播域: 指网络中所有能接收到同样广播消息的设备的集合
单播 网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮件、浏览网页时,必须与邮件服务器、Web服务器建立连接,此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(Point to Point)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用。补充@20170907
多播 “多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视频会议、网上视频点播特别适合采用多播方式。因为如果采用单播方式,逐个节点传输,有多少个目标节点,就会有多少次传送过程,这种方式显然效率极低,是不可取的;如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的。采用多播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。补充@20170907
物理网络介质: 物理层,物理层协议: 数据链路层,数据帧,链路层协议 网络层:数据包,ip协议 传输层:ip内部多一个端口,传输层协议 TCP.UDP TCP:0-65535 UDP:0-65535 应用层:标记资源
端口:用于标记进程的 0-65535:
Socket(套接字):ip:port 源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。 网络通信必需的五种信息: 连接使用的协议 本地主机的IP地址 本地进程的协议端口 远地主机的IP地址 远地进程的协议端口 套接字分类 流套接字(SOCK_STREAM),提供面向连接、可靠的数据传输服务,即TCP(The Transmission Control Protocol)协议 数据报套接字(SOCK_DGRAM),该服务并不能保证数据传输的可靠性,数据报套接字使用UDP(User Datagram Protocol)协议进行数据的传输。 原始套接字(SOCK_RAW),允许对较低层次的协议直接访问,比如IP、 ICMP协议
MTU:Maximum Translater Unit 最大传输单元,指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位,通常为1500)。 最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)。 对于大于MTU单位的数据库传输,则需要进行分片(Fragment:IP分片)。 MTU越大,则一个协议数据单元的承载的有效数据就越长,通信效率也越高。MTU越大,传送相同的用户数据所需的数据包个数也越低。 反过来,MTU越大也容易导致数据包的延迟也越大,数据包中 bit位发生错误的概率也越大。
有限状态机(FSM:Finite State Machine)
协议栈:在内核实现 TCP/IP协议簇
二、TCP/IP模型及IP地址、路由
物理层: 利用物理传输介质为数据链路层提供物理连接,以便透明的传送比特流。常用设备有(各种物理设备)网卡、集线器、中继器、调制解调器、网线、双绞线、同轴电缆 链路层:从设备到设备主机通信,MAC地址,MAC<–>IP(RARP/ARP),解决两个相邻结点之间的通信问题,传送的协议数据单元称为数据帧 网络层: 从源主机到目标主机之间通信,IP地址,IP报文,解决如何使数据包通过各结点传送的问题 传输层:从源主机进程到目标主机特定进程之间通信,tcp/udp,即提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题 应用层: 向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等
ISO/OSI模型:七层 1-4层:通信子网 5-7层:资源子网(对应到TCP/IP模型的应用层 会话层 表示层 应用层
TCP:有连接协议,建立逻辑链接 SYN,ACK,FIN,RST,PSH,URG
三次握手: SYN=1 ACK=0,FIN=0 SYN=1 ACK=1 FIN=0 SYN=0 ACK=1 FIN=0 四次断开:
主机名:FQDN(Full Qulified Domain Name) 唯一表示因特网上一台主机的名称,通常形式为computer_name.domain.com
IP地址: 用于为互联网上的每一个网络和每一台主机分配的一个逻辑地址,用于屏蔽物理地址差异(MAC地址为十六进制,难以记忆) IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。 例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。 IP地址由网络ID和主机ID组成,即32位二进制中包含了网络ID和主机ID。同一物理网络网络ID相同,主机ID不同。 由于使用的场景不同,因此,按使用情形分为大中小型网络,大型网络即子网少,主机多,小型网络则子网多,主机数少
类别 最大网络数 IP地址范围 最大主机数 私有IP地址范围 备注
---- ------------ ------------------------ ----------- ---------------------- --------------------------
A 126(2^7-2) 0.0.0.0-127.255.255.255 16777214 10.0.0.0-10.255.255.255 使用8位表示网络ID,大型网络
B 16384(2^14) 128.0.0.0-191.255.255.255 65534 172.16.0.0-172.31.255.255 使用16位表示网络ID,中型网络
C 2097152(2^21) 192.0.0.0-223.255.255.255 254 192.168.0.0-192.168.255.255 使用24位表示网络ID,小型网络
D 224.0.0.0-239.255.255.255 多播(组播)地址(multicast address)
D类IP地址在历史上被叫做多播地址(multicast address),即组播地址。
在以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。
多播地址的最高位必须是“1110”,范围从224.0.0.0到239.255.255.255。
特殊的网址
每一个字节都为0的地址(“0.0.0.0”)对应于当前主机;
IP地址中的每一个字节都为1的IP地址(“255.255.255.255”)是当前子网的广播地址;
IP地址中凡是以“11110”开头的E类IP地址都保留用于将来和实验使用。
IP地址中不能以十进制“127”作为开头,该类地址中数字127.0.0.1到127.255.255.255用于回路测试,
如:127.0.0.1可以代表本机IP地址,用http://127.0.0.1就可以测试本机中配置的Web服务器。
网络ID的第一个8位组也不能全置为“0”,全“0”表示本地网络。
全0:网络地址
全1:广播地址
子网掩码(subnet mask) 又叫网络掩码、地址掩码、子网络遮罩,主要用于指明一个IP地址的哪些位标识的是主机所在的子网ID,以及哪些位标识的是主机ID。 子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。 缺省的子网掩码 A类:255.0.0.0 B类:255.255.0.0 C类:255.255.255.0
子网划分 比如B类私有网络172.16.0.0/255.255.0.0现在需要将其划分子网,设定子网掩码为255.255.255.0 由于全1的掩码在同IP地址做与运算时得到网络ID,即原来的网络ID由172.16变成了172.16.255 则该地址的范围如下 172.16.0.0/255.255.255.0 – 172.16.255.0/255.255.255.0
子网合并 假定C类私有网络192.168.0.0/255.255.255.0 – 192.168.255.0/255.255.255.0进行如下合并 192.168.0.0/255.255.0.0 则变成大网络
路由表: 对于跨网络主机直接的通信与访问,借助于路由表来实现。 路由表保存了到达特定网络终端的地址,其表项通常包括以下内容 目标地址或目标网络(destination mask pre costdestination) 子网掩码(netmask mask) ### Author : Leshami 优先级(pre) ### Blog : http://blog.csdn.net/leshami 路由开销(cost) ### QQ/Weixin : 645746311 输出接口(interface) 下一跳(nexthop)
路由表生成方式 静态设置 动态生成(通告):
cost:开销,成本 经过的跳数越少就越小 时长 路由协议:RIP,OSPF,EIGRP 可路由协议:IP协议 MAC协议
三、常见问答
如何判断目标主机与本机是否位于同一网段? 利用子网掩码的功能来实现。基于二进制的特性, 1逻辑与任何数的结果为任何数,0逻辑与任何数结果为0 首先本机利用子网掩码来与本机IP地址做逻辑与运算,即可以得到本机的网络ID以及主机ID 其次将目标主机与本机的子网掩码做同样的运算,如果得到的网络ID相同,即位于同一个网络段。否则位于不同的网络段 子网掩码连续全1的是网络地址,后面的是主机地址。 对于不同的网络段IP地址通信,应通过路由器的路由表(或缺省网关)记录的网络段转发到不同的子网中去
根据IP地址及子网掩码如何计算得到子网ID,广播地址,地址范围,可容纳主机数目?
假如给定IP地址 IP: 58.61.29.11 Netmask:255.255.255.248
网络类型:58小于127,因此当前属于A类网络IP,缺省的掩码应当为255.0.0.0,当前使用非缺省掩码即255.255.255.248
计算子网ID
IP地址: 00111010.00111101.00011101.00001 011 //使用IP地址与子网掩码做与运算(换算成二进制)
子网掩码: 11111111.11111111.11111111.11111 000 //留空列前为全1,即为子网地址,子网之后为主机地址
与运算结果:00111010.00111101.00011101.00001 000
网络ID: 58 61 29 8
子网掩码全是1的为网络地址,也就是29位,如果用点分十进制表示,原IP地址可表示为58.61.29.9/29
计算广播地址
与运算结果:00111010.00111101.00011101.00001 111 //将子网地址之后的主机地址变为全1,即为广播地址
网络ID: 58 61 29 15
计算IP范围
地址范围是: 网络地址+1至广播地址-1 (网络地址+1即为第一个主机地址,广播地址-1即为最后一个主机地址)
地址范围:58.61.29.9 - 58.61.29.14 计6个IP地址
主机数量:2^3-2=6个IP地址
- 读懂一行Full GC日志(回复JVM内存分配担保机制一文中 Mr/Mrs Xxx 在留言区提出的问题)
- 总结了一些指针易出错的常见问题(四)
- 当你在浏览器中输入Google.com并且按下回车之后发生了什么?
- 总结了一些指针易出错的常见问题(三)
- C++/C头文件 .h和 .c
- 史上最清晰的红黑树讲解(下)
- 网络操作系统VyOS安装与初步使用
- 为何webpack风靡全球?三大主流模块打包工具对比
- 今天研究了一下手机通信录管理系统(C语言)
- Android软件测试Monkey测试工具
- 程序员面试50题(4)—把字符串转换成整数[算法]
- 程序员面试50题(3)—翻转句子中单词的顺序[算法]
- H5动画开发快车道
- Open vSwith模拟网关实现不同子网的互通
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【一天一大 lee】 合并二叉树 (难度:简单)-Day20200923
- 表达量矩阵分组很复杂也可以使用limma的3大策略
- 一日一技:loguru 如何把不同的日志写入不同的文件中
- 如何迁移SSDB数据到Tendis解决方案
- 第40期:Keep Balance,平衡二叉树!
- 第38期:BST 的搜索(小白必看)
- 第39期:小白一看就会的 BST 删除!
- 基于OpenCV的区域分割、轮廓检测和阈值处理
- 基于OpenCV的实用图像处理操作
- LDAP 中 DN CN DC OU
- Spring Boot入门系列(十九)集成mybatis
- 当我们做后仿时我们究竟在仿些什么(四)
- Scala学习一
- kafka学习二 -发送消息
- 【ACL2020】使用问题图生成解决multi-hop复杂KBQA