在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  Java  網(wǎng)絡(luò)安全/ 服務(wù)器與客戶端建立socket時,一般會新開一個端口而不是占用80,這個過程和“

服務(wù)器與客戶端建立socket時,一般會新開一個端口而不是占用80,這個過程和“三次握手”之間是什么關(guān)系?

web服務(wù)器一般監(jiān)聽80端口,但只是用來建立連接而不會真正拿來通信。真正的數(shù)據(jù)傳輸?shù)倪B接是在socket.accept()步驟之后新開的一個臨時通信端口。
我的問題是:

  1. 監(jiān)聽端口與通信端口的不一致,我上面說的理解是否正確?
  2. 這個“新開端口”的過程和TCP的三次握手是否有關(guān)系,如果沒關(guān)系的話,哪個在前?
  3. 具體使用哪一個新端口,服務(wù)器是如何通知到客戶端的呢?
回答
編輯回答
不討喜

TCP四元組:源IP、目的IP、源端口、目的端口,這個東西確定一個TCP連接,客戶端連接到服務(wù)器的時候,會選沒被使用的端口作為源端口。

真正的數(shù)據(jù)傳輸?shù)倪B接是在socket.accept()步驟之后新開的一個臨時通信端口。

不是新開臨時端口,是客戶端先選了源端口,然后發(fā)起連接進(jìn)行握手,每個TCP數(shù)據(jù)包都帶有四元組,所以服務(wù)器知道客戶端用的端口。

服務(wù)器端真正與客戶端進(jìn)行數(shù)據(jù)傳輸時使用的一般不是80端口

需要TCP四元組才能確定一個TCP連接,所以不存在只用80端口或者只用一個新的端口來傳輸?shù)那闆r,源端口和目標(biāo)端口都是必須的,也不會新開端口。

例如看看一個運行中的redis(對http服務(wù)器同理的),監(jiān)聽6379端口:

clipboard.png

第一個LISTEN狀態(tài)的就是監(jiān)聽的socket,后面ESTABLISHED的就是和客戶端建立的socket,ESTABLISHED的socket還是服務(wù)端還是6379端口,而客戶端端口不同。

2018年8月25日 05:13