练习题|网络编程-socket开发

1、什么是C/S架构?

  C指的是client(客户端软件),S指的是Server(服务端软件),C/S架构的软件,实现服务端软件与客户端软件基于网络通信。

2、互联网协议是什么?分别介绍五层协议中每一层的功能?

  互联网协议就是计算机界通用的语言;互联网协议分为osi七层或tcp/ip五层或tcp/ip四层;

物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0。

数据链路层的功能:定义了电信号的分组方式按照以太网协议;一组电信号构成一个数据包,叫做一组数据‘帧’;每一数据帧分成:报头head和数据data两部分。head前六个字节和后六个字节是mac地址,基于mac地址来标示对方;在局域网内以广播的方式工作。

网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址。

传输层功能:建立端口到端口的通信,端口即应用程序与网卡关联的编号。tcp和udp

应用层功能:有自己的协议如http、ftp协议,跑应用软件。

扫描二维码关注公众号,回复: 983407 查看本文章

3、基于tcp协议通信,为何建立链接需要三次握手,而断开链接却需要四次挥手?

tup协议,客户端给服务端发一次消息,服务端要回应下并且给发给客户端,然后客户端再发给服务端,中间两步回应下+给客户端发消息可以合成一步,链接建立完成也就是三次握手;客户端说要断开链接PIN=1,服务端确认下ack=1,客户端接收到了,这条管道就断开了,服务端要断开发PIN=1,客户端回一个ack=1,管道就断开了。

客户端说把数据传完了,服务端不一定传完数据了,中间那两步不能合成一步,所以断开链接需要四次挥手。

4、为何基于tcp协议的通信比基于udp协议的通信更可靠?

   tcp协议一定是先建好双向链接,发一个数据包要得到确认才算发送完成,没有收到就一直给你重发;udp协议没有链接存在,udp直接丢数据,不管你有没有收到。

5、‍流式协议指的是什么协议,数据报协议指的是什么协议?

  流式协议指的是tcp协议,数据报协议指的是udp协议

6、什么是socket?简述基于tcp协议的套接字通信流程 

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部。 

 服务端先初始化Socket实例化一个类拿到对象(才能调用下面的接口),然后绑定IP端口(bind),监听(listen)就是说客户端可以来连我了,调用accept接收链接;这时客户端初始化一个socket,然后connect与服务端建立好双向链接与accept对应。客户端发送请求数据,服务端处理请求并给客户端回应数据,这样一个通信循环;最后关闭套接字,一次交互结束。

7、什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?

 如客户端只recv(1024), 可结果比1024长那怎么办,只好在服务器端的IO缓冲区里把客户端还没收走的暂时存下来,等客户端下次再来收,所以当客户端第2次调用recv(1024)就会首先把上次没收完的数据先收下来,再收df命令的结果。

这个现象叫做粘包,就是指两次结果粘到一起了。它的发生主要是因为socket缓冲区导致的。

所谓粘包问题原因:(1)主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。(2)发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一个TCP段。若连续几次需要send的数据都很少,通常TCP会根据优化算法把这些数据合成一个TCP段后一次发送出去,这样接收方就收到了粘包数据。

发生粘包的情况:(1)发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据了很小,会合到一起,产生粘包)(2)接收方不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)

8、基于socket开发一个聊天程序,实现两端互相发送和接收消息

9、基于tcp socket,开发简单的远程命令执行程序,允许用户执行命令,并返回结果

10、基于tcp协议编写简单FTP程序,实现上传、下载文件功能,并解决粘包问题

11、基于udp协议编写程序,实现功能

  1. 执行指定的命令,让客户端可以查看服务端的时间

  2. 执行指定的命令,让客户端可以与服务的的时间同步

猜你喜欢

转载自www.cnblogs.com/shengyang17/p/8822745.html