애플리케이션 계층 : HTTP , FTP 등 애플리케이션에서 쓰이는 계층
전송 계층 : TCP , UDP
인터넷 계층 : IP 프로토콜이 위치한 계층
네트워크 인터페이스 계층 : 실제 네트워크 랜 드라이버 등이 포함됨
※ IP 프로토콜 위에 TCP를 올려서 보완해줌
애플리케이션 계층에서 작업 후 발생된 데이터 서버에게 전달하기 위해 SOCKET 라이브러리르 통해 다음 계층인 전송 계층으로 넘김
전송 계층에서 TCP 정보를 생성해서 데이터에 TCP 관련 정보에 대한 막을 씌워서 TCP 패킷 완성시킴
TCP 패킷을 인터넷 계층에 전달해서 IP 관련 정보에 대한 막을 한번 더 씌우면서 TCP/IP패킷이 완성됨
TCP/IP패킷의 데이터를 네트워크 인터페이스 계층에 전달해서 LAN 카드를 통해 이더넷 프레임 포함해서 인터넷 거쳐서 서버에 전달
기존 IP 패킷은 출발지 IP주소 , 도착지 IP주소 , 데이터만 매핑되었으면 TCP/IP 패킷은 TCP에 관한 데이터들을 우선 포장하고 그 위에 IP에 대한 정보를 포장했으니 사진과 같은 형태로 구성이 됨
TCP/IP 패킷 : 출발지 IP , 도착지 IP , 출발지 PORT , 도착지 PORT , 전송제어 순서 검증정보 등등이 들어있음
IP 프로토콜에 한계를 극복하기 위해 만들어진 TCP/IP 패킷은 IP패킷보다 더 세분화된 정보들이 포장될 수밖에 없음
IP 프로토콜에 대한 한계(① 비연결성 ② 비신뢰성 ③ 프로그램 구분 문제)를 극복하기 위해 만들어진 TCP/IP 프로토콜이니 IP 프로토콜에 대한 단점을 보완한다는 특징을 갖고 있음
해당 목적을 위해서 이름(TCP : Transfer Control Protocol)과 같이 전송을 어떻게 할지를 제어함
즉 TCP/IP 프로토콜은 3가지 특징을 갖고 있음(① 연결 지향 ②데이터 전달 보장 ③순서 보장 )
즉 대부분의 애플리케이션이 tcp/ip프로토콜을 사용
이렇게 클라이언트 및 서버가 각각 수신 양호한 상태임을 SYN 및 ACK 메시지를 통해 서로에게 알리면서 통신이 가능한 상태일 때 데이터를 보내므로 IP 프로토콜에서의 ① 비연결성 문제에 대한 해결이 됨
요즘에는 최적화가 되어서 3. ACK를 보낼 때 실제 데이터도 한꺼번에 보냄
하지만 이 과정을 거쳤다고 해서 실제로 연결된 것이 아님 , 실제 클라이언트와 서버 간 논리적으로만 연결됐다고 생각하는 거지 클라 - 서버 사이에 있는 수많은 서버(노드)들은 실제로 연결됐는지 모름
송신부에서 데이터 전송시 수신부에선 데이터 잘 받았다고 보내줌
IP 프로토콜에선 ② 비신뢰성 문제에 의해서 데이터를 보내도 유실될 수 있었지만 이 문제로 해결 가능
IP 패킷에는 오직 출발지 IP주소 , 도착지 IP주소 , 데이터만 존재하였지만 ,TCP/IP패킷에는 위의 3가지 특성(연결 지향 , 데이터 전달 보장 , 순서 보장)을 갖게 하는 여러가지 데이터들이 포함됨
조금 느려진다는 단점이 존재하긴 함 , 3way handshake 생각해보면 클라 - 서버 간 여러 번의 통신하는 작업이 필요하므로
TCP와 같은 계층에 있는 프로토콜
기능이 거의 없어서 하얀 도화지에 비유가 됨
즉 TCP의 3가지 특성인 연결 지향(3way handshake) , 데이터 전달 보증 , 순서 보장 전부 없으므로 IP 프로토콜과 비슷
하지만 UDP는 IP 프로토콜에서 PORT 정보와 체크섬(checksum) 정도만 추가됨
※ PORT 는 프로세스 간 구분 , 체크섬은 수신된 데이터가 맞는지에 대한 검증해주는 데이터
TCP는 양도 크고 3way handshake를 통해 검증 과정도 복잡하니 전송 속도도 느림 , 하지만 인터넷에선 전부 TCP/IP 기반 프로토콜로 통신하므로 손도 못댐 , 내가 스스로 뭔가 속도를 최적화하고싶을 때 UDP를 손대면 됨
서버와 클라이언트 간 통신하기 위해선 필연적으로 복잡한 인터넷 망을 거쳐야됨 , 하지만 인터넷은 복잡하므로 별도의 규약이 필요 , 그래서 등장한 게 IP 프로토콜
IP 프로토콜은 패킷 단위의 통신을 함 , 패킷의 구성은 실제 데이터 및 출발지 IP , 도착지 IP로 구성됨 , 패킷에 들어있는 각 IP주소를 통해 송수신이 가능한 것
하지만 IP 프로토콜은 ① 비연결성 , ② 비신뢰성 ③ 프로그램 구분 문제가 있었음 , 그런 IP 프로토콜의 문제를 개선하기 위해 TCP/IP 프로토콜 등장
TCP/IP 프로토콜의 패킷은 IP 패킷에 있던 데이터에 추가로 IP 프로토콜의 단점을 보완하기 위한 여러 데이터들이 패킷으로 쌓여져 있음
TCP/IP패킷에는 PORT 정보 및 전송제어 검증정보 등 들어있음
그에 따라 TCP/IP 프로토콜은 IP 프로토콜의 3가지 문제를 보완함 , ①연결 지향(3way handshake) ② 데이터 전달 보증 ③ 순서 보장의 특성을 가짐
3 way handshake는 SYN => SYN+ACK => ACK 과정을 거쳐서 송수신부의 연결상태를 확인 후 데이터 전달을 함
데이터 전달 보증은 데이터를 송신하면 잘 도착했다고 수신부는 송신부에 잘 알리고 순서 보장은 데이터 순서대로 안 오면 안 온 시점부터 다시 보내라고 요청
이렇게 TCP/IP는 완벽히 성능을 보장하지만, 느리다는 단점이 있어서 추후 UDP가 각광받고 있음
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard