1、什么是C/S架构?
答:C指的是client(客户端软件),S指的是Server(服务端软件)
2、互联网协议是什么?分别介绍五层协议中每一层的功能?
答:互联网的核心就是由一堆协议组成。如果把计算机比作人,互联网协议就是计算机界的英语。所有的计算机都学会了互联网协议,那所有的计算机都就可以按照统一的标准去收发信息从而完成通信了。
- 应用层:规定应用程序的数据格式。
- 传输层:建立端口到端口的通信。
- 网络层:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址
- 数据链路层:定义了电信号的分组方式,分组方式后来形成了统一的标准,即以太网协议ethernet
- 物理层:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0
3、基于tcp协议通信,为何建立链接需要三次握手,而断开链接却需要四次挥手
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
4、为何基于tcp协议的通信比基于udp协议的通信更可靠?
答:TCP可靠的缘故:只要不得到确认,就重新发送数据报,直到得到对方的确认为止。UDP协议是尽最大努力交付,无法保证数据准确交付到目标主机,也不需要对接收到的UDP报文进行确认。
5、流式协议指的是什么协议,数据报协议指的是什么协议?
答:流式协议指的是TCP协议,数据报协议指得是UDP协议。
6、什么是socket?简述基于tcp协议的套接字通信流程
答:Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
服务端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。这时客户端初始化一个socket,然后连接服务器(connect),如果连接成功,这时客户端与服务端的连接就建立了。客户端发送数据请求,服务端接收请求并处理请求,然后把回应数据发给客户端,客户端读取数据,最后关闭数据,一次交互结束。
7、什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?
答:TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。
所谓粘包问题原因:(1)主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。(2)发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一个TCP段。若连续几次需要send的数据都很少,通常TCP会根据优化算法把这些数据合成一个TCP段后一次发送出去,这样接收方就收到了粘包数据。
发生粘包的情况:(1)发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据了很小,会合到一起,产生粘包)(2)接收方不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)
8、基于socket开发一个聊天程序,实现两端互相发送和接收消息
9、基于tcp socket,开发简单的远程命令执行程序,允许用户执行命令,并返回结果
10、基于tcp协议编写简单FTP程序,实现上传、下载文件功能,并解决粘包问题
11、基于udp协议编写程序,实现功能
(1)执行指定的命令,让客户端可以查看服务端的时间
(2)执行指定的命令,让客户端可以与服务的的时间同步