当前位置: 首页 > news >正文

一、网络的基本概念

  一般来说,两台或以上计算机使用任意介质(电缆、光纤或无线电波)、任意网络(TCP/UDP、NetBEUI或IPX/SPX)来进行连接,并进行资源共享及通信,就可以称为计算机网络。网络协议是网络上建立通信及传输数据的双方必须遵守的通信标准,它定义了接收方和发送方进行通信所必须遵循的规则,双方同层的协议必须一致,否则无法进行通信或数据错误。为了组建通信网络,通常需要一些特殊的设备,下图是一个常见的网络连接图。

wKioL1kPAtORpEWNAACY-i9e67I873.png-wh_50

节点(node):节点主要是具有网络地址 (IP) 的设备之称。

服务器主机(server):提供数据以响应给用户的主机,都可以被称为是一部服务器。

工作站(workstation)或客户端(client):主动发起联机去要求数据的,就可以称为是客户(client)。

网卡(Network Interface Card,NIC):主要提供网络联机的设备

网络接口:主要在提供网络地址(IP) 的任务。主机内部也都拥有一个内部的网络接口,就是loopback这个循环测试接口!

网络形态或拓朴(topology):各个节点在网络上面的链接方式,一般讲的是物理连接方式。

路由(route):是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程,其工作在OSI参考模型第三层——网络层的数据包转发设备。

网关(gateway):又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。

  • OSI网络模型与TCP/IP网络模型

  由ISO所定义的7层网络模型--OSI(Open System Interconnect,开放系统互连)是网络发展中的一个重要里程碑,它的出现使各种网络技术和设备有了参考依据,在网络协议的设计和统一上起到一定作用。

  OSI的7层模型中每一层都有清晰的特征。其中第7-4层处理数据源和数据目的地之间的通信问题,第3-1层处理网络设备间的通信。各层功能为:

  物理层:定义了有关传输介质的特性标准规范。

  数据链路层:物理链路并不可靠,可能会出现错误。数据链路层将数据分成帧,以数据帧为最基本单位进行传输,通过收到的数据帧进行重新排序和整理,把不可靠的物理链路转化成网络模型的上层协议中可靠的数据链路。

  网络层:对数据按一定的长度进行分组,并在每个分组的头中记录源和目的主机的地址,然后根据这些地址来决定从源主机到目的主机的路径。如果存在多条路径,还要负责进行路由选择。

  传输层:这层的功能包括是选择差错恢复协议还是无差错恢复协议,在同一主机上对不同应用的数据流的输入进行复用,以及对所收到的顺序不对的数据包进行重新排序。

  会话层:在网络实体间建立、管理和终止通信应用服务请求和响应会话等。

  表示层:进行代码转换功能,以保证源主机的数据在目的主机上同样能被识别。

  应用层:OSI模型的最高层,实现网络与用户的直接对话。

wKiom1kPzoaSNphWAABZwMN17Rw944.png-wh_50

  OSI的7层模型是一个理论模型,由于它太过庞大和复杂受到很多批评,而技术人员自己开发的TCP/IP协议栈则获得更为广泛的应用。与OSI的7层模型不同,TCP/IP模型没有把主要精力放在严格的层次划分上,而是侧重于设备间的数据传输。TCP/IP模型的各层功能:

  网络接口层(链结层):定义了如何在已有的物理网络介质上传输数据,在这层中包含以太网、令牌环网、帧中继和异步传输模式等。

  网络层:将数据封装成IP(Internet Protocol)数据包,发往目标网络或主机。在这层包含了IP、

ICMP、IGMP、以及ARP等协议。

  传输层:定义了数据传输时所使用的服务质量以及连接状态,实现源端主机和目标主机上对等实体间的会话。在传输层上有两个不同的协议:TCP、UDP。

  应用层:TCP/IP模型将OSI参考模型中的会话层和表示层的合并到应用层,它定义了TCP/IP应用程序通信协议,包括HTTP、FTP、DNS和SMTP等。其中,没中协议都对应不同的网络服务,他们一般都会有特殊的端口号。

1.2、TCP/IP的网络层相关数据包与数据

  目前因特网环境的IP有两个版本,一种是使用最为广泛的IPv4,一种是预期未来会热门的IPv6.IPv4记录的地址由于仅有32位,预计在2012年前后会分配完毕,如此一来,新兴国家或者新的网络公司将没有网络可用。为了避免这个问题发生,因此产生了IPv6,IPv6地址可以达到128位,这样的IP数量几乎用不完。虽然IPv6具有前瞻性,但目前主流大多使用IPv4。

IP数据包的封装:

  TCP/IP协议定义了一个在因特网上传输的包,称为IP数据包,而IP数据报(IP Datagram)是个比较抽象的内容,是对数据包的结构进行分析。 由首部和数据两部分组成,其格式如图所示。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首部中的源地址和目的地址都是IP协议地址。

wKiom1kQB2DgPguJAAAqItrJEHs052.png-wh_50

Version(版本):指IP协议的版本。

IHL(Internet Header Length, IP表头的长度):告知这个 IP 封包的表头长度。

Type of Service(服务类型),字段内容为PPPDTRUU。
  PPP:表示此 IP 封包的优先度,目前很少使用;
  D:若为0表示一般延迟(delay),若为1表示为低延迟;
  T:若为0表示为一般传输量 (throughput),若为1表示为高传输量;
  R:若为0表示为一般可靠度(reliability),若为1表示高可靠度。
  UU:保留尚未被使用。

Total Length(总长度):指这个IP封包的总容量,包括表头与内容(Data)部分,最大65535 bytes。

Identification(辨别码):IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并   将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报.

Flags(特殊旗标)
  D:若为 0 表示可以分段,若为 1 表示不可分段
  M:若为 0 表示此 IP 为最后分段,若为 1 表示非最后分段。

Fragment Offset(分段偏移):表示目前这个 IP 分段在原始的 IP 封包中所占的位置。

Time To Live(TTL, 存活时间)表示这个 IP 封包的存活时间,范围为 0-255。

Protocol Number(协定代码)


1

ICMP (Internet Control Message Protocol)

2

IGMP (Internet Group Management Protocol)

3

GGP (Gateway-to-Gateway Protocol)

4

IP (IP in IP encapsulation)

6

TCP (Transmission Control Protocol)

8

EGP (Exterior Gateway Protocol)

17

UDP (User Datagram Protocol)

Header Checksum(表头检查码):用来检查这个 IP 表头的错误检验之用。

Source Address:来源的 IP 地址

Destination Address:这里就是目标的 IP 地址。

Options (其他参数)这个是额外的功能,提供包括安全处理机制、路由纪录、时间戳、严格与宽松之来源路由等。

Padding(补齐项目):由于Options的内容不一定有多大,但是我们知道IP每个数据都必须要是32bits,所以,若 Options 的数据不足 32 bits 时,则由 padding 主动补齐。

IP地址的组成与分级:

  IP地址其实是一种网络数据包,而这种数据包的报头最重要的就是32位的来源与目的地址。对于这32 bits的数值,为了方便记忆,将32bits的IP分成四小段,每段含有8bits,将8个bits转换成十进制,并 且每一段中间以小数点隔开。

1
2
00000000.00000000.00000000.00000000    ==》  0.0.0.0
11111111.11111111.11111111.11111111    ==》  255.255.255.255

  因此IP可以由0.0.0.0到255.255.255.255.但这遗传数字中,又分为网络段(Net_ID)与主机段(Host_ID)两部分。例如C类地址192.168.0.0-192.168.0.255为例。

1
2
11000000.10101000.000000000.00000000
|--------Net_ID------------|--host--|

  Net_ID 与 Host_ID 的限制:在同一个网段内,Net_ID 是不变的,而Host_ID则是不可重复,此外 Host_ID 在二进制的表示法当中,不可同时为 0 也不可同时为 1 ,因为全为 0 表示整个网段的地址,而全为 1 则表示为广播的地址。

  在局域网内通过IP 广播传递数据:在同物理网段的主机如果设定相同的网域 IP 范围 (不可重复),则这些主机都可以透过 CSMA/CD 的功能直接在区网内用广播进行网络的联机,亦即可以直接网卡对网卡传递数据 (透过 MAC 讯框)。

  设定不同区网在同物理网段的情况:在同一个物理网段之内,如果两部主机设定成不同的 IP 网段, 则由于广播地址的不同,导致无法透过广播的方式来进行联机。 此时得要透过路由器 (router) 来进行沟通才能将两个网域连结在一起。

  网域的大小:当 Host_ID 所占用的位越大,亦即 Host_ID 数量越多时,表示同一个网域内可用以设 定主机的 IP 数量越多。

网络的划分:

全0:网络地址

全1:广播地址

Class A : 0.xx.xx.xx ~ 127.xx.xx.xx     #Net_ID的开头是0

  网络数:126, 127

  每个网络中的主机数:2^24-2

  默认子网掩码:255.0.0.0

  私网地址:10.0.0.0/8

Class B : 128.xx.xx.xx ~ 191.xx.xx.xx   #Net_ID的开头是10

 网络数:2^14

 每个网络中的主机数:2^16-2

 默认子网掩码:255.255.0.0

 私网地址:172.16.0.0/16-172.31.0.0/16

Class C : 192.xx.xx.xx ~ 223.xx.xx.xx   #Net_ID的开头是110

 网络数:2^21

 每个网络中的主机数:2^8-2

 默认子网掩码:255.255.255.0

 私网地址:192.168.0.0/24-192.168.255.0/24

Class D : 224.xx.xx.xx ~ 239.xx.xx.xx    #Net_ID的开头是1110

 组播的特殊功用,如大批计算机的网络还原

Class E : 240.xx.xx.xx ~ 255.xx.xx.xx    #Net_ID的开头是1111

 保留没有使用的网段

1.3、交换机与路由器

  在同一局域网里面,可以通过IP广播的方式来实现数据的传输,但如果在非局域网时。就需要路由器器来帮忙了。简单来说交换机为同一局域网内的不同主机服务,而路由器则为了不同局域网内的两台主机提供服务。

  交换机:是基于网桥技术的多端口第二层网络设备,它为数据帧从一个端口到另一个任意端口的转发提供了低时延、低开销的通路。交换机只能识别MAC地址。同一网络内不同主机之间通信,通过交换机寻找最优通路,不能存在环路。

  路由器:是OSI协议模型的网络层中的分组交换设备(或网络层中继设备),路由器的基本功能是把数据(IP报文)传送到正确的网络。识别IP地址。不同网段主机通信时需要路由转发。可以隔离广播域。

wKioL1kQDjeh3JmQAAFXJdw9TbQ401.png-wh_50

1.4、TCP协议数据包

  网络层的IP数据包只负责将数据送到正确的目标主机,但是数据包到底会不会被接收,或者有没有被正确接收,就不是IP的任务了,那是传输层的的任务之一。在传输层有两种协议,一种是面向连接的TCP数据包,一种无连接的UDP数据包,数据能不能正确被送达目的地,与这两个数据包有很大的关系。

  各个数据包之间的相关性:

wKiom1kQEAjCNZJkAAAOjB0qcNM975.png-wh_50

  UDP数据包的报头信息:

wKioL1kQEJSBvhhvAADs4swA308489.png-wh_50

  TCP数据包的报头信息:

wKiom1kQEC2CWjU9AAApdpKXdwA537.png-wh_50

Sequence Number (封包序号):TCP 数据太大时(大于 IP 封包的容许程度),就得要进行分段。这个   Sequence Number 就是记录每个封包的序号,可以让收受端重新将 TCP 的数据组合起来。

Acknowledge Number (回应序号):为了确认主机端确实有收到client端所送出的封包数据,client端当然希望能够收到主机方面的响应,那就是这个 Acknowledge Number 的用途了。当client 端收到这个确认码时,就能够确定之前传递的封包已经被正确的收下了。

Code (Control Flag, 控制标志码)

  URG(Urgent):若为 1 则代表该封包为紧急封包,接收端应该要紧急处理,当中的 Urgent Pointer字段也会被启用。

  ACK(Acknowledge):若为 1 代表这个封包为响应封包,与 Acknowledge Number 有关。

  PSH(Push function):若为 1 时,代表要求对方立即传送缓冲区内的其他对应封包,而无须等待缓冲区满了才送。

  RST(Reset):如果 RST 为 1 的时候,表示联机会被马上结束,而无需等待终止确认手续。 这是个强制结束的联机,且发送端已断线。

  SYN(Synchronous):若为 1,表示发送端希望双方建立同步处理,也就是要求建立联机。通常带有SYN标志的封包表示主动要连接到对方的意思。

  FIN(Finish):若为 1 ,表示传送结束,所以通知对方数据传毕,是否同意断线,只是发送者还在等待对方的响应。

三次握手与四次断开:

wKioL1kQE1OS4bQ1AAFkcVq_SJg462.png-wh_50

建立连接的过程:

【1】客户端发出请求,SYN 位表示连接请求。序号是200,这个序号在网络通讯中用作临时的地址,每发一个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况,另外,规定SYN 位和FIN 位也要占一个序号,这次虽然没发数据,但是由于发了SYN 位,因此下次再发送应该用序号201。

【2】服务器发出信息,也带有SYN 位,同时置ACK 位表示确认,确认序号是500,表示“我接收到序号500及其以前所有的段,请你下次发送序号为501的段”,也就是应答了客户端的连接请求,同时也给客户端发出一个连接请求。

【3】客户端发出信息,对服务器的连接请求进行应答,确认序号是501。在这个过程中,客户端和服务器分别给对方发了连接请求,也应答了对方的连接请求,其中服务器的请求和应答在一个段中发出,因此一共有三个段用于建立连接,称为'''三方握手(three-way-handshake)'''。在建立连接的同时,双方协商了一些信息,例如双方发送序号的初始值、最大段尺寸等。

TCP连接的关闭过程:

【1】客户端发出信息,FIN 位表示关闭连接的请求。

【2】服务器发出信息,应答客户端的关闭连接请求。

【3】服务器发出信息,其中也包含FIN 位,向客户端发送关闭连接请求。

【4】客户端发出信息,应答服务器的关闭连接请求。



本文转自 梦想成大牛 51CTO博客,原文链接:http://blog.51cto.com/yinsuifeng/1923251,如需转载请自行联系原作者

相关文章:

  • 利用LVS-NAT和DR模型分别负载均衡一个php应用
  • VII Python(9)socket编程
  • zookeeper系列(七)实战分布式命名服务
  • Animations的使用
  • 利用Python生成随机4位验证码
  • 测试标准学习
  • 一些不常见的css知识
  • 第四课——MFC应用程序框架
  • 列表、元祖概述
  • 拨云见日—深入解析Oracle TX 行锁(上)
  • 询问Spring Bott和高并发框架两个问题
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • MicroProfile 1.2新增功能介绍
  • Google瓦片地图算法解析
  • TransactionScope只要一个操作失败,它会自动回滚,Complete表示事务完成
  • [译]如何构建服务器端web组件,为何要构建?
  • __proto__ 和 prototype的关系
  • 《Java编程思想》读书笔记-对象导论
  • 5、React组件事件详解
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • CSS盒模型深入
  • flask接收请求并推入栈
  • Javascript 原型链
  • Java-详解HashMap
  • js继承的实现方法
  • nodejs调试方法
  • Python - 闭包Closure
  • Python_网络编程
  • storm drpc实例
  • 从伪并行的 Python 多线程说起
  • 理清楚Vue的结构
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 移动端 h5开发相关内容总结(三)
  • 阿里云重庆大学大数据训练营落地分享
  • 进程与线程(三)——进程/线程间通信
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (1)虚拟机的安装与使用,linux系统安装
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2015)JS ES6 必知的十个 特性
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (vue)页面文件上传获取:action地址
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十三)Maven插件解析运行机制
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .gitignore文件设置了忽略但不生效
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .Net IOC框架入门之一 Unity
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET 发展历程
  • .NET的数据绑定
  • .net对接阿里云CSB服务