客戶端請求 -> 服務器響應 -> 客戶端確認收到響應,創建鏈接(保證網絡正常)html
客戶端請求 -> 服務器響應該請求 -> 服務器確認數據傳送完畢, 發送關閉鏈接的響應 -> 客戶端發送響應,在2MSL內未收到回覆則視爲服務器端已收到該響應並關閉鏈接接口,客戶端關閉鏈接。typescript
雖然按道理,四個報文都發送完畢,咱們能夠直接進入CLOSE狀態了,可是咱們必須假象網絡是不可靠的,有能夠最後一個ACK丟失。因此TIME_WAIT狀態就是用來重發可能丟失的ACK報文。segmentfault
UDP | TCP | |
---|---|---|
是否鏈接 | 無鏈接 | 面向鏈接 |
是否可靠 | 不可靠傳輸,不使用流量控制和擁塞控制 | 可靠傳輸,使用流量控制和擁塞控制 |
鏈接對象個數 | 支持一對一,一對多,多對一和多對多交互通訊 | 只能是一對一通訊 |
傳輸方式 | 面向報文 | 面向字節流 |
首部開銷 | 首部開銷小,僅8字節 | 首部最小20字節,最大60字節 |
適用場景 | 適用於實時應用(IP電話、視頻會議、直播等) | 適用於要求可靠傳輸的應用,例如文件傳輸 |
鏈表反轉有兩種方法:服務器
//就地反轉法 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; }
參考鏈接網絡