Why isn't UDP with reliability (implemented at Application layer) a substitute of TCP?Does TCP use Virtual Circuit Model?Reliablity vs unreliable service at IP and Link LayerWhat is the need for transport Layer?Tcp reliabity handled at hardware level?Does implementing some level of reliability in UDP packets defeat its purpose over using TCP?Why the combination of “TCP/IP” is more popular than “UDP/IP”802.11 multicast buffering due to random back-off mechanismWhy are Internet hosts “not required” to receive an IPv4 datagram larger than 576 bytes?Why is a TCP Socket identified by a 4 tuple?How is a lost DNS query handled

Implicit conversion between decimals with different precisions

How many Jimmys can fit?

Are host configurations in the SSH config merged?

Examples of fluid (including air) being used to transmit digital data?

Groups where no elements commute except for the trivial cases

Shipped package arrived - didn't order, possible scam?

Why does this function pointer assignment work when assigned directly but not with the conditional operator?

Why does mean tend be more stable in different samples than median?

How did the IEC decide to create kibibytes?

Why is there paternal, for fatherly, fraternal, for brotherly, but no similar word for sons?

What is the fundamental difference between catching whales and hunting other animals?

How do resistors generate different heat if we make the current fixed and changed the voltage and resistance? Notice the flow of charge is constant

What are some bad ways to subvert tropes?

What do I need to see before Spider-Man: Far From Home?

Multi-user CRUD: Valid, Problem, or Error?

Why do most airliners have underwing engines, while business jets have rear-mounted engines?

Bringing coumarin-containing liquor into the USA

How do I check that users don't write down their passwords?

Taking advantage when HR forgets to communicate the rules

Is a lowball salary then a part-time offer standard Japanese employment negotiations?

Does the sensor of a dslr count the number of photons that hits it?

My professor has told me he will be the corresponding author. Will it hurt my future career?

What is this airplane with small wings at different angles seen at Paphos Airport?

What is the maximum amount of diamond in one Minecraft game?



Why isn't UDP with reliability (implemented at Application layer) a substitute of TCP?


Does TCP use Virtual Circuit Model?Reliablity vs unreliable service at IP and Link LayerWhat is the need for transport Layer?Tcp reliabity handled at hardware level?Does implementing some level of reliability in UDP packets defeat its purpose over using TCP?Why the combination of “TCP/IP” is more popular than “UDP/IP”802.11 multicast buffering due to random back-off mechanismWhy are Internet hosts “not required” to receive an IPv4 datagram larger than 576 bytes?Why is a TCP Socket identified by a 4 tuple?How is a lost DNS query handled






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








23















TCP provides reliability at transport layer while UDP does not. So, UDP is fast.
But, a protocol at application layer can implement reliable mechanism while using UDP.



In this sense, why isn't UDP with reliability (implemented on Application layer) a substitute of TCP in the case that UDP is faster than TCP while we need reliability?










share|improve this question



















  • 5





    Why would every application provides their own reliability mechanism when they can simply rely on another widely available protocol like TCP?

    – Nakrule
    Jun 27 at 6:12






  • 13





    and how do you propose to implement reliability at application layer without slowing down the stack?

    – JFL
    Jun 27 at 6:59






  • 6





    "Since UDP header is smaller than that of TCP, we can take advantage of data size." The problem with that thinking is that you will probably eat much of the UDP payload with application-layer protocol headers that will decrease the usable data in the UDP payload. The difference between TCP and UDP header size is only 12 bytes. Also, UDP is really designed for small payloads, e.g. 576 bytes; remember that UDP will simply lose datagrams, and the more data in a datagram, the more data is lost when a datagram is lost.

    – Ron Maupin
    Jun 27 at 11:16






  • 21





    Stack Overflow is rife with programmers trying, and failing, to create TCP-like protocols using UDP. The more-experienced programmers tell them to give it up and just use TCP. They all think they can do a better job, but it is highly unlikely.

    – Ron Maupin
    Jun 27 at 14:21






  • 11





    I know this isn't part of your question directly, but one reason UDP can be better is that you can implement only the reliability parts you need. With TCP you get reliability about ordering and delivery. This means TCP can have hiccups while it waits for a previous message to be resent. With UDP you could decide all you want is delivery, but if any message arrives out of order, you don't wait for the missing ones, you just discard them. The pitfall people run in to is trying to replicate TCP 100%. In that case, just use TCP.

    – William Mariager
    Jun 27 at 15:21

















23















TCP provides reliability at transport layer while UDP does not. So, UDP is fast.
But, a protocol at application layer can implement reliable mechanism while using UDP.



In this sense, why isn't UDP with reliability (implemented on Application layer) a substitute of TCP in the case that UDP is faster than TCP while we need reliability?










share|improve this question



















  • 5





    Why would every application provides their own reliability mechanism when they can simply rely on another widely available protocol like TCP?

    – Nakrule
    Jun 27 at 6:12






  • 13





    and how do you propose to implement reliability at application layer without slowing down the stack?

    – JFL
    Jun 27 at 6:59






  • 6





    "Since UDP header is smaller than that of TCP, we can take advantage of data size." The problem with that thinking is that you will probably eat much of the UDP payload with application-layer protocol headers that will decrease the usable data in the UDP payload. The difference between TCP and UDP header size is only 12 bytes. Also, UDP is really designed for small payloads, e.g. 576 bytes; remember that UDP will simply lose datagrams, and the more data in a datagram, the more data is lost when a datagram is lost.

    – Ron Maupin
    Jun 27 at 11:16






  • 21





    Stack Overflow is rife with programmers trying, and failing, to create TCP-like protocols using UDP. The more-experienced programmers tell them to give it up and just use TCP. They all think they can do a better job, but it is highly unlikely.

    – Ron Maupin
    Jun 27 at 14:21






  • 11





    I know this isn't part of your question directly, but one reason UDP can be better is that you can implement only the reliability parts you need. With TCP you get reliability about ordering and delivery. This means TCP can have hiccups while it waits for a previous message to be resent. With UDP you could decide all you want is delivery, but if any message arrives out of order, you don't wait for the missing ones, you just discard them. The pitfall people run in to is trying to replicate TCP 100%. In that case, just use TCP.

    – William Mariager
    Jun 27 at 15:21













23












23








23


4






TCP provides reliability at transport layer while UDP does not. So, UDP is fast.
But, a protocol at application layer can implement reliable mechanism while using UDP.



In this sense, why isn't UDP with reliability (implemented on Application layer) a substitute of TCP in the case that UDP is faster than TCP while we need reliability?










share|improve this question
















TCP provides reliability at transport layer while UDP does not. So, UDP is fast.
But, a protocol at application layer can implement reliable mechanism while using UDP.



In this sense, why isn't UDP with reliability (implemented on Application layer) a substitute of TCP in the case that UDP is faster than TCP while we need reliability?







tcp udp






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jun 27 at 6:14







mallea

















asked Jun 27 at 6:04









malleamallea

2511 silver badge6 bronze badges




2511 silver badge6 bronze badges







  • 5





    Why would every application provides their own reliability mechanism when they can simply rely on another widely available protocol like TCP?

    – Nakrule
    Jun 27 at 6:12






  • 13





    and how do you propose to implement reliability at application layer without slowing down the stack?

    – JFL
    Jun 27 at 6:59






  • 6





    "Since UDP header is smaller than that of TCP, we can take advantage of data size." The problem with that thinking is that you will probably eat much of the UDP payload with application-layer protocol headers that will decrease the usable data in the UDP payload. The difference between TCP and UDP header size is only 12 bytes. Also, UDP is really designed for small payloads, e.g. 576 bytes; remember that UDP will simply lose datagrams, and the more data in a datagram, the more data is lost when a datagram is lost.

    – Ron Maupin
    Jun 27 at 11:16






  • 21





    Stack Overflow is rife with programmers trying, and failing, to create TCP-like protocols using UDP. The more-experienced programmers tell them to give it up and just use TCP. They all think they can do a better job, but it is highly unlikely.

    – Ron Maupin
    Jun 27 at 14:21






  • 11





    I know this isn't part of your question directly, but one reason UDP can be better is that you can implement only the reliability parts you need. With TCP you get reliability about ordering and delivery. This means TCP can have hiccups while it waits for a previous message to be resent. With UDP you could decide all you want is delivery, but if any message arrives out of order, you don't wait for the missing ones, you just discard them. The pitfall people run in to is trying to replicate TCP 100%. In that case, just use TCP.

    – William Mariager
    Jun 27 at 15:21












  • 5





    Why would every application provides their own reliability mechanism when they can simply rely on another widely available protocol like TCP?

    – Nakrule
    Jun 27 at 6:12






  • 13





    and how do you propose to implement reliability at application layer without slowing down the stack?

    – JFL
    Jun 27 at 6:59






  • 6





    "Since UDP header is smaller than that of TCP, we can take advantage of data size." The problem with that thinking is that you will probably eat much of the UDP payload with application-layer protocol headers that will decrease the usable data in the UDP payload. The difference between TCP and UDP header size is only 12 bytes. Also, UDP is really designed for small payloads, e.g. 576 bytes; remember that UDP will simply lose datagrams, and the more data in a datagram, the more data is lost when a datagram is lost.

    – Ron Maupin
    Jun 27 at 11:16






  • 21





    Stack Overflow is rife with programmers trying, and failing, to create TCP-like protocols using UDP. The more-experienced programmers tell them to give it up and just use TCP. They all think they can do a better job, but it is highly unlikely.

    – Ron Maupin
    Jun 27 at 14:21






  • 11





    I know this isn't part of your question directly, but one reason UDP can be better is that you can implement only the reliability parts you need. With TCP you get reliability about ordering and delivery. This means TCP can have hiccups while it waits for a previous message to be resent. With UDP you could decide all you want is delivery, but if any message arrives out of order, you don't wait for the missing ones, you just discard them. The pitfall people run in to is trying to replicate TCP 100%. In that case, just use TCP.

    – William Mariager
    Jun 27 at 15:21







5




5





Why would every application provides their own reliability mechanism when they can simply rely on another widely available protocol like TCP?

– Nakrule
Jun 27 at 6:12





Why would every application provides their own reliability mechanism when they can simply rely on another widely available protocol like TCP?

– Nakrule
Jun 27 at 6:12




13




13





and how do you propose to implement reliability at application layer without slowing down the stack?

– JFL
Jun 27 at 6:59





and how do you propose to implement reliability at application layer without slowing down the stack?

– JFL
Jun 27 at 6:59




6




6





"Since UDP header is smaller than that of TCP, we can take advantage of data size." The problem with that thinking is that you will probably eat much of the UDP payload with application-layer protocol headers that will decrease the usable data in the UDP payload. The difference between TCP and UDP header size is only 12 bytes. Also, UDP is really designed for small payloads, e.g. 576 bytes; remember that UDP will simply lose datagrams, and the more data in a datagram, the more data is lost when a datagram is lost.

– Ron Maupin
Jun 27 at 11:16





"Since UDP header is smaller than that of TCP, we can take advantage of data size." The problem with that thinking is that you will probably eat much of the UDP payload with application-layer protocol headers that will decrease the usable data in the UDP payload. The difference between TCP and UDP header size is only 12 bytes. Also, UDP is really designed for small payloads, e.g. 576 bytes; remember that UDP will simply lose datagrams, and the more data in a datagram, the more data is lost when a datagram is lost.

– Ron Maupin
Jun 27 at 11:16




21




21





Stack Overflow is rife with programmers trying, and failing, to create TCP-like protocols using UDP. The more-experienced programmers tell them to give it up and just use TCP. They all think they can do a better job, but it is highly unlikely.

– Ron Maupin
Jun 27 at 14:21





Stack Overflow is rife with programmers trying, and failing, to create TCP-like protocols using UDP. The more-experienced programmers tell them to give it up and just use TCP. They all think they can do a better job, but it is highly unlikely.

– Ron Maupin
Jun 27 at 14:21




11




11





I know this isn't part of your question directly, but one reason UDP can be better is that you can implement only the reliability parts you need. With TCP you get reliability about ordering and delivery. This means TCP can have hiccups while it waits for a previous message to be resent. With UDP you could decide all you want is delivery, but if any message arrives out of order, you don't wait for the missing ones, you just discard them. The pitfall people run in to is trying to replicate TCP 100%. In that case, just use TCP.

– William Mariager
Jun 27 at 15:21





I know this isn't part of your question directly, but one reason UDP can be better is that you can implement only the reliability parts you need. With TCP you get reliability about ordering and delivery. This means TCP can have hiccups while it waits for a previous message to be resent. With UDP you could decide all you want is delivery, but if any message arrives out of order, you don't wait for the missing ones, you just discard them. The pitfall people run in to is trying to replicate TCP 100%. In that case, just use TCP.

– William Mariager
Jun 27 at 15:21










7 Answers
7






active

oldest

votes


















46














TCP is about as fast as you can make something with its reliability properties. If you only need, say, sequencing and error detection, UDP can be made to serve perfectly well. This is the basis for most real-time protocols such as voice, video streaming etc, where lag and jitter are more important than "absolute" error correction.



Fundamentally, TCP says its streams can be relied upon eventually. How fast that is depends on the various timers, speeds etc. The time taken to resolve errors can be unpredictable, but the basic operations are as fast as practicable when there are no errors. If a system knows something about the kinds of errors which are likely, it might be able to do something which isn't possible with TCP. For example, if single-bit errors are especially likely, you can use error-correcting coding for those bit errors: however, this is much better implemented in the link layer. As another example, if short bursts of whole-packet loss are common, you can address this with multiple transmission without waiting for loss, but obviously this is expensive in bandwidth. Or alternatively, slow the speed down until the error probability is negligible: also expensive in bandwidth. In the end, a protocol has to pay for reliability with either a) bandwidth or b) delay.



In implementation terms, you would find that the programmer-centuries invested in TCP will make it faster than anything general you could afford to make, as well as more reliable in the obscure edge cases.



TCP provides: a ubiquitious method of connecting (essential where the communicating systems have no common control) giving a reliable, ordered, (and deduplicated), two way, windowed, byte stream with congestion control over arbitrary-distance multi-hop networks.



If an application doesn't require ubiquity (your software runs on both sides), or doesn't need all of TCP's features, many people profitably use other protocols, often on top of UDP. Examples include TFTP (minimalistic, with really inefficient error handling, QUIC which is designed to reduce overheads (still marked as experimental), and libraries such as lidgren, which has fine-grained control over exactly which reliability features are required. [Thanks commenters.]






share|improve this answer




















  • 7





    Custom "UDP with reliability" protocols are also extremely common in video games. There are a ton of networking libraries with various implementations. They usually want packets to be ordered and have error correction, without wanting retransmission of lost packets (and receive delays of all future packets).

    – BlueRaja - Danny Pflughoeft
    Jun 27 at 20:19











  • Sounds like you're saying "TCP is the optimal general solution, so it makes to support it natively". +1

    – ikegami
    Jun 27 at 23:01






  • 1





    @BlueRaja-DannyPflughoeft And sometimes you want reliable unordered packets (e.g. visual effects applied to nearby players).

    – immibis
    Jun 28 at 0:38












  • @BlueRaja-DannyPflughoeft if you have a typical example protocol library I'll be happy to incorporate into the answer

    – jonathanjo
    Jun 28 at 12:45






  • 1





    @jonathanjo One I've used is lidgren, which supports 5 different delivery methods (scroll to the bottom). Unity and Unreal Engine also have their own networking APIs that are built atop UDP.

    – BlueRaja - Danny Pflughoeft
    Jun 28 at 17:19



















9














UDP with reliability can indeed be a substitute for TCP. We already have an example of it: it's called QUIC.



From Wikipedia:




Among other applications, QUIC improves performance of connection-oriented web applications that are currently using TCP. It does this by establishing a number of multiplexed connections between two endpoints over User Datagram Protocol (UDP).




The advantage of using UDP versus creating a brand new transport-layer protocol is that routers and other network devices already understand it.






share|improve this answer























  • QUIC has a bit different characteristic from TCP. In some scenarios (reliable network or no encryption needed) it actually is slower: quora.com/…

    – freakish
    Jun 28 at 10:42












  • You can also add WebRTC datachannels to the list which uses UDP via sctp. In fact, when UDP connections are not possible between peers WebRTC will fail over to TCP leaving a noticable drop in performance.

    – JSON
    Jun 30 at 9:42











  • @freakish slower is a generalization in this case. For example QUIC adds additional data to packets to reduce retransmission which effects throughput but not latency.

    – JSON
    Jun 30 at 9:50


















4














You could use UDP to implement TCP functionality at the application layer (reliability, adaptability). You could just as well use TCP in the first place unless something your application really needs can't be done with TCP. If you implement those functions yourself you very likely end off much worse than with TCP. The added overhead decreases overall efficiency as well.



TCP isn't slow - it just requires a handshake before transmitting and the transmission window to adapt to the channel. It can very well shape its throughput to the transmission channel at hand and adapt to changes during the flow, all of which UDP can't do (by itself).



However, protocols above the transport layer are off-topic here.






share|improve this answer




















  • 3





    "You could use UDP to implement TCP functionality at the application layer (reliability, adaptability)" -- I believe that's practically how QUIC, µTP, and often SCTP are already implemented. (Despite that, I usually consider them as being in the upper half of the transport layer, while UDP sits in the lower half.)

    – grawity
    Jun 27 at 15:43







  • 1





    @grawity That depends on your POV - from the application perspective, an intermediate layer is an extension of the transport layer. Formally and from the network (device) perspective, it's all part of the application layer.

    – Zac67
    Jun 27 at 18:17


















4














On a clean network they are pretty equivalent. There are cases where TCP will hang for periods (Anyone ever seen an HTTP screen freeze on load?) but it will not deliver garbage or mix up packets and rarely gives up completely.



UDP can give the application layer more control over the traffic at the cost of an awful lot of work.



The answer to your question is, sometimes it is done that way. Games that require low latency often do exactly that. It's a good deal more work, but the ability to control exactly how many outstanding packets you can have and how often they are retried is often worth it.



So overall the difference is that TCP is a very good general purpose implementation, but there are specific purposes that UDP can do that TCP either does very poorly or not at all--for instance:



  • NEVER giving up (with TCP the connection sometimes hangs and you have to break the connection and restart it)

  • Sending a fast stream of packets that don't require replies and you don't mind missing some occasionally (where only the most recent packet is important, any others can be discarded)--think game position updates--you might get a little "Jump" rather than each step, but you get the same result faster and more reliably.

  • Dealing with iffy networks by analyzing packet drops and dynamically altering how often and how soon you retry--maybe even max packet size.

But in general it's not worth it, TCP is pretty optimal so why go to all the extra work and add a (large) chance of adding bugs and security flaws?






share|improve this answer
































    3














    UDP isn't fast because it is UDP. TCP isn't slow because it is TCP.



    Both protocols are designed with certain guarantees and raw TCP has more guarantees than raw UDP.



    And the rule of thumb is: the price for guarantees is performance.



    There's nothing prohibiting you from implementing TCP guarantees over UDP. But then you get more guarantees and so you have to pay the price. Therefore you reduce the performance to TCP or worse (due to UDP overhead). Unless you know better TCP implementation, which is unlikely. And if you do then (hopefuly) you reveal it and we make the standard TCP faster. And we are back where we started. :)



    You can play with those guarantees as well. Slightly modify this, slightly modify that. And then you end up with a protocol like QUIC which is over UDP and it is very similar to TCP+TLS. In many cases it is faster than TCP (although according to this article latency up to 5% and buffering up to 15% which IMO is not a big deal) but in some scenarios (e.g. reliable network or no need for encryption) it actually is slower (see an explanation here).



    You can also weaken those guarantees and then it makes more sense. For example say you are streaming and so old packets are not interesting. Only the most recent. But congestion is still important. So you take some guarantees from TCP, but not all. And yes, people actually do that (e.g. real-time games). This gives you better performance at the cost of some guarantees.






    share|improve this answer
































      1














      Your idea would be good in deep space.



      The correct answer is "it depends" and "because that would damage the network as a whole". TCP/IP is very kind to networks and automatically adjusts to about the right speed to be fast but not generate tonnes of ICMP return packets.



      When a router with not enough RAM suddenly receives a lot of any kind of packet - say from Tsunami, Bittorrent or FDT - it drops it and fires back to the sender a small failure dis-acknowledgement packet. Now your UDP server has to track and re-transmit that part manually. Some ISP routers shape Bittorrent so many this hurts Tsunami?



      The Tsunami protocol uses UDP with a control channel in TCP. http://tsunami-udp.sourceforge.net/ I found a study which shows it to be slower than a thing called FDT.



      The legendary Fast Data Transfer (FDT) protocol from CERN is capable of saturating any network using multiple TCP streams. Probably it is faster, because it causes less re-transmits that Tsunami, which floods the network with so much UDP, some of it does not make it all the way across.



      UDP is used by unreliable applications: streaming audio, game input/update IO, "ping" is actually ICMP but is not guaranteed, Bittorrent, mosh ssh is awesomely responsive, VOIP telephony, multicast, DNS is sent over UDP AFAIK. Anything that does not mind the odd missing packet and can "catchup" instantly.



      TCP/IP was really the killer invention that allowed app devs so just set and forget. A socket is a pair of IP address and ports, and were designed to be able to be setup and remain for hours, days, even weeks without re-connecting. Email, web, IRC and literally all the killer apps use TCP. But you can get strange pauses in the download that suddenly go faster... and in deep space the connections may time out making Tsunami style transfers best for interstellar file transfers - you could be onto something there!!



      The proof is in the final remarks of this science study extract, which mention the increasing distance thing I'm going on about re: deep space
      From: https://uscholar.univie.ac.at/get/o:300623.pdf




      Without congestion, performance of FDT and GridFTP with TCP is higher
      than Tsunami and UDT. The highest through- put of FDT is 2.34 Gb/s
      with a 1 ms RTT but it decreases rapidly after 100 ms compared to
      GridFTP, which performs better than FDT when link RTT is longer than
      100 ms. Interestingly, the throughput of Tsunami did not decrease
      over increasing RTT, showing it has the most effective congestion
      control with increasing RTT.




      Then again... there is actually a space protocol that is a lot like email which would be better for space. The apps have to not mind time-out values such as forever.






      share|improve this answer






























        0














        TCP != UDP + Reliability



        TCP is not simply UDP with added reliability. TCP offers more features than just reliability. You can read about them in many of the RFCs.



        Any of these features "could" be implemented at the application layer. Eventually there becomes a point where you start reinventing the wheel.



        To name a few features TCP has...



        • Connections creation and termination: performs handshakes and connection closures


        • Flow Control: ensures that sender and receiver transmit at rates where both can handle the data rate.


        • End to end congestion control: allows end nodes to throttle their throughput based on losses. Read about slow start, congestion avoidance, and fast recovery.


        In my experience, UDP is used when speed is a concern over reliability. You can add some level of reliability at the application level that is not 100% as reliable as TCP. For example if you still want fast performance, you can implement forward error correction (FEC) where you transmit the data more than once. You still get good performance and some level of reliability (note quite TCP reliability) without all of the back and forth chit chat to get lost packets. The trade of is that it increases the network utilization but may be suitable for real time applications like gaming or streaming.






        share|improve this answer








        New contributor



        jaybers is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
        Check out our Code of Conduct.



















        • You could describe at those extra features as being about reliability, ultimately.

          – user207421
          Jun 29 at 23:46











        protected by Ron Maupin Jun 28 at 14:43



        Thank you for your interest in this question.
        Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



        Would you like to answer one of these unanswered questions instead?














        7 Answers
        7






        active

        oldest

        votes








        7 Answers
        7






        active

        oldest

        votes









        active

        oldest

        votes






        active

        oldest

        votes









        46














        TCP is about as fast as you can make something with its reliability properties. If you only need, say, sequencing and error detection, UDP can be made to serve perfectly well. This is the basis for most real-time protocols such as voice, video streaming etc, where lag and jitter are more important than "absolute" error correction.



        Fundamentally, TCP says its streams can be relied upon eventually. How fast that is depends on the various timers, speeds etc. The time taken to resolve errors can be unpredictable, but the basic operations are as fast as practicable when there are no errors. If a system knows something about the kinds of errors which are likely, it might be able to do something which isn't possible with TCP. For example, if single-bit errors are especially likely, you can use error-correcting coding for those bit errors: however, this is much better implemented in the link layer. As another example, if short bursts of whole-packet loss are common, you can address this with multiple transmission without waiting for loss, but obviously this is expensive in bandwidth. Or alternatively, slow the speed down until the error probability is negligible: also expensive in bandwidth. In the end, a protocol has to pay for reliability with either a) bandwidth or b) delay.



        In implementation terms, you would find that the programmer-centuries invested in TCP will make it faster than anything general you could afford to make, as well as more reliable in the obscure edge cases.



        TCP provides: a ubiquitious method of connecting (essential where the communicating systems have no common control) giving a reliable, ordered, (and deduplicated), two way, windowed, byte stream with congestion control over arbitrary-distance multi-hop networks.



        If an application doesn't require ubiquity (your software runs on both sides), or doesn't need all of TCP's features, many people profitably use other protocols, often on top of UDP. Examples include TFTP (minimalistic, with really inefficient error handling, QUIC which is designed to reduce overheads (still marked as experimental), and libraries such as lidgren, which has fine-grained control over exactly which reliability features are required. [Thanks commenters.]






        share|improve this answer




















        • 7





          Custom "UDP with reliability" protocols are also extremely common in video games. There are a ton of networking libraries with various implementations. They usually want packets to be ordered and have error correction, without wanting retransmission of lost packets (and receive delays of all future packets).

          – BlueRaja - Danny Pflughoeft
          Jun 27 at 20:19











        • Sounds like you're saying "TCP is the optimal general solution, so it makes to support it natively". +1

          – ikegami
          Jun 27 at 23:01






        • 1





          @BlueRaja-DannyPflughoeft And sometimes you want reliable unordered packets (e.g. visual effects applied to nearby players).

          – immibis
          Jun 28 at 0:38












        • @BlueRaja-DannyPflughoeft if you have a typical example protocol library I'll be happy to incorporate into the answer

          – jonathanjo
          Jun 28 at 12:45






        • 1





          @jonathanjo One I've used is lidgren, which supports 5 different delivery methods (scroll to the bottom). Unity and Unreal Engine also have their own networking APIs that are built atop UDP.

          – BlueRaja - Danny Pflughoeft
          Jun 28 at 17:19
















        46














        TCP is about as fast as you can make something with its reliability properties. If you only need, say, sequencing and error detection, UDP can be made to serve perfectly well. This is the basis for most real-time protocols such as voice, video streaming etc, where lag and jitter are more important than "absolute" error correction.



        Fundamentally, TCP says its streams can be relied upon eventually. How fast that is depends on the various timers, speeds etc. The time taken to resolve errors can be unpredictable, but the basic operations are as fast as practicable when there are no errors. If a system knows something about the kinds of errors which are likely, it might be able to do something which isn't possible with TCP. For example, if single-bit errors are especially likely, you can use error-correcting coding for those bit errors: however, this is much better implemented in the link layer. As another example, if short bursts of whole-packet loss are common, you can address this with multiple transmission without waiting for loss, but obviously this is expensive in bandwidth. Or alternatively, slow the speed down until the error probability is negligible: also expensive in bandwidth. In the end, a protocol has to pay for reliability with either a) bandwidth or b) delay.



        In implementation terms, you would find that the programmer-centuries invested in TCP will make it faster than anything general you could afford to make, as well as more reliable in the obscure edge cases.



        TCP provides: a ubiquitious method of connecting (essential where the communicating systems have no common control) giving a reliable, ordered, (and deduplicated), two way, windowed, byte stream with congestion control over arbitrary-distance multi-hop networks.



        If an application doesn't require ubiquity (your software runs on both sides), or doesn't need all of TCP's features, many people profitably use other protocols, often on top of UDP. Examples include TFTP (minimalistic, with really inefficient error handling, QUIC which is designed to reduce overheads (still marked as experimental), and libraries such as lidgren, which has fine-grained control over exactly which reliability features are required. [Thanks commenters.]






        share|improve this answer




















        • 7





          Custom "UDP with reliability" protocols are also extremely common in video games. There are a ton of networking libraries with various implementations. They usually want packets to be ordered and have error correction, without wanting retransmission of lost packets (and receive delays of all future packets).

          – BlueRaja - Danny Pflughoeft
          Jun 27 at 20:19











        • Sounds like you're saying "TCP is the optimal general solution, so it makes to support it natively". +1

          – ikegami
          Jun 27 at 23:01






        • 1





          @BlueRaja-DannyPflughoeft And sometimes you want reliable unordered packets (e.g. visual effects applied to nearby players).

          – immibis
          Jun 28 at 0:38












        • @BlueRaja-DannyPflughoeft if you have a typical example protocol library I'll be happy to incorporate into the answer

          – jonathanjo
          Jun 28 at 12:45






        • 1





          @jonathanjo One I've used is lidgren, which supports 5 different delivery methods (scroll to the bottom). Unity and Unreal Engine also have their own networking APIs that are built atop UDP.

          – BlueRaja - Danny Pflughoeft
          Jun 28 at 17:19














        46












        46








        46







        TCP is about as fast as you can make something with its reliability properties. If you only need, say, sequencing and error detection, UDP can be made to serve perfectly well. This is the basis for most real-time protocols such as voice, video streaming etc, where lag and jitter are more important than "absolute" error correction.



        Fundamentally, TCP says its streams can be relied upon eventually. How fast that is depends on the various timers, speeds etc. The time taken to resolve errors can be unpredictable, but the basic operations are as fast as practicable when there are no errors. If a system knows something about the kinds of errors which are likely, it might be able to do something which isn't possible with TCP. For example, if single-bit errors are especially likely, you can use error-correcting coding for those bit errors: however, this is much better implemented in the link layer. As another example, if short bursts of whole-packet loss are common, you can address this with multiple transmission without waiting for loss, but obviously this is expensive in bandwidth. Or alternatively, slow the speed down until the error probability is negligible: also expensive in bandwidth. In the end, a protocol has to pay for reliability with either a) bandwidth or b) delay.



        In implementation terms, you would find that the programmer-centuries invested in TCP will make it faster than anything general you could afford to make, as well as more reliable in the obscure edge cases.



        TCP provides: a ubiquitious method of connecting (essential where the communicating systems have no common control) giving a reliable, ordered, (and deduplicated), two way, windowed, byte stream with congestion control over arbitrary-distance multi-hop networks.



        If an application doesn't require ubiquity (your software runs on both sides), or doesn't need all of TCP's features, many people profitably use other protocols, often on top of UDP. Examples include TFTP (minimalistic, with really inefficient error handling, QUIC which is designed to reduce overheads (still marked as experimental), and libraries such as lidgren, which has fine-grained control over exactly which reliability features are required. [Thanks commenters.]






        share|improve this answer















        TCP is about as fast as you can make something with its reliability properties. If you only need, say, sequencing and error detection, UDP can be made to serve perfectly well. This is the basis for most real-time protocols such as voice, video streaming etc, where lag and jitter are more important than "absolute" error correction.



        Fundamentally, TCP says its streams can be relied upon eventually. How fast that is depends on the various timers, speeds etc. The time taken to resolve errors can be unpredictable, but the basic operations are as fast as practicable when there are no errors. If a system knows something about the kinds of errors which are likely, it might be able to do something which isn't possible with TCP. For example, if single-bit errors are especially likely, you can use error-correcting coding for those bit errors: however, this is much better implemented in the link layer. As another example, if short bursts of whole-packet loss are common, you can address this with multiple transmission without waiting for loss, but obviously this is expensive in bandwidth. Or alternatively, slow the speed down until the error probability is negligible: also expensive in bandwidth. In the end, a protocol has to pay for reliability with either a) bandwidth or b) delay.



        In implementation terms, you would find that the programmer-centuries invested in TCP will make it faster than anything general you could afford to make, as well as more reliable in the obscure edge cases.



        TCP provides: a ubiquitious method of connecting (essential where the communicating systems have no common control) giving a reliable, ordered, (and deduplicated), two way, windowed, byte stream with congestion control over arbitrary-distance multi-hop networks.



        If an application doesn't require ubiquity (your software runs on both sides), or doesn't need all of TCP's features, many people profitably use other protocols, often on top of UDP. Examples include TFTP (minimalistic, with really inefficient error handling, QUIC which is designed to reduce overheads (still marked as experimental), and libraries such as lidgren, which has fine-grained control over exactly which reliability features are required. [Thanks commenters.]







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Jun 29 at 12:02

























        answered Jun 27 at 10:00









        jonathanjojonathanjo

        13.7k1 gold badge12 silver badges43 bronze badges




        13.7k1 gold badge12 silver badges43 bronze badges







        • 7





          Custom "UDP with reliability" protocols are also extremely common in video games. There are a ton of networking libraries with various implementations. They usually want packets to be ordered and have error correction, without wanting retransmission of lost packets (and receive delays of all future packets).

          – BlueRaja - Danny Pflughoeft
          Jun 27 at 20:19











        • Sounds like you're saying "TCP is the optimal general solution, so it makes to support it natively". +1

          – ikegami
          Jun 27 at 23:01






        • 1





          @BlueRaja-DannyPflughoeft And sometimes you want reliable unordered packets (e.g. visual effects applied to nearby players).

          – immibis
          Jun 28 at 0:38












        • @BlueRaja-DannyPflughoeft if you have a typical example protocol library I'll be happy to incorporate into the answer

          – jonathanjo
          Jun 28 at 12:45






        • 1





          @jonathanjo One I've used is lidgren, which supports 5 different delivery methods (scroll to the bottom). Unity and Unreal Engine also have their own networking APIs that are built atop UDP.

          – BlueRaja - Danny Pflughoeft
          Jun 28 at 17:19













        • 7





          Custom "UDP with reliability" protocols are also extremely common in video games. There are a ton of networking libraries with various implementations. They usually want packets to be ordered and have error correction, without wanting retransmission of lost packets (and receive delays of all future packets).

          – BlueRaja - Danny Pflughoeft
          Jun 27 at 20:19











        • Sounds like you're saying "TCP is the optimal general solution, so it makes to support it natively". +1

          – ikegami
          Jun 27 at 23:01






        • 1





          @BlueRaja-DannyPflughoeft And sometimes you want reliable unordered packets (e.g. visual effects applied to nearby players).

          – immibis
          Jun 28 at 0:38












        • @BlueRaja-DannyPflughoeft if you have a typical example protocol library I'll be happy to incorporate into the answer

          – jonathanjo
          Jun 28 at 12:45






        • 1





          @jonathanjo One I've used is lidgren, which supports 5 different delivery methods (scroll to the bottom). Unity and Unreal Engine also have their own networking APIs that are built atop UDP.

          – BlueRaja - Danny Pflughoeft
          Jun 28 at 17:19








        7




        7





        Custom "UDP with reliability" protocols are also extremely common in video games. There are a ton of networking libraries with various implementations. They usually want packets to be ordered and have error correction, without wanting retransmission of lost packets (and receive delays of all future packets).

        – BlueRaja - Danny Pflughoeft
        Jun 27 at 20:19





        Custom "UDP with reliability" protocols are also extremely common in video games. There are a ton of networking libraries with various implementations. They usually want packets to be ordered and have error correction, without wanting retransmission of lost packets (and receive delays of all future packets).

        – BlueRaja - Danny Pflughoeft
        Jun 27 at 20:19













        Sounds like you're saying "TCP is the optimal general solution, so it makes to support it natively". +1

        – ikegami
        Jun 27 at 23:01





        Sounds like you're saying "TCP is the optimal general solution, so it makes to support it natively". +1

        – ikegami
        Jun 27 at 23:01




        1




        1





        @BlueRaja-DannyPflughoeft And sometimes you want reliable unordered packets (e.g. visual effects applied to nearby players).

        – immibis
        Jun 28 at 0:38






        @BlueRaja-DannyPflughoeft And sometimes you want reliable unordered packets (e.g. visual effects applied to nearby players).

        – immibis
        Jun 28 at 0:38














        @BlueRaja-DannyPflughoeft if you have a typical example protocol library I'll be happy to incorporate into the answer

        – jonathanjo
        Jun 28 at 12:45





        @BlueRaja-DannyPflughoeft if you have a typical example protocol library I'll be happy to incorporate into the answer

        – jonathanjo
        Jun 28 at 12:45




        1




        1





        @jonathanjo One I've used is lidgren, which supports 5 different delivery methods (scroll to the bottom). Unity and Unreal Engine also have their own networking APIs that are built atop UDP.

        – BlueRaja - Danny Pflughoeft
        Jun 28 at 17:19






        @jonathanjo One I've used is lidgren, which supports 5 different delivery methods (scroll to the bottom). Unity and Unreal Engine also have their own networking APIs that are built atop UDP.

        – BlueRaja - Danny Pflughoeft
        Jun 28 at 17:19














        9














        UDP with reliability can indeed be a substitute for TCP. We already have an example of it: it's called QUIC.



        From Wikipedia:




        Among other applications, QUIC improves performance of connection-oriented web applications that are currently using TCP. It does this by establishing a number of multiplexed connections between two endpoints over User Datagram Protocol (UDP).




        The advantage of using UDP versus creating a brand new transport-layer protocol is that routers and other network devices already understand it.






        share|improve this answer























        • QUIC has a bit different characteristic from TCP. In some scenarios (reliable network or no encryption needed) it actually is slower: quora.com/…

          – freakish
          Jun 28 at 10:42












        • You can also add WebRTC datachannels to the list which uses UDP via sctp. In fact, when UDP connections are not possible between peers WebRTC will fail over to TCP leaving a noticable drop in performance.

          – JSON
          Jun 30 at 9:42











        • @freakish slower is a generalization in this case. For example QUIC adds additional data to packets to reduce retransmission which effects throughput but not latency.

          – JSON
          Jun 30 at 9:50















        9














        UDP with reliability can indeed be a substitute for TCP. We already have an example of it: it's called QUIC.



        From Wikipedia:




        Among other applications, QUIC improves performance of connection-oriented web applications that are currently using TCP. It does this by establishing a number of multiplexed connections between two endpoints over User Datagram Protocol (UDP).




        The advantage of using UDP versus creating a brand new transport-layer protocol is that routers and other network devices already understand it.






        share|improve this answer























        • QUIC has a bit different characteristic from TCP. In some scenarios (reliable network or no encryption needed) it actually is slower: quora.com/…

          – freakish
          Jun 28 at 10:42












        • You can also add WebRTC datachannels to the list which uses UDP via sctp. In fact, when UDP connections are not possible between peers WebRTC will fail over to TCP leaving a noticable drop in performance.

          – JSON
          Jun 30 at 9:42











        • @freakish slower is a generalization in this case. For example QUIC adds additional data to packets to reduce retransmission which effects throughput but not latency.

          – JSON
          Jun 30 at 9:50













        9












        9








        9







        UDP with reliability can indeed be a substitute for TCP. We already have an example of it: it's called QUIC.



        From Wikipedia:




        Among other applications, QUIC improves performance of connection-oriented web applications that are currently using TCP. It does this by establishing a number of multiplexed connections between two endpoints over User Datagram Protocol (UDP).




        The advantage of using UDP versus creating a brand new transport-layer protocol is that routers and other network devices already understand it.






        share|improve this answer













        UDP with reliability can indeed be a substitute for TCP. We already have an example of it: it's called QUIC.



        From Wikipedia:




        Among other applications, QUIC improves performance of connection-oriented web applications that are currently using TCP. It does this by establishing a number of multiplexed connections between two endpoints over User Datagram Protocol (UDP).




        The advantage of using UDP versus creating a brand new transport-layer protocol is that routers and other network devices already understand it.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jun 27 at 18:35









        Andrea CorbelliniAndrea Corbellini

        1912 bronze badges




        1912 bronze badges












        • QUIC has a bit different characteristic from TCP. In some scenarios (reliable network or no encryption needed) it actually is slower: quora.com/…

          – freakish
          Jun 28 at 10:42












        • You can also add WebRTC datachannels to the list which uses UDP via sctp. In fact, when UDP connections are not possible between peers WebRTC will fail over to TCP leaving a noticable drop in performance.

          – JSON
          Jun 30 at 9:42











        • @freakish slower is a generalization in this case. For example QUIC adds additional data to packets to reduce retransmission which effects throughput but not latency.

          – JSON
          Jun 30 at 9:50

















        • QUIC has a bit different characteristic from TCP. In some scenarios (reliable network or no encryption needed) it actually is slower: quora.com/…

          – freakish
          Jun 28 at 10:42












        • You can also add WebRTC datachannels to the list which uses UDP via sctp. In fact, when UDP connections are not possible between peers WebRTC will fail over to TCP leaving a noticable drop in performance.

          – JSON
          Jun 30 at 9:42











        • @freakish slower is a generalization in this case. For example QUIC adds additional data to packets to reduce retransmission which effects throughput but not latency.

          – JSON
          Jun 30 at 9:50
















        QUIC has a bit different characteristic from TCP. In some scenarios (reliable network or no encryption needed) it actually is slower: quora.com/…

        – freakish
        Jun 28 at 10:42






        QUIC has a bit different characteristic from TCP. In some scenarios (reliable network or no encryption needed) it actually is slower: quora.com/…

        – freakish
        Jun 28 at 10:42














        You can also add WebRTC datachannels to the list which uses UDP via sctp. In fact, when UDP connections are not possible between peers WebRTC will fail over to TCP leaving a noticable drop in performance.

        – JSON
        Jun 30 at 9:42





        You can also add WebRTC datachannels to the list which uses UDP via sctp. In fact, when UDP connections are not possible between peers WebRTC will fail over to TCP leaving a noticable drop in performance.

        – JSON
        Jun 30 at 9:42













        @freakish slower is a generalization in this case. For example QUIC adds additional data to packets to reduce retransmission which effects throughput but not latency.

        – JSON
        Jun 30 at 9:50





        @freakish slower is a generalization in this case. For example QUIC adds additional data to packets to reduce retransmission which effects throughput but not latency.

        – JSON
        Jun 30 at 9:50











        4














        You could use UDP to implement TCP functionality at the application layer (reliability, adaptability). You could just as well use TCP in the first place unless something your application really needs can't be done with TCP. If you implement those functions yourself you very likely end off much worse than with TCP. The added overhead decreases overall efficiency as well.



        TCP isn't slow - it just requires a handshake before transmitting and the transmission window to adapt to the channel. It can very well shape its throughput to the transmission channel at hand and adapt to changes during the flow, all of which UDP can't do (by itself).



        However, protocols above the transport layer are off-topic here.






        share|improve this answer




















        • 3





          "You could use UDP to implement TCP functionality at the application layer (reliability, adaptability)" -- I believe that's practically how QUIC, µTP, and often SCTP are already implemented. (Despite that, I usually consider them as being in the upper half of the transport layer, while UDP sits in the lower half.)

          – grawity
          Jun 27 at 15:43







        • 1





          @grawity That depends on your POV - from the application perspective, an intermediate layer is an extension of the transport layer. Formally and from the network (device) perspective, it's all part of the application layer.

          – Zac67
          Jun 27 at 18:17















        4














        You could use UDP to implement TCP functionality at the application layer (reliability, adaptability). You could just as well use TCP in the first place unless something your application really needs can't be done with TCP. If you implement those functions yourself you very likely end off much worse than with TCP. The added overhead decreases overall efficiency as well.



        TCP isn't slow - it just requires a handshake before transmitting and the transmission window to adapt to the channel. It can very well shape its throughput to the transmission channel at hand and adapt to changes during the flow, all of which UDP can't do (by itself).



        However, protocols above the transport layer are off-topic here.






        share|improve this answer




















        • 3





          "You could use UDP to implement TCP functionality at the application layer (reliability, adaptability)" -- I believe that's practically how QUIC, µTP, and often SCTP are already implemented. (Despite that, I usually consider them as being in the upper half of the transport layer, while UDP sits in the lower half.)

          – grawity
          Jun 27 at 15:43







        • 1





          @grawity That depends on your POV - from the application perspective, an intermediate layer is an extension of the transport layer. Formally and from the network (device) perspective, it's all part of the application layer.

          – Zac67
          Jun 27 at 18:17













        4












        4








        4







        You could use UDP to implement TCP functionality at the application layer (reliability, adaptability). You could just as well use TCP in the first place unless something your application really needs can't be done with TCP. If you implement those functions yourself you very likely end off much worse than with TCP. The added overhead decreases overall efficiency as well.



        TCP isn't slow - it just requires a handshake before transmitting and the transmission window to adapt to the channel. It can very well shape its throughput to the transmission channel at hand and adapt to changes during the flow, all of which UDP can't do (by itself).



        However, protocols above the transport layer are off-topic here.






        share|improve this answer















        You could use UDP to implement TCP functionality at the application layer (reliability, adaptability). You could just as well use TCP in the first place unless something your application really needs can't be done with TCP. If you implement those functions yourself you very likely end off much worse than with TCP. The added overhead decreases overall efficiency as well.



        TCP isn't slow - it just requires a handshake before transmitting and the transmission window to adapt to the channel. It can very well shape its throughput to the transmission channel at hand and adapt to changes during the flow, all of which UDP can't do (by itself).



        However, protocols above the transport layer are off-topic here.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Jun 27 at 10:34

























        answered Jun 27 at 7:26









        Zac67Zac67

        37.3k2 gold badges26 silver badges72 bronze badges




        37.3k2 gold badges26 silver badges72 bronze badges







        • 3





          "You could use UDP to implement TCP functionality at the application layer (reliability, adaptability)" -- I believe that's practically how QUIC, µTP, and often SCTP are already implemented. (Despite that, I usually consider them as being in the upper half of the transport layer, while UDP sits in the lower half.)

          – grawity
          Jun 27 at 15:43







        • 1





          @grawity That depends on your POV - from the application perspective, an intermediate layer is an extension of the transport layer. Formally and from the network (device) perspective, it's all part of the application layer.

          – Zac67
          Jun 27 at 18:17












        • 3





          "You could use UDP to implement TCP functionality at the application layer (reliability, adaptability)" -- I believe that's practically how QUIC, µTP, and often SCTP are already implemented. (Despite that, I usually consider them as being in the upper half of the transport layer, while UDP sits in the lower half.)

          – grawity
          Jun 27 at 15:43







        • 1





          @grawity That depends on your POV - from the application perspective, an intermediate layer is an extension of the transport layer. Formally and from the network (device) perspective, it's all part of the application layer.

          – Zac67
          Jun 27 at 18:17







        3




        3





        "You could use UDP to implement TCP functionality at the application layer (reliability, adaptability)" -- I believe that's practically how QUIC, µTP, and often SCTP are already implemented. (Despite that, I usually consider them as being in the upper half of the transport layer, while UDP sits in the lower half.)

        – grawity
        Jun 27 at 15:43






        "You could use UDP to implement TCP functionality at the application layer (reliability, adaptability)" -- I believe that's practically how QUIC, µTP, and often SCTP are already implemented. (Despite that, I usually consider them as being in the upper half of the transport layer, while UDP sits in the lower half.)

        – grawity
        Jun 27 at 15:43





        1




        1





        @grawity That depends on your POV - from the application perspective, an intermediate layer is an extension of the transport layer. Formally and from the network (device) perspective, it's all part of the application layer.

        – Zac67
        Jun 27 at 18:17





        @grawity That depends on your POV - from the application perspective, an intermediate layer is an extension of the transport layer. Formally and from the network (device) perspective, it's all part of the application layer.

        – Zac67
        Jun 27 at 18:17











        4














        On a clean network they are pretty equivalent. There are cases where TCP will hang for periods (Anyone ever seen an HTTP screen freeze on load?) but it will not deliver garbage or mix up packets and rarely gives up completely.



        UDP can give the application layer more control over the traffic at the cost of an awful lot of work.



        The answer to your question is, sometimes it is done that way. Games that require low latency often do exactly that. It's a good deal more work, but the ability to control exactly how many outstanding packets you can have and how often they are retried is often worth it.



        So overall the difference is that TCP is a very good general purpose implementation, but there are specific purposes that UDP can do that TCP either does very poorly or not at all--for instance:



        • NEVER giving up (with TCP the connection sometimes hangs and you have to break the connection and restart it)

        • Sending a fast stream of packets that don't require replies and you don't mind missing some occasionally (where only the most recent packet is important, any others can be discarded)--think game position updates--you might get a little "Jump" rather than each step, but you get the same result faster and more reliably.

        • Dealing with iffy networks by analyzing packet drops and dynamically altering how often and how soon you retry--maybe even max packet size.

        But in general it's not worth it, TCP is pretty optimal so why go to all the extra work and add a (large) chance of adding bugs and security flaws?






        share|improve this answer





























          4














          On a clean network they are pretty equivalent. There are cases where TCP will hang for periods (Anyone ever seen an HTTP screen freeze on load?) but it will not deliver garbage or mix up packets and rarely gives up completely.



          UDP can give the application layer more control over the traffic at the cost of an awful lot of work.



          The answer to your question is, sometimes it is done that way. Games that require low latency often do exactly that. It's a good deal more work, but the ability to control exactly how many outstanding packets you can have and how often they are retried is often worth it.



          So overall the difference is that TCP is a very good general purpose implementation, but there are specific purposes that UDP can do that TCP either does very poorly or not at all--for instance:



          • NEVER giving up (with TCP the connection sometimes hangs and you have to break the connection and restart it)

          • Sending a fast stream of packets that don't require replies and you don't mind missing some occasionally (where only the most recent packet is important, any others can be discarded)--think game position updates--you might get a little "Jump" rather than each step, but you get the same result faster and more reliably.

          • Dealing with iffy networks by analyzing packet drops and dynamically altering how often and how soon you retry--maybe even max packet size.

          But in general it's not worth it, TCP is pretty optimal so why go to all the extra work and add a (large) chance of adding bugs and security flaws?






          share|improve this answer



























            4












            4








            4







            On a clean network they are pretty equivalent. There are cases where TCP will hang for periods (Anyone ever seen an HTTP screen freeze on load?) but it will not deliver garbage or mix up packets and rarely gives up completely.



            UDP can give the application layer more control over the traffic at the cost of an awful lot of work.



            The answer to your question is, sometimes it is done that way. Games that require low latency often do exactly that. It's a good deal more work, but the ability to control exactly how many outstanding packets you can have and how often they are retried is often worth it.



            So overall the difference is that TCP is a very good general purpose implementation, but there are specific purposes that UDP can do that TCP either does very poorly or not at all--for instance:



            • NEVER giving up (with TCP the connection sometimes hangs and you have to break the connection and restart it)

            • Sending a fast stream of packets that don't require replies and you don't mind missing some occasionally (where only the most recent packet is important, any others can be discarded)--think game position updates--you might get a little "Jump" rather than each step, but you get the same result faster and more reliably.

            • Dealing with iffy networks by analyzing packet drops and dynamically altering how often and how soon you retry--maybe even max packet size.

            But in general it's not worth it, TCP is pretty optimal so why go to all the extra work and add a (large) chance of adding bugs and security flaws?






            share|improve this answer















            On a clean network they are pretty equivalent. There are cases where TCP will hang for periods (Anyone ever seen an HTTP screen freeze on load?) but it will not deliver garbage or mix up packets and rarely gives up completely.



            UDP can give the application layer more control over the traffic at the cost of an awful lot of work.



            The answer to your question is, sometimes it is done that way. Games that require low latency often do exactly that. It's a good deal more work, but the ability to control exactly how many outstanding packets you can have and how often they are retried is often worth it.



            So overall the difference is that TCP is a very good general purpose implementation, but there are specific purposes that UDP can do that TCP either does very poorly or not at all--for instance:



            • NEVER giving up (with TCP the connection sometimes hangs and you have to break the connection and restart it)

            • Sending a fast stream of packets that don't require replies and you don't mind missing some occasionally (where only the most recent packet is important, any others can be discarded)--think game position updates--you might get a little "Jump" rather than each step, but you get the same result faster and more reliably.

            • Dealing with iffy networks by analyzing packet drops and dynamically altering how often and how soon you retry--maybe even max packet size.

            But in general it's not worth it, TCP is pretty optimal so why go to all the extra work and add a (large) chance of adding bugs and security flaws?







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Jun 28 at 18:00

























            answered Jun 27 at 16:11









            Bill KBill K

            1414 bronze badges




            1414 bronze badges





















                3














                UDP isn't fast because it is UDP. TCP isn't slow because it is TCP.



                Both protocols are designed with certain guarantees and raw TCP has more guarantees than raw UDP.



                And the rule of thumb is: the price for guarantees is performance.



                There's nothing prohibiting you from implementing TCP guarantees over UDP. But then you get more guarantees and so you have to pay the price. Therefore you reduce the performance to TCP or worse (due to UDP overhead). Unless you know better TCP implementation, which is unlikely. And if you do then (hopefuly) you reveal it and we make the standard TCP faster. And we are back where we started. :)



                You can play with those guarantees as well. Slightly modify this, slightly modify that. And then you end up with a protocol like QUIC which is over UDP and it is very similar to TCP+TLS. In many cases it is faster than TCP (although according to this article latency up to 5% and buffering up to 15% which IMO is not a big deal) but in some scenarios (e.g. reliable network or no need for encryption) it actually is slower (see an explanation here).



                You can also weaken those guarantees and then it makes more sense. For example say you are streaming and so old packets are not interesting. Only the most recent. But congestion is still important. So you take some guarantees from TCP, but not all. And yes, people actually do that (e.g. real-time games). This gives you better performance at the cost of some guarantees.






                share|improve this answer





























                  3














                  UDP isn't fast because it is UDP. TCP isn't slow because it is TCP.



                  Both protocols are designed with certain guarantees and raw TCP has more guarantees than raw UDP.



                  And the rule of thumb is: the price for guarantees is performance.



                  There's nothing prohibiting you from implementing TCP guarantees over UDP. But then you get more guarantees and so you have to pay the price. Therefore you reduce the performance to TCP or worse (due to UDP overhead). Unless you know better TCP implementation, which is unlikely. And if you do then (hopefuly) you reveal it and we make the standard TCP faster. And we are back where we started. :)



                  You can play with those guarantees as well. Slightly modify this, slightly modify that. And then you end up with a protocol like QUIC which is over UDP and it is very similar to TCP+TLS. In many cases it is faster than TCP (although according to this article latency up to 5% and buffering up to 15% which IMO is not a big deal) but in some scenarios (e.g. reliable network or no need for encryption) it actually is slower (see an explanation here).



                  You can also weaken those guarantees and then it makes more sense. For example say you are streaming and so old packets are not interesting. Only the most recent. But congestion is still important. So you take some guarantees from TCP, but not all. And yes, people actually do that (e.g. real-time games). This gives you better performance at the cost of some guarantees.






                  share|improve this answer



























                    3












                    3








                    3







                    UDP isn't fast because it is UDP. TCP isn't slow because it is TCP.



                    Both protocols are designed with certain guarantees and raw TCP has more guarantees than raw UDP.



                    And the rule of thumb is: the price for guarantees is performance.



                    There's nothing prohibiting you from implementing TCP guarantees over UDP. But then you get more guarantees and so you have to pay the price. Therefore you reduce the performance to TCP or worse (due to UDP overhead). Unless you know better TCP implementation, which is unlikely. And if you do then (hopefuly) you reveal it and we make the standard TCP faster. And we are back where we started. :)



                    You can play with those guarantees as well. Slightly modify this, slightly modify that. And then you end up with a protocol like QUIC which is over UDP and it is very similar to TCP+TLS. In many cases it is faster than TCP (although according to this article latency up to 5% and buffering up to 15% which IMO is not a big deal) but in some scenarios (e.g. reliable network or no need for encryption) it actually is slower (see an explanation here).



                    You can also weaken those guarantees and then it makes more sense. For example say you are streaming and so old packets are not interesting. Only the most recent. But congestion is still important. So you take some guarantees from TCP, but not all. And yes, people actually do that (e.g. real-time games). This gives you better performance at the cost of some guarantees.






                    share|improve this answer















                    UDP isn't fast because it is UDP. TCP isn't slow because it is TCP.



                    Both protocols are designed with certain guarantees and raw TCP has more guarantees than raw UDP.



                    And the rule of thumb is: the price for guarantees is performance.



                    There's nothing prohibiting you from implementing TCP guarantees over UDP. But then you get more guarantees and so you have to pay the price. Therefore you reduce the performance to TCP or worse (due to UDP overhead). Unless you know better TCP implementation, which is unlikely. And if you do then (hopefuly) you reveal it and we make the standard TCP faster. And we are back where we started. :)



                    You can play with those guarantees as well. Slightly modify this, slightly modify that. And then you end up with a protocol like QUIC which is over UDP and it is very similar to TCP+TLS. In many cases it is faster than TCP (although according to this article latency up to 5% and buffering up to 15% which IMO is not a big deal) but in some scenarios (e.g. reliable network or no need for encryption) it actually is slower (see an explanation here).



                    You can also weaken those guarantees and then it makes more sense. For example say you are streaming and so old packets are not interesting. Only the most recent. But congestion is still important. So you take some guarantees from TCP, but not all. And yes, people actually do that (e.g. real-time games). This gives you better performance at the cost of some guarantees.







                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited Jun 28 at 18:20

























                    answered Jun 28 at 10:16









                    freakishfreakish

                    2111 silver badge3 bronze badges




                    2111 silver badge3 bronze badges





















                        1














                        Your idea would be good in deep space.



                        The correct answer is "it depends" and "because that would damage the network as a whole". TCP/IP is very kind to networks and automatically adjusts to about the right speed to be fast but not generate tonnes of ICMP return packets.



                        When a router with not enough RAM suddenly receives a lot of any kind of packet - say from Tsunami, Bittorrent or FDT - it drops it and fires back to the sender a small failure dis-acknowledgement packet. Now your UDP server has to track and re-transmit that part manually. Some ISP routers shape Bittorrent so many this hurts Tsunami?



                        The Tsunami protocol uses UDP with a control channel in TCP. http://tsunami-udp.sourceforge.net/ I found a study which shows it to be slower than a thing called FDT.



                        The legendary Fast Data Transfer (FDT) protocol from CERN is capable of saturating any network using multiple TCP streams. Probably it is faster, because it causes less re-transmits that Tsunami, which floods the network with so much UDP, some of it does not make it all the way across.



                        UDP is used by unreliable applications: streaming audio, game input/update IO, "ping" is actually ICMP but is not guaranteed, Bittorrent, mosh ssh is awesomely responsive, VOIP telephony, multicast, DNS is sent over UDP AFAIK. Anything that does not mind the odd missing packet and can "catchup" instantly.



                        TCP/IP was really the killer invention that allowed app devs so just set and forget. A socket is a pair of IP address and ports, and were designed to be able to be setup and remain for hours, days, even weeks without re-connecting. Email, web, IRC and literally all the killer apps use TCP. But you can get strange pauses in the download that suddenly go faster... and in deep space the connections may time out making Tsunami style transfers best for interstellar file transfers - you could be onto something there!!



                        The proof is in the final remarks of this science study extract, which mention the increasing distance thing I'm going on about re: deep space
                        From: https://uscholar.univie.ac.at/get/o:300623.pdf




                        Without congestion, performance of FDT and GridFTP with TCP is higher
                        than Tsunami and UDT. The highest through- put of FDT is 2.34 Gb/s
                        with a 1 ms RTT but it decreases rapidly after 100 ms compared to
                        GridFTP, which performs better than FDT when link RTT is longer than
                        100 ms. Interestingly, the throughput of Tsunami did not decrease
                        over increasing RTT, showing it has the most effective congestion
                        control with increasing RTT.




                        Then again... there is actually a space protocol that is a lot like email which would be better for space. The apps have to not mind time-out values such as forever.






                        share|improve this answer



























                          1














                          Your idea would be good in deep space.



                          The correct answer is "it depends" and "because that would damage the network as a whole". TCP/IP is very kind to networks and automatically adjusts to about the right speed to be fast but not generate tonnes of ICMP return packets.



                          When a router with not enough RAM suddenly receives a lot of any kind of packet - say from Tsunami, Bittorrent or FDT - it drops it and fires back to the sender a small failure dis-acknowledgement packet. Now your UDP server has to track and re-transmit that part manually. Some ISP routers shape Bittorrent so many this hurts Tsunami?



                          The Tsunami protocol uses UDP with a control channel in TCP. http://tsunami-udp.sourceforge.net/ I found a study which shows it to be slower than a thing called FDT.



                          The legendary Fast Data Transfer (FDT) protocol from CERN is capable of saturating any network using multiple TCP streams. Probably it is faster, because it causes less re-transmits that Tsunami, which floods the network with so much UDP, some of it does not make it all the way across.



                          UDP is used by unreliable applications: streaming audio, game input/update IO, "ping" is actually ICMP but is not guaranteed, Bittorrent, mosh ssh is awesomely responsive, VOIP telephony, multicast, DNS is sent over UDP AFAIK. Anything that does not mind the odd missing packet and can "catchup" instantly.



                          TCP/IP was really the killer invention that allowed app devs so just set and forget. A socket is a pair of IP address and ports, and were designed to be able to be setup and remain for hours, days, even weeks without re-connecting. Email, web, IRC and literally all the killer apps use TCP. But you can get strange pauses in the download that suddenly go faster... and in deep space the connections may time out making Tsunami style transfers best for interstellar file transfers - you could be onto something there!!



                          The proof is in the final remarks of this science study extract, which mention the increasing distance thing I'm going on about re: deep space
                          From: https://uscholar.univie.ac.at/get/o:300623.pdf




                          Without congestion, performance of FDT and GridFTP with TCP is higher
                          than Tsunami and UDT. The highest through- put of FDT is 2.34 Gb/s
                          with a 1 ms RTT but it decreases rapidly after 100 ms compared to
                          GridFTP, which performs better than FDT when link RTT is longer than
                          100 ms. Interestingly, the throughput of Tsunami did not decrease
                          over increasing RTT, showing it has the most effective congestion
                          control with increasing RTT.




                          Then again... there is actually a space protocol that is a lot like email which would be better for space. The apps have to not mind time-out values such as forever.






                          share|improve this answer

























                            1












                            1








                            1







                            Your idea would be good in deep space.



                            The correct answer is "it depends" and "because that would damage the network as a whole". TCP/IP is very kind to networks and automatically adjusts to about the right speed to be fast but not generate tonnes of ICMP return packets.



                            When a router with not enough RAM suddenly receives a lot of any kind of packet - say from Tsunami, Bittorrent or FDT - it drops it and fires back to the sender a small failure dis-acknowledgement packet. Now your UDP server has to track and re-transmit that part manually. Some ISP routers shape Bittorrent so many this hurts Tsunami?



                            The Tsunami protocol uses UDP with a control channel in TCP. http://tsunami-udp.sourceforge.net/ I found a study which shows it to be slower than a thing called FDT.



                            The legendary Fast Data Transfer (FDT) protocol from CERN is capable of saturating any network using multiple TCP streams. Probably it is faster, because it causes less re-transmits that Tsunami, which floods the network with so much UDP, some of it does not make it all the way across.



                            UDP is used by unreliable applications: streaming audio, game input/update IO, "ping" is actually ICMP but is not guaranteed, Bittorrent, mosh ssh is awesomely responsive, VOIP telephony, multicast, DNS is sent over UDP AFAIK. Anything that does not mind the odd missing packet and can "catchup" instantly.



                            TCP/IP was really the killer invention that allowed app devs so just set and forget. A socket is a pair of IP address and ports, and were designed to be able to be setup and remain for hours, days, even weeks without re-connecting. Email, web, IRC and literally all the killer apps use TCP. But you can get strange pauses in the download that suddenly go faster... and in deep space the connections may time out making Tsunami style transfers best for interstellar file transfers - you could be onto something there!!



                            The proof is in the final remarks of this science study extract, which mention the increasing distance thing I'm going on about re: deep space
                            From: https://uscholar.univie.ac.at/get/o:300623.pdf




                            Without congestion, performance of FDT and GridFTP with TCP is higher
                            than Tsunami and UDT. The highest through- put of FDT is 2.34 Gb/s
                            with a 1 ms RTT but it decreases rapidly after 100 ms compared to
                            GridFTP, which performs better than FDT when link RTT is longer than
                            100 ms. Interestingly, the throughput of Tsunami did not decrease
                            over increasing RTT, showing it has the most effective congestion
                            control with increasing RTT.




                            Then again... there is actually a space protocol that is a lot like email which would be better for space. The apps have to not mind time-out values such as forever.






                            share|improve this answer













                            Your idea would be good in deep space.



                            The correct answer is "it depends" and "because that would damage the network as a whole". TCP/IP is very kind to networks and automatically adjusts to about the right speed to be fast but not generate tonnes of ICMP return packets.



                            When a router with not enough RAM suddenly receives a lot of any kind of packet - say from Tsunami, Bittorrent or FDT - it drops it and fires back to the sender a small failure dis-acknowledgement packet. Now your UDP server has to track and re-transmit that part manually. Some ISP routers shape Bittorrent so many this hurts Tsunami?



                            The Tsunami protocol uses UDP with a control channel in TCP. http://tsunami-udp.sourceforge.net/ I found a study which shows it to be slower than a thing called FDT.



                            The legendary Fast Data Transfer (FDT) protocol from CERN is capable of saturating any network using multiple TCP streams. Probably it is faster, because it causes less re-transmits that Tsunami, which floods the network with so much UDP, some of it does not make it all the way across.



                            UDP is used by unreliable applications: streaming audio, game input/update IO, "ping" is actually ICMP but is not guaranteed, Bittorrent, mosh ssh is awesomely responsive, VOIP telephony, multicast, DNS is sent over UDP AFAIK. Anything that does not mind the odd missing packet and can "catchup" instantly.



                            TCP/IP was really the killer invention that allowed app devs so just set and forget. A socket is a pair of IP address and ports, and were designed to be able to be setup and remain for hours, days, even weeks without re-connecting. Email, web, IRC and literally all the killer apps use TCP. But you can get strange pauses in the download that suddenly go faster... and in deep space the connections may time out making Tsunami style transfers best for interstellar file transfers - you could be onto something there!!



                            The proof is in the final remarks of this science study extract, which mention the increasing distance thing I'm going on about re: deep space
                            From: https://uscholar.univie.ac.at/get/o:300623.pdf




                            Without congestion, performance of FDT and GridFTP with TCP is higher
                            than Tsunami and UDT. The highest through- put of FDT is 2.34 Gb/s
                            with a 1 ms RTT but it decreases rapidly after 100 ms compared to
                            GridFTP, which performs better than FDT when link RTT is longer than
                            100 ms. Interestingly, the throughput of Tsunami did not decrease
                            over increasing RTT, showing it has the most effective congestion
                            control with increasing RTT.




                            Then again... there is actually a space protocol that is a lot like email which would be better for space. The apps have to not mind time-out values such as forever.







                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered Jun 27 at 18:07









                            TomachiTomachi

                            1112 bronze badges




                            1112 bronze badges





















                                0














                                TCP != UDP + Reliability



                                TCP is not simply UDP with added reliability. TCP offers more features than just reliability. You can read about them in many of the RFCs.



                                Any of these features "could" be implemented at the application layer. Eventually there becomes a point where you start reinventing the wheel.



                                To name a few features TCP has...



                                • Connections creation and termination: performs handshakes and connection closures


                                • Flow Control: ensures that sender and receiver transmit at rates where both can handle the data rate.


                                • End to end congestion control: allows end nodes to throttle their throughput based on losses. Read about slow start, congestion avoidance, and fast recovery.


                                In my experience, UDP is used when speed is a concern over reliability. You can add some level of reliability at the application level that is not 100% as reliable as TCP. For example if you still want fast performance, you can implement forward error correction (FEC) where you transmit the data more than once. You still get good performance and some level of reliability (note quite TCP reliability) without all of the back and forth chit chat to get lost packets. The trade of is that it increases the network utilization but may be suitable for real time applications like gaming or streaming.






                                share|improve this answer








                                New contributor



                                jaybers is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.



















                                • You could describe at those extra features as being about reliability, ultimately.

                                  – user207421
                                  Jun 29 at 23:46















                                0














                                TCP != UDP + Reliability



                                TCP is not simply UDP with added reliability. TCP offers more features than just reliability. You can read about them in many of the RFCs.



                                Any of these features "could" be implemented at the application layer. Eventually there becomes a point where you start reinventing the wheel.



                                To name a few features TCP has...



                                • Connections creation and termination: performs handshakes and connection closures


                                • Flow Control: ensures that sender and receiver transmit at rates where both can handle the data rate.


                                • End to end congestion control: allows end nodes to throttle their throughput based on losses. Read about slow start, congestion avoidance, and fast recovery.


                                In my experience, UDP is used when speed is a concern over reliability. You can add some level of reliability at the application level that is not 100% as reliable as TCP. For example if you still want fast performance, you can implement forward error correction (FEC) where you transmit the data more than once. You still get good performance and some level of reliability (note quite TCP reliability) without all of the back and forth chit chat to get lost packets. The trade of is that it increases the network utilization but may be suitable for real time applications like gaming or streaming.






                                share|improve this answer








                                New contributor



                                jaybers is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.



















                                • You could describe at those extra features as being about reliability, ultimately.

                                  – user207421
                                  Jun 29 at 23:46













                                0












                                0








                                0







                                TCP != UDP + Reliability



                                TCP is not simply UDP with added reliability. TCP offers more features than just reliability. You can read about them in many of the RFCs.



                                Any of these features "could" be implemented at the application layer. Eventually there becomes a point where you start reinventing the wheel.



                                To name a few features TCP has...



                                • Connections creation and termination: performs handshakes and connection closures


                                • Flow Control: ensures that sender and receiver transmit at rates where both can handle the data rate.


                                • End to end congestion control: allows end nodes to throttle their throughput based on losses. Read about slow start, congestion avoidance, and fast recovery.


                                In my experience, UDP is used when speed is a concern over reliability. You can add some level of reliability at the application level that is not 100% as reliable as TCP. For example if you still want fast performance, you can implement forward error correction (FEC) where you transmit the data more than once. You still get good performance and some level of reliability (note quite TCP reliability) without all of the back and forth chit chat to get lost packets. The trade of is that it increases the network utilization but may be suitable for real time applications like gaming or streaming.






                                share|improve this answer








                                New contributor



                                jaybers is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.









                                TCP != UDP + Reliability



                                TCP is not simply UDP with added reliability. TCP offers more features than just reliability. You can read about them in many of the RFCs.



                                Any of these features "could" be implemented at the application layer. Eventually there becomes a point where you start reinventing the wheel.



                                To name a few features TCP has...



                                • Connections creation and termination: performs handshakes and connection closures


                                • Flow Control: ensures that sender and receiver transmit at rates where both can handle the data rate.


                                • End to end congestion control: allows end nodes to throttle their throughput based on losses. Read about slow start, congestion avoidance, and fast recovery.


                                In my experience, UDP is used when speed is a concern over reliability. You can add some level of reliability at the application level that is not 100% as reliable as TCP. For example if you still want fast performance, you can implement forward error correction (FEC) where you transmit the data more than once. You still get good performance and some level of reliability (note quite TCP reliability) without all of the back and forth chit chat to get lost packets. The trade of is that it increases the network utilization but may be suitable for real time applications like gaming or streaming.







                                share|improve this answer








                                New contributor



                                jaybers is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.








                                share|improve this answer



                                share|improve this answer






                                New contributor



                                jaybers is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.








                                answered Jun 28 at 13:59









                                jaybersjaybers

                                1011 bronze badge




                                1011 bronze badge




                                New contributor



                                jaybers is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.




                                New contributor




                                jaybers is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                                Check out our Code of Conduct.














                                • You could describe at those extra features as being about reliability, ultimately.

                                  – user207421
                                  Jun 29 at 23:46

















                                • You could describe at those extra features as being about reliability, ultimately.

                                  – user207421
                                  Jun 29 at 23:46
















                                You could describe at those extra features as being about reliability, ultimately.

                                – user207421
                                Jun 29 at 23:46





                                You could describe at those extra features as being about reliability, ultimately.

                                – user207421
                                Jun 29 at 23:46





                                protected by Ron Maupin Jun 28 at 14:43



                                Thank you for your interest in this question.
                                Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



                                Would you like to answer one of these unanswered questions instead?



                                Popular posts from this blog

                                Category:9 (number) SubcategoriesMedia in category "9 (number)"Navigation menuUpload mediaGND ID: 4485639-8Library of Congress authority ID: sh85091979ReasonatorScholiaStatistics

                                Circuit construction for execution of conditional statements using least significant bitHow are two different registers being used as “control”?How exactly is the stated composite state of the two registers being produced using the $R_zz$ controlled rotations?Efficiently performing controlled rotations in HHLWould this quantum algorithm implementation work?How to prepare a superposed states of odd integers from $1$ to $sqrtN$?Why is this implementation of the order finding algorithm not working?Circuit construction for Hamiltonian simulationHow can I invert the least significant bit of a certain term of a superposed state?Implementing an oracleImplementing a controlled sum operation

                                Magento 2 “No Payment Methods” in Admin New OrderHow to integrate Paypal Express Checkout with the Magento APIMagento 1.5 - Sales > Order > edit order and shipping methods disappearAuto Invoice Check/Money Order Payment methodAdd more simple payment methods?Shipping methods not showingWhat should I do to change payment methods if changing the configuration has no effects?1.9 - No Payment Methods showing upMy Payment Methods not Showing for downloadable/virtual product when checkout?Magento2 API to access internal payment methodHow to call an existing payment methods in the registration form?