答案:不能!舉反例,進程B所在機器的TCP收到進程A發送的「hello」信息後,告訴進程A發送成功,但有可能沒有當即將數據交給進程B,而是放在本身的緩衝區中,等待進程B讀取,若是機器此時忽然掉電,緩衝區中的信息將丟失,進程B將不可能收到「hello」字符串。緩存
答案:將TCP報文段首部中的PSH標誌置1,這樣會讓B端的TCP協議收到數據後儘快交給進程B,能不緩存儘可能不要緩存。安全
答案:簡單說,就是TCP容許半關閉狀態的存在。當進程A向進程B發送FIN,B也向A發送確認後。此時此刻的狀態就是半關閉狀態,A發送的FIN就是告訴B:「我要發送的數據都發送完了」但B沒有發送FIN給A,有可能表明B還有沒發送完的數據,若是B也發送完數據了,B就發送FIN給進程A,進程A確認B發送的FIN,這時,雙方都已經發送完了數據,鏈接就斷開了,TCP回收相關資源。服務器
答案:處於半打開狀態。就是客戶端還以爲鏈接是正常的,服務器這邊已經沒有鏈接的任何信息了。併發
答案:服務器收到客戶端的請求會進行一次ARP查詢,得到客戶端MAC地址,然而因爲已經丟失了全部鏈接信息,此時的服務器是一臉懵逼(就像喝了孟婆湯!),因而乎,它會發一個RST給客戶端,表示:「哥們,我不認識你,想跟我說話請先發送SYN!」tcp
答案:有兩種可能,一種是服務器端的TCP收到客戶端請求,查看本機上是否有進程在監聽相應的端口,若是有,就把請求交給這個進程,通常而言,這個進程不會接受這個鏈接的,因而它會發一個RST給客戶端。還有一種多是TCP沒有找到哪一個進程在監聽相應的端口,因而TCP就會直接發一個RST給客戶端,通常而言都會是這種狀況。ide
答案:是!隊列
答案:首先,全部的SYN報文段都會發送給服務器進程A,其餘的報文段依據<sourceIP:port,targetIP:port>這個四元組來決定發送給進程B仍是進程C。進程
答案:通常狀況下,服務器進程A會給TCP一個指示,讓TCP維護一個適當長度的鏈接隊列,TCP與新鏈接請求完成三次握手後,就會把這個鏈接放入鏈接隊列中,服務器進程A會在合適的時候來從這個隊列中取鏈接。ip
答案:不會!兩者沒有必然關係。資源
答案:MSS是TCP最大報文段長度,就是TCP發送數據須要對數據分段時,最大的段的字節數。MTU是最大傳輸單元,一般由網卡的硬件特性規定,表示經過該網卡傳輸的數據單元最大的字節數。MSS要受同一臺機器上的MTU限制。好比MTU爲1500字節,那麼MSS就只能是1460字節,這是由於1460字節的數據在經過網卡向外傳輸時,會加上20字節的ip頭和20字節的tcp頭。
答案:不能夠,雖然發送1600字節的數據段沒有突破B的MSS,可是突破了A本身的MSS。這樣一來,當這1600字節的數據段經過A的網卡向B發送時,會被切分爲2個IP片,每一個爲840字節,以保證不突破A的MTU,這顯然下降了傳輸的效率,由於兩個840字節中有着相同的IP頭和TCP頭。
答案:A能夠直接給B發送一個RST,就能夠了,至關於告訴B,我關閉鏈接了,你看着辦吧。這叫作異常關閉。
答案:B的TCP會告訴上層的進程,鏈接已經斷開了,而後就會回收這條鏈接的資源,並不會發送任何確認信息給A。所謂你無情休怪我不義。
答案:不是,A的TCP會啓動一個定時器,等待2MSL的時間,這主要是爲了防止A的ACK沒有成功傳到B,讓B覺得本身的FIN沒有送到A處,反覆重傳FIN的問題。2MSL的時間到時,若是A沒有再次收到B的FIN,說明B成功收到A的ACK,A就能夠安全地斷開這個鏈接,若期間再次收到B的FIN,則A會重傳ACK。