面试官:讲讲七层网络模型与TCP三次握手与四次挥手?

目前,很多面试场景都开始重视基础知识的考察,比如:操作系统、IO(BIO、NIO、AIO)、网络、数据结构和算法等等。这不,就有小伙伴被面试官问到了网络的七层模型和TCP三次握手与四次断开的问题。

C/S架构

客户端/服务端架构

OSI七层架构

七层模型,亦称OSI(Open System Interconnection)参考模型,是参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系。它是一个七层的、抽象的模型体,不仅包括一系列抽象的术语或概念,也包括具体的协议。

分层如下。

应用层 (Application)

网络服务与最终用户的一个接口。协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

表示层(Presentation Layer)

数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)格式有,JPEG、ASCll、DECOIC、加密格式等

会话层(Session Layer)

建立、管理、终止会话。(在五层模型里面已经合并到了应用层)对应主机进程,指本地主机与远程主机正在进行的会话

传输层 (Transport)

定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层

网络层 (Network)

进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP

数据链路层 (Link)

建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。

物理层(Physical Layer)

建立、维护、断开物理连接。(由底层网络定义协议)

TCP的三次握手和四次断开

相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助.

TCP三次握手

所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。

三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的***和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。

面试官:讲讲七层网络模型与TCP三次握手与四次挥手?

第一次握手

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

第二次握手

服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。

第三次握手

客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1

TCP四次断开

TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

面试官:讲讲七层网络模型与TCP三次握手与四次挥手?

第一次断开

Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次断开

Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

第三次断开

Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次断开

Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

Socket

Socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。套接字能唯一表示出互联网上一台主机上的一个应用程序

Socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。Socket就是该模式的一个实现,Socket即是一种特殊的文件,一些Socket函数就是对其进行的操作(读/写IO、打开、关闭)

Socket和File的区别

File模块是针对某个指定文件进行【打开】【读写】【关闭】

Socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】

面试官:讲讲七层网络模型与TCP三次握手与四次挥手?

写在最后

如果你觉得冰河写的还不错,请微信搜索并关注「 Garnett的Java之路 」微信公众号,学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 Garnett的Java之路 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 Garnett的Java之路 」微信公众号文章,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 Garnett的Java之路 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫!

关注我,回复【资料】领取大量学习资源和免费数据!

面试官:讲讲七层网络模型与TCP三次握手与四次挥手?

面试官:讲讲七层网络模型与TCP三次握手与四次挥手?

 觉得有点东西就点一下“赞和在看”吧!感谢大家的支持了!

留言区