TCP協議詳解。
I,TCP數據段報文解釋
1,tcp數據段頭部20(固定)+40(可變)字節構成,此數據由報頭偏移 位構成,計算單位為四個字節
表示TCP報文段的首部長度,共4位,由于TCP首部包含一
個長度可變的選項部分,需要指定這個TCP報文段到底有多長。它指
出 TCP 報文段的數據起始處距離 TCP 報文段的起始處有多遠。該字
段的單位是32位(即4個字節為計算單位), 4位二進制最大表示15,
所以數據偏移也就是TCP首部最大60字節
2,源始port16位,范圍是0-65535
代理服務器常用以下端口:
(1). HTTP協議代理服務器常用端口號:80/8080/3128/8081/9080
(2). SOCKS代理協議服務器常用端口號:1080
(3). FTP(文件傳輸)協議代理服務器常用端口號:21
(4). Telnet(遠程登錄)協議代理服務器常用端口:23
HTTP服務器,默認的端口號為80/tcp(木馬Executor開放此端口);
HTTPS(securely transferring web pages)服務器,默認的端口號為443/tcp 443/udp;
Telnet(不安全的文本傳送),默認端口號為23/tcp(木馬Tiny Telnet Server所開放的端口);
FTP,默認的端口號為21/tcp(木馬Doly Trojan、Fore、Invisible FTP、WebEx、WinCrash和Blade
Runner所開放的端口);
TFTP(Trivial File Transfer Protocol ),默認的端口號為69/udp;
SSH(安全登錄)、SCP(文件傳輸)、端口重定向,默認的端口號為22/tcp;
SMTP Simple Mail Transfer Protocol (E-mail),默認的端口號為25/tcp(木馬Antigen、Email
Password Sender、Haebu Coceda、Shtrilitz Stealth、WinPC、WinSpy都開放這個端口);
POP3 Post Office Protocol (E-mail) ,默認的端口號為110/tcp;
WebLogic,默認的端口號為7001;
Webshpere應用程序,默認的端口號為9080;
webshpere管理工具,默認的端口號為9090;
JBOSS,默認的端口號為8080;
TOMCAT,默認的端口號為8080;
WIN2003遠程登陸,默認的端口號為3389;
Symantec AV/Filter for MSE ,默認端口號為 8081;
Oracle 數據庫,默認的端口號為1521;
ORACLE EMCTL,默認的端口號為1158;
Oracle XDB( XML 數據庫),默認的端口號為8080;
Oracle XDB FTP服務,默認的端口號為2100;
MS SQL*SERVER數據庫server,默認的端口號為1433/tcp 1433/udp;
MS SQL*SERVER數據庫monitor,默認的端口號為1434/tcp 1434/udp;
QQ,默認的端口號為1080/udp
3,數據序號32位,TCP為發送的每一個字節都編一個號碼,這里存儲當前數據包數據第一個字節的序號,對應于wireshark(Seq)
確認序號32位,為了安全,TCP告訴接受者希望他下次接到數據包的第一個字節的序號。對應于wireshark(Ack)
4,確認比特ACK—僅僅有當ACK=1時確認號字段才有效。當ACK=0時,確認號無效
正常通信,ACK號除了三次握手時,第一二次握手不帶ACK位,其余正常通信過程都應帶有ACK位。
?同步比特SYN—同步比特SYN置為1,就表示這是一個連接請求或連接接受報文,
只有三次握手前兩次才會使用。
復位比特RST(Reset) —當RST=1時,表明TCP連接中出現嚴重差錯(如因為主機崩潰或其它原因),必須釋放連接,然后再又一次建立運輸連接
終止比特FIN(FINal)—用來釋放一個連接。當FIN=1時,表明此報文段的發送端的數據已發送完成,并要求釋放運輸連接
5,窗體字段16位,窗體字段用來控制對方發送的數據量,單位為字節。TCP連接的一端依據設置的緩存空間大小確定自己的接收窗體大小,然后通知對方以確定對方的發送窗體的上限。
6,可選選項24位 最大報文段長度: Maxium Segment Size, MSS
窗口擴大: Windows Scaling
時間戳: Timestamps
II,TCP三次握手和四次握手
三次握手:
第一次握手:建立連接。客戶端發送連接請求報文段,將SYN位置為1,Sequence Number為x;然后,客戶端進入SYN_SEND狀態,等待服務器的確認;
第二次握手:服務器收到SYN報文段。服務器收到客戶端的SYN報文段,需要對這個SYN報文段進行確認,設置Acknowledgment Number為x+1(Sequence Number+1);同時,自己自己還要發送SYN請求信息,將SYN位置為1,Sequence Number為y;服務器端將上述所有信息放到一個報文段(即SYN+ACK報文段)中,一并發送給客戶端,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK報文段。然后將Acknowledgment Number設置為y+1,向服務器發送ACK報文段,這個報文段發送完畢以后,客戶端和服務器端都進入ESTABLISHED狀態,完成TCP三次握手。
四次揮手:
第一次分手:主機1(可以使客戶端,也可以是服務器端),設置Sequence Number和Acknowledgment Number,向主機2發送一個FIN報文段;此時,主機1進入FIN_WAIT_1狀態;這表示主機1沒有數據要發送給主機2了;
第二次分手:主機2收到了主機1發送的FIN報文段,向主機1回一個ACK報文段,Acknowledgment Number為Sequence Number加1;主機1進入FIN_WAIT_2狀態;主機2告訴主機1,我“同意”你的關閉請求;
第三次分手:主機2向主機1發送FIN報文段,請求關閉連接,同時主機2進入LAST_ACK狀態;
第四次分手:主機1收到主機2發送的FIN報文段,向主機2發送ACK報文段,然后主機1進入TIME_WAIT狀態;主機2收到主機1的ACK報文段以后,就關閉連接;此時,主機1等待2MSL后依然沒有收到回復,則證明Server端已正常關閉,那好,主機1也可以關閉連接了。
III,TCP有限狀態機
CLOSED 沒有任何連接狀態
LISTEN 偵聽狀態,等待來自遠方TCP端口的連接請求
SYN-SENT 在發送連接請求后,等待對方確認
SYN-RECEIVED 在收到和發送一個連接請求后,等待對方確認
ESTABLISHED 代表傳輸連接建立,雙方進入數據傳送狀態
FIN-WAIT-1 主動關閉,主機已發送關閉連接請求,等待對方確認
FIN-WAIT-2 主動關閉,主機已收到對方關閉傳輸連接確認,等待對方發送關閉傳輸連接請求
TIME-WAIT 完成雙向傳輸連接關閉,等待所有分組消失
CLOSE-WAIT 被動關閉,收到對方發來的關閉連接請求,并已確認
LAST-ACK 被動關閉,等待最后一個關閉傳輸連接確認,并等待所有分組消失
CLOSING 雙方同時嘗試關閉傳輸連接,等待對方確認
原創文章,作者:919022966,如若轉載,請注明出處:http://www.www58058.com/78578