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