# data[].attributes.body
TCP is used in sending messages where the delivery needs to be guaranteed and the errors are need to be handled.
Examples :
World Wide Web (Apache TCP port 80)
email application (SMTP port 25)
File transfer protocol (FTP port 21)
Secure shell (Open SSH port 22)
Telnet (telnet port 23)

# data[].attributes.body
It is considered as heavy weight. This is because of the header is of 20 bytes in length; also the flow control and error correction makes handshaking packets between source and destination.
If the stream arrive in wrong order/ corrupted, resend request will be sent, to put them back together. Needs extra work

# data[].attributes.body
Consider there are 2 messages to be sent over a connection. The messages will be transmitted and received in order.
This ordering is because of the 'flow control' mechanism. Flow control in TCP determines that the message sent is received. If its not reached/corrupted, it is resent. The second message will be sent only the successful delivery of the first message. 'error correction'and 'flow control' is done by ACK packets.

# data[].attributes.headline
Congestion managing is a problem because it can easily overflow

# data[].attributes.subject
Congestion managing is a problem because it can easily overflow

# data[].attributes.body
In comparison to UDP, TCP is a slower one, as it has error correction, handshakes and the flow control.
Handshake messages are SYN, SYN-ACK, ACK

# data[].attributes.body
Data is sent and received as stream of bytes with no distinguishing of packets. There can be many packets in a single stream. TCP sends a stream of ordered bytes over connection. One stream per read. i.e., multiple packets per read call.

# data[].attributes.body
TCP is more reliable in comparison to UDP, because TCP is a connection oriented protocol. i.e., TCP will first create a connection get ACK for the connection and then send the texts. Then the message will be sent and waits until its delivered. There is guaranteed delivery.

# data[].attributes.body
If you have a very (very ...) long network path and a tremendous amount of data to send, it's possible to use up the entire TCP sequence number space with data in-transit.  This would prevent proper sequencing of the data (& preventing duplicates) and therefore require slowing down transmission of the data.  This is primarily of interest to nuclear physicists transmitting the ginormous datasets across the globe over dedicated networks.

# data[].attributes.body
TCP Ip causes websites to hang, and the website will load faster if reloaded

# data[].attributes.body
Uses an in-packet checksum but computing this checksum is expensive

# data[].attributes.body
Many problems occur in lowest levels of abstraction

# data[].attributes.headline
Replacing the TCP/IP protocol is not easy

# data[].attributes.subject
Replacing the TCP/IP protocol is not easy