1. 程式人生 > >題目:TCP 的三次握手是什麼,為什麼採用三次握手,兩次握手不可以嗎?

題目:TCP 的三次握手是什麼,為什麼採用三次握手,兩次握手不可以嗎?

TCP 連線是通過三次握手進行初始化的。
三次握手的目的是同步連線雙方的序列號和確認號並交換 TCP 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程:
1. 客戶端向伺服器傳送一個SYN置位的TCP報文,其中包含連線的初始序列號x和一個視窗大小(表示客戶端上用來儲存從伺服器傳送來的傳入段的緩衝區的大小)。
2. 伺服器收到客戶端傳送過來的SYN報文後,向客戶端傳送一個SYN和ACK都置位的TCP報文,其中包含它選擇的初始序列號y、對客戶端的序列號的確認x+1和一個視窗大
小(表示伺服器上用來儲存從客戶端傳送來的傳入段的緩衝區的大小)。
3. .客戶端接收到伺服器端返回的SYN+ACK報文後,向伺服器端返回一個確認號y+1和序號x+1的ACK報文,一個標準的TCP連線完成。
TCP 使用類似的握手過程來結束連線。這可確保兩個主機均能完成傳輸並確保所有的資料均得以接收TCP ClientFlagsTCP Server1 Send SYN (seq=x)----SYN---SYN Received
2 SYN/ACK Received
<---SYN/ACK----
Send SYN (seq=y), ACK (x+1)
3 Send ACK (y+1)----ACK---ACK Received,
ConnectionEstablished
w: ISN (Initial Sequence Number) oftheClientx: ISN of the Server
1. TCP的三次握手最主要是防止已過期的連線再次傳到被連線的主機。
如果採用兩次的話,會出現下面這種情況。比如是A機要連到B機,結果傳送的連線資訊由於某種原因沒有到達B機;於是,A機又發了一次,結果這次B收到了,於是就發信息回來,兩機就連線。
傳完東西后,斷開。結果這時候,原先沒有到達的連線資訊突然又傳到了B機,於是B機發資訊給A,然後B機就以為和A連上了,這個時候B機就在等待A傳東西過去。
2. 三次握手改成僅需要兩次握手,死鎖是可能發生
考慮計算機A和B之間的通訊,假定B給A傳送一個連線請求分組,A收到了這個分組,併發送了確認應答分組。按照兩次握手的協定,A認為連線已經成功地建立了,可以開始傳送資料分組。可是,B在A的應答分組在傳輸中被丟失的情況下,將不知道A是否已準備好,不知道A建議什麼樣的序列號,B甚至懷疑A是否收到自己的連線請求分組。在這種情況下,B認為連線還未建立成功,將忽略A發來的任何資料分組,只等待連線確認應答分組。這樣就形成了死鎖

相關推薦

題目TCP握手是什麼為什麼採用握手握手可以

TCP 連線是通過三次握手進行初始化的。 三次握手的目的是同步連線雙方的序列號和確認號並交換 TCP 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程: 1. 客戶端向伺服器傳送一個SYN置位的TCP報文,其中包含連線的初始序列號x和一個視窗大小(表

題目一球從100米高度自由落下每次落地後反跳回原高度的一半;再落下求它在第10落地時共經過多少米?第10反彈多高?

需注意的是,球在彈起後再落下,也就是除第一次下落,之後的每次彈起和下落經過的距離相同,同一段距離乘二即可。  public class Test10 { public static void main(String[] args) { double high = 100,sum

題目一個數如果恰好等於它的因子之和這個數就稱為"完數"。例如6=1+2+3.程式設計找出1000以內的所有完數。

兩個易錯點:1.sum應該在每次內迴圈結束之後進行初始化。2.對因子之和與數本身的判斷應該在內迴圈結束後。  public class Test9 { public static void main(String[] args) { int sum,i,j; for(i

經典演算法題1找出陣列中只出現一的數字其它數字都出現了

題目:一個整型數組裡除了一個數字之外,其它的數字都出現了兩次。請寫程式找出這個只出現一次的數字。要求時間複雜度是O(n),空間複雜度是O(1)。 分析:由於題目要求時間複雜度為O(n),所以先排序然後比較相鄰數字是否相同的思路被排除。             空間複雜度是O

陣列中有個數只出現一其它的數恰好出現找出這個數。

具體的題意如題 當我第一次碰到這類題的時候是宿舍的舍友分享的,當時他說的問題還要簡單一些,具體的題意是"陣列中只有一個數只出現一次,其它的數恰好出現兩次,找出這個數。"  當時我的第一感覺就是要用到快排,因此得出第一種演算法,將陣列進行快排的第一層排序,然後從中間分開,數字

【程式19】 題目一個數如果恰好等於它的因子之和這個數就稱為“完數”。例如6 = 1+2+3.程式設計 找出1000以內的所有完數。

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> /* 題目:一個數如果恰好等於它的因子之和,這個數就稱為“完數”。例如6 = 1+2+3.程式設計 找出1000以內的所有完數。 */ int main(void){ int num

雨流計數法的matlab實現採用點法與四點法

介紹雨流計數法是20世紀50年代由英國的兩位工程師M.Matsuishi和T.Endo提出來的。該計數法的主要功能是把實測載荷歷程簡化為若干個載荷迴圈,供疲勞壽命估算和編制疲勞試驗載荷譜使用。它以雙引數法為基礎,考慮了動強度(幅值)和靜強度(均值)兩個變數,符合疲勞載荷本身固

(c#)題目一個數如果恰好等於它的因子之和這個數就稱為"完數"

 題目:一個數如果恰好等於它的因子之和,這個數就稱為“完數”。例如6=1+2+3.程式設計//   找出1000以內的所有完數 using System;using System.Collections.Generic;using System.Text; namespace

網站使用者登入、註冊和修改密碼常用程式碼採用層架構

建立使用者表的Sql語句,資料庫為SQL Server2000: create table "User" ( UserID int not null, UserName varc

目前人工智慧最火的是-深度學習、機器學習、採用深入淺出的方法結合例項並配以大量程式碼練習重點講解深度學習框架模型、科學演算法、訓練過 程技巧。

深度學習DeepLearning人工智慧核心技術開發與應用 2018年09月13日— 2018年09月16日 北京 物件:從事人工智慧、深度學習、計算機視覺、人臉識別、 影象處理、 行人檢測、自然語言處理 區塊鏈等醫學 遙感 電力 金融 經濟等高維度 資料領域相關的老師 研究生 工程師;

MySql、Oracle(通用方法)遞迴查詢生成檔案目錄樹(JAVA實現 遞迴過程中訪問資料庫遞迴之前只訪問 進行遞迴前資料準備)

查詢檔案樹 實體類 public class TradeInfoFile { ​ // 檔案編碼(子) private String fileCode; // 所屬檔案編碼(父) private String belongFileCode; // 交易

一個整數陣列中個元素只出現一其他所有元素均出現。 找出只出現一的那個元素。(java實現)

一個整數陣列中,有兩個元素只出現一次,其他所有元素均出現兩次。 找出只出現一次的那兩個元素。 思路大概是這樣的:因為除了這兩個只出現一次的數字外,其餘都是成對出現的,有一種運算子,異或運算,兩個相同的數字異或之後為0,所以將陣列中所有的數字依次異或,結果就是這個兩個支出現一

Android 獲取所有Activity這裡演示了使用者按back鍵退出app

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { exit();

input內容改變後ie11中change事件執行的解決辦法

頁面檔案上傳,程式碼如下: <form id="subId" action="doc/uploadTranslate"enctype="multipart/form-data"method="p

Java Web開發中自定義過濾器被執行的原因分析及解決辦法

本文出處:http://blog.csdn.net/chaijunkun/article/details/7646338,轉載請註明。由於本人不定期會整理相關博文,會對相應內容作出完善。因此強烈建議在原始出處檢視此文。 在Java Web開發過程中,我們可以使用過濾器和Sp

Spring Boot 中的同一個 Bug竟然把我坑了

真是鬱悶,不過這事又一次提醒我解決問題還是要根治,不能囫圇吞棗,否則相同的問題可能會以不同的形式出現,每次都得花時間去搞。刨根問底,一步到位,再遇到類似問題就可以分分鐘解決了。 如果大家沒看過鬆哥之前寫的 Spring Boot 整合 Spring Session,可以先回顧下: Spring Boot 一

深坑啊!同一個Spring AOP的坑我一天踩了

[GitHub 18k Star 的Java工程師成神之路,不來了解一下嗎!](https://github.com/hollischuang/toBeTopJavaer) [GitHub 18k Star 的Java工程師成神之路,真的不來了解一下嗎!](https://github.com/hollis

Tomcat 啟動的問題(ServletContextListener的contextInitialized被執行的問題)

問題:     在啟動 tomcat5 時,控制檯視窗會打印出兩行“hello word”字串? 問題原因:     因為hello應用本來就放在Tomat的預設webapp目錄下(tomcat在啟動時肯定會載入1次),然後又在server.xml中做了配置,為了達到訪問根就可以訪問hello應用

真的懂了:TCP協議中的三次握手和四揮手(關閉連接時, 當收到對方的FIN報文時, 僅僅表示對方在發送數據了, 但是還能接收數據, 己方也未必全部數據都發送對方了。相當於一開始還沒接上話不要緊後來接上話以後得讓人把話講完)

流程圖 .cn 服務 soc knowledge ber tcp連接 是什麽 一次 一、TCP報文格式   下面是TCP報文格式圖:              (1) 序號, Seq(Sequence number), 占32位,用來標識從TCP源端向目的端發送的字節