iOS面试题-内功-socket

什么是socket ?

1、背景:说到socket,我们需要先看一下它诞生的背景,假设一种情况: 我们想让不同的进程进行网络通信,那么就需要每个进程都需要有一个唯一的标识,但是在不同的操作系统上面进程的PID可能会出现重复的问题,由此也是行不通,为了解决这个问题,TCP/IP协议派上了用场,IP协议可以唯一的表示一台计算机,TCP中的协议类型和端口可以唯一的标示一个计算机中的进程这样就实现了不同计算机之间不同进程的网路通信问题。那么存在一个问题是我们在开发的时候每一次都需要按照面向过程的进行写代码,为了解决这个问题,Socket诞生啦;
2、概念: 它是位于TCP/IP基础之上的一层协议,是计算机进行通信的基石,是TCP/IP协议组的基本操作单元,进行socket需要一个必要元素: 协议类型是UDP或者是TCP、源主机地址、源主机地址进程的端口、目标主机地址、目标主机进程的端口;它不是一个协议而是基于TCP/IP封装了TCP/UDP类型对上层提供了一套基于c的api接口;
3、socket 主要分为两类,当使用的是字节流数据类型,当前的socket就是一个TCP协议Socket;当使用用户包,当前的socket就是一个UDP协议Socket,
3.1 、TCP:
TCP是一种面向连接、可靠性高位于传输层的通信协议:
面向连接: 因为TCP在进行通信之前会进行三次握手,断开连接会进行四次分手;
可靠性高: 因为TCP会对网路环境进行拥塞控制、流量控制;
3.2、拥塞控制、流量控制 、重发机制?

首先我们要直到什么情况下,需要进行拥塞控制、流量控制? 、拥塞控制和流量控制的原理?

拥塞控制:  我们在进行网络通信的时候需要用到网络资源,网络资源包括数据包缓存区、网络带宽、路由节点的处理能力;在某段时间内,若对网络中某一资源的需求超过了该资源能够提供的可用部分时,网络性能就会变坏,这种情况就叫做拥塞;拥塞发生的主要原因是网路能够提供可用资源不足以满足用户的需求;
产生拥塞控制过程: 在早期TCP发送数据包,一致直接发送最大数据量的包,这样很快,网络层的带宽资源、接收节点也处黎不过来,甚至导致网络层崩溃,后期为了解决这个问题引进了嗅探发送,就是刚开始讲自己的拥塞窗口大小设为最大的发送数据即MMS,假设为M;刚开始按照指数级发送数据包,当发送的数据包数量大于M,此时会采用拥塞控制算法,重启从0开始,按线性增大发送数据,并且拥塞窗口的大小为原来一般即M/2,后面一次照这样发送,这期间主要如果服务端没有收到某个数据包,此时服务端会连续向客户端发送3次ACK包请求具体的包,这时,客户端会立即开始快速重传

TCP:详情
https://www.jianshu.com/writer#/notebooks/37246528/notes/43805129

3.2、DUP
UDP是一种无连接、不可靠、基于数据报、位于传输层的通信协议。

3.3、TCP/UDP 优缺点:
TCP优点: 三次握手考验,有确认、窗口、重传、拥塞控制机制,传输完成进程断开,释放资源。
TCP缺点: 验证阶段已被攻击,效率低,占用系统的CPU、内存等硬件资源,不适合小数据量传输,大材小用。
TCP优点:效率高
TCP缺点:不可靠,不适合大型数据传输。
小结TCP与UDP的区别:
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

4、工作的过程:
4.1 、服务端创建一个socket ,绑定服务器主机地址,同肩痛一个端口,然后调用accept函数,一致初一阻塞状态;当客户端有客户端请求,并自己进入阻塞,一直到服务返回数据;服务端保存客户端的socket,然后向客户单的socket 写入数据;客户端接收后可以发送close消息断开链接,那么就完成一次完成的socket交流

猜你喜欢

转载自blog.csdn.net/weixin_34205076/article/details/90922050
今日推荐