1:tcp和udp的区别 TCP:是⾯面向连接的流传输控制协议,具有⾼高可靠性,确保传输数据的正确性,有验证重发机制,因此不不会出现丢失或乱序。
UDP:是⽆无连接的数据报服务,不不对数据报进⾏行行检查与修改,⽆无须等待对⽅方的应答,会出现分组丢失、重复、乱序,但具有较好的实时性,UDP段结构⽐比TCP 的段结构简单,因此⽹网络开销也⼩小。
2、如何尽量量处理理TIMEWAIT过多
sysctl改两个内核参数就⾏行行了了,如下: p_tw_reuse = 1
p_tw_recycle = 1 简单来说,就是打开系统的TIMEWAIT重⽤用和快速回收,⾄至于怎么重⽤用和快速回收,这个问题我没有深究,实际场景中这么做确实有效果。⽤用netstat或者ss观察就能得出结论。还有些朋友同时也会打开syncookies这个功能,如下: p_syncookies = 1 打开这个syncookies的⽬目的实际上是:“在服务器器资源(并⾮非单指端⼝口资源,拒绝服务有很多种资源不不⾜足的情况)不不⾜足的情况下,尽量量不不要拒绝TCP的syn(连接)请求,尽量量把syn请求缓存起来,留留着过会⼉儿有能⼒力力的时候处理理这些TCP的连接请求”。如果并发量量真的⾮非常⾮非常⾼高,打开这个其实⽤用处不不⼤大。
2:流量量控制和拥塞控制拥塞控制⽹网络拥塞现象是指到达通信⼦子⽹网中某⼀一部分的分组数量量过多,使得该部分⽹网络来不不及处理理,以致引起这部分乃⾄至整个⽹网络性能下降的现象,严重时甚⾄至会导致⽹网络通信业务陷⼊入停顿,即出现死锁现象。拥塞控制是处理理⽹网络拥塞现象的⼀一种机制。流量量控制数据的传送与接收过程当中很可能出现收⽅方来不不及接收的情况,这时就需要对发⽅方进⾏行行控制,以免数据丢失。 3:多线程如何同步 windows
线程同步有四种⽅方式:临界区、内核对象、互斥量量、信号量量。
Linux 线程同步有最常⽤用的是:互斥锁、条件变量量和信号量量。 4:进程间通讯的⽅方式有哪些,各有什什么优缺点进程间通信 5:tcp连接建⽴立的时候3次握⼿手,断开连接的4次握⼿手的具体过程建⽴立连接采⽤用的3次握⼿手协议,具体是指:第⼀一次握⼿手是客户端connect连接到server,server accept client的请求之后,向client 端发送⼀一个消息,相当于说我都准备好了了,你连接上我了了,这是第⼆二次握⼿手,第3次握⼿手就是client向server发送的,就是对第⼆二次握⼿手消息的确认。之后client 和server就开始通讯了了。断开连接的4次握⼿手,具体如下:断开连接的⼀一端发送
close请求是第⼀一次握⼿手,另外⼀一端接收到断开连接的请求之后需要对close进⾏行行确认,发送⼀一个消息,这是第⼆二次握⼿手,发送了了确认消息之后还要向对端发送close消息,要关闭对对端的连接,这是第3次握⼿手,⽽而在最初发送断开连接的⼀一端接收到消息之后,进⼊入到⼀一个很重要
的状态time_wait状态,这个状态也是⾯面试官经常问道的问题,最后⼀一次握⼿手是最初发送断开连接的⼀一端接收到消息之后。对消息的确认。 6:epoll与select的区别 select在⼀一个进程中打开的最⼤大fd 是有限制的,由FD_SETSIZE设置,默认值是2048。不不过 epoll则没有这个限制,它所⽀支持的fd上限是最⼤大可以打开⽂文件的数⽬目,这个数字⼀一般远⼤大于2048,⼀一般来说内存越⼤大,fd上限越⼤大,1G内存都能达到⼤大约10w左右。select的轮询机制是系统会去查每个fd是否数据已准备好,当fd很多的时候,效率当然就直线下降了了,epoll采⽤用基于事件的通知⽅方式,⼀一旦某个fd数据就绪时,内核会采⽤用类似callback的回调机制,迅速激活这个⽂文件描述符,⽽而不不需要不不断的去轮询查就绪的描述符,这就是epoll⾼高效最本质的原因。
⽆无论是select还是epoll都需要内核把FD消息通知给⽤用户空间,如何避免不不必要的内存拷⻉贝就很重要,在这点上,epoll是通过内核于⽤用户空间mmap同⼀一块内存实现的,⽽而select则做了了不不必要的拷⻉贝 7:epoll中et和lt的区别与实现原理理LT:⽔水平触发,效率会低于ET触发,尤其在⼤大并发,⼤大流量量的情况下。但是LT 对代码编写要求⽐比较低,不不容易易出现问题。LT模式服务编写上的表现是:只要有数据没有被获取,内核就不不断通知你,因此不不⽤用担⼼心事件丢失的情况。 ET:边缘触发,效率⾮非常⾼高,在并发,⼤大流量量的情况下,会⽐比LT少很多epoll的系统调⽤用,因此效率⾼高。但是对编程要求⾼高,需要细致的处理理每个请求,否则容易易发⽣生丢失事件的情况。
8. 5xx(服务器器错误) 500 (服务器器内部错误)服务器器遇到错误,⽆无法完成请
求。 502 (错误⽹网关)服务器器作为⽹网关或代理理,从上游服务器器收到⽆无效响应。
4xx(请求错误) 404 (未到)服务器器不不到请求的⽹网⻚页 3xx (重定向)302 (临时移动)服务器器⽬目前从不不同位置的⽹网⻚页响应请求,但请求者应继续使⽤用原有位置来进⾏行行以后的请求。
TCP UDP TCP与UDP基本区别 1.基于连接与⽆无连接 2.TCP要求系统资源较多,UDP较少; 3.UDP程序结构较简单 4.流模式(TCP)与数据报模式(UDP); 5.TCP 保证数据正确性,UDP可能丢包 6.TCP保证数据顺序,UDP不不保证 UDP应
⽤用场景: 1.⾯面向数据报⽅方式 2.⽹网络数据⼤大多为短消息 3.拥有⼤大量量Client 4.对数据安全性⽆无特殊要求 5.⽹网络负担⾮非常重,但对响应速度要求⾼高
具体编程时的区别 1.socket()的参数不不同 2.UDP Server不不需要调⽤用listen和accept 3.UDP收发数据⽤用sendto/recvfrom函数 4.TCP:地址信息在connect/accept时确定 5.UDP:在sendto/recvfrom函数中每次均需指定地址信息 6.UDP:shutdown函数⽆无效
socket通信在哪一层编程区别通常我们在说到⽹网络编程时默认是指TCP编程,即⽤用前⾯面提到的socket函数创建⼀一个s
ocket⽤用于TCP通讯,函数参数我们通常填为
SOCK_STREAM。即socket(PF_INET, SOCK_STREAM, 0),这表示建⽴立⼀一个socket⽤用于流式⽹网络通讯。 SOCK_STREAM这种的特点是⾯面向连接的,即每次收发数据之前必须通过connect建⽴立连接,也是双向的,即任何⼀一⽅方都可以收发数据,协议本身提供了了⼀一些保障机制保证它是可靠的、有序的,即每个包按照发送的顺序到达接收⽅方。
⽽而SOCK_DGRAM这种是User Datagram Protocol协议的⽹网络通讯,它是⽆无连接的,不不可靠的,因为通讯双⽅方发送数据后不不知道对⽅方是否已经收到数据,是否正常收到数据。任何⼀一⽅方建⽴立⼀一个socket以后就可以⽤用sendto发送数据,也可以⽤用recvfrom接收数据。根本不不关⼼心对⽅方是否存在,是否发送了了数据。它的特点是通讯速度⽐比较快。⼤大家都知道TCP是要经过三次握⼿手的,⽽而UDP没有。基于上述不不同,UDP和TCP编程步骤也有些不不同,如下: TCP: TCP编程的服务器器端⼀一般步骤是: 1、创建⼀一个socket,⽤用函数socket(); 2、设置socket属性,⽤用函数setsockopt(); * 可选 3、绑定IP地址、端⼝口等信息到socket上,⽤用函数bind(); 4、开启监听,⽤用函数listen(); 5、接收客户端上来的连接,⽤用函数accept(); 6、收发数据,⽤用函数send()和recv(),或者read()和write(); 7、关闭⽹网络连接; 8、关闭监听;
TCP编程的客户端⼀一般步骤是: 1、创建⼀一个socket,⽤用函数socket();
2、设置socket属性,⽤用函数setsockopt();可选
3、绑定IP地址、端⼝口等信息到socket上,⽤用函数bind();可选
4、设置要连接的对⽅方的IP地址和端⼝口等属性;
5、连接服务器器,⽤用函数connect();
6、收发数据,⽤用函数send()和recv(),或者read()和write();
7、关闭⽹网络连接;
UDP: 与之对应的UDP编程步骤要简单许多,分别如下: UDP编程的服务器器端⼀一般步骤是: 1、创建⼀一个socket,⽤用函数socket(); 2、设置socket属性,⽤用函数setsockopt();可选 3、绑定IP地址、端⼝口等信息到socket上,⽤用函数bind(); 4、循环接收数据,⽤用函数recvfrom(); 5、关闭⽹网络连接;
UDP编程的客户端⼀一般步骤是: 1、创建⼀一个socket,⽤用函数socket();
2、设置socket属性,⽤用函数setsockopt();可选
3、绑定IP地址、端⼝口等信息到socket上,⽤用函数bind();可选
4、设置对⽅方的IP地址和端⼝口等属性;
5、发送数据,⽤用函数sendto();
6、关闭⽹网络连接;
TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,⽽而UDP 则常被⽤用于让⼴广播和细节控制交给应⽤用的通信传输。
UDP补充: UDP不不提供复杂的控制机制,利利⽤用IP提供⾯面向⽆无连接的通信服务。并且它是将应⽤用程序发来的数据在收到的那⼀一刻,⽴立刻按照原样发送到⽹网络上的⼀一种机制。即使是出现⽹网络拥堵的情况下,UDP也⽆无法进⾏行行流量量控制等避免⽹网络拥塞的⾏行行为。此外,传输途中如果出现了了丢包,UDO也不不负责重发。甚⾄至当出现包的到达顺序乱掉时也没有纠正的功能。如果需要这些细节控制,那么不不得不不交给由采⽤用UDO的应⽤用程序去处理理。换句句话说,UDP将部分控制转移到应⽤用程序去处理理,⾃自⼰己却只提供作为传输层协议的最基本功能。UDP有点类似于⽤用户说什什么听什什么的机制,但是需要⽤用户充分考虑好上层协议类型并制作相应的应⽤用程序。
TCP补充: TCP充分实现了了数据传输时各种控制功能,可以进⾏行行丢包的重发控制,还可以对次序
乱掉的分包进⾏行行顺序控制。⽽而这些在UDP中都没有。此外,TCP作为⼀一种⾯面向有连接的协议,只有在确认通信对端存在时才会发送数据,从⽽而可以控制通信流量量的浪费。TCP通过检验和、序列列号、确认应答、重发控制、连接管理理以及窗⼝口控制等机制实现可靠性传输。
TCP与UDP区别总结: 1、TCP⾯面向连接(如打电话要先拨号建⽴立连接);UDP是⽆无连接的,即发送数据之前不不需要建⽴立连接 2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,⽆无差错,不不丢失,不不重复,且按序到达;UDP尽最⼤大努⼒力力交付,即不不保证可靠交付 3、TCP⾯面向字节流,实际上是TCP把数据看成⼀一连串串⽆无结构的字节流;UDP是⾯面向报⽂文的 UDP没有拥塞控制,因此⽹网络出现拥塞不不会使源主机的发送速率降低(对实时应⽤用很有⽤用,如IP电话,实时视频会
议等) 4、每⼀一条TCP连接只能是点到点的;UDP⽀支持⼀一对⼀一,⼀一对多,多对⼀一和多对多的交互通信 5、TCP⾸首部开销20字节;UDP的⾸首部开销⼩小,只有8个字节6、TCP的逻辑通信信道是全双⼯工的可靠信道,UDP则是不不可靠信道
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论