福哥答案2020-09-23:#福大大架構師每日一題#編程
福哥口訣法:T源目序缺首保 緊確推和復同終 窗校緊選數(TCP格式:源端口,目的端口,序號,確認號,首部長度,保留,緊急位URG,確認位ACK,推送位PSH,復位位RST,同步位SYN,終止位FIN,窗口,校驗和,緊急指針,選項,數據)網絡
此答案來自知乎:架構
typedef struct _TCP_HEADER
{
short m_sSourPort; // 源端口號16bit
short m_sDestPort; // 目的端口號16bit
unsigned int m_uiSequNum; // 序列號32bit
unsigned int m_uiAcknowledgeNum; // 確認號32bit
short m_sHeaderLenAndFlag; // 前4位:TCP頭長度;中6位:保留;後6位:標誌位
short m_sWindowSize; // 窗口大小16bit
short m_sCheckSum; // 檢驗和16bit
short m_surgentPointer; // 緊急數據偏移量16bit
}attribute((packed))TCP_HEADER, *PTCP_HEADER;socket
源端口號以及目的端口號:
各佔2個字節,端口是傳輸層和應用層的服務接口,用於尋找發送端和接收端的進程,經過這兩個端口號和IP頭部的ip發送和接收號,能夠惟一的肯定一個鏈接。
通常來說,經過端口號和IP地址,能夠惟一肯定一個TCP鏈接,在網絡編程中,一般被稱爲一個socket接口。ui
序號:
佔4字節,用來標識從TCP發送端向TCP接收端發送的數據字節流。url
確認序號:
佔4字節,包含發送確認的一端所指望收到的下一個序號,所以,確認序號應該是上次已經成功收到另外一端數據字節序號加1。.net
數據偏移:
佔4位,最大爲1111即15個數字,一個表明4個字節,用於指出TCP首部長度,若不存在選項,則這個值爲20字節,數據偏移的最大值爲60字節。計算機網絡
保留字段:
佔6位,值是肯定的,暫時可忽略,值全爲0。指針
標誌位:
RG(緊急): 爲1時代表緊急指針字段有效。
ACK(確認):爲1時代表確認號字段有效。
PSH(推送):爲1時接收方應儘快將這個報文段交給應用層。
RST(復位):爲1時代表TCP鏈接出現故障必須重建鏈接。
SYN(同步):在鏈接創建時用來同步序號。
FIN (終止): 爲1時代表發送端數據發送完畢要求釋放鏈接。blog
接收窗口:
佔2個字節,用於流量控制和擁塞控制,表示當前接收緩衝區的大小。在計算機網絡中,一般是用接收方的接收能力的大小來控制發送方的數據發送量,這樣能夠避免快主機導致較慢主機的緩衝區溢出。TCP鏈接的一端根據緩衝區大小肯定本身的接收窗口值,告訴對方,使對方能夠肯定發送數據的字節數。
校驗和:
佔2個字節,範圍包括首部和數據兩部分。檢查當前的TCP包是否有問題,有沒有損壞丟失。