首页 > 代码库 > 计算机网络基础
计算机网络基础
计算机网络基础
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响应以后,就可以将网页显示出来,完成一次网络通信
计算机网络基础