首页 > 代码库 > 计算机网络基础

计算机网络基础

计算机网络基础

1.1 什么是互联网协议

  英语成为世界上所有人通信的统一标准,如果把计算机看成分布于世界各地的人,那么连接两台计算机之间的internet实际上就是 一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列的协议,总称为‘互联网协议’(Internet Protocol Suite).

 互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

为何要有互联网协议?

一台硬件设备有了操作系统,然后装上软件你就可以正常使用了,然而只能自己使用,每个人都拥有一台自己的机器,彼此孤立,为了能让孤立的机器之间彼此通信,由此产生了互联网协议。

1.2 OSI七层模型

1.2.1 OSI的概念:

Open system interconnect开放系统互连参考模型,是由ISO(国际标准化组织)定义的。是个灵活的、稳健的和可互操作的模型,并不是协议,是用来了解和设计网络体系结构的。

1.2.2 OSI模型的目的:

规范不同体系的互联标准,使两个不同的系统能够较容易的通信,而不需要改变底层的硬件或软件的逻辑

OSI模型分为7层:

OSI把网络按照层次分为7层,由下到上分别为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

为什么分为7层?

 技术分享

上层分为(boss秘书 商务)

秘书可以负责将信息进行编码,然后将数据加密和压缩等,将BOSS的信息传给商务部

传输层(销售部/采购部)

作为一个传输的通道,进行长期的连接,可以将从上层获得的流量进行一个分段。

①进行连接会话的建立,并且可以是可靠的连接

②将上层的数据进行分块/分段

网络层(邮局):将流量送到目的地,是一个寻址的概念,并且把上层分好段的设备进行一个打包

数据链路层:将打包的设备运输到家门口,进行拆包,分给公司内部的每个人,也负责将上层的打包分派给底层的搬运工

物理层:就相当于搬运工

OSI 7层模型的结构

 技术分享

技术分享

 

层次

说明

功能/协议

应用层

应用程序及接口,类似于公司老板

提供应用程序的接口FTP、telnet、http、pop3等

表示层

对数据进行转换,加密和压缩

将上层的数据进行转换和编译压缩为标准的文件,如jpg,gif,ascii码等

会话层

建立、管理和终止会话

 

传输层

提供可靠的端到端的报文传输和差错控制,实质上就是负责建立连接的

TCP UDP 建立可靠的和非可靠的连接将上层的数据进行分段处理

网络层

将分组从源端传送到目的端,提供网络互联

实质上就是提供路由寻址(IP协议)

将上层分段的数据进行打包

数据链路层

将分组数据封装成帧,提供节点到节点方式的传输

帧就是本地局域网中传输数据的一个单元,负责在局域网内部的点对点的寻址

物理层

在媒体上传输比特

就是底层的链路介质的规范

特点说明:

1、  OSI模型每层都有自己的功能集

2、  层与层之间相互独立又互相依靠

3、  上层依赖于下层,下层为上层提供服务

1.2.3 OSI层次---应用层

 技术分享

 

主要就是提供应用程序可以接入网络的接口,并根据程序的不同对应不同的接口协议。

1.2.4 OSI层次---表示层

 技术分享

 

1.2.5 OSI层次---会话层

 技术分享

1.2.6 OSI层次---传输层

 技术分享

负责网络中端到端的连接(TCP UDP)

1.2.7 OSI层次---网络层

 技术分享

网络层的主要作用就是路由和寻址,主要接触到的是IP协议即IP地址。

网络层:对应设备有路由

路由器的作用:

1、广播、组播控制

2、对数据做寻址、选择达到目的的网络的最佳路径

3、流量管理

4、连接广域网(WAN)

IP地址的概念说明:

技术分享

 

根据地址的概念,来据举例介绍网络号主机号的概念,以及路由寻址和路由的概念

1.2.8 OSI层次---数据链路层

 技术分享

数据链路层:MAC层 –IEEE 802.3协议,MAC地址是48bit的

 技术分享

 

IP地址是三层地址,那么mac地址就是二层地址,全球网络设备唯一的地址

作用的域不同:IP作用在不同的网络之间,MAC地址作用在相同的网络内部

MAC地址48位的地址,采用16进制进行表示

MAC地址是硬件地址,IP地址会被看作是逻辑地址

数据链路层:对应设备有交换机

 技术分享

 

1.2.9 OSI层次---物理层

 技术分享

就是逐个的bit进行传输的过程

网络物理连接介质

网线

要连接局域网,网线是必不可少的,在局域网中常见的网线主要为双绞线。双绞线是由许多对线组成的数据传输线。它的特点就是价格便宜,所以被广泛应用,如我们的电话线等。它是用来和RJ45水晶头相连的。

制作规范

568A

568B 线序:橙白 橙 绿白 蓝 蓝白 绿 棕白 棕

 技术分享

技术分享

光纤线

 技术分享

1.2.10 OSI层次模型总结

OSI七层模型功能就类似于人传递信息,会用一句话传递,而一句话又是多个词组成的,而每个词又是多个字组成。

1.3 TCP/IP 协议簇(DoD参考模型)

用于简化OSI层次,以及相关的标准

1、  传输控制协议(tcp/ip)族是相关国防部(DOD)所创建的,主要用来确保数据的完整性及在毁灭性战争中维持通信

2、  是由一组不同功能的协议组合在一起构成的协议簇

3、  利用一组协议完成OSI所实现的功能

 技术分享

1.3.1 TCP/IP 协议簇中的相关协议

 技术分享

TCP/IP 协议簇---应用层

 技术分享 

TCP/IP协议簇---主机到主机层

 技术分享

TCP与UDP对比

传输控制协议(TCP)

用户数据报协议(UDP)

面向连接

无连接

可靠传输

不可靠传输

流控

尽力而为,尽力传输

使用TCP应用:

WEB浏览器;电子邮件;文件传输程序

使用UDP的应用:

域名系统(DNS);视频流;IP语音(VoIP)

TCP相关报文结构

 技术分享

源端口:即本地发起连接的端口

目标端口:即要访问的服务的端口

序列号:因为传输层会将上层的数据进行分段,因此需要对分段数据进行编号同时也便于数据的重组

验证号:用于对数据进行验证

UDP相关报文结构

 技术分享

 技术分享

1、  源端口随机分配,目标端口使用知名端口

2、  应用客户端使用的源端口号一般为系统中未使用的且大于1023的

3、  目的端口号为服务端应用服务的进程,如telnet为23

1.3.2 TCP 三次握手过程

 技术分享

位置概念:根据TCP的包头字段,存在三个重要的标识ACK、SYN、FIN

1、  ACK:表示验证字段

2、  SYN:位数置1,表示建立TCP连接

3、  FIN:位数置1,表示断开TCP连接

4、  ctl : 发送请求

 技术分享

建立过程说明:

①   由主机A发送建立TCP的连接请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中SYN字段置为1,表示需要建立TCP连接

②   主机B会回复A发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将回复报文的SYN字段置1,而且会产生ACK字段,ACK字段数值是在A发过来的seq序列号基础上加1进行回复,以便A收到信息时,知晓自己的TCP建立请求已得到了验证

③   A端收到了B端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在B端发送过来的seq基础上加1,进行回复

 技术分享

 

①   一开始,建立连接之前服务器和客户端的状态都为CLOSED。★★★

②   服务器创建socket后开始监听,变为LISTEN状态。★★★

③   客户端请求建立连接,向服务器发送SYN报文,客户端的状态变为SYN_SENT。★★★

④   服务器收到客户端的报文后向客户端发送ACK和SYN报文,此时服务器的状态变为SYN_RCVD。★★★

⑤   然后,客户端收到ACK、SYN,就像服务器发送ACK,客户端状态变为ESTABLISHED。★★★

服务器收到客户端的ACK后也变为ESTABLISHED。此时,3次握手完成,连接建立!★★★

1.3.3 TCP 四次挥手过程

 技术分享

 

断开过程说明:

①   主机A发送断开TCP连接请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中FIN字段置为1,表示需要断开TCP连接

②   主机B会回复A发送的TCP断开请求报文,其中包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值,是在A发过来的seq序列号基础上加1进行回复,以便A收到信息时,知晓自己的TCP断开请求已得到了验证

③   主机B在回复完A的TCP断开请求后,不会马上就进行TCP连接的断开,主机B会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕就会将回复报文的FIN字段置1,并产生随机seq序列号。

④   主机A收到主机B的TCP断开请求后,会回复主机B的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在主机B 的TCP断开请求的seq基础上加1,从而完成主机B请求的验证回复。

至此,TCP连接断开的四次挥手过程完毕。

 技术分享

 

由于TCP连接是全双工的,断开连接会比建立连接麻烦一点

①客户端先向服务器发送FIN报文,请求断开连接,其状态变为FIN——WAIT1.

②服务器收到FIN后向客户端发生ACK,服务器状态变为CLOSE——WAIT。

③客户端收到ACK后就进入FIN——WAIT2状态。此时连接已经断开一半了,如果服务器还有数据要发送给客户端,就会继续发送

④直到服务器发完了所有数据,就会发送FIN报文,此时服务器进入LAST_ACK状态。

⑤客户端收到服务器的FIN报文后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态

⑥再过了2MSL长的时间后进入CLOSED状态。服务器收到客户端的ACK就进入CLOSED状态。

至此,还有一个状态没有提及:CLOSING状态

CLOSING状态表示:

客户端发生了FIN,但没有收到服务器的ACK,却收到了服务器的FIN。这种情况发生在服务器发送的ACK丢包的时候,因为网络传输有时会有以意外。

TCP的十一种状态转移总结

 

 

状态出现方式

状态出现环境

状态名称

状态描述

TCP建立过程涉及5种状态

服务端/客户端

CLOSED

默认初始化关闭状态

服务端

LISTEN

建立socket,进入监听状态

客户端

SYN_SENT

发送syn报文,进入syn发送状态

服务端

SYN_RCVD

接收syn报文,并回复ack及syn报文

客户端/服务端

ESTABLISHED

接收syn报文,回复ack,建立连接(客户端)

接收ack报文,建立连接(服务端)

TCP断开过程涉及6种状态

服务端/客户端

ESTABLISHED

默认断开前初始化状态

客户端

FIN_WAIT1

发送断开请求FIN报文

服务端

CLOSE_WAIT

收到FIN后向客户端发送ACK

客户端

FIN_WAIT2

收到服务端返回的ACK报文,等待数据传输

服务端

LAST_ACK

发送FIN断开请求报文

客户端

TIME_WAIT

回复FIN断开请求,发送ACK报文

服务端/客户端

CLOSED

收到ACK报文,立刻转变为断开状态(服务端)

等待2MSL后,进入断开状态(客户端)

客户端

CLOSEING

没有收到回复FIN报文的ACK,直接收到FIN

 

1.4 用户上网流程

1.4.1 本机获取

本机的IP地址:192.168.1.100

子网掩码:255.255.255.0

网关的IP地址:192.168.1.1

DNS的IP地址:8.8.8.8

1.4.2 打开浏览器

想要访问Google,在地址栏输入了网址:www.google.com。

1.4.3 dns协议(基于udp协议)

 技术分享

13台根dns:

A.root-servers.net198.41.0.4美国
B.root-servers.net192.228.79.201美国(另支持IPv6)
C.root-servers.net192.33.4.12法国
D.root-servers.net128.8.10.90美国
E.root-servers.net192.203.230.10美国
F.root-servers.net192.5.5.241美国(另支持IPv6)
G.root-servers.net192.112.36.4美国
H.root-servers.net128.63.2.53美国(另支持IPv6)
I.root-servers.net192.36.148.17瑞典
J.root-servers.net192.58.128.30美国
K.root-servers.net193.0.14.129英国(另支持IPv6)
L.root-servers.net198.32.64.12美国
M.root-servers.net202.12.27.33日本(另支持IPv6)

 

域名定义:http://jingyan.baidu.com/article/1974b289a649daf4b1f774cb.html

顶级域名:以.com,.net,.org,.cn等等属于国际顶级域名,根据目前的国际互联网域名体系,国际顶级域名分为两类:类别顶级域名(gTLD)和地理顶级域名(ccTLD)两种。类别顶级域名是 以"COM"、"NET"、"ORG"、"BIZ"、"INFO"等结尾的域名,均由国外公司负责管理。地理顶级域名是以国家或地区代码为结尾的域名,如"CN"代表中国,"UK"代表英国。地理顶级域名一般由各个国家或地区负责管理。

二级域名:二级域名是以顶级域名为基础的地理域名,比喻中国的二级域有,.com.cn,.net.cn,.org.cn,.gd.cn等.子域名是其父域名的子域名,比喻父域名是abc.com,子域名就是www.abc.com或者*.abc.com.
一般来说,二级域名是域名的一条记录,比如alidiedie.com是一个域名,www.alidiedie.com是其中比较常用的记录,一般默认是用这个,但是类似*.alidiedie.com的域名全部称作是alidiedie.com的二级

 

1.4.4 HTTP部分的内容,类似于下面这样:

GET / HTTP/1.1
Host: www.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) ……
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: … …

 

我们假定这个部分的长度为4960字节,它会被嵌在TCP数据包之中。

 

1.4.5 TCP协议

TCP数据包需要设置端口,接收方(Google)的HTTP端口默认是80,发送方(本机)的端口是一个随机生成的1024-65535之间的整数,假定为51775。

TCP数据包的标头长度为20字节,加上嵌入HTTP的数据包,总长度变为4980字节。

1.4.6 IP协议

然后,TCP数据包再嵌入IP数据包。IP数据包需要设置双方的IP地址,这是已知的,发送方是192.168.1.100(本机),接收方是172.194.72.105(Google)。

IP数据包的标头长度为20字节,加上嵌入的TCP数据包,总长度变为5000字节。

1.4.7 以太网协议

最后,IP数据包嵌入以太网数据包。以太网数据包需要设置双方的MAC地址,发送方为本机的网卡MAC地址,接收方为网关192.168.1.1的MAC地址(通过ARP协议得到)。

以太网数据包的数据部分,最大长度为1500字节,而现在的IP数据包长度为5000字节。因此,IP数据包必须分割成四个包。因为每个包都有自己的IP标头(20字节),所以四个包的IP数据包的长度分别为1500、1500、1500、560。

1.4.8 服务器端响应

经过多个网关的转发,Google的服务器172.194.72.105,收到了这四个以太网数据包。

根据IP标头的序号,Google将四个包拼起来,取出完整的TCP数据包,然后读出里面的”HTTP请求”,接着做出”HTTP响应”,再用TCP协议发回来。

本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信

计算机网络基础