A TCP az általa feldolgozott datagrammokat átadja az IP-nek. Persze ezzel együtt közölnie kell a rendeltetési hely Internet címét is. Az IP-t ezeken kívül nem érdekli más: nem számít, hogy mi található a datagrammban vagy, hogy hogyan néz ki a TCP fejléc. Az IP feladata abban áll, hogy a datagramm számára megkeresse a megfelelő útvonalat és azt a másik oldalhoz eljuttassa. Az útközben fellelhető átjárók és egyéb közbülső rendszereken való átjutás megkönnyítésére az IP a datagrammhoz hozzáteszi a saját fejlécét. A fejléc fő részei a forrás, és a rendeltetési hely Internet címe (32 bites címek, pl. 128.6.4.94), a protokollszám és egy ellenőrző összeg. A forrás címe a küldő gép címét tartalmazza. (Ez azért szükséges, hogy a vevő oldal tudja honnan érkezett az adat.) A rendeltetési hely címe a vevő oldali gép címét jelenti. (Ez pedig azért szükséges, hogy a közbenső átjárók továbbítani tudják az adatot.) A protokollszám kijelöli, hogy a datagramm a különböző szállítási folyamatok közül melyikhez tartozik. A TCP egy biztos választási lehetőség, de léteznek egyebek is (pl. UDP). Végül az ellenőrzőösszeg segítségével bizonyosodik meg a vevő oldali IP arról, hogy a fejléc az átvitel során nem sérült-e meg. A TCP és az IP különböző ellenőrzőösszegeket használ. Az IP-nek meg kell tudnia győződni a fejléc sértetlenségéről, különben rossz helyre küldhet el adatot. A TCP és az IP a biztonság és a hatékonyság növelése miatt tehát külön ellenőrzőösszegeket használ. Az IP fejléc hozzátétele után az eredeti üzenet így néz ki:
<<------------------------32 bit------------------------------->> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Verzió | IHL |Szolgálattípus | Teljes hosszúság | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Azonosítás |X|D|M| Datagramm-eltolás | | |X|F|F| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Élettartam | Protokoll | A fejrész ellenőrzőösszege | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Forráscím | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Célcím | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | TCP fejléc, majd a tényleges adatok ...Ha az IP fejlécet I-vel jelöljük, akkor az eredeti állományunk így néz ki:
IT.... IT.... IT.... IT.... IT.... IT.... IT.... IT.... IT....Nem esett szó a fejlécben lévő többi mező jelentéséről, mert a legtöbbjük a jelen dokumentum keretein túlmutat. A Datagramm-eltolás és a DF, MF mezők a datagrammok részeinek nyomonkövetésére használatosak. (Az XX bitet nem használják.) Egy datagrammot például akkor kell széttördelni, amikor az egy olyan hálózaton halad keresztül, amely számára nagy falatnak mutatkozik. (Ezt részletesebben lásd később.) Az Élettartam mezőben lévő szám mindig csökken, amikor a datagramm egy rendszeren halad keresztül. Amikor eléri a nullát, a datagramm megsemmisül. Ezt az eljárást a rendszerben esetleg felépülő végtelen ciklusok miatt építették a protokollba. Persze ezek felléptének valószínűsége az ideális esetben nulla, de a jól megtervezett hálózatoknak a bekövetkezhetetlen eseményekkel is el kell tudniuk bánni. Amikor a hálózati réteg összerak egy teljes datagrammot, tudnia kell, hogy mit tegyen vele. Végül az Azonosítás mező ahhoz kell, hogy a célhoszt meg tudja állapítani, hogy egy újonnan érkezett csomag melyik datagrammhoz tartozik. Egy datagramm minden egyes darabja ugyanazzal az Azonosítás mező értékkel rendelkezik.
Lehetséges, hogy az így felépített datagrammhoz több fejléc már nem kell. Ha a küldő számítógépet a célgéphez vagy egy átjáróhoz közvetlen telefonvonal köti, akkor a datagrammokat egyszerűen kiküldi a vonalra (habár aszinkron protokoll használatakor az legalább néhány oktetet hozzátesz az elejéhez és a végéhez).