1、TCP的三次握手和四次挥手

1.1 三次握手:

客户端请求 -> 服务器响应 -> 客户端确认收到响应,建立连接(保证网络正常)

1.2 四次挥手

客户端请求 -> 服务器响应该请求 -> 服务器确认数据传送完毕, 发送关闭连接的响应 -> 客户端发送响应,在2MSL内未收到回复则视为服务器端已收到该响应并关闭连接接口,客户端关闭连接。

1.3 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

2、TCP和UDP的区别、比较

UDPTCP
是否连接无连接面向连接
是否可靠不可靠传输,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
连接对象个数支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
传输方式面向报文面向字节流
首部开销首部开销小,仅8字节首部最小20字节,最大60字节
适用场景适用于实时应用(IP电话、视频会议、直播等)适用于要求可靠传输的应用,例如文件传输

3、链表反转

链表反转有两种方法:

  • 就地反转法
//就地反转法interface ListNode {    value: string;    next: ListNode;}function reverseList1(head:ListNode) {    if (head == null)        return head;    let dummy = null;    dummy.next = head;    let prev = dummy.next;    let pCur = prev.next;    while (pCur != null) {        prev.next = pCur.next;        pCur.next = dummy.next;        dummy.next = pCur;        pCur = prev.next;    }    return dummy.next;}
  • 头节点插入法
interface ListNode {    value: string;    next: ListNode;}function reverseList2(head: ListNode) {    let dummy = null;    let pCur = head;    while (pCur != null) {        ListNode pNex = pCur.next;        pCur.next = dummy.next;        dummy.next = pCur;        pCur = pNex;    }    return dummy.next;}

参考连接

  • TCP三次握手和四次挥手过程
  • TCP和UDP比较
  • 单链表反转总结篇