zoukankan      html  css  js  c++  java
  • 应聘复习基础笔记1:网络编程之TCP与UDP的优缺点,TCP三次握手、四次挥手、传输窗口控制、存在问题

    一、TCP与UDP的优缺点

    ①TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端的可靠传输。对可靠性要求较高的应用层协议,如FTP、Telnet、SMTP、HTTP、POP3

    ②UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。对实时性要求较高的应用层协DNS、SNMP、QQ

    ③表格对比:

     
     
    TCP
    UDP
    是否面向连接
    面向连接
    无连接
    数据传输可靠性
    可靠的
    不可靠的
    应用场合
    传输大量的数据
    少量数据
    速度

    二、TCP三次握手、四次挥手、存在问题

    ①TCP三次握手:

      过程:首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源,将客户端加入等待链接队列。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

    ②TCP四次挥手:

      过程:中断连接端可以是Client端,也可以是Server端。

    假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

      注意:当客户端进入time-wait后,如果2MSL时间内不在收到服务器端的fin报文,说明服务器端已经收到客户端的ACK应答报文,客户端socket进入closed状态。但是因为网络原因服务器未收到ACK,那么服务器会认为之前发送的的FIN,客户端没有收到,则会继续发送FIN报文,直到收到来自客户端的ACK报文。

    ③存在问题:

    在安全领域,面试时会对三次握手和四次挥手会比较仔细的询问。比如每个步骤作用,如果缺失,会有什么问题等。答案在上边已有,自行总结吧。

    ④TCP client与server的statemerchine:

    CLIENT:

    SERVER:

    ⑤为什么连接的时候是三次握手,关闭的时候却是四次握手?
    答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

    三、传输窗口控制

  • 相关阅读:
    JavaScript实现的7种排序算法
    ECMAScript 2021 正式确认
    win10激活方法
    数据结构之Set | 让我们一块来学习数据结构
    使用jenkins一键打包发布vue项目
    数据结构之LinkedList | 让我们一块来学习数据结构
    数据结构之Queue | 让我们一块来学习数据结构
    数据结构之Stack | 让我们一块来学习数据结构
    数据结构之List | 让我们一块来学习数据结构
    JavaScript中的new,bind,call,apply的原理及简易实现
  • 原文地址:https://www.cnblogs.com/cz-blog/p/4431385.html
Copyright © 2011-2022 走看看