TCP 協議概述 1.TCP提供一種面向連接的、可靠的位元組流服務。 2.兩個應用程式通過TCP連接交換8bit位元組構成的位元組流。 3.每個TCP首部都包含源端和目的端的埠號,用於尋找髮端和收端應用進程。這兩個值加上IP首部中的源端IP地址和目的端IP地址唯一確定一個TCP連接。 4.一個IP地址和 ...
TCP 協議概述
1.TCP提供一種面向連接的、可靠的位元組流服務。
2.兩個應用程式通過TCP連接交換8bit位元組構成的位元組流。
3.每個TCP首部都包含源端和目的端的埠號,用於尋找髮端和收端應用進程。這兩個值加上IP首部中的源端IP地址和目的端IP地址唯一確定一個TCP連接。
4.一個IP地址和一個埠號也稱為一個插口(socket),出現在最早的TCP規範(RFC793)
TCP 保證可靠性:
1.應用數據被分割成 TCP 認為最適合發送的數據塊
2.當 TCP 發出一個段後,它啟動一個定時器,等待目的端確認收到這個報文段,超時重發
3.當 TCP 收到發自 TCP 連接另一端的數據,它將發送一個確認
4.TCP 將保持它首部和數據的檢驗和
5.如果必要, TCP 將對收到的數據進行重新排序
6.TCP 還能提供流量控制
TCP是一個面向連接的協議。
1.使用telnet與tcpdump互相配合進行測試
115.159.28.111.51142 > 10.141.14.117.http: Flags [S], seq 1784777886, win 29200,
10.141.14.117.http > 115.159.28.111.51142: Flags [S.], seq 1181145550, ack 1784777887, win 28960,
115.159.28.111.51142 > 10.141.14.117.http: Flags [.], ack 1, win 229,
seq:Sequence number(順序號碼)
ack:Acknowledge number(確認號碼)
syn:SYN(synchronous建立聯機)
主機A:115.159.28.111 主機B:10.141.14.117.http
第一次握手:A發送syn=1, 產生隨機seq=1784777886
第二次握手:B發送 隨機產生seq=1181145550,ack=接收到的seq+1 1784777887
第三次握手:A發送 ack=1,
TCP首部標誌位:
S SYN 同步序號
F FIN 完成發送
R RST 複位
P PST 推送
. 置為0
結束連接:
TCP 有一個特別的概念叫做 half-close,這個概念是說,TCP 的連接是全雙工(可以同時發送和接收)連接,因此在關閉 連接的時候,必須關閉傳和送兩個方向上的連接。客戶機給伺服器一個 FIN 為1的 TCP 報文,然後伺服器返回給客戶端一個確認 ACK 報文, 並且發送一個 FIN 報文,當客戶機回覆 ACK 報文後(四次握手),連接就結束了。
客戶端狀態遷移:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
服務端狀態遷移:
CLOSED->LISTEN->SYN 收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
長連接:指在一個連接上可以連續發送多個數據包,在連接保持期間,如果沒有數據包發送,需要雙方發鏈路檢測包。
短連接:是指通訊雙方有數據交互時,就建立一個連接,數據發送完成後,則斷開此連接,即每次連接只完成一項業務的發送。
ulimit -a
ulimit -n用於限制進程能夠打開的文件描述符的最大數目。因為任何設備在linux下都是文件,通信的介面也有專門的介面文件負責,所以linux下進程tcp鏈接的最大併發量也受限於該值