계층을 나눈 이유: 통신이 일어나는 과정이 단계별로 파악되어 특정한 곳에 이상이 생겼을 때 그 단계의 에러만 고칠 수 있다. 또한 각 계층에 대한 캡슐화, 은닉의 목표도 있다.
클라이언트는 서버에 접속을 요청하는 SYN패킷을 보낸다. 서버는 클라이언트에게 요청을 수락한다는 ACK와 SYN flag가 설정된 패킷을 발송하고 클라이언트는 서버에게 ACK를 보내고 이후부터는 연결이 이루어지고 데이터가 오고간다.
클라이언트가 연결을 종료하겠다는 FIN flag를 전송하고, 서버는 일단 확인메시지(ACK)를 보내고 자신의 통신이 끝날 때까지 기다리는 TIME_WAIT 상태가 된다. 서버가 통신을 끝냈으면 클라이언트에게 FIN flag를 전송하고 클라이언트는 확인했다(ACK)는 메시지를 보낸다.
URL주소를 IP주소로 변환하여 컴퓨터가 서로 통신하도록 한다. DNS를 운영하는 서버를 네임서버라고 한다.
윈도우 명령 프롬프트인 CMD에서 간단히 알 수 있다.
1. ping url
2. tracert url
3. nslookup url
인터넷상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜. IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적, 관리한다. TCP는 3-way handshaking 과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다. 높은 신뢰성을 보장하고 UDP보다 속도가 느리다. TCP는 연속성보다 신뢰성있는 전송이 중요할 때 사용한다.
데이터를 데이터 그램 단위(독립적 관계를 지니는 패킷)로 처리하는 프로토콜, 비연결형 프로토콜로 연결을 위해 할당되는 논리적인 경로가 없는데, 그렇기 때문에 각각의 패킷은 다른 경로로 전송되고 각각의 패킷은 독립적인 관계를 지니게 된다. 정보를 주고 받을 때 보내거나 받는다는 신호를 거치지 않는다. 신뢰성이 낮다. TCP보다 속도가 빠르다. 신뢰성보다는 연속성이 중요한 서비스 예를 들어 실시간 서비스(Streaming)에 자주 사용된다.
*패킷: 라우팅을 효율적으로 하기 위해 데이터를 여러 개의 조각들로 나누어 전송하는데 이 때, 이 조각이 패킷, 일종의 분산투자라고 생각해도 된다. 목적지~경로단위 사이의 단일 단위. 각각의 패킷은 목적지 정보와 실제정보(payload)를 가지고 있다.
출처: https://evan-moon.github.io/2019/11/10/header-of-tcp/
HTTP, TCP, IP와 같은 프로토콜은 각자 자신이 맡은 역할이 있고, 보내고자 하는 데이터에 자신의 헤더를 붙혀서 데이터의 정보를 표현한다. TCP는 여러 개의 필드로 나누어진 20byte 즉 160bit의 헤더를 사용하며, 각 필드의 bit를 0또는1로 변경하여 전송하고자 하는 세그먼트의 정보를 나타낸다. (40byte, 60byte도 사용가능)
1500Byte (window95사용자들의 기본값, 이더넷 환경에서의 기본값)
MTU는 TCP/IP 네트워크 등과 같이 패킷 또는 프레임 기반의 네트워크에서 전송될 수 있는 최대 크기의 패킷 또는 프레임을 말하며, 대개 옥텟(1옥텟=8비트)을 단위로 사용한다. 매체에 따라 달라진다. TCP는 어떠한 전송에서라도 각 패킷의 크기를 결정하는 데 있어서는 MTU를 사용한다.