關于TCP三次握手
??????服務器端被動打開,監(jiān)聽客戶端的連接,客戶端主動打開洒沦。
1.client發(fā)送一個SYN包給server(包含一個隨機數(shù)A)蚂踊。
2.server收到client的SYN包后發(fā)送一個ACK包(發(fā)送A+1)確認收到正確無誤的包,同時發(fā)送一個SYN包(包含一個隨機數(shù)B)。
3.client發(fā)送一個AC包(B+1)確認收到。
關于套接字
根據(jù)UNIX系統(tǒng)的設計哲學:一切皆文件。設計套接字的目的是使網(wǎng)絡數(shù)據(jù)的傳輸像文件讀寫一樣锤窑,提供一致的使用體驗。
套接字初始化需要三個參數(shù):
通信的目的IP地址嚷炉,IP地址用來標識網(wǎng)絡中計算機(傳輸層)果复。
傳輸層協(xié)議(TCP/UDP)。
端口號渤昌,端口號用來表示同一臺計算機中的進程(應用層)虽抄。
要通過互聯(lián)網(wǎng)進行通信,至少需要一對套接字独柑,一個運行于客戶機端迈窟,稱之為ClientSocket,另一個運行于服務器端忌栅,稱之為serverSocket车酣。
根據(jù)連接啟動的方式以及本地套接字要連接的目標,套接字之間的連接過程可以分為三個步驟:服務器監(jiān)聽湖员,客戶端請求,連接確認瑞驱。
服務器監(jiān)聽:是服務器端套接字并不定位具體的客戶端套接字娘摔,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡狀態(tài)唤反。
客戶端請求:是指由客戶端的套接字提出連接請求凳寺,要連接的目標是服務器端的套接字鸭津。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字肠缨,指出服務器端套接字的地址和端口號逆趋,然后就向服務器端套接字提出連接請求。
連接確認:是指當服務器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求晒奕,它就響應客戶端套接字的請求闻书,建立一個新的線程,把服務器端套接字的描述發(fā)給客 戶端脑慧,一旦客戶端確認了此描述魄眉,連接就建立好了。而服務器端套接字繼續(xù)處于監(jiān)聽狀態(tài)漾橙,繼續(xù)接收其他客戶端套接字的連接請求杆融。
建立套接字后楞卡,Host A中的Program A 先把數(shù)據(jù)給socket霜运,再由套接字經(jīng)網(wǎng)卡封裝成TCP/IP數(shù)據(jù)包傳給Host B后將TCP頭部剝離后傳給socket,最后由socket傳給Program B.