The Internet Protocol (IP) is a communications protocol that is intended for use on packet switching computer networks. The Internet Protocol (IP) provides an architecture where datagram blocks of data can be transported from a source location to a destination location: it does this by identifying hosts with a fixed length address. The Internet Protocol (IP) is a basic protocol that concerns itself with one primary function: ensuring that data (datagrams) are transported from source to destination across interconnected networks. The Internet Protocol (IP) is not concerned about sending data in a reliable or orderly manner and is sometimes referred to as a 'best effort delivery' protocol; flow control mechanisms are provided by other Internet host-to-host protocols (TCP).
The Internet Protocol (IP) was formulated, designed and standardised from 1972-1980, and it's development was funded by DARPA. The Internet Protocol (IP) was designed by two individuals: Bob Kahn and Vint Cerf; although far more individuals were involved in creating the standard version of the Internet Protocol (IP) (Version 4). The Internet Protocol (IP), when released, was a part of the DoD Model (four layer) that was also referred to as TCP/IP, and is currently referred to as the Internet Protocol Suite. When the specification for the Internet Protocol (IP) was first published in RFC documents in 1980 it was named: DoD Standard Internet Protocol.
The Internet Protocol (IP) is implemented by nodes, it's datagrams are forwarded by routers, with nodes communicating through link layer technologies like Ethernets. Because the Internet Protocol (IP) is independent from the technology that transports it's datagrams (located in the link layer of the Internet protocol suite) it enables computer networks with a manifold of varying physical configurations to interconnect. There are two versions of the Internet Protocol (IP) currently used on the Internet: Version 4 (IPv4) and (IPv6). The specification of IPv4 was published in 1980, and it's development was funded by DARPA; the specification of IPv6 was published in 1998, and it was designed by IEFT.
As highlighted, the role of the Internet Protocol (IP) is to transport datagram blocks of data from source to destination: it does so by being a part of a greater networking model with four layers (process layer, transport layer, internet layer and link layer) with the Internet Protocol (IP) situiated in the internet layer. The Internet Protocol (IP) calls upon local network protocols (link layer protocols like ethernet) to transport IP datagrams to a destination, and host to host protocols (transport layer protocols like TCP) call upon the Internet Protocol (IP) to transport their data segment (TCP header / data) within the IP datagram. Side note: you may be wondering what is the difference between the terms 'datagram' and 'packet' (IP datagram / IP packet): datagram refers to a packet that is unreliable, which applies to IP, whereas the term packet refers to both reliable / unreliable datagrams. While the meaning of both terms is similar, and nearly synonymous, there is a subtle difference.
Version 4 (IPv4)
RFC760 and RFC791 state that the Internet Protocol (IP) performs two basic functions: fragmentation and addressing. Internet Protocol (IP) specifies a datagram format that contains a header and a body (payload) (encapsulated data): the header contains the information needed to transport the datagram and contains the following fields (Version 4):
Simple put: Version field will state it's IPv4; IHL field provides the length of the datagram header; DSCP and ECN fields provide routing information, outlining the parameters to transmit the datagram, and previously referred to as Type of Service; Idenitifcation, Flags and Offset fields provide fragmentation information if the datagram is fragmented and will be sent across 'small packet' networks, using fields like Don't Fragment This Datagram (DF) or More Fragments Flag (MF); Time to Live field destroys the datagram if it takes the datagram too many 'hops' to reach it's destination; Protocol field states whether the datagram is TCP etc; Header Checksum field checks the header for errors; Source and Destination Address fields provide a 32-bit decimal number with four octets (first octet is the source / destination network, and the following octets are the local network addresses); and Options field can provide services like a Time Stamp.
Version 6 (IPv6)
As the Internet expanded in the 1990's, IPv4 ran out of numbers it could assign (4.3 billion); IANA stated that it had exhausted IPv4 number blocks in 2011. Therefore, version 6 of the Internet Protocol (IP) was developed in the 1990's and was released in 1998. IPv6 defined a 128bit number and is currently used on the Internet; as well as Version 4. It has been estimated that in 2014 95% of all Internet traffic uses IPv6. The specification for IPv6 was outlinted in RFC2460 in 1998 by S. Deering and R. Hinden: this document states that the purpose of IPv6 was: to increase the amount of available IP addresses by creating a 128 bit number; to simplify the header of the datagram; provide more options and extensions; and to provide a new security, privacy and flow label capability. One difference between IPv4 and IPv6 is that routers cannot fragment datagrams in IPv6. The format of the IPv6 datagram header is as follows:
As you can see, the amount of fields in the IPv6 header is lower than for the IPv4 header, but many of the fields are similar in their function (Time to Live in IPv4 and Hop Limit in IPv6). The most obvious difference, and the primary reason for IPv6 is the size and structure of the source and destination address. IPv4 specified a 32-bit decimal number, made up of four numerical octets: such as 100.00.000.1. IPv4 specified a 128-bit number, made up of hexadecimal characters (numbers and letters) in a syntax of eight 4-character hexadecimal numbers: such as FFFF:AA00:0000:0AAA:1234:0000:000A:111A.
One of the primary criticisms of IPv6, and something acknowledged by it's designers, is it lacks backwards compatibility with IPv4 and this has delayed it's adoption.