TCP 初步认识
第一次握手:客戶端TCP首先給服務器端TCP發送一個特殊的TCP數據段。
該數據段不包含應用層數據,并將頭部中的SYN位設置為1,所以該數據段被稱為SYN數據段。
另外,客戶選擇一個初始序列號SEQ,設SEQ=x 并將這個編號放到初始的TCP SYN數據段的序列號字段中。該數據段被封裝到一個IP數據報中,并發送給服務器。
?
第二次握手:一旦裝有TCP SYN數據段的IP數據報到達了服務器主機,服務器將從該數據報中提取出TCP SYN數據段,給該連接分配TCP緩沖區和變量,并給客戶TCP發送一個允許連接的數據段。
這個允許連接的數據段也不包含任何應用層數據。但是,它的頭部中裝載著3個重要信息。首先,SYN被設置為1;其次,TCP數據段頭部的確認字段被設置為x+1;最后,服務器選擇自己的初始順序號,SEQ=y,并將該值放到TCP數據段頭部的
序列號字段中。
?
第三次握手:在接收到允許連接數據段之后,客戶也會給連接分配緩沖區和變量。客戶端主機還會給服務器發送另一個數據段,對服務器的允許連接數據段給出確認。
TCP協議中連接建立的過程
?
TCP連接的釋放---三(或者四)次握手
第一次握手:由進行數據通信的任意一方提出要求釋放連接的請求報文段。
第二次握手:接收端收到此請求后,會發送確認報文段,同時當接收端的所有數據也都已經發送完畢后,接收端會向發送端發送一個帶有其自己序號的報文段。
第三次握手:發送端收到接收端的要求釋放連接的報文段后,發送反向確認。
TCP連接的釋放過程
?
TCP數據報文
序號字段——占 4 字節。TCP 連接中傳送的數據流中的每一個字節都編上一個序號。
序號字段的值則指的是本報文段所發送的數據的第一個字節的序號。
確認號字段——占 4 字節,是期望收到對方的下一個報文段的數據的第一個字節的序號。
數據偏移——占 4? bit,它指出 TCP 報文段的數據起始處距離 TCP 報文段的起始處有多遠。
保留字段——占 6 bit,保留為今后使用,但目前應置為 0。
緊急比特 URG —— 當 URG = 1 時,表明緊急指針字段有效。它告訴系統此報文段中有緊急數據,應盡快傳送(相當于高優先級的數據)。
確認比特 ACK —— 只有當 ACK= 1 時確認號字段才有效。當 ACK= 0 時,確認號無效。
推送比特 PSH (PuSH) —— 接收 TCP 收到推送比特置 1 的報文段,就盡快地交付給接收應用進程,而不再等到整個緩存都填滿了后再向上交付。?
復位比特 RST (ReSeT) —— 當 RST= 1 時,表明 TCP 連接中出現嚴重差錯(如由于主機崩潰或其他原因),必須釋放連接,通知一下對方。
同步比特 SYN —— 同步比特 SYN 置為 1,就表示這是一個連接請求或連接接受報文。
終止比特 FIN (FINal) —— 用來釋放一個連接。當FIN= 1 時,表明此報文段的發送端的數據已發送完畢,并要求釋放運輸連接。
檢驗和 —— 占 2 字節。檢驗和字段檢驗的范圍包括首部和數據和偽段頭(不是TCP里的信息,
但是計算校驗和的時候也計算了的內容:IP地址,TCP數據段長度,協議類型)。
緊急指針字段 —— 占 16 bit(2 字節)。緊急指針指出在本報文段中的緊急數據的位置。?
選項字段 —— 長度可變。TCP 規定了二種選項,最大報文段長度和窗口擴大因子。
最大報文段長度 MSS (Maximum Segment Size) 告訴對方 TCP:“我的緩存所能接收的報文段的數據字段的最大長度是 MSS 個字節。”
MSS 是 TCP 報文段中的數據字段的最大長度。數據字段加上 TCP 首部才等于整個的 TCP 報文段。
窗口擴大因子,用于擴大接收方窗口。
填充字段 —— 這是為了使整個首部長度是 4 字節的整數倍。
轉載于:https://www.cnblogs.com/XiHua/p/3476389.html
總結
- 上一篇: linux nohup命令
- 下一篇: lucene学习的小结