计算机网络基础-总结一些必须知道的计算机网络基础知识

写在前面

  记录一些计算机网络基础的知识,包括:OSI模型、TCP/IP协议以及其它一些做后端开发应该知道的知识。


协议体系结构

  上图摘自参考资料,本文所有图片都来自参考资料。

  ISO/OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI

  TCP/IP协议模型Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议,通过20多年的发展已日渐成熟,并被广泛应用于局域网和广域网中,目前已成为事实上的国际标准。TCP/IP协议簇是一组不同层次上的多个协议的组合,通常被认为是一个四层协议系统,与OSI的七层模型相对应。

OSI各层功能:

名称 功能 主要协议
应用层 为应用程序提供网络服务。应用程序需识别并保证通信双方的可用性,使得协同工作的应用程序间的同步,建立传输错误纠正与保证数据完整性控制机制 文件传输协议(FTP)、简单邮件传输协议(SMTP)、邮局协议(POP3)、超文本传输协议(HTTP)、远程登录协议(Telnet)、网络管理协议(SNMP)、域名管理系统(DNS)
表示层 用于处理两个通信系统中交换信息的表示方式,主要包括数据格式变换、数据加密和解密、数据压缩与恢复等
会话层 负责维护两个结点之间会话连接的建立、管理和终止,以及数据的交换
运输层 向用户提供可靠的端到端服务。传输层向高层屏蔽了高层数据通信的细节。因此是计算机网络体系结构中关键的一层 传输控制协议(TCP)、用户数据报协议(UDP)
网络层 通过路由选择算法为分组通过通信子网选择最适当的路径,以及实现拥塞控制、网络互连等功能。网络层的数据传输单元是分组。 无连接数据报传输服务(IP)、Internet控制报文协议(ICMP)、地址解析协议(ARP)、逆地址解析协议(RARP)、多播组管理(IGMP)
数据链路层 在物理层提供的基础上,数据链路层在通信的实体间建立数据链路连接,传输以帧为单位的数据包,并采用差错控制与流量控制算法,使有差错的物理线路变成无差错的数据链路 以太网协议
物理层 利用传输介质为通信的网络结点之间建立、管理和释放物理链接,实现比特流的透明传输,为数据链路层提供数据传输服务。物理层的数据传输单元是比特(bit)

主要协议总结

  仅记录我所认为后端程序员必须要了解的协议。更多的协议介绍,可以到参考资料所链接的文章中学习了解。

TCP/IP协议

  TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

  TCP是面向连接的通信协议,通过三次握手建立连接,通信完成时要拆除连接。

三次握手与四次挥手

  三次握手:指建立一个TCP连接时,需要客户端和服务器总共发送3个包。目的是连接服务器指定端口,建立TCP连接,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect() 时。将触发三次握手。

  • 第一次握手(SYN=1, seq=x)

    客户端发送一个TCPSYN标志位置1的包指明客户端打算连接的服务器的端口,以及初始序号X,保存在包头的序列号seq字段里。

    发送完毕后,客户端进入 SYN_SEND 状态。

  • 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1)

    服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己ISN序列号,放到Seq 域里,同时将确认序号ACK设置为客户端的ISN加1,即X+1。

    发送完毕后,服务器端进入 SYN_RCVD 状态。

  • 第三次握手(ACK=1,ACKnum=y+1)

    客户端再次发送确认包(ACK),SYN标志位为0,ACK标志位为1,并且把服务器发来 ACK的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1,发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP握手结束。


  四次挥手:指TCP连接的拆除需要发送四个包。客户端和服务器端都可以发起挥手动作,在 socket 编程中,任何一方执行 close() 操作即可产生挥手操作。

  • 第一次挥手(FIN=1,seq=x)

  假设客户端想要关闭连接,客户端发送一个FIN标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接受数据。

  发送完毕后,客户端进入 FIN_WAIT_1 状态。

  • 第二次挥手(ACK=1,ACKnum=x+1)

    服务器端确认客户端的 FIN 包,发送一个确认包,表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接。

    发送完毕后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2状态,等待服务器端关闭连接。

  • 第三次挥手(FIN=1,seq=y)

    服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN置为1。

    发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个ACK

  • 第四次挥手(ACK=1,ACKnum=y+1)

    客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入TIME_WAIT状态,等待可能出现的要求重传的ACK包。

    服务器端接收到这个确认包之后,关闭连接,进入CLOSED状态。

    客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的ACK,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。


UDP协议

  UDP协议使面向无连接的通讯协议。UDP通讯时不需要接收方确认,属于不可靠的传输。与TCP的区别在于:TCP是面向连接的,可靠的,而UDP是面向无连接的,不可靠的。


DNS协议

  DNS是域名系统(DomainNameSystem)的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务,可以简单地理解为将URL转换为IP地址。域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,在Internet上域名与IP地址之间是一一对应的,DNS就是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。


HTTP协议

  后端开发工程师必须要知道的东西,这里只做简单的介绍,会另外总结一篇文章。

  超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。


访问一个网站

  简单介绍一浏览器输入域名后执行的全部过程。

  1. 客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。
  2. 在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
  3. 客户端的网络层不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。
  4. 客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。

小结

  大部分内容,摘自参考资料。更全的介绍请到参考资料的博客中查看。


参考资料

Author: HowieLi
Link: https://www.howieli.cn/posts/computer-network-basic-knowledge.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.