Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 7 years ago.
Improve this question
I have read somewhere that "if you are the remote user connecting to a web server, then your web browser would pick a random TCP port from a certain range of port numbers, and attempt to connect to port 80 on the IP address of the web server". Does that mean that a particular ip address at client side have multiple ports?
Every system which implements TCP/IP has multiple "ports". The IP address refers to the entire system, if that's all we had it would be pretty boring. One program on a system could talk to one program on another system.
Hence the idea of "ports". Ports are just a 16-bit number which "completes" the address. So, your program on system 1.2.3.4 wants to talk to the webserver running on 2.3.4.5. The webserver "binds" itself to port 80. This is an example of a "well known port". But, how is the webserver to get data back to you? Your program needs a "port" of its own. But, it can be any old number, it doesn't need to be well known, so it just tells the OS I need a port and the OS finds one not in use and your program is "bound" to that port. Say it is port 3456.
So now we have all we need: 1.2.3.4:3456 can talk to 2.3.4.5:80
and when the packets of data for port 80 arrive at 2.3.4.5, the OS delivers them to the webserver. And when the packets of data for port 3456 arrive back at your computer (1.2.3.4), your OS delivers them to your web browser.
Whereever you read that, it's wrong. The TCP implementation picks a random local port. Not the browser. There are 65535 TCP ports per IP address, and another 65535 UDP ports.
Related
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 6 years ago.
Improve this question
I have a HP ProCurve switch, I recently added 2 new machines to the network, which I had to assign the IP addresses to manually. Now using these 2 machines I can ping my current machine and other machines on the network, however if I try to ping those 2 machines from my current machine (or others on the network) it does not go through. So my thoughts are that the router table has not updated so that's why I can't ping them from machines that have been on this router.
(Not too sure, not enough knowledge yet)
At least I think so. My question is does the Router Table update it's information automatically?
Assuming your HP Procurve is acting only as a switch, then the Routing Table should not be your problem. A switch does not route IPs, a switch is concerned with routing packets via their layer-2 addresses (MAC addresses). The switch determined which physical port is connected to a device with a MAC address, and when it gets a packet addressed to that MAC address, it sends the packet out that port. The mapping on port to destination mac address is stored in a CAM table inside the switch. This is very different from a routing table that maps IP address ranges to physical interfaces.
What is probably happening is that ARP is not resolving. ARP binds layer 3 IPs to layer 2 MACs in a local network. This can be cause for a few reasons. The first thing i would look into is if the switch has VLANs enabled. This makes the switch act like multiple isolated switches. After that you may need to look at your computers ARP tables to make sure they are correct. The arping command will be useful.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 7 years ago.
Improve this question
I'm trying to understand NAT (Network Address Translation) .
Can someone explain how can I determine if my computer is using a NAT (behind a NAT) , or
if it using its own IP address ?
What Barmar said in the comments is the easiest way. Obtaining your IP address over HTTP is indicative that you are behind either a NAT or an HTTP Proxy server. (I suppose it's possible you could have a public IP address, but your device is configured to route HTTP over a caching proxy).
Formal NAT detection and NAT classification can be done with the STUN protocol or equivalent protocol in which a UDP or TCP service echoes back the IP address back to the client that connected to it.
Another telling sign if you are behind a NAT is that your local IP address is in a private IP address range such as the 192.168.x.y range, the 10.x.y.z range, or then 172.16.0.0-172.31.255.255 range.
And pretty much any Wi-Fi setup is going to be a NAT configuration.
The NAT detection technique is based on two observations about the IP TTL (Time To Live) field.
Host operating systems have characteristic initial TTL values. This property of individual operating system implementations of TCP/IP is well known and can be used as part of a "fingerprint" to identify the operating system that a host is running merely by examining its traffic.
NAT devices or gateways decrement the TTL on packets that they forward.
For more details visit: http://www.sflow.org/detectNAT/
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 9 years ago.
Improve this question
We have a computer that needs to communicate with two routers over one physical ethernet interface. I know this sounds weird, but each router is actually interfaced to an Iridium L Band receiver/transmitter, and we are hoping to double our bandwidth by using two.
I would like to be able to select which link to send data over at the application level, but I'm not quite sure how to do it. My first thought was to establish a virtual IP address in addition to the pre-configured static IP address and use two separate sockets to send() data out over each "interface" separately. My question is, how do I make it so that only one of the routers actually routes the data out to a remote host? The IP addresses and subnet masks of the Iridium transceivers are configurable. Is it possible to make one transceiver only listen to the data coming from one computer IP address? Subnets maybe?
Create vlan inter faces in your machine
ip link add link eth0 name eth0.1 type vlan id 10
ip link add link eth0 name eth0.2 type vlan id 20
assign ip address to eth0.1 and eth0.2 in two networks. Later you can choose which one to bind at application level.
say like this
ifconfig eth0.1 192.168.10.2/24 up
ifconfig eth0.2 192.168.20.2/24 up
Then configure your router in two networks rather than one. Your computer and the routers should be connected to trunk port in the switch. Configure your routers to be in two networks rather than same. Configure subinterfaces in routers so that they listen for vlan 10 and 20 respectively. (how exactly to do this depends on the type of router) I can give you commands only for cisco.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 2 years ago.
Improve this question
I know that when a HTTP request is made, packets are sent from a seemingly-random high-numbered port (e.g. 4575) on the client to port 80 on the server. Then the server sends the reply to the same high-numbered port, the router knows to route that to the client computer, and all is complete.
My question is: How is the return port (4575 in this example) determined? Is it random? If so, within what range? Are there any constraints on it? What happens, for example, if two computers in a LAN send HTTP requests with the same source port to the same website? How does the router know which one to route to which computer? Or maybe this situation is rare enough that no-one bothered to defend against it?
The NAT is going to decide/determine the outbound port for a NATed connection/session, via it's own internal means. Meaning, it will vary according to the implementation of the NAT. This means any responses back will come back to that same outbound port.
As for your question:
What happens, for example, if two computers in a LAN send HTTP
requests with the same source port to the same website?
It will assign different outbound ports for each. Thus, it can distinguish between the two in responses it receives. A NATs would create/maintain a mapping of translated ports, creating new outbound port numbers for new sessions. So even if if there were two different "internal" sessions, from two different machines, on the same port number, it would map to two different port numbers on the outgoing side. Thus, when packets came back in on the respective ports, it would know how to translate them back to the correct address/port on the inside LAN.
Diagram:
It depends on the NAT and on the protocol. For instance I'm writing this message behind a full cone NAT and this particular NAT is configured (potentially hard-wired) to always map an UDP private transport address UDP X:x to the public transport address UDP Y:x. It's quite easy to shed some light on this case with with a STUN server (google has some free stun servers), a cheap NAT, 2 laptops, wire shark and a really really light STUN client which uses a hard coded port like 777. Only the first call will get through and it will be mapped on the original port, the second one will be blocked.
NAT's are a hack, some of them are so bad that they actually override on return the public transport address not only in the header but even in the transported data which is kinda crazy.
ICE protocols has to xor the public address to bypass this issue.
Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
whats the purpose of local IP addresses if there are mac addresses? ARP maps mac addresses to IP addresses but I don't see why it's needed, because I thought data on LANs are sent as frames which only care about the mac addresses.
Long ago and far away, there was more to the world than Ethernet LANs, and application writers didn't care whether your PC was attached to an Ethernet, a Token Ring, an XNS net, or dial-up. IP provides a layer of abstraction and coherence across the top of all those and many more, allowing application authors to ignore the differences between them.
And what happens if you want to talk to a macine that isn't on your local area network (such as StackOverflow).
IP allows routing of packets anywhere, not just locally in your current network segment and, though it's mostly over Ethernet now, IP can equally well work over other underlying layers, giving a consistent view to the upper layers. This is vital given how much stuff is actually built on IP (DNS, FTP, SSH, HTTP and so on).
Machines almost certainly will cache IP-to-ethernet details to speed up subsequent transfers so the impact of translation on the LAN isn't so bad.