計算機網絡-TCP

一、目錄

網絡知識結構

(最近復習了網絡相關的知識,在這進行一次總結,后續會有更新。)

二、網絡基礎

OSI七層協議,從下往上
(1)物理層
(2)數據鏈路層
(3)網絡層
(4)傳輸層
(5)會話層
(6)表示層
(7)應用層

三、TCP的三次握手

1、TCP的三次握手
在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。
第一次握手:建立連接時,客戶端發送SYN包(seq = x)到服務器,并進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到SYN包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(seq=y),即SYN+ACK包,此時服務器進入SYN+RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。

2、為什么需要三次握手才能建立起連接
為了初始化Sequence Number的初始值。

3、首次握手的隱患--SYN超時
(1)、問題起因分析:
a、Server收到Client的SYN,回復SYN-ACK的時候未收到ACK確認。
b、Server不斷重試直至超時,Linux默認等待63秒才斷開連接。(5次)
(2)針對SYN Flood的防護措施
a、SYN隊列滿后,通過tcp_syncookies參數回發SYN Cookie
b、若為正常連接則Client會回發SYN Cookie,直接建立連接

4、建立連接后,Client出現故障怎么辦
保活機制
(1)向對方發送保活探測報文,如果未收到響應則繼續發送
(2)嘗試次數達到包活探測數仍未收到響應則中斷連接

四、TCP的四次揮手

TCP采用四次揮手來釋放連接:
第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態;
第二次揮手:Server收到FIN后,發送一個ACK給Client,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號),Server進入CLOSE_WAIT狀態;
第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態;
第四次揮手:Client收到FIN后,Client進入TIME_WAIT狀態,接著發送一個ACK給Server,確認序號為序號+1,Server進入CLOSED狀態,完成四次揮手;

五、TCP和UDP

1、UDP的特點
(1)面向非連接
傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單的去抓取來自應用程序的數據,并盡可能快的把它扔到網絡上,在發送端UDP傳送數據的速度僅僅是受應用程序生成數據的速度,計算機的能力和傳輸帶寬的限制,在接收端UDP把每個消息段放在隊列中,應用程序每次從隊列中讀取一個消息段。
(2)不維護連接狀態,支持同時向多個客戶端傳輸相同的消息
(3)數據包報頭只有8個字節,額外開銷較小
(TCP20個)
(4)吞吐量只受限于數據生成速率、傳輸速率以及機器性能
(5)盡最大努力交付,不保證可靠交付,不需要維持復雜的鏈接狀態表
(6)面向報文,不對應用程序提交的報文信息進行拆分或者合并
2、TCP和UDP的區別
(1)面向連接 VS 無連接
(2)可靠性
(3)有序性
(4)速度
(5)量級

六、TCP的滑窗

1、RTT和RTO
(1)RTT:發送一個數據包到收到對應的ACK,所花費的時間;
(2)RTO:(Retransmission timeout)重傳時間間隔
TCP在發送一個數據包之后,會啟動一個重傳定時器,而RTO就是這個定時器的重傳時間
2、TCP的滑動窗口
TCP使用滑動窗口做流量控制與亂序重排
(1)保證TCP的可靠性
(2)保證TCP的流控特性

七、總結

本文先復習了TCP的相關知識,有關HTTP和Socket的知識會在后面的文章繼續復習。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容