本文主要介绍了网络相关的五方面内容,分别是网络分层、IP地址分类、DNS域名解析过程、TCP协议状态机和TCP拥塞控制,都是我总结的比较基础的网络知识
网络分层
网络分层有几种不同的模型,最熟悉的是OSI模型,它将网络分为以下七层框架(自底向上):
1. 物理层
主要功能是:利用传输介质为数据链路层提供物理连接,负责处理数据传输并监控数据出错率,以便数据流的透明传输;
它直接面向实际承担数据传输的物理媒体(即通信通道),物理层的传输单位为比特(bit),即一个二进制位(“0”或“1”)。我们熟悉的集线器(HUP)属于物理层的实现。
2. 数据链路层
主要功能是:在物理层提供的服务基础上,在通信的实体间建立数据链路连接,传输以“帧”为单位的数据包,并采用差错控制与流量控制方法,使有差错的物理线路变成无差错的数据链路;
它包括了差错检测和纠错技术等,我们熟悉的MAC地址、ARP(地址解析)协议、DHCP(动态主机配置)协议等属于这一层,同时交换机属于数据链路层的实现。
3. 网络层
主要功能是:为数据在结点之间传输创建逻辑链路,通过路由选择算法为分组通过通信子网选择最适当的路径,以及实现拥塞控制、网络互联等功能。
路由器属于网络层的实现,网络层的协议有IP,ICMP,RIP,OSPF,BGP,IGMP等。
4. 传输层
主要功能是:向用户提供可靠的端到端(End-to-End)服务,处理数据包错误、数据包次序,以及其他一些关键传输问题。
传输层是分层框架中最重要的一层,主要的协议是TCP协议和UDP协议,TCP协议在下文还会详细介绍。
5. 会话层
主要功能是:负责维护两个结点之间的传输链接,以便确保点到点传输不中断,以及管理数据交换等功能。
6. 表示层
主要功能是:用于处理在两个通信系统中交换信息的表示方式,主要包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。
7. 应用层
主要功能是:为应用软件提供了很多服务,例如文件服务器、数据库服务、电子邮件与其他网络软件服务;
应用层的协议一般都有一定了解,包括HTTP,FTP,SMTP,Telent等,分别对应具体的网络服务。
下面是一张OSI分层模型的协议图:
TCP/IP参考模型:
TCP/IP模型其实包含了一系列构成互联网基础的网络协议(TCP、UDP、IPv4、IPv6、ARP、SCTP等),它将网络分为以下四层(自底向上):
1. 网络接口层:对应于OSI模型的物理层和数据链路层;
2. 网络互联层:对应于OSI模型的网络层;
3. 传输层:对应于OSI模型的传输层;
4. 应用层:对应于OSI模型的应用层、会话层和表达层。
IP地址分类
IP地址包括两个标识码,分别是网络ID和主机ID,IP地址分类即根据这两个ID进行分类:
1. A类IP地址
第一段为网络ID(8位),后三段为主机ID(24位),网络地址最高位必须为”0“,所以A类地址的范围从1.0.0.1 – 126.255.255.255(00000001 00000000 00000000 00000001 – 01111111 11111111 11111111 11111111),最大网络数为126,最大主机数为16777214。
2. B类IP地址
前两段为网络ID(16位),后两段为主机ID(16位),网络地址最高位必须为”10“,所以B类地址的范围从128.1.0.1 – 191.255.255.255(10000000 00000001 00000000 00000001 – 10111111 11111111 11111111 11111111),最大网络数为16382,最大主机数为65534。
3. C类IP地址
前三段为网络ID(24位),后一段为主机ID(8位),网络地址最高位必须为”110“,所以C类地址的范围从192.0.1.1 – 223.255.255.255(11000000 00000000 0000001 00000001 – 11011111 11111111 11111111 11111111),最大网络数为2097150,最大主机数为254。
4. 特殊的网址
”1110“开始的地址是多播地址,即范围从224.0.0.1 – 239.255.255.254是多播地址;
0.0.0.0对应于当前主机;255.255.255.255是当前子网的广播地址;
不能以”127“开头,其中127.0.0.1代表本机IP,其它用于回路测试。
5. 私有IP地址
A类:10.0.0.0 – 10.255.255.255;B类:172.16.0.0 – 172.31.255.255; C类:192.168.0.0 – 192.168.255.255。
DNS域名解析过程
1. 客户机提出DNS请求,并将该请求发送给本地的域名服务器;
2. 当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回;
3. 如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址;
4. 本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址;
5. 重复第四步,直到找到正确的纪录;
6. 本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
TCP协议状态机
Server端和Client端初试状态都为CLOSED。
Server端:
1. LISTEN:被动打开,服务器端状态变为LISTEN(监听);
2. SYN RCVD:服务器端收到SYN后,状态变为SYN RCVD;发送SYN和ACK;
3. ESTABLISHED:SYN RCVD收到ACK后,状态变为ESTABLISHED;
4. CLOSE_WAIT:Server端在收到FIN后,发送ACK,状态变为CLOSE_WAIT,如果此时Server端还有数据需要发送,那么就发送,直到数据发送完毕;
5. LAST ACK:Server端在CLOSE_WAIT状态并发送完数据后,发送FIN,状态变为LAST_ACK;
Client端:
1. SYN SEND:Client发送SYN后,状态变为SYN_SENT;
2. ESTABLISHED:SYN_SENT在收到SYN ACK,状态变为ESTABLISHED,发送ACK;
3. FIN WAIT 1:Client发送FIN,准备断开TCP连接;状态从ESTABLISHED变为FIN_WAIT_1;
4. FIN_WAIT_2:Client只收到Server端的ACK信号,并没有收到FIN信号;说明服务器端还有数据传输,那么此时为半连接;
5. TIME_WAIT:两种方式进入 该状态:(1)FIN_WAIT_1进入:此时应Client收到FIN+ACK(而不是像FIN_WAIT_2那样只收到ACK,说明数据已经发送完毕)并 向服务器端口发送ACK;2、FIN_WAIT_2进入:此时Client收到了FIN,然后向服务器端发送ACK;TIME_WAIT是为了实现TCP 全双工连接的可靠性关闭,用来重发可能丢失的ACK报文;需要持续2个MSL(最大报文生存时间):假设应用程序端口在进入TIME_WAIT后,2个 MSL时间内并没有收到FIN,说明应用程序最后发出的ACK已经收到了;否则,会在2个MSL内在此收到ACK报文。
Server端和Client端最后又变为CLOSED状态!
问题:为什么建立连接是三次握手,关闭连接却是四次握手?
因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在 一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以 未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报 文和FIN报文多数情况下都是分开发送的。
TCP协议的拥塞控制
TCP协议的拥塞算法总结起来就是加性增,乘性减,慢启动!下面看一张图
如图所示,首先是慢启动,单位时间只发一个包,然后按指数规律增长(单位时间发2、4、8、16),到达阈值后,变为加性增,直到遇到网络拥塞,阈值变为拥塞窗口的一半(如从24变为12)。
网络拥塞分为两种情况:(1)检测到丢包事件,如图,重新变为慢启动(从发一个包开始),阈值变为原拥塞窗口的一半,重复原来的过程;(2)收到3个冗余ACK,图中没画出来,应该是从新阈值大小开始发包(如一次发12个包),加性增大,直到遇到下一次网络拥塞。
——————————–分割线———————————-
欢迎关注我的微薄:http://weibo.com/222891007