校招笔试题——计算机网络篇(一)
一、TCP的三次握手和四次挥手过程
三次握手:
- 客户端向服务端发出连接请求,等待服务确认。客户端发送SYN包至服务器,并进入SYN_SENT状态,等待服务器确认。
- 服务端收到请求,并发确认连接信息。服务器收到客户端的SYN包,发送一个ACK,同时发送自己的SYN,此时服务器进入SYN_RCVD状态。
- 客户端收到服务端确认连接信息,建立连接。客户端接收到服务器发送的SYN+ACK后,进入ESTABLISHED状态,并发送服务器SYN包的确认ACK,服务器接收到客户端ACK后,进入ESTABLISHED状态。
当客户端和服务器都进入ESTABLISHED状态后,客户端和服务器之间就可以开始双向传递数据了。
注:为什么是三次握手?若客户端发送的连接请求报文在某个网络结点长时间滞留了,以致延误到链接释放以后的某个时间才到达服务器。若两次握手的话只要服务器发出确认数据包,新连接就建立了。但此时客户端并未发出建立连接的请求,不与服务器通信。此时的服务器一直等待客户端的请求,浪费了服务器资源。三次握手保证了连接是在服务器与客户端共同确认后才建立的。
类比
A(客户端)向B(服务端)招手(SYN)后等待B的响应,B确认A招手后向A招手(ACK+SYN),A确认B招手后(ACK),A与B完成了连接的建立。
四次挥手:
- 客户端发出断开连接请求。主动关闭发送方发送一个FIN并进入FIN_WAIT1状态。
- 服务端收到请求,向客户端法“收到断开请求”的确认信息。被动关闭方接收到主动发送方的FIN并发送ACK,此时被动关闭方进入CLOSE_WAIT状态;主动关闭方收到被动关闭方的ACK后,进入FIN_WAIT2状态。
- 服务端确认无数据发送后,向客户端发出“关闭连接”。被动关闭方发送一个FIN并进入LAST_ACK状态。
- 客户端收到“关闭连接”,发送“断开确认”,断开TCP连接。
注:为什么挥手是四次?在第二次握手中,服务器同时向客户端发送ACK和SYN。但在挥手中,第二次挥手和第四次挥手不能同步进行。第三次挥手表示服务端已经停止发送数据,但第二次挥手仅仅是为了告知客户端已经知道客户端不会再发送数据。服务端需要确认无数据发送后才能第三次挥手,告知客户端服务端已经停止发送数据。
类比
A想要结束聊天,对B提出“我没什么要说的了(FIN)”,B接收到之后对A表示“我明白了(ACK)”,并且回想自己是否还有要对A说的话,确认无话可说后对A说“我也没什么要说的了(FIN)”,A收到消息后对B发送“确认结束聊天(ACK)”,即聊天结束。
ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息。忽略确认号字段。
SYN:同步序号,用于建立连接过程。握手时发送。
FIN:finish标志,用于释放连接。挥手时发送。
二、OSI七层协议,TCP/IP四层协议
OSI七层协议
由下至上
- 物理层:通过物理介质传输比特流。常用设备有集线器,中继器,调制解调器,网线,双绞线,同轴电缆。(比特Bit)
- 数据链路层:将比特组合成字节,再将字节组合成帧。使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。数据链路层分为两个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。MAC子层处理CSMA/CD算法等。(帧Frame)
- 网络层:负责数据的传输,路径及地址选择。常用协议有IP、ARP。(包Packet)
- 运输层:建立、管理和维护端到端的连接,常用协议有TCP、UDP。(段Segment)
- 会话层:负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。(会话协议数据单元SPDU)
- 表示层:数据格式转化、数据加密。(表示协议数据单元PPDU)
- 应用层:为应用程序提供服务。常见的应用层网络服务协议有:HTTP,HTTPS,FTP,POP3,SMTP等。(应用协议数据单元APDU)
TCP/IP四层协议
由下至上
- 网络接口层:针对不同物理网络的连接形式的协议。网络接口层包含在OSI体系中的数据链路层和物理层。
- 网际层:(IP)负责数据的传输,路径及地址选择。即OSI体系中的网络层。
- 运输层(TCP或UDP):确认数据传输及进行纠错处理。即OSI体系中的运输层
- 应用层(各种应用层协议如TELNET,FTP,SMTP):各种服务及应用程序通过该层利用网络。包含OSI体系中的会话层、表示层、应用层。
网络模型的理解
网络模型的作用即对数据进行封装。我们使用的程序通过应用层一层一层往下传输,直到最后的网络接口层,然后通过网线发送到互联网上.数据每往下走一层,就会被这一层的协议增加一层包装,等发送到互联网上时,就已经比原始数据多了四层包装。
当另一台计算机接收到数据包时,会从网络接口层再往上一层一层传输,每传输一层就拆开一层包装。到最后的应用层就得到了原始数据。
上面提到的"包装"其实就是给数据头部增加一个标志,即一个数据块。拆包装的过程则相反。
OSI体系复杂,而平时所说的五层协议体系是为了介绍网络原理设计,在实际应用中主要是TCP/IP四层体系结构。
Socket
socket通信技术就是两台联网计算机之间交换数据的技术,大部分的编程语言都提供了自己的Socket编程接口。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,它把复杂的TCP/IP协议族隐藏在Socket接口后面。对用户来说,可以直接通过Socket去组织数据,以符合指定的协议。
三、Http和Https
Http
HTTP,即超文本传输协议,是一个基于请求和响应,无状态的,应用层的协议,常用于TCP/IP协议传输数据。用于从万维网服务器传输超文本到本地浏览器的传输协议。
HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。
Https
HTTPS协议是由SSL(Secure Socket Layer)和HTTP协议构建的可进行加密传输,身份认证的网络协议,运行于SSL上,SSL运行于TCP上,是添加了加密和认证机制的HTTP。HTTPS通信需要证书
区别
- 端口不同:HTTP为80端口,HTTPS为443端口。
- 资源消耗不同:HTTPS通信会消耗更多的CPU和内存资源。
四、TCP和UDP
TCP和UDP是TCP/IP协议族中两个最具有代表性的传输层协议。
UDP(User Datagram Protocol)
UDP协议的全称是用户数据报协议。UDP不需要像TCP需要三次握手建立连接后再发送数据,可以直接发送。并且不对数据报文进行任何拆分和拼接操作。
TCP(Transmission Control Protocol)
TCP协议全称是传输控制协议,是一种面向连接的,可靠的,基于字节流的传输层通信协议。需要通过三次握手建立连接后进行通信,结束时也需要通过四次挥手断开连接。
区别 :
- TCP协议面向连接,UDP无连接
- TCP可靠,UDP不可靠
- TCP只支持点对点通信,UDP支持一对一,一对多,多对一,多对多的通信模式
- TCP面向字节流,UDP面向报文
- TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信,因为可以接受个别错误
- TCP首部开销(20字节)比UDP的首部开销(8字节)大
五、常用端口号
协议/服务名称 | 端口号 | 介绍 |
---|---|---|
FTP(File Transfer Protocol) | 20、21 | 20用于连接,21用于传输 |
SSH(Secure Shell) | 22 | 安全外壳协议 |
TELNET | 23 | 不安全的文本传送 |
SMTP | 25 | 简单邮件传输协议 |
HTTP | 80 | 超文本传输协议 |
DNS | 53 | 域名解析系统 |
HTTPS | 443 | 超文本传输安全协议 |
POP3(Post Office Protocol) | 110 | 邮局协议版本3 |
www代理服务 | 8080 | Apache Tomcat web server,进行网页浏览 |
六、IP地址分类
IP地址是逻辑地址(32位)。由四段组成,每个字段一个字节即8位。由网络地址和主机地址两部分组成。网络地址表示其属于互联网的哪一个网络,主机地址表示属于该网络中的哪一台主机。
针对不同网络规模和组网需求,划分为五类IP地址。通过子网掩码,可以将IP地址划分为网络地址和主机地址两部分。其中A、B、C是基本类,D、E类作为多播和保留使用。
- A类:以0开头,7位网络号,24位主机号,一般用于大型网络。0.0.0.0到127.255.255.255。默认子网掩码255.0.0.0
- B类:以10开头,14位网络号,16位主机号,一般用于中等规模网络。128.0.0.0到191.255.255.255。默认子网掩码255.255.0.0
- C类:以110开头,21位网络号,8位主机号,一般用于小型网络。192.0.0.0到223.255.255.255。默认子网掩码为255.255.255.0。
- D类:以1110开头,28位为多播组号。224.0.0.0到239.255.255.255
- E类:11110开头,27位保留使用。240.0.0.0到247.255.255.255
全0和全1分别代表网络地址和广播地址,不能分配给主机当作一般的IP地址进行使用。