java - Does ServerSocket accept return socket on arbitrary port? -
i've seen many answers similar 1 in regards serversockets in java: "let's have server serversocket on port 5000. client , client b connecting our server.
client sends out request server on port 5000. port on client a's side chosen operating system. usually, os picks next port available. starting point search previously-used port number + 1 (so instance if os happened port 45546 recently, os try 45547).
assuming there no connection problems, server receives client a's request connect on port 5000. server opens own next available port, , sends client. here, client connects new port, , server has port 5000 available again."
i've seen answers in multiple questions on stackoverflow how different port used in returned socket of accept() port serversocket listening on. under impression tcp identified quartet of information:
client ip : client port , server ip : server port ->protocol (to distinguish tcp udp)
so why accept() need return socket bound different port? doesn't quartet of information sent in every header distinguish multiple connections same server port different machines enough not need use different ports on server machine communication?
you correct in tcp packet header's information. contains:
client ip | client port | server ip | server port | protocol or, more appropriately (since client/server become confusing when think bi-directional transfer):
source ip | source port | destination ip | destination port | protocol multiple connections same server port come different ports on client. example may be:
0.0.0.0:45000 -> 1.1.1.1:80 0.0.0.0:45001 -> 1.1.1.1:80 the difference in client ports enough disambiguate 2 sockets, , have 2 separate connections. there no need server open socket on port. receive socket accept method, it's assigned same port , route newly accepted client.
ftp, on other hand, have model server open new unprivileged port (> 1023) , send client client connect (this referred "passive ftp"). resolve issues client behind firewall , can't accept incoming data connections server. however, not case in typical http server (or other standard socket implementation). it's functionality layered on top of ftp.
Comments
Post a Comment