本系列将题型分门别类,重要的地方用星号标注,帮助大家打好基础。第三章网络编程1.TCP和UDP的区别TCP——传输控制协议,提供面向连接的、可靠的字节流服务。在客户端和服务器端相互交换数据之前,双方必须先建立TCP连接,然后数据才能传输。UDP---UserDatagramProtocol,是一种简单的面向数据报的传输层协议。UDP不提供可靠性,它只是将应用程序发送的数据报发送给IP层,但不保证一定能到达目的地。1)TCP是面向连接的,UDP是面向无连接的2)UDP程序结构比较简单3)TCP是面向字节的,UDP是基于数据报的4)TCP保证数据正确性,UDP可能丢包5)TCP保证数据按顺序到达,UDP不保证2、TCP和UDP的优缺点TCP的优点:可靠、稳定TCP的可靠性体现在TCP在传输数据前会进行三次握手建立连接,并且有是数据传输时的确认、窗口、重传和拥塞控制机制。数据传输完毕后,会断开连接,以节省系统资源。TCP的缺点:速度慢,效率低,系统资源占用高,容易被攻击。在传输数据之前,需要先建立一个连接,这会消耗时间,而在传输数据时,确认机制、重传机制、拥塞机制等都会消耗大量时间,并维护每个设备上的所有传输连接。但是,每次连接都会占用系统的CPU、内存等硬件资源。由于TCP有确认机制和三次握手机制,这些也使得TCP很容易被利用来实现DOS、DDOS、CC等攻击。UDP的优点:速度快,比TCP稍微安全一些。UDP没有TCP拥有的各种机制。它是一种无状态的传输协议,因此数据传输速度非常快。没有了TCP的这些机制,被攻击利用的机会就少了,但是也没有办法避免被攻击。UDP的缺点:不可靠、不稳定由于没有TCP这样的机制,UDP传输数据时,如果网络质量不好,很容易丢包,造成数据丢失。3、TCPUDP应用场景TCP:传输一些对信号完整性和信号质量有要求的信息。UDP:当网络通信质量不高,但要求网络通信速度快时。4.为什么TCP是可靠连接?因为tcp传输的数据满足三大条件,不丢失,不重复,有序到达。五、OSI典型网络模型,简单说一下它有什么六、三次握手、四次握手和三次握手1、TCP服务器进程首先创建一个传输控制块TCB,随时准备接受客户端进程的连接请求。此时服务器进入LISTEN(监听)状态;2、TCP客户端进程也先创建传输控制块TCB,然后向服务器发送连接请求报文,同样是报文头中的位置SYN=1,同时选择一个初始序号seq=x,此时,TCP客户端进程进入SYN-SENT(同步发送状态)状态。TCP规定一个SYN报文段(SYN=1的报文段)不能携带数据,但是需要消耗一个序号。3、TCP服务器收到请求报文后,如果同意连接则发送确认报文。确认报文中,ACK=1,SYN=1,确认号为ack=x+1,还为自己初始化了一个序号seq=y。此时TCP服务器进程进入SYN-RCVD(同步接收)状态。这个消息同样不能携带数据,但是它也消耗了一个序号。4、TCP客户端进程收到确认后,还需要给服务器一个确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1。此时TCP连接建立,客户端进入ESTABLISHED(连接建立)状态。TCP规定ACK段可以携带数据,但如果不携带数据,则不会消耗序号。5、服务器端收到客户端的确认后,也进入ESTABLISHED状态,之后双方就可以开始通信了。四次挥手1、客户端进程发送连接释放消息,停止发送数据。释放数据报文头,FIN=1,其序号为seq=u(等于之前传输的数据最后一个字节的序号加1),此时客户端进入FIN-WAIT-1(停止等待1)状态。TCP规定即使FIN段不携带数据,也仍然要消耗一个序号。2、服务器收到连接释放报文,发送确认报文,ACK=1,ack=u+1,并带上自己的序号seq=v,此时服务器进入CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层应用进程,客户端向服务器方向释放。此时处于半关闭状态,即客户端没有数据发送,但是如果服务端发送数据,客户端还是要接受。这个状态会持续一段时间,也就是整个CLOSE-WAIT状态的持续时间。3、客户端收到服务器的确认请求后,此时,客户端进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放消息(在此之前,需要接受服务器发送的最后一条消息)数据)。4、服务端发送完最后一个数据后,向客户端发送连接释放报文,FIN=1,ack=u+1,因为处于半关闭状态,服务端可能又发送了一些数据,假设此时序列号为seq=w。此时服务器进入LAST-ACK(最终确认)状态,等待客户端的确认。5、客户端收到服务器的连接释放报文后,必须发送确认,ACK=1,ack=w+1,自己的序号为seq=u+1。此时客户端进入TIME-WAIT(等待时间)状态。注意此时TCP连接还没有被释放,只有经过2***MSL(MaximumSegmentLifetime)时间,相应的TCB被客户端撤销后,客户端才进入CLOSED状态。6、服务器只要收到客户端的确认,就会立即进入CLOSED状态。同样,TCB被撤销后,这个TCP连接就结束了。可以看出,服务器比客户端更早结束TCP连接。第四章常用算法常用的十种排序算法可以分为两大类:非线性时间比较排序:通过比较确定元素之间的相对顺序。因为它的时间复杂度不能超过O(nlogn),所以称为非线性排序。线性时间比较类排序。线性时间非比较排序:元素的相对顺序不是由比较决定的,它可以突破比较排序的时间下界,在线性时间运行,所以称为线性时间非比较排序。算法评价项Stability:稳定:如果a原本在b的前面,且a=b,排序后a仍然在b的前面;不稳定:如果a原本在b的前面,并且a=b,排序后,a可能出现在b的后面;排序方式:内部排序:所有的排序操作都在内存中完成,占用常量内存,不占用额外内存。外部排序:因为数据太大,数据放在磁盘上,只能通过磁盘和内存之间的数据传输来进行排序,占用额外的内存。复杂性:时间复杂性:算法执行所花费的时间。空间复杂度:运行程序所需的内存量。至于各种算法的原理和代码实现,因为太多了,比较复杂,本文就不一一列举了。不过推荐两本入门书籍:《啊哈!算法》、《大话数据结构》。电子版我会发在交流群里。排序算法很多,嵌入式要求不高。通过了解冒泡排序、快速排序和插入排序,您可以解决许多问题。比较难的比如动态规划问题,图路径问题,嵌入式测试比较少见,而且这些都是针对纯软件测试的。(大公司和独角兽公司考试会比较难)
