程序员面试必备知识点之 计算机网络
1.计算机网络分为哪几层?
ISO/OSI七层模型
ISO:国际标准化组织
OSI:开放系统互联模型
IOS:苹果操作系统,而且是思科公司为其网络设备开发的操作维护系统
以下是ISO七层模型图解:
其中上三层是对用户提供服务的,下四层是对用户信息传递进行传递的。
各层功能详解
- 物理层:物理层是最底层的一层,它是数据之间比特流传输的实际形式;
- 数据链路层:数据链路层是解析MAC物理地址的,通过MAC地址来确定我访问的对象(表明收件人以及发件人的相关信息)而且如果传错了可以要求你进行数据包的重传。
- 网络层:编址寻址(每个目标都有一个IP地址 );路由选择(路由器根据全网地图选择一条最快的路从源地址到目的地址);拥塞控制(流量大时需要控制);异种网络互连(不同的网络都可以相互通信)
- 传输层:分段上层数据 (把上层来的大的数据分成一段一段小的数据);建立端到端连接 ;透明、可靠传输 (检查错误并更正错误 或者重传);流量控制;TCP、UDP 协议
- 会话层:确定网络数据是否要经过网络会话
- 表示层:将英文等被人识别的信息进行转换(翻译)为机器语言
-
应用层:提供用户的接口
以邮箱为例进行分析
用户通过打开浏览器写入信件(应用层)–> 将信件内容转变为机器语言 –> 确定数据是否要向其他用户进行数据传递(会话层) –> 写入两个端口号(传输层) –> 写入两个IP地址(网络层) –> MAC地址决定我的目标邮局位置(数据链路层) –> 将信件投递(物理层) –> 向上传
TCP/IP 四层模型
TCP/IP四层模型是一种OSI七层模型的演化,其相当于OSI的用户直接联系层被应用层所替代,而数据链路层以及物理层被网络接口层进行替代。
2.TCP和UDP有什么区别??哪些应用层协议使用了TCP,哪些使用了UDP?
- TCP是面向连接的、可靠的
其实网络的不安全不稳定特性,无论多少次握手都不能保证连接的可靠性
但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性 -
UDP 无连接的、不可靠
UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确
接收,当然也不用重发TCP对应的协议:(1) FTP:定义了文件传输协议,使用21端口。(2) Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。(3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应的协议:(1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。(3) TFTP(Trival File Tran敏感词er Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。
3.TCP三次握手
- 客户端 发起握手,目的端点是 服务端 的端点 post_server
- 生成一个随机数作为它的初始化发送序号 x
- 发出一个同步报文段,SYN=1,发送序号 seq=x
- 并进入SYN_SEND状态,等待服务器确认
- 服务端监听到端口 post_server 上有连接请求,响应
- 生成一个随机数作为它的初始发送序号 seq = y
- 发出同步报文字段并对主机 A 端口1的连接请求进行确认,发送ack=x+1
- 即发送 SYN+ACK 包,此时服务器进入SYN_RECV状态
- 主机 A
- 发出对 服务端 端口 post_server 的确认,确认序号 ack=y+1,还有seq=x+1
- 客户端和服务器进入ESTABLISHED状态,完成三次握手
四次握手关闭连接
1. 主机 A 关闭 A主机的 端口1 到 B主机的 端口2 的传输连接:
应用程序通知 TCP 数据已经发送完毕时,关闭连接;
TCP 向主机 B 发送一个带 FIN 附加标记的报文段(FIN 表示 finish),FIN=1,seq=x。
2. 主机 B 响应:
收到这个 FIN 报文段之后,并不立刻用 FIN 报文段回复主机 A,而是先向主机 A 发送一个确认序号 ,ACK=1,ack=x+1;
同时通知自己相应的应用程序,主机 A 方传输已经结束,对方要求关闭连接(先发送 ACK 的目的是为了防止这段时间内,主机 A 重传 FIN 报文段)。
3. 主机 B 关闭 端口2到端口1的传输连接:
应用程序告诉 TCP: 我要彻底地关闭连接;
TCP 收到对最后数据的确认后,向主机 A 发送一个 FIN 报文段。FIN=1,seq=y,y 是 B
发送数据的最后字节的序号加1。ACK=1,seq=x+1。
4. 主机 A 响应:
收到这个 FIN 报文段之后,向主机 B 发送一个 ACK 表示连接彻底释放。ACK=1,ack=y+1;
主机B收到主机A的ACK报文段以后,就关闭连接;此时,主机A等待2MSL (Maximum Segment
Lifetime)后依然没有收到回复,则证明主机 B已正常关闭,那好,主机A也可以关闭连接了。
为什么采用3次握手而不是2次握手?
- 第一次握手 客户端发,服务端 知道 客户端 可以 发消息
- 第二次握手 服务端收和发,客户端 知道 服务端 可以 接收消息 和 发消息
- 第三次握手 客户端收和发,服务端 知道 客户端可以 接收消息 和 发消息
3 次是双向通信的最小值,也就是 SYN, SYN ACK, ACK ,两个发送、两个接收 ,其中第二次把接收和发送合在一起了
如果两次握手的话,客户端有可能因为网络阻塞等原因会发送多个请求报文,这时服务器就会建立连接,浪费掉许多服务器的资源。所以要增加第三次握手。
4.什么是socket?
socket(也叫套接字)最初是在Unix系统上开发的网络通信的接口。
两种形式的socket:
- 流式套接字,对应与TCP协议。
- 数据报套接字,对应与UDP协议。
5.什么是https协议?https协议用到了哪种**?
https是在http上面套了一层ssl,用来实现安全连接。用到的**有对称**和非对称**。基本上就是有数字证书,然后把对称**作为消息内容,通过非对称**来进行传输。之后双方的通信就通过对称**来进行解密就行了。